asmlinkage void vrc5476_irq_dispatch(struct pt_regs *regs) { extern unsigned int do_IRQ(int irq, struct pt_regs *regs); extern void spurious_interrupt(void); u32 mask; int nile4_irq; mask = nile4_get_irq_stat(0); /* quick check for possible time interrupt */ if (mask & (1 << VRC5476_IRQ_GPT)) { do_IRQ(VRC5476_IRQ_BASE + VRC5476_IRQ_GPT, regs); return; } /* check for i8259 interrupts */ if (mask & (1 << VRC5476_I8259_CASCADE)) { int i8259_irq = nile4_i8259_iack(); do_IRQ(I8259_IRQ_BASE + i8259_irq, regs); return; } /* regular nile4 interrupts (we should not really have any */ for (nile4_irq = 0; mask; nile4_irq++, mask >>= 1) { if (mask & 1) { do_IRQ(VRC5476_IRQ_BASE + nile4_irq, regs); return; } } spurious_interrupt(); }
void ddb_local0_irqdispatch(struct pt_regs *regs) { u32 mask; int nile4_irq; mask = nile4_get_irq_stat(0); /* Handle the timer interrupt first */ #if 0 if (mask & (1 << NILE4_INT_GPT)) { do_IRQ(nile4_to_irq(NILE4_INT_GPT), regs); mask &= ~(1 << NILE4_INT_GPT); } #endif for (nile4_irq = 0; mask; nile4_irq++, mask >>= 1) if (mask & 1) { if (nile4_irq == NILE4_INT_INTE) { int i8259_irq; nile4_clear_irq(NILE4_INT_INTE); i8259_irq = nile4_i8259_iack(); do_IRQ(i8259_irq, regs); } else do_IRQ(nile4_to_irq(nile4_irq), regs); } }
void ddb_local0_irqdispatch(struct pt_regs *regs) { u32 mask; int nile4_irq; #if 1 volatile static int nesting = 0; if (nesting++ == 0) ddb5074_led_d3(1); ddb5074_led_hex(nesting < 16 ? nesting : 15); #endif mask = nile4_get_irq_stat(0); nile4_clear_irq_mask(mask); /* Handle the timer interrupt first */ if (mask & (1 << NILE4_INT_GPT)) { nile4_disable_irq(NILE4_INT_GPT); do_IRQ(nile4_to_irq(NILE4_INT_GPT), regs); nile4_enable_irq(NILE4_INT_GPT); mask &= ~(1 << NILE4_INT_GPT); } for (nile4_irq = 0; mask; nile4_irq++, mask >>= 1) if (mask & 1) { nile4_disable_irq(nile4_irq); if (nile4_irq == NILE4_INT_INTE) { int i8259_irq = nile4_i8259_iack(); i8259_do_irq(i8259_irq, regs); } else do_IRQ(nile4_to_irq(nile4_irq), regs); nile4_enable_irq(nile4_irq); } #if 1 if (--nesting == 0) ddb5074_led_d3(0); ddb5074_led_hex(nesting < 16 ? nesting : 15); #endif }