16 #include <linux/export.h>
18 #include <asm/cacheflush.h>
39 :
"=&r" (retval),
"=r" (tmp)
70 "wr %0, %2, %%psr\n\t"
127 for (i = 1; i <
NR_IRQS; i++) {
128 if (irq_table[i].real_irq == real_irq && irq_table[i].pil == pil)
132 for (i = 1; i <
NR_IRQS; i++) {
133 if (!irq_table[i].
irq)
139 irq_table[
i].irq =
i;
140 irq_table[
i].pil =
pil;
146 spin_unlock_irqrestore(&irq_table_lock, flags);
171 spin_unlock_irqrestore(&irq_map_lock, flags);
185 pnext = &irq_map[p->
pil];
187 pnext = &(*pnext)->
next;
190 spin_unlock_irqrestore(&irq_map_lock, flags);
203 seq_printf(p,
" IPI rescheduling interrupts\n");
207 seq_printf(p,
" IPI function call interrupts\n");
222 old_regs = set_irq_regs(regs);
233 set_irq_regs(old_regs);
236 #if defined(CONFIG_BLK_DEV_FD) || defined(CONFIG_BLK_DEV_FD_MODULE)
237 static unsigned int floppy_irq;
241 unsigned int cpu_irq;
252 cpu_irq = (irq & (
NR_IRQS - 1));
255 #define INSTANTIATE(table) \
256 table[SP_TRAP_IRQ1+(cpu_irq-1)].inst_one = SPARC_RD_PSR_L0; \
257 table[SP_TRAP_IRQ1+(cpu_irq-1)].inst_two = \
258 SPARC_BRANCH((unsigned long) floppy_hardint, \
259 (unsigned long) &table[SP_TRAP_IRQ1+(cpu_irq-1)].inst_two);\
260 table[SP_TRAP_IRQ1+(cpu_irq-1)].inst_three = SPARC_RD_WIM_L3; \
261 table[SP_TRAP_IRQ1+(cpu_irq-1)].inst_four = SPARC_NOP;
265 #if defined CONFIG_SMP
269 trap_table = &trapbase_cpu1;
270 INSTANTIATE(trap_table)
271 trap_table = &trapbase_cpu2;
272 INSTANTIATE(trap_table)
273 trap_table = &trapbase_cpu3;
274 INSTANTIATE(trap_table)
321 old_regs = set_irq_regs(regs);
325 set_irq_regs(old_regs);
357 prom_printf(
"Cannot initialize IRQs on this Sun machine...");