summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2019-08-13 03:25:02 -0400
committerTony Luck <tony.luck@intel.com>2019-08-16 14:33:57 -0400
commit05933aac7b11911955de307a329dc2a7a14b7bd0 (patch)
tree5fbf522b4adc70501eed8986930bc0744bbb7810
parentcf07cb1ff4ea008abf06c95878c700cf1dd65c3e (diff)
ia64: remove now unused machvec indirections
With the SGI SN2 machvec removal most of the indirections are unused now, so remove them. This includes the entire removal of the mmio read*/write* macros as the generic ones are identical to the asm-generic/io.h version. Signed-off-by: Christoph Hellwig <hch@lst.de> Link: https://lkml.kernel.org/r/20190813072514.23299-17-hch@lst.de Signed-off-by: Tony Luck <tony.luck@intel.com>
-rw-r--r--arch/ia64/include/asm/hw_irq.h22
-rw-r--r--arch/ia64/include/asm/io.h221
-rw-r--r--arch/ia64/include/asm/machvec.h241
-rw-r--r--arch/ia64/include/asm/machvec_init.h24
-rw-r--r--arch/ia64/include/asm/mmiowb.h12
-rw-r--r--arch/ia64/include/asm/pci.h6
-rw-r--r--arch/ia64/include/asm/switch_to.h1
-rw-r--r--arch/ia64/kernel/iosapic.c5
-rw-r--r--arch/ia64/kernel/irq.c12
-rw-r--r--arch/ia64/kernel/irq_ia64.c2
-rw-r--r--arch/ia64/kernel/machine_kexec.c1
-rw-r--r--arch/ia64/kernel/machvec.c7
-rw-r--r--arch/ia64/kernel/mca.c10
-rw-r--r--arch/ia64/kernel/msi_ia64.c21
-rw-r--r--arch/ia64/kernel/sal.c2
-rw-r--r--arch/ia64/kernel/setup.c1
-rw-r--r--arch/ia64/kernel/smp.c8
-rw-r--r--arch/ia64/kernel/smpboot.c2
-rw-r--r--arch/ia64/kernel/time.c2
-rw-r--r--arch/ia64/lib/io.c114
-rw-r--r--arch/ia64/mm/discontig.c3
-rw-r--r--arch/ia64/mm/tlb.c6
-rw-r--r--arch/ia64/pci/pci.c13
23 files changed, 67 insertions, 669 deletions
diff --git a/arch/ia64/include/asm/hw_irq.h b/arch/ia64/include/asm/hw_irq.h
index 5dd3c6485c3a..12808111a767 100644
--- a/arch/ia64/include/asm/hw_irq.h
+++ b/arch/ia64/include/asm/hw_irq.h
@@ -137,26 +137,10 @@ static inline void irq_complete_move(unsigned int irq) {}
137 137
138static inline void ia64_native_resend_irq(unsigned int vector) 138static inline void ia64_native_resend_irq(unsigned int vector)
139{ 139{
140 platform_send_ipi(smp_processor_id(), vector, IA64_IPI_DM_INT, 0); 140 ia64_send_ipi(smp_processor_id(), vector, IA64_IPI_DM_INT, 0);
141} 141}
142 142
143/* 143/*
144 * Default implementations for the irq-descriptor API:
145 */
146#ifndef CONFIG_IA64_GENERIC
147static inline ia64_vector __ia64_irq_to_vector(int irq)
148{
149 return irq_cfg[irq].vector;
150}
151
152static inline unsigned int
153__ia64_local_vector_to_irq (ia64_vector vec)
154{
155 return __this_cpu_read(vector_irq[vec]);
156}
157#endif
158
159/*
160 * Next follows the irq descriptor interface. On IA-64, each CPU supports 256 interrupt 144 * Next follows the irq descriptor interface. On IA-64, each CPU supports 256 interrupt
161 * vectors. On smaller systems, there is a one-to-one correspondence between interrupt 145 * vectors. On smaller systems, there is a one-to-one correspondence between interrupt
162 * vectors and the Linux irq numbers. However, larger systems may have multiple interrupt 146 * vectors and the Linux irq numbers. However, larger systems may have multiple interrupt
@@ -170,7 +154,7 @@ __ia64_local_vector_to_irq (ia64_vector vec)
170static inline ia64_vector 154static inline ia64_vector
171irq_to_vector (int irq) 155irq_to_vector (int irq)
172{ 156{
173 return platform_irq_to_vector(irq); 157 return irq_cfg[irq].vector;
174} 158}
175 159
176/* 160/*
@@ -181,7 +165,7 @@ irq_to_vector (int irq)
181static inline unsigned int 165static inline unsigned int
182local_vector_to_irq (ia64_vector vec) 166local_vector_to_irq (ia64_vector vec)
183{ 167{
184 return platform_local_vector_to_irq(vec); 168 return __this_cpu_read(vector_irq[vec]);
185} 169}
186 170
187#endif /* _ASM_IA64_HW_IRQ_H */ 171#endif /* _ASM_IA64_HW_IRQ_H */
diff --git a/arch/ia64/include/asm/io.h b/arch/ia64/include/asm/io.h
index a511d62d447a..edd5c262d360 100644
--- a/arch/ia64/include/asm/io.h
+++ b/arch/ia64/include/asm/io.h
@@ -129,25 +129,6 @@ __ia64_mk_io_addr (unsigned long port)
129 return (void *) (space->mmio_base | offset); 129 return (void *) (space->mmio_base | offset);
130} 130}
131 131
132#define __ia64_inb ___ia64_inb
133#define __ia64_inw ___ia64_inw
134#define __ia64_inl ___ia64_inl
135#define __ia64_outb ___ia64_outb
136#define __ia64_outw ___ia64_outw
137#define __ia64_outl ___ia64_outl
138#define __ia64_readb ___ia64_readb
139#define __ia64_readw ___ia64_readw
140#define __ia64_readl ___ia64_readl
141#define __ia64_readq ___ia64_readq
142#define __ia64_readb_relaxed ___ia64_readb
143#define __ia64_readw_relaxed ___ia64_readw
144#define __ia64_readl_relaxed ___ia64_readl
145#define __ia64_readq_relaxed ___ia64_readq
146#define __ia64_writeb ___ia64_writeb
147#define __ia64_writew ___ia64_writew
148#define __ia64_writel ___ia64_writel
149#define __ia64_writeq ___ia64_writeq
150
151/* 132/*
152 * For the in/out routines, we need to do "mf.a" _after_ doing the I/O access to ensure 133 * For the in/out routines, we need to do "mf.a" _after_ doing the I/O access to ensure
153 * that the access has completed before executing other I/O accesses. Since we're doing 134 * that the access has completed before executing other I/O accesses. Since we're doing
@@ -156,8 +137,8 @@ __ia64_mk_io_addr (unsigned long port)
156 * during optimization, which is why we use "volatile" pointers. 137 * during optimization, which is why we use "volatile" pointers.
157 */ 138 */
158 139
159static inline unsigned int 140#define inb inb
160___ia64_inb (unsigned long port) 141static inline unsigned int inb(unsigned long port)
161{ 142{
162 volatile unsigned char *addr = __ia64_mk_io_addr(port); 143 volatile unsigned char *addr = __ia64_mk_io_addr(port);
163 unsigned char ret; 144 unsigned char ret;
@@ -167,8 +148,8 @@ ___ia64_inb (unsigned long port)
167 return ret; 148 return ret;
168} 149}
169 150
170static inline unsigned int 151#define inw inw
171___ia64_inw (unsigned long port) 152static inline unsigned int inw(unsigned long port)
172{ 153{
173 volatile unsigned short *addr = __ia64_mk_io_addr(port); 154 volatile unsigned short *addr = __ia64_mk_io_addr(port);
174 unsigned short ret; 155 unsigned short ret;
@@ -178,8 +159,8 @@ ___ia64_inw (unsigned long port)
178 return ret; 159 return ret;
179} 160}
180 161
181static inline unsigned int 162#define inl inl
182___ia64_inl (unsigned long port) 163static inline unsigned int inl(unsigned long port)
183{ 164{
184 volatile unsigned int *addr = __ia64_mk_io_addr(port); 165 volatile unsigned int *addr = __ia64_mk_io_addr(port);
185 unsigned int ret; 166 unsigned int ret;
@@ -189,8 +170,8 @@ ___ia64_inl (unsigned long port)
189 return ret; 170 return ret;
190} 171}
191 172
192static inline void 173#define outb outb
193___ia64_outb (unsigned char val, unsigned long port) 174static inline void outb(unsigned char val, unsigned long port)
194{ 175{
195 volatile unsigned char *addr = __ia64_mk_io_addr(port); 176 volatile unsigned char *addr = __ia64_mk_io_addr(port);
196 177
@@ -198,8 +179,8 @@ ___ia64_outb (unsigned char val, unsigned long port)
198 __ia64_mf_a(); 179 __ia64_mf_a();
199} 180}
200 181
201static inline void 182#define outw outw
202___ia64_outw (unsigned short val, unsigned long port) 183static inline void outw(unsigned short val, unsigned long port)
203{ 184{
204 volatile unsigned short *addr = __ia64_mk_io_addr(port); 185 volatile unsigned short *addr = __ia64_mk_io_addr(port);
205 186
@@ -207,8 +188,8 @@ ___ia64_outw (unsigned short val, unsigned long port)
207 __ia64_mf_a(); 188 __ia64_mf_a();
208} 189}
209 190
210static inline void 191#define outl outl
211___ia64_outl (unsigned int val, unsigned long port) 192static inline void outl(unsigned int val, unsigned long port)
212{ 193{
213 volatile unsigned int *addr = __ia64_mk_io_addr(port); 194 volatile unsigned int *addr = __ia64_mk_io_addr(port);
214 195
@@ -216,199 +197,63 @@ ___ia64_outl (unsigned int val, unsigned long port)
216 __ia64_mf_a(); 197 __ia64_mf_a();
217} 198}
218 199
219static inline void 200#define insb insb
220__insb (unsigned long port, void *dst, unsigned long count) 201static inline void insb(unsigned long port, void *dst, unsigned long count)
221{ 202{
222 unsigned char *dp = dst; 203 unsigned char *dp = dst;
223 204
224 while (count--) 205 while (count--)
225 *dp++ = platform_inb(port); 206 *dp++ = inb(port);
226} 207}
227 208
228static inline void 209#define insw insw
229__insw (unsigned long port, void *dst, unsigned long count) 210static inline void insw(unsigned long port, void *dst, unsigned long count)
230{ 211{
231 unsigned short *dp = dst; 212 unsigned short *dp = dst;
232 213
233 while (count--) 214 while (count--)
234 put_unaligned(platform_inw(port), dp++); 215 put_unaligned(inw(port), dp++);
235} 216}
236 217
237static inline void 218#define insl insl
238__insl (unsigned long port, void *dst, unsigned long count) 219static inline void insl(unsigned long port, void *dst, unsigned long count)
239{ 220{
240 unsigned int *dp = dst; 221 unsigned int *dp = dst;
241 222
242 while (count--) 223 while (count--)
243 put_unaligned(platform_inl(port), dp++); 224 put_unaligned(inl(port), dp++);
244} 225}
245 226
246static inline void 227#define outsb outsb
247__outsb (unsigned long port, const void *src, unsigned long count) 228static inline void outsb(unsigned long port, const void *src,
229 unsigned long count)
248{ 230{
249 const unsigned char *sp = src; 231 const unsigned char *sp = src;
250 232
251 while (count--) 233 while (count--)
252 platform_outb(*sp++, port); 234 outb(*sp++, port);
253} 235}
254 236
255static inline void 237#define outsw outsw
256__outsw (unsigned long port, const void *src, unsigned long count) 238static inline void outsw(unsigned long port, const void *src,
239 unsigned long count)
257{ 240{
258 const unsigned short *sp = src; 241 const unsigned short *sp = src;
259 242
260 while (count--) 243 while (count--)
261 platform_outw(get_unaligned(sp++), port); 244 outw(get_unaligned(sp++), port);
262} 245}
263 246
264static inline void 247#define outsl outsl
265__outsl (unsigned long port, const void *src, unsigned long count) 248static inline void outsl(unsigned long port, const void *src,
249 unsigned long count)
266{ 250{
267 const unsigned int *sp = src; 251 const unsigned int *sp = src;
268 252
269 while (count--) 253 while (count--)
270 platform_outl(get_unaligned(sp++), port); 254 outl(get_unaligned(sp++), port);
271} 255}
272 256
273/*
274 * Unfortunately, some platforms are broken and do not follow the IA-64 architecture
275 * specification regarding legacy I/O support. Thus, we have to make these operations
276 * platform dependent...
277 */
278#define __inb platform_inb
279#define __inw platform_inw
280#define __inl platform_inl
281#define __outb platform_outb
282#define __outw platform_outw
283#define __outl platform_outl
284
285#define inb(p) __inb(p)
286#define inw(p) __inw(p)
287#define inl(p) __inl(p)
288#define insb(p,d,c) __insb(p,d,c)
289#define insw(p,d,c) __insw(p,d,c)
290#define insl(p,d,c) __insl(p,d,c)
291#define outb(v,p) __outb(v,p)
292#define outw(v,p) __outw(v,p)
293#define outl(v,p) __outl(v,p)
294#define outsb(p,s,c) __outsb(p,s,c)
295#define outsw(p,s,c) __outsw(p,s,c)
296#define outsl(p,s,c) __outsl(p,s,c)
297
298/*
299 * The address passed to these functions are ioremap()ped already.
300 *
301 * We need these to be machine vectors since some platforms don't provide
302 * DMA coherence via PIO reads (PCI drivers and the spec imply that this is
303 * a good idea). Writes are ok though for all existing ia64 platforms (and
304 * hopefully it'll stay that way).
305 */
306static inline unsigned char
307___ia64_readb (const volatile void __iomem *addr)
308{
309 return *(volatile unsigned char __force *)addr;
310}
311
312static inline unsigned short
313___ia64_readw (const volatile void __iomem *addr)
314{
315 return *(volatile unsigned short __force *)addr;
316}
317
318static inline unsigned int
319___ia64_readl (const volatile void __iomem *addr)
320{
321 return *(volatile unsigned int __force *) addr;
322}
323
324static inline unsigned long
325___ia64_readq (const volatile void __iomem *addr)
326{
327 return *(volatile unsigned long __force *) addr;
328}
329
330static inline void
331__writeb (unsigned char val, volatile void __iomem *addr)
332{
333 *(volatile unsigned char __force *) addr = val;
334}
335
336static inline void
337__writew (unsigned short val, volatile void __iomem *addr)
338{
339 *(volatile unsigned short __force *) addr = val;
340}
341
342static inline void
343__writel (unsigned int val, volatile void __iomem *addr)
344{
345 *(volatile unsigned int __force *) addr = val;
346}
347
348static inline void
349__writeq (unsigned long val, volatile void __iomem *addr)
350{
351 *(volatile unsigned long __force *) addr = val;
352}
353
354#define __readb platform_readb
355#define __readw platform_readw
356#define __readl platform_readl
357#define __readq platform_readq
358#define __readb_relaxed platform_readb_relaxed
359#define __readw_relaxed platform_readw_relaxed
360#define __readl_relaxed platform_readl_relaxed
361#define __readq_relaxed platform_readq_relaxed
362
363#define readb(a) __readb((a))
364#define readw(a) __readw((a))
365#define readl(a) __readl((a))
366#define readq(a) __readq((a))
367#define readb_relaxed(a) __readb_relaxed((a))
368#define readw_relaxed(a) __readw_relaxed((a))
369#define readl_relaxed(a) __readl_relaxed((a))
370#define readq_relaxed(a) __readq_relaxed((a))
371#define __raw_readb readb
372#define __raw_readw readw
373#define __raw_readl readl
374#define __raw_readq readq
375#define __raw_readb_relaxed readb_relaxed
376#define __raw_readw_relaxed readw_relaxed
377#define __raw_readl_relaxed readl_relaxed
378#define __raw_readq_relaxed readq_relaxed
379#define writeb(v,a) __writeb((v), (a))
380#define writew(v,a) __writew((v), (a))
381#define writel(v,a) __writel((v), (a))
382#define writeq(v,a) __writeq((v), (a))
383#define writeb_relaxed(v,a) __writeb((v), (a))
384#define writew_relaxed(v,a) __writew((v), (a))
385#define writel_relaxed(v,a) __writel((v), (a))
386#define writeq_relaxed(v,a) __writeq((v), (a))
387#define __raw_writeb writeb
388#define __raw_writew writew
389#define __raw_writel writel
390#define __raw_writeq writeq
391
392#ifndef inb_p
393# define inb_p inb
394#endif
395#ifndef inw_p
396# define inw_p inw
397#endif
398#ifndef inl_p
399# define inl_p inl
400#endif
401
402#ifndef outb_p
403# define outb_p outb
404#endif
405#ifndef outw_p
406# define outw_p outw
407#endif
408#ifndef outl_p
409# define outl_p outl
410#endif
411
412# ifdef __KERNEL__ 257# ifdef __KERNEL__
413 258
414extern void __iomem * ioremap(unsigned long offset, unsigned long size); 259extern void __iomem * ioremap(unsigned long offset, unsigned long size);
diff --git a/arch/ia64/include/asm/machvec.h b/arch/ia64/include/asm/machvec.h
index d657f59d4fb3..f426a9829595 100644
--- a/arch/ia64/include/asm/machvec.h
+++ b/arch/ia64/include/asm/machvec.h
@@ -13,83 +13,19 @@
13 13
14#include <linux/types.h> 14#include <linux/types.h>
15 15
16/* forward declarations: */
17struct device; 16struct device;
18struct pt_regs;
19struct scatterlist;
20struct page;
21struct mm_struct;
22struct pci_bus;
23struct task_struct;
24struct pci_dev;
25struct msi_desc;
26 17
27typedef void ia64_mv_setup_t (char **); 18typedef void ia64_mv_setup_t (char **);
28typedef void ia64_mv_cpu_init_t (void);
29typedef void ia64_mv_irq_init_t (void); 19typedef void ia64_mv_irq_init_t (void);
30typedef void ia64_mv_send_ipi_t (int, int, int, int);
31typedef void ia64_mv_timer_interrupt_t (int, void *);
32typedef void ia64_mv_global_tlb_purge_t (struct mm_struct *, unsigned long, unsigned long, unsigned long);
33typedef u8 ia64_mv_irq_to_vector (int);
34typedef unsigned int ia64_mv_local_vector_to_irq (u8);
35typedef char *ia64_mv_pci_get_legacy_mem_t (struct pci_bus *);
36typedef int ia64_mv_pci_legacy_read_t (struct pci_bus *, u16 port, u32 *val,
37 u8 size);
38typedef int ia64_mv_pci_legacy_write_t (struct pci_bus *, u16 port, u32 val,
39 u8 size);
40typedef void ia64_mv_migrate_t(struct task_struct * task);
41typedef void ia64_mv_pci_fixup_bus_t (struct pci_bus *);
42typedef void ia64_mv_kernel_launch_event_t(void);
43
44/* DMA-mapping interface: */
45typedef void ia64_mv_dma_init (void); 20typedef void ia64_mv_dma_init (void);
46typedef const struct dma_map_ops *ia64_mv_dma_get_ops(struct device *); 21typedef const struct dma_map_ops *ia64_mv_dma_get_ops(struct device *);
47 22
48/*
49 * WARNING: The legacy I/O space is _architected_. Platforms are
50 * expected to follow this architected model (see Section 10.7 in the
51 * IA-64 Architecture Software Developer's Manual). Unfortunately,
52 * some broken machines do not follow that model, which is why we have
53 * to make the inX/outX operations part of the machine vector.
54 * Platform designers should follow the architected model whenever
55 * possible.
56 */
57typedef unsigned int ia64_mv_inb_t (unsigned long);
58typedef unsigned int ia64_mv_inw_t (unsigned long);
59typedef unsigned int ia64_mv_inl_t (unsigned long);
60typedef void ia64_mv_outb_t (unsigned char, unsigned long);
61typedef void ia64_mv_outw_t (unsigned short, unsigned long);
62typedef void ia64_mv_outl_t (unsigned int, unsigned long);
63typedef void ia64_mv_mmiowb_t (void);
64typedef unsigned char ia64_mv_readb_t (const volatile void __iomem *);
65typedef unsigned short ia64_mv_readw_t (const volatile void __iomem *);
66typedef unsigned int ia64_mv_readl_t (const volatile void __iomem *);
67typedef unsigned long ia64_mv_readq_t (const volatile void __iomem *);
68typedef unsigned char ia64_mv_readb_relaxed_t (const volatile void __iomem *);
69typedef unsigned short ia64_mv_readw_relaxed_t (const volatile void __iomem *);
70typedef unsigned int ia64_mv_readl_relaxed_t (const volatile void __iomem *);
71typedef unsigned long ia64_mv_readq_relaxed_t (const volatile void __iomem *);
72
73typedef int ia64_mv_setup_msi_irq_t (struct pci_dev *pdev, struct msi_desc *);
74typedef void ia64_mv_teardown_msi_irq_t (unsigned int irq);
75
76static inline void 23static inline void
77machvec_noop (void) 24machvec_noop (void)
78{ 25{
79} 26}
80 27
81static inline void
82machvec_noop_task (struct task_struct *task)
83{
84}
85
86static inline void
87machvec_noop_bus (struct pci_bus *bus)
88{
89}
90
91extern void machvec_setup (char **); 28extern void machvec_setup (char **);
92extern void machvec_timer_interrupt (int, void *);
93 29
94# if defined (CONFIG_IA64_HP_SIM) 30# if defined (CONFIG_IA64_HP_SIM)
95# include <asm/machvec_hpsim.h> 31# include <asm/machvec_hpsim.h>
@@ -110,38 +46,9 @@ extern void machvec_timer_interrupt (int, void *);
110# else 46# else
111# define ia64_platform_name ia64_mv.name 47# define ia64_platform_name ia64_mv.name
112# define platform_setup ia64_mv.setup 48# define platform_setup ia64_mv.setup
113# define platform_cpu_init ia64_mv.cpu_init
114# define platform_irq_init ia64_mv.irq_init 49# define platform_irq_init ia64_mv.irq_init
115# define platform_send_ipi ia64_mv.send_ipi
116# define platform_timer_interrupt ia64_mv.timer_interrupt
117# define platform_global_tlb_purge ia64_mv.global_tlb_purge
118# define platform_dma_init ia64_mv.dma_init 50# define platform_dma_init ia64_mv.dma_init
119# define platform_dma_get_ops ia64_mv.dma_get_ops 51# define platform_dma_get_ops ia64_mv.dma_get_ops
120# define platform_irq_to_vector ia64_mv.irq_to_vector
121# define platform_local_vector_to_irq ia64_mv.local_vector_to_irq
122# define platform_pci_get_legacy_mem ia64_mv.pci_get_legacy_mem
123# define platform_pci_legacy_read ia64_mv.pci_legacy_read
124# define platform_pci_legacy_write ia64_mv.pci_legacy_write
125# define platform_inb ia64_mv.inb
126# define platform_inw ia64_mv.inw
127# define platform_inl ia64_mv.inl
128# define platform_outb ia64_mv.outb
129# define platform_outw ia64_mv.outw
130# define platform_outl ia64_mv.outl
131# define platform_mmiowb ia64_mv.mmiowb
132# define platform_readb ia64_mv.readb
133# define platform_readw ia64_mv.readw
134# define platform_readl ia64_mv.readl
135# define platform_readq ia64_mv.readq
136# define platform_readb_relaxed ia64_mv.readb_relaxed
137# define platform_readw_relaxed ia64_mv.readw_relaxed
138# define platform_readl_relaxed ia64_mv.readl_relaxed
139# define platform_readq_relaxed ia64_mv.readq_relaxed
140# define platform_migrate ia64_mv.migrate
141# define platform_setup_msi_irq ia64_mv.setup_msi_irq
142# define platform_teardown_msi_irq ia64_mv.teardown_msi_irq
143# define platform_pci_fixup_bus ia64_mv.pci_fixup_bus
144# define platform_kernel_launch_event ia64_mv.kernel_launch_event
145# endif 52# endif
146 53
147/* __attribute__((__aligned__(16))) is required to make size of the 54/* __attribute__((__aligned__(16))) is required to make size of the
@@ -152,76 +59,18 @@ extern void machvec_timer_interrupt (int, void *);
152struct ia64_machine_vector { 59struct ia64_machine_vector {
153 const char *name; 60 const char *name;
154 ia64_mv_setup_t *setup; 61 ia64_mv_setup_t *setup;
155 ia64_mv_cpu_init_t *cpu_init;
156 ia64_mv_irq_init_t *irq_init; 62 ia64_mv_irq_init_t *irq_init;
157 ia64_mv_send_ipi_t *send_ipi;
158 ia64_mv_timer_interrupt_t *timer_interrupt;
159 ia64_mv_global_tlb_purge_t *global_tlb_purge;
160 ia64_mv_dma_init *dma_init; 63 ia64_mv_dma_init *dma_init;
161 ia64_mv_dma_get_ops *dma_get_ops; 64 ia64_mv_dma_get_ops *dma_get_ops;
162 ia64_mv_irq_to_vector *irq_to_vector;
163 ia64_mv_local_vector_to_irq *local_vector_to_irq;
164 ia64_mv_pci_get_legacy_mem_t *pci_get_legacy_mem;
165 ia64_mv_pci_legacy_read_t *pci_legacy_read;
166 ia64_mv_pci_legacy_write_t *pci_legacy_write;
167 ia64_mv_inb_t *inb;
168 ia64_mv_inw_t *inw;
169 ia64_mv_inl_t *inl;
170 ia64_mv_outb_t *outb;
171 ia64_mv_outw_t *outw;
172 ia64_mv_outl_t *outl;
173 ia64_mv_mmiowb_t *mmiowb;
174 ia64_mv_readb_t *readb;
175 ia64_mv_readw_t *readw;
176 ia64_mv_readl_t *readl;
177 ia64_mv_readq_t *readq;
178 ia64_mv_readb_relaxed_t *readb_relaxed;
179 ia64_mv_readw_relaxed_t *readw_relaxed;
180 ia64_mv_readl_relaxed_t *readl_relaxed;
181 ia64_mv_readq_relaxed_t *readq_relaxed;
182 ia64_mv_migrate_t *migrate;
183 ia64_mv_setup_msi_irq_t *setup_msi_irq;
184 ia64_mv_teardown_msi_irq_t *teardown_msi_irq;
185 ia64_mv_pci_fixup_bus_t *pci_fixup_bus;
186 ia64_mv_kernel_launch_event_t *kernel_launch_event;
187} __attribute__((__aligned__(16))); /* align attrib? see above comment */ 65} __attribute__((__aligned__(16))); /* align attrib? see above comment */
188 66
189#define MACHVEC_INIT(name) \ 67#define MACHVEC_INIT(name) \
190{ \ 68{ \
191 #name, \ 69 #name, \
192 platform_setup, \ 70 platform_setup, \
193 platform_cpu_init, \
194 platform_irq_init, \ 71 platform_irq_init, \
195 platform_send_ipi, \
196 platform_timer_interrupt, \
197 platform_global_tlb_purge, \
198 platform_dma_init, \ 72 platform_dma_init, \
199 platform_dma_get_ops, \ 73 platform_dma_get_ops, \
200 platform_irq_to_vector, \
201 platform_local_vector_to_irq, \
202 platform_pci_get_legacy_mem, \
203 platform_pci_legacy_read, \
204 platform_pci_legacy_write, \
205 platform_inb, \
206 platform_inw, \
207 platform_inl, \
208 platform_outb, \
209 platform_outw, \
210 platform_outl, \
211 platform_mmiowb, \
212 platform_readb, \
213 platform_readw, \
214 platform_readl, \
215 platform_readq, \
216 platform_readb_relaxed, \
217 platform_readw_relaxed, \
218 platform_readl_relaxed, \
219 platform_readq_relaxed, \
220 platform_migrate, \
221 platform_setup_msi_irq, \
222 platform_teardown_msi_irq, \
223 platform_pci_fixup_bus, \
224 platform_kernel_launch_event \
225} 74}
226 75
227extern struct ia64_machine_vector ia64_mv; 76extern struct ia64_machine_vector ia64_mv;
@@ -242,104 +91,14 @@ extern const struct dma_map_ops *dma_get_ops(struct device *);
242#ifndef platform_setup 91#ifndef platform_setup
243# define platform_setup machvec_setup 92# define platform_setup machvec_setup
244#endif 93#endif
245#ifndef platform_cpu_init
246# define platform_cpu_init machvec_noop
247#endif
248#ifndef platform_irq_init 94#ifndef platform_irq_init
249# define platform_irq_init machvec_noop 95# define platform_irq_init machvec_noop
250#endif 96#endif
251
252#ifndef platform_send_ipi
253# define platform_send_ipi ia64_send_ipi /* default to architected version */
254#endif
255#ifndef platform_timer_interrupt
256# define platform_timer_interrupt machvec_timer_interrupt
257#endif
258#ifndef platform_global_tlb_purge
259# define platform_global_tlb_purge ia64_global_tlb_purge /* default to architected version */
260#endif
261#ifndef platform_kernel_launch_event
262# define platform_kernel_launch_event machvec_noop
263#endif
264#ifndef platform_dma_init 97#ifndef platform_dma_init
265# define platform_dma_init swiotlb_dma_init 98# define platform_dma_init swiotlb_dma_init
266#endif 99#endif
267#ifndef platform_dma_get_ops 100#ifndef platform_dma_get_ops
268# define platform_dma_get_ops dma_get_ops 101# define platform_dma_get_ops dma_get_ops
269#endif 102#endif
270#ifndef platform_irq_to_vector
271# define platform_irq_to_vector __ia64_irq_to_vector
272#endif
273#ifndef platform_local_vector_to_irq
274# define platform_local_vector_to_irq __ia64_local_vector_to_irq
275#endif
276#ifndef platform_pci_get_legacy_mem
277# define platform_pci_get_legacy_mem ia64_pci_get_legacy_mem
278#endif
279#ifndef platform_pci_legacy_read
280# define platform_pci_legacy_read ia64_pci_legacy_read
281extern int ia64_pci_legacy_read(struct pci_bus *bus, u16 port, u32 *val, u8 size);
282#endif
283#ifndef platform_pci_legacy_write
284# define platform_pci_legacy_write ia64_pci_legacy_write
285extern int ia64_pci_legacy_write(struct pci_bus *bus, u16 port, u32 val, u8 size);
286#endif
287#ifndef platform_inb
288# define platform_inb __ia64_inb
289#endif
290#ifndef platform_inw
291# define platform_inw __ia64_inw
292#endif
293#ifndef platform_inl
294# define platform_inl __ia64_inl
295#endif
296#ifndef platform_outb
297# define platform_outb __ia64_outb
298#endif
299#ifndef platform_outw
300# define platform_outw __ia64_outw
301#endif
302#ifndef platform_outl
303# define platform_outl __ia64_outl
304#endif
305#ifndef platform_mmiowb
306# define platform_mmiowb __ia64_mmiowb
307#endif
308#ifndef platform_readb
309# define platform_readb __ia64_readb
310#endif
311#ifndef platform_readw
312# define platform_readw __ia64_readw
313#endif
314#ifndef platform_readl
315# define platform_readl __ia64_readl
316#endif
317#ifndef platform_readq
318# define platform_readq __ia64_readq
319#endif
320#ifndef platform_readb_relaxed
321# define platform_readb_relaxed __ia64_readb_relaxed
322#endif
323#ifndef platform_readw_relaxed
324# define platform_readw_relaxed __ia64_readw_relaxed
325#endif
326#ifndef platform_readl_relaxed
327# define platform_readl_relaxed __ia64_readl_relaxed
328#endif
329#ifndef platform_readq_relaxed
330# define platform_readq_relaxed __ia64_readq_relaxed
331#endif
332#ifndef platform_migrate
333# define platform_migrate machvec_noop_task
334#endif
335#ifndef platform_setup_msi_irq
336# define platform_setup_msi_irq ((ia64_mv_setup_msi_irq_t*)NULL)
337#endif
338#ifndef platform_teardown_msi_irq
339# define platform_teardown_msi_irq ((ia64_mv_teardown_msi_irq_t*)NULL)
340#endif
341#ifndef platform_pci_fixup_bus
342# define platform_pci_fixup_bus machvec_noop_bus
343#endif
344 103
345#endif /* _ASM_IA64_MACHVEC_H */ 104#endif /* _ASM_IA64_MACHVEC_H */
diff --git a/arch/ia64/include/asm/machvec_init.h b/arch/ia64/include/asm/machvec_init.h
index 2aafb69a3787..7a82e3ea0aff 100644
--- a/arch/ia64/include/asm/machvec_init.h
+++ b/arch/ia64/include/asm/machvec_init.h
@@ -2,30 +2,6 @@
2#include <asm/iommu.h> 2#include <asm/iommu.h>
3#include <asm/machvec.h> 3#include <asm/machvec.h>
4 4
5extern ia64_mv_send_ipi_t ia64_send_ipi;
6extern ia64_mv_global_tlb_purge_t ia64_global_tlb_purge;
7extern ia64_mv_irq_to_vector __ia64_irq_to_vector;
8extern ia64_mv_local_vector_to_irq __ia64_local_vector_to_irq;
9extern ia64_mv_pci_get_legacy_mem_t ia64_pci_get_legacy_mem;
10extern ia64_mv_pci_legacy_read_t ia64_pci_legacy_read;
11extern ia64_mv_pci_legacy_write_t ia64_pci_legacy_write;
12
13extern ia64_mv_inb_t __ia64_inb;
14extern ia64_mv_inw_t __ia64_inw;
15extern ia64_mv_inl_t __ia64_inl;
16extern ia64_mv_outb_t __ia64_outb;
17extern ia64_mv_outw_t __ia64_outw;
18extern ia64_mv_outl_t __ia64_outl;
19extern ia64_mv_mmiowb_t __ia64_mmiowb;
20extern ia64_mv_readb_t __ia64_readb;
21extern ia64_mv_readw_t __ia64_readw;
22extern ia64_mv_readl_t __ia64_readl;
23extern ia64_mv_readq_t __ia64_readq;
24extern ia64_mv_readb_t __ia64_readb_relaxed;
25extern ia64_mv_readw_t __ia64_readw_relaxed;
26extern ia64_mv_readl_t __ia64_readl_relaxed;
27extern ia64_mv_readq_t __ia64_readq_relaxed;
28
29#define MACHVEC_HELPER(name) \ 5#define MACHVEC_HELPER(name) \
30 struct ia64_machine_vector machvec_##name __attribute__ ((unused, __section__ (".machvec"))) \ 6 struct ia64_machine_vector machvec_##name __attribute__ ((unused, __section__ (".machvec"))) \
31 = MACHVEC_INIT(name); 7 = MACHVEC_INIT(name);
diff --git a/arch/ia64/include/asm/mmiowb.h b/arch/ia64/include/asm/mmiowb.h
index 297b85ac84a0..d67aab4ea3b4 100644
--- a/arch/ia64/include/asm/mmiowb.h
+++ b/arch/ia64/include/asm/mmiowb.h
@@ -3,22 +3,14 @@
3#ifndef _ASM_IA64_MMIOWB_H 3#ifndef _ASM_IA64_MMIOWB_H
4#define _ASM_IA64_MMIOWB_H 4#define _ASM_IA64_MMIOWB_H
5 5
6#include <asm/machvec.h>
7
8/** 6/**
9 * ___ia64_mmiowb - I/O write barrier 7 * mmiowb - I/O write barrier
10 * 8 *
11 * Ensure ordering of I/O space writes. This will make sure that writes 9 * Ensure ordering of I/O space writes. This will make sure that writes
12 * following the barrier will arrive after all previous writes. For most 10 * following the barrier will arrive after all previous writes. For most
13 * ia64 platforms, this is a simple 'mf.a' instruction. 11 * ia64 platforms, this is a simple 'mf.a' instruction.
14 */ 12 */
15static inline void ___ia64_mmiowb(void) 13#define mmiowb() ia64_mfa()
16{
17 ia64_mfa();
18}
19
20#define __ia64_mmiowb ___ia64_mmiowb
21#define mmiowb() platform_mmiowb()
22 14
23#include <asm-generic/mmiowb.h> 15#include <asm-generic/mmiowb.h>
24 16
diff --git a/arch/ia64/include/asm/pci.h b/arch/ia64/include/asm/pci.h
index 780e8744ba85..ef91b780a3f2 100644
--- a/arch/ia64/include/asm/pci.h
+++ b/arch/ia64/include/asm/pci.h
@@ -39,9 +39,9 @@ extern int pci_mmap_legacy_page_range(struct pci_bus *bus,
39 struct vm_area_struct *vma, 39 struct vm_area_struct *vma,
40 enum pci_mmap_state mmap_state); 40 enum pci_mmap_state mmap_state);
41 41
42#define pci_get_legacy_mem platform_pci_get_legacy_mem 42char *pci_get_legacy_mem(struct pci_bus *bus);
43#define pci_legacy_read platform_pci_legacy_read 43int pci_legacy_read(struct pci_bus *bus, u16 port, u32 *val, u8 size);
44#define pci_legacy_write platform_pci_legacy_write 44int pci_legacy_write(struct pci_bus *bus, u16 port, u32 val, u8 size);
45 45
46struct pci_controller { 46struct pci_controller {
47 struct acpi_device *companion; 47 struct acpi_device *companion;
diff --git a/arch/ia64/include/asm/switch_to.h b/arch/ia64/include/asm/switch_to.h
index b10f31ec522c..9011e90a6b97 100644
--- a/arch/ia64/include/asm/switch_to.h
+++ b/arch/ia64/include/asm/switch_to.h
@@ -69,7 +69,6 @@ extern void ia64_load_extra (struct task_struct *task);
69 if (unlikely((current->thread.flags & IA64_THREAD_MIGRATION) && \ 69 if (unlikely((current->thread.flags & IA64_THREAD_MIGRATION) && \
70 (task_cpu(current) != \ 70 (task_cpu(current) != \
71 task_thread_info(current)->last_cpu))) { \ 71 task_thread_info(current)->last_cpu))) { \
72 platform_migrate(current); \
73 task_thread_info(current)->last_cpu = task_cpu(current); \ 72 task_thread_info(current)->last_cpu = task_cpu(current); \
74 } \ 73 } \
75} while (0) 74} while (0)
diff --git a/arch/ia64/kernel/iosapic.c b/arch/ia64/kernel/iosapic.c
index fe6e4946672e..9e49fd006859 100644
--- a/arch/ia64/kernel/iosapic.c
+++ b/arch/ia64/kernel/iosapic.c
@@ -67,10 +67,7 @@
67 * used as architecture-independent interrupt handling mechanism in Linux. 67 * used as architecture-independent interrupt handling mechanism in Linux.
68 * As an IRQ is a number, we have to have 68 * As an IRQ is a number, we have to have
69 * IA-64 interrupt vector number <-> IRQ number mapping. On smaller 69 * IA-64 interrupt vector number <-> IRQ number mapping. On smaller
70 * systems, we use one-to-one mapping between IA-64 vector and IRQ. A 70 * systems, we use one-to-one mapping between IA-64 vector and IRQ.
71 * platform can implement platform_irq_to_vector(irq) and
72 * platform_local_vector_to_irq(vector) APIs to differentiate the mapping.
73 * Please see also arch/ia64/include/asm/hw_irq.h for those APIs.
74 * 71 *
75 * To sum up, there are three levels of mappings involved: 72 * To sum up, there are three levels of mappings involved:
76 * 73 *
diff --git a/arch/ia64/kernel/irq.c b/arch/ia64/kernel/irq.c
index 6d17d26caf98..0a8e5e585edc 100644
--- a/arch/ia64/kernel/irq.c
+++ b/arch/ia64/kernel/irq.c
@@ -35,18 +35,6 @@ void ack_bad_irq(unsigned int irq)
35 printk(KERN_ERR "Unexpected irq vector 0x%x on CPU %u!\n", irq, smp_processor_id()); 35 printk(KERN_ERR "Unexpected irq vector 0x%x on CPU %u!\n", irq, smp_processor_id());
36} 36}
37 37
38#ifdef CONFIG_IA64_GENERIC
39ia64_vector __ia64_irq_to_vector(int irq)
40{
41 return irq_cfg[irq].vector;
42}
43
44unsigned int __ia64_local_vector_to_irq (ia64_vector vec)
45{
46 return __this_cpu_read(vector_irq[vec]);
47}
48#endif
49
50/* 38/*
51 * Interrupt statistics: 39 * Interrupt statistics:
52 */ 40 */
diff --git a/arch/ia64/kernel/irq_ia64.c b/arch/ia64/kernel/irq_ia64.c
index ab87d6c25b15..1c81ec752b04 100644
--- a/arch/ia64/kernel/irq_ia64.c
+++ b/arch/ia64/kernel/irq_ia64.c
@@ -314,7 +314,7 @@ void irq_complete_move(unsigned irq)
314 cpumask_and(&cleanup_mask, &cfg->old_domain, cpu_online_mask); 314 cpumask_and(&cleanup_mask, &cfg->old_domain, cpu_online_mask);
315 cfg->move_cleanup_count = cpumask_weight(&cleanup_mask); 315 cfg->move_cleanup_count = cpumask_weight(&cleanup_mask);
316 for_each_cpu(i, &cleanup_mask) 316 for_each_cpu(i, &cleanup_mask)
317 platform_send_ipi(i, IA64_IRQ_MOVE_VECTOR, IA64_IPI_DM_INT, 0); 317 ia64_send_ipi(i, IA64_IRQ_MOVE_VECTOR, IA64_IPI_DM_INT, 0);
318 cfg->move_in_progress = 0; 318 cfg->move_in_progress = 0;
319} 319}
320 320
diff --git a/arch/ia64/kernel/machine_kexec.c b/arch/ia64/kernel/machine_kexec.c
index 3b1dd5496d08..efc9b568401c 100644
--- a/arch/ia64/kernel/machine_kexec.c
+++ b/arch/ia64/kernel/machine_kexec.c
@@ -127,7 +127,6 @@ static void ia64_machine_kexec(struct unw_frame_info *info, void *arg)
127 ia64_srlz_d(); 127 ia64_srlz_d();
128 while (ia64_get_ivr() != IA64_SPURIOUS_INT_VECTOR) 128 while (ia64_get_ivr() != IA64_SPURIOUS_INT_VECTOR)
129 ia64_eoi(); 129 ia64_eoi();
130 platform_kernel_launch_event();
131 rnk = (relocate_new_kernel_t)&code_addr; 130 rnk = (relocate_new_kernel_t)&code_addr;
132 (*rnk)(image->head, image->start, ia64_boot_param, 131 (*rnk)(image->head, image->start, ia64_boot_param,
133 GRANULEROUNDDOWN((unsigned long) pal_addr)); 132 GRANULEROUNDDOWN((unsigned long) pal_addr));
diff --git a/arch/ia64/kernel/machvec.c b/arch/ia64/kernel/machvec.c
index ebd82535f51b..3db3be7aaae5 100644
--- a/arch/ia64/kernel/machvec.c
+++ b/arch/ia64/kernel/machvec.c
@@ -11,7 +11,6 @@
11#include <asm/page.h> 11#include <asm/page.h>
12 12
13struct ia64_machine_vector ia64_mv = { 13struct ia64_machine_vector ia64_mv = {
14 .mmiowb = ___ia64_mmiowb
15}; 14};
16EXPORT_SYMBOL(ia64_mv); 15EXPORT_SYMBOL(ia64_mv);
17 16
@@ -69,9 +68,3 @@ machvec_setup (char **arg)
69{ 68{
70} 69}
71EXPORT_SYMBOL(machvec_setup); 70EXPORT_SYMBOL(machvec_setup);
72
73void
74machvec_timer_interrupt (int irq, void *dev_id)
75{
76}
77EXPORT_SYMBOL(machvec_timer_interrupt);
diff --git a/arch/ia64/kernel/mca.c b/arch/ia64/kernel/mca.c
index 79190d877fa7..f72b05fe918b 100644
--- a/arch/ia64/kernel/mca.c
+++ b/arch/ia64/kernel/mca.c
@@ -744,7 +744,7 @@ ia64_mca_cmc_vector_enable_keventd(struct work_struct *unused)
744static void 744static void
745ia64_mca_wakeup(int cpu) 745ia64_mca_wakeup(int cpu)
746{ 746{
747 platform_send_ipi(cpu, IA64_MCA_WAKEUP_VECTOR, IA64_IPI_DM_INT, 0); 747 ia64_send_ipi(cpu, IA64_MCA_WAKEUP_VECTOR, IA64_IPI_DM_INT, 0);
748} 748}
749 749
750/* 750/*
@@ -1490,7 +1490,7 @@ ia64_mca_cmc_int_caller(int cmc_irq, void *arg)
1490 cpuid = cpumask_next(cpuid+1, cpu_online_mask); 1490 cpuid = cpumask_next(cpuid+1, cpu_online_mask);
1491 1491
1492 if (cpuid < nr_cpu_ids) { 1492 if (cpuid < nr_cpu_ids) {
1493 platform_send_ipi(cpuid, IA64_CMCP_VECTOR, IA64_IPI_DM_INT, 0); 1493 ia64_send_ipi(cpuid, IA64_CMCP_VECTOR, IA64_IPI_DM_INT, 0);
1494 } else { 1494 } else {
1495 /* If no log record, switch out of polling mode */ 1495 /* If no log record, switch out of polling mode */
1496 if (start_count == IA64_LOG_COUNT(SAL_INFO_TYPE_CMC)) { 1496 if (start_count == IA64_LOG_COUNT(SAL_INFO_TYPE_CMC)) {
@@ -1523,7 +1523,7 @@ static void
1523ia64_mca_cmc_poll (struct timer_list *unused) 1523ia64_mca_cmc_poll (struct timer_list *unused)
1524{ 1524{
1525 /* Trigger a CMC interrupt cascade */ 1525 /* Trigger a CMC interrupt cascade */
1526 platform_send_ipi(cpumask_first(cpu_online_mask), IA64_CMCP_VECTOR, 1526 ia64_send_ipi(cpumask_first(cpu_online_mask), IA64_CMCP_VECTOR,
1527 IA64_IPI_DM_INT, 0); 1527 IA64_IPI_DM_INT, 0);
1528} 1528}
1529 1529
@@ -1560,7 +1560,7 @@ ia64_mca_cpe_int_caller(int cpe_irq, void *arg)
1560 cpuid = cpumask_next(cpuid+1, cpu_online_mask); 1560 cpuid = cpumask_next(cpuid+1, cpu_online_mask);
1561 1561
1562 if (cpuid < NR_CPUS) { 1562 if (cpuid < NR_CPUS) {
1563 platform_send_ipi(cpuid, IA64_CPEP_VECTOR, IA64_IPI_DM_INT, 0); 1563 ia64_send_ipi(cpuid, IA64_CPEP_VECTOR, IA64_IPI_DM_INT, 0);
1564 } else { 1564 } else {
1565 /* 1565 /*
1566 * If a log was recorded, increase our polling frequency, 1566 * If a log was recorded, increase our polling frequency,
@@ -1600,7 +1600,7 @@ static void
1600ia64_mca_cpe_poll (struct timer_list *unused) 1600ia64_mca_cpe_poll (struct timer_list *unused)
1601{ 1601{
1602 /* Trigger a CPE interrupt cascade */ 1602 /* Trigger a CPE interrupt cascade */
1603 platform_send_ipi(cpumask_first(cpu_online_mask), IA64_CPEP_VECTOR, 1603 ia64_send_ipi(cpumask_first(cpu_online_mask), IA64_CPEP_VECTOR,
1604 IA64_IPI_DM_INT, 0); 1604 IA64_IPI_DM_INT, 0);
1605} 1605}
1606 1606
diff --git a/arch/ia64/kernel/msi_ia64.c b/arch/ia64/kernel/msi_ia64.c
index 519d9432f407..df5c28f252e3 100644
--- a/arch/ia64/kernel/msi_ia64.c
+++ b/arch/ia64/kernel/msi_ia64.c
@@ -43,7 +43,7 @@ static int ia64_set_msi_irq_affinity(struct irq_data *idata,
43} 43}
44#endif /* CONFIG_SMP */ 44#endif /* CONFIG_SMP */
45 45
46int ia64_setup_msi_irq(struct pci_dev *pdev, struct msi_desc *desc) 46int arch_setup_msi_irq(struct pci_dev *pdev, struct msi_desc *desc)
47{ 47{
48 struct msi_msg msg; 48 struct msi_msg msg;
49 unsigned long dest_phys_id; 49 unsigned long dest_phys_id;
@@ -77,7 +77,7 @@ int ia64_setup_msi_irq(struct pci_dev *pdev, struct msi_desc *desc)
77 return 0; 77 return 0;
78} 78}
79 79
80void ia64_teardown_msi_irq(unsigned int irq) 80void arch_teardown_msi_irq(unsigned int irq)
81{ 81{
82 destroy_irq(irq); 82 destroy_irq(irq);
83} 83}
@@ -111,23 +111,6 @@ static struct irq_chip ia64_msi_chip = {
111 .irq_retrigger = ia64_msi_retrigger_irq, 111 .irq_retrigger = ia64_msi_retrigger_irq,
112}; 112};
113 113
114
115int arch_setup_msi_irq(struct pci_dev *pdev, struct msi_desc *desc)
116{
117 if (platform_setup_msi_irq)
118 return platform_setup_msi_irq(pdev, desc);
119
120 return ia64_setup_msi_irq(pdev, desc);
121}
122
123void arch_teardown_msi_irq(unsigned int irq)
124{
125 if (platform_teardown_msi_irq)
126 return platform_teardown_msi_irq(irq);
127
128 return ia64_teardown_msi_irq(irq);
129}
130
131#ifdef CONFIG_INTEL_IOMMU 114#ifdef CONFIG_INTEL_IOMMU
132#ifdef CONFIG_SMP 115#ifdef CONFIG_SMP
133static int dmar_msi_set_affinity(struct irq_data *data, 116static int dmar_msi_set_affinity(struct irq_data *data,
diff --git a/arch/ia64/kernel/sal.c b/arch/ia64/kernel/sal.c
index 17085a8078fe..c455ece977ad 100644
--- a/arch/ia64/kernel/sal.c
+++ b/arch/ia64/kernel/sal.c
@@ -249,7 +249,7 @@ check_sal_cache_flush (void)
249 * Send ourselves a timer interrupt, wait until it's reported, and see 249 * Send ourselves a timer interrupt, wait until it's reported, and see
250 * if SAL_CACHE_FLUSH drops it. 250 * if SAL_CACHE_FLUSH drops it.
251 */ 251 */
252 platform_send_ipi(cpu, IA64_TIMER_VECTOR, IA64_IPI_DM_INT, 0); 252 ia64_send_ipi(cpu, IA64_TIMER_VECTOR, IA64_IPI_DM_INT, 0);
253 253
254 while (!ia64_get_irr(IA64_TIMER_VECTOR)) 254 while (!ia64_get_irr(IA64_TIMER_VECTOR))
255 cpu_relax(); 255 cpu_relax();
diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c
index 78d0d22dd17e..4dc74500eac5 100644
--- a/arch/ia64/kernel/setup.c
+++ b/arch/ia64/kernel/setup.c
@@ -1039,7 +1039,6 @@ cpu_init (void)
1039 ia64_patch_phys_stack_reg(num_phys_stacked*8 + 8); 1039 ia64_patch_phys_stack_reg(num_phys_stacked*8 + 8);
1040 max_num_phys_stacked = num_phys_stacked; 1040 max_num_phys_stacked = num_phys_stacked;
1041 } 1041 }
1042 platform_cpu_init();
1043} 1042}
1044 1043
1045void __init 1044void __init
diff --git a/arch/ia64/kernel/smp.c b/arch/ia64/kernel/smp.c
index 133b63355814..4825b0b41d49 100644
--- a/arch/ia64/kernel/smp.c
+++ b/arch/ia64/kernel/smp.c
@@ -146,7 +146,7 @@ static inline void
146send_IPI_single (int dest_cpu, int op) 146send_IPI_single (int dest_cpu, int op)
147{ 147{
148 set_bit(op, &per_cpu(ipi_operation, dest_cpu)); 148 set_bit(op, &per_cpu(ipi_operation, dest_cpu));
149 platform_send_ipi(dest_cpu, IA64_IPI_VECTOR, IA64_IPI_DM_INT, 0); 149 ia64_send_ipi(dest_cpu, IA64_IPI_VECTOR, IA64_IPI_DM_INT, 0);
150} 150}
151 151
152/* 152/*
@@ -213,7 +213,7 @@ kdump_smp_send_init(void)
213 for_each_online_cpu(cpu) { 213 for_each_online_cpu(cpu) {
214 if (cpu != self_cpu) { 214 if (cpu != self_cpu) {
215 if(kdump_status[cpu] == 0) 215 if(kdump_status[cpu] == 0)
216 platform_send_ipi(cpu, 0, IA64_IPI_DM_INIT, 0); 216 ia64_send_ipi(cpu, 0, IA64_IPI_DM_INIT, 0);
217 } 217 }
218 } 218 }
219} 219}
@@ -224,7 +224,7 @@ kdump_smp_send_init(void)
224void 224void
225smp_send_reschedule (int cpu) 225smp_send_reschedule (int cpu)
226{ 226{
227 platform_send_ipi(cpu, IA64_IPI_RESCHEDULE, IA64_IPI_DM_INT, 0); 227 ia64_send_ipi(cpu, IA64_IPI_RESCHEDULE, IA64_IPI_DM_INT, 0);
228} 228}
229EXPORT_SYMBOL_GPL(smp_send_reschedule); 229EXPORT_SYMBOL_GPL(smp_send_reschedule);
230 230
@@ -234,7 +234,7 @@ EXPORT_SYMBOL_GPL(smp_send_reschedule);
234static void 234static void
235smp_send_local_flush_tlb (int cpu) 235smp_send_local_flush_tlb (int cpu)
236{ 236{
237 platform_send_ipi(cpu, IA64_IPI_LOCAL_TLB_FLUSH, IA64_IPI_DM_INT, 0); 237 ia64_send_ipi(cpu, IA64_IPI_LOCAL_TLB_FLUSH, IA64_IPI_DM_INT, 0);
238} 238}
239 239
240void 240void
diff --git a/arch/ia64/kernel/smpboot.c b/arch/ia64/kernel/smpboot.c
index df56f739dd11..f7058659526c 100644
--- a/arch/ia64/kernel/smpboot.c
+++ b/arch/ia64/kernel/smpboot.c
@@ -467,7 +467,7 @@ do_boot_cpu (int sapicid, int cpu, struct task_struct *idle)
467 Dprintk("Sending wakeup vector %lu to AP 0x%x/0x%x.\n", ap_wakeup_vector, cpu, sapicid); 467 Dprintk("Sending wakeup vector %lu to AP 0x%x/0x%x.\n", ap_wakeup_vector, cpu, sapicid);
468 468
469 set_brendez_area(cpu); 469 set_brendez_area(cpu);
470 platform_send_ipi(cpu, ap_wakeup_vector, IA64_IPI_DM_INT, 0); 470 ia64_send_ipi(cpu, ap_wakeup_vector, IA64_IPI_DM_INT, 0);
471 471
472 /* 472 /*
473 * Wait 10s total for the AP to start 473 * Wait 10s total for the AP to start
diff --git a/arch/ia64/kernel/time.c b/arch/ia64/kernel/time.c
index 4ecd81b0e8ec..d9ad93a6d825 100644
--- a/arch/ia64/kernel/time.c
+++ b/arch/ia64/kernel/time.c
@@ -167,8 +167,6 @@ timer_interrupt (int irq, void *dev_id)
167 return IRQ_HANDLED; 167 return IRQ_HANDLED;
168 } 168 }
169 169
170 platform_timer_interrupt(irq, dev_id);
171
172 new_itm = local_cpu_data->itm_next; 170 new_itm = local_cpu_data->itm_next;
173 171
174 if (!time_after(ia64_get_itc(), new_itm)) 172 if (!time_after(ia64_get_itc(), new_itm))
diff --git a/arch/ia64/lib/io.c b/arch/ia64/lib/io.c
index d107eaf3790d..c3e02462ed16 100644
--- a/arch/ia64/lib/io.c
+++ b/arch/ia64/lib/io.c
@@ -49,117 +49,3 @@ void memset_io(volatile void __iomem *dst, int c, long count)
49 } 49 }
50} 50}
51EXPORT_SYMBOL(memset_io); 51EXPORT_SYMBOL(memset_io);
52
53#ifdef CONFIG_IA64_GENERIC
54
55#undef __ia64_inb
56#undef __ia64_inw
57#undef __ia64_inl
58#undef __ia64_outb
59#undef __ia64_outw
60#undef __ia64_outl
61#undef __ia64_readb
62#undef __ia64_readw
63#undef __ia64_readl
64#undef __ia64_readq
65#undef __ia64_readb_relaxed
66#undef __ia64_readw_relaxed
67#undef __ia64_readl_relaxed
68#undef __ia64_readq_relaxed
69#undef __ia64_writeb
70#undef __ia64_writew
71#undef __ia64_writel
72#undef __ia64_writeq
73#undef __ia64_mmiowb
74
75unsigned int
76__ia64_inb (unsigned long port)
77{
78 return ___ia64_inb(port);
79}
80
81unsigned int
82__ia64_inw (unsigned long port)
83{
84 return ___ia64_inw(port);
85}
86
87unsigned int
88__ia64_inl (unsigned long port)
89{
90 return ___ia64_inl(port);
91}
92
93void
94__ia64_outb (unsigned char val, unsigned long port)
95{
96 ___ia64_outb(val, port);
97}
98
99void
100__ia64_outw (unsigned short val, unsigned long port)
101{
102 ___ia64_outw(val, port);
103}
104
105void
106__ia64_outl (unsigned int val, unsigned long port)
107{
108 ___ia64_outl(val, port);
109}
110
111unsigned char
112__ia64_readb (void __iomem *addr)
113{
114 return ___ia64_readb (addr);
115}
116
117unsigned short
118__ia64_readw (void __iomem *addr)
119{
120 return ___ia64_readw (addr);
121}
122
123unsigned int
124__ia64_readl (void __iomem *addr)
125{
126 return ___ia64_readl (addr);
127}
128
129unsigned long
130__ia64_readq (void __iomem *addr)
131{
132 return ___ia64_readq (addr);
133}
134
135unsigned char
136__ia64_readb_relaxed (void __iomem *addr)
137{
138 return ___ia64_readb (addr);
139}
140
141unsigned short
142__ia64_readw_relaxed (void __iomem *addr)
143{
144 return ___ia64_readw (addr);
145}
146
147unsigned int
148__ia64_readl_relaxed (void __iomem *addr)
149{
150 return ___ia64_readl (addr);
151}
152
153unsigned long
154__ia64_readq_relaxed (void __iomem *addr)
155{
156 return ___ia64_readq (addr);
157}
158
159void
160__ia64_mmiowb(void)
161{
162 ___ia64_mmiowb();
163}
164
165#endif /* CONFIG_IA64_GENERIC */
diff --git a/arch/ia64/mm/discontig.c b/arch/ia64/mm/discontig.c
index 05490dd073e6..921f3efe3538 100644
--- a/arch/ia64/mm/discontig.c
+++ b/arch/ia64/mm/discontig.c
@@ -396,8 +396,7 @@ static void __meminit scatter_node_data(void)
396 * 396 *
397 * Each node's per-node area has a copy of the global pg_data_t list, so 397 * Each node's per-node area has a copy of the global pg_data_t list, so
398 * we copy that to each node here, as well as setting the per-cpu pointer 398 * we copy that to each node here, as well as setting the per-cpu pointer
399 * to the local node data structure. The active_cpus field of the per-node 399 * to the local node data structure.
400 * structure gets setup by the platform_cpu_init() function later.
401 */ 400 */
402static void __init initialize_pernode_data(void) 401static void __init initialize_pernode_data(void)
403{ 402{
diff --git a/arch/ia64/mm/tlb.c b/arch/ia64/mm/tlb.c
index 0714df1b7854..72cc568bc841 100644
--- a/arch/ia64/mm/tlb.c
+++ b/arch/ia64/mm/tlb.c
@@ -245,7 +245,8 @@ resetsema:
245 spinaphore_init(&ptcg_sem, max_purges); 245 spinaphore_init(&ptcg_sem, max_purges);
246} 246}
247 247
248void 248#ifdef CONFIG_SMP
249static void
249ia64_global_tlb_purge (struct mm_struct *mm, unsigned long start, 250ia64_global_tlb_purge (struct mm_struct *mm, unsigned long start,
250 unsigned long end, unsigned long nbits) 251 unsigned long end, unsigned long nbits)
251{ 252{
@@ -282,6 +283,7 @@ ia64_global_tlb_purge (struct mm_struct *mm, unsigned long start,
282 activate_context(active_mm); 283 activate_context(active_mm);
283 } 284 }
284} 285}
286#endif /* CONFIG_SMP */
285 287
286void 288void
287local_flush_tlb_all (void) 289local_flush_tlb_all (void)
@@ -332,7 +334,7 @@ __flush_tlb_range (struct vm_area_struct *vma, unsigned long start,
332 preempt_disable(); 334 preempt_disable();
333#ifdef CONFIG_SMP 335#ifdef CONFIG_SMP
334 if (mm != current->active_mm || cpumask_weight(mm_cpumask(mm)) != 1) { 336 if (mm != current->active_mm || cpumask_weight(mm_cpumask(mm)) != 1) {
335 platform_global_tlb_purge(mm, start, end, nbits); 337 ia64_global_tlb_purge(mm, start, end, nbits);
336 preempt_enable(); 338 preempt_enable();
337 return; 339 return;
338 } 340 }
diff --git a/arch/ia64/pci/pci.c b/arch/ia64/pci/pci.c
index 165e561dc81a..89c9f36dc94d 100644
--- a/arch/ia64/pci/pci.c
+++ b/arch/ia64/pci/pci.c
@@ -372,7 +372,6 @@ void pcibios_fixup_bus(struct pci_bus *b)
372 } 372 }
373 list_for_each_entry(dev, &b->devices, bus_list) 373 list_for_each_entry(dev, &b->devices, bus_list)
374 pcibios_fixup_device_resources(dev); 374 pcibios_fixup_device_resources(dev);
375 platform_pci_fixup_bus(b);
376} 375}
377 376
378void pcibios_add_bus(struct pci_bus *bus) 377void pcibios_add_bus(struct pci_bus *bus)
@@ -413,7 +412,7 @@ pcibios_disable_device (struct pci_dev *dev)
413} 412}
414 413
415/** 414/**
416 * ia64_pci_get_legacy_mem - generic legacy mem routine 415 * pci_get_legacy_mem - generic legacy mem routine
417 * @bus: bus to get legacy memory base address for 416 * @bus: bus to get legacy memory base address for
418 * 417 *
419 * Find the base of legacy memory for @bus. This is typically the first 418 * Find the base of legacy memory for @bus. This is typically the first
@@ -424,7 +423,7 @@ pcibios_disable_device (struct pci_dev *dev)
424 * This is the ia64 generic version of this routine. Other platforms 423 * This is the ia64 generic version of this routine. Other platforms
425 * are free to override it with a machine vector. 424 * are free to override it with a machine vector.
426 */ 425 */
427char *ia64_pci_get_legacy_mem(struct pci_bus *bus) 426char *pci_get_legacy_mem(struct pci_bus *bus)
428{ 427{
429 return (char *)__IA64_UNCACHED_OFFSET; 428 return (char *)__IA64_UNCACHED_OFFSET;
430} 429}
@@ -473,7 +472,7 @@ pci_mmap_legacy_page_range(struct pci_bus *bus, struct vm_area_struct *vma,
473} 472}
474 473
475/** 474/**
476 * ia64_pci_legacy_read - read from legacy I/O space 475 * pci_legacy_read - read from legacy I/O space
477 * @bus: bus to read 476 * @bus: bus to read
478 * @port: legacy port value 477 * @port: legacy port value
479 * @val: caller allocated storage for returned value 478 * @val: caller allocated storage for returned value
@@ -485,7 +484,7 @@ pci_mmap_legacy_page_range(struct pci_bus *bus, struct vm_area_struct *vma,
485 * overridden by the platform. This is necessary on platforms that don't 484 * overridden by the platform. This is necessary on platforms that don't
486 * support legacy I/O routing or that hard fail on legacy I/O timeouts. 485 * support legacy I/O routing or that hard fail on legacy I/O timeouts.
487 */ 486 */
488int ia64_pci_legacy_read(struct pci_bus *bus, u16 port, u32 *val, u8 size) 487int pci_legacy_read(struct pci_bus *bus, u16 port, u32 *val, u8 size)
489{ 488{
490 int ret = size; 489 int ret = size;
491 490
@@ -508,7 +507,7 @@ int ia64_pci_legacy_read(struct pci_bus *bus, u16 port, u32 *val, u8 size)
508} 507}
509 508
510/** 509/**
511 * ia64_pci_legacy_write - perform a legacy I/O write 510 * pci_legacy_write - perform a legacy I/O write
512 * @bus: bus pointer 511 * @bus: bus pointer
513 * @port: port to write 512 * @port: port to write
514 * @val: value to write 513 * @val: value to write
@@ -516,7 +515,7 @@ int ia64_pci_legacy_read(struct pci_bus *bus, u16 port, u32 *val, u8 size)
516 * 515 *
517 * Simply writes @size bytes of @val to @port. 516 * Simply writes @size bytes of @val to @port.
518 */ 517 */
519int ia64_pci_legacy_write(struct pci_bus *bus, u16 port, u32 val, u8 size) 518int pci_legacy_write(struct pci_bus *bus, u16 port, u32 val, u8 size)
520{ 519{
521 int ret = size; 520 int ret = size;
522 521