static int rbtx4938_irq_dispatch(int pending) { int irq; if (pending & STATUSF_IP7) irq = MIPS_CPU_IRQ_BASE + 7; else if (pending & STATUSF_IP2) { irq = txx9_irq(); if (irq == RBTX4938_IRQ_IOCINT) irq = toshiba_rbtx4938_irq_nested(irq); } else if (pending & STATUSF_IP1) irq = MIPS_CPU_IRQ_BASE + 0; else if (pending & STATUSF_IP0) irq = MIPS_CPU_IRQ_BASE + 1; else irq = -1; return irq; }
int tx4938_irq_nested(void) { int sw_irq = 0; u32 level2; level2 = TX4938_RD(0xff1ff6a0); if ((level2 & 0x10000) == 0) { level2 &= 0x1f; sw_irq = TX4938_IRQ_PIC_BEG + level2; if (sw_irq == 26) { { extern int toshiba_rbtx4938_irq_nested(int sw_irq); sw_irq = toshiba_rbtx4938_irq_nested(sw_irq); } } } wbflush(); return (sw_irq); }