int hd64461_irq_demux(int irq) { if (irq == CONFIG_HD64461_IRQ) { unsigned short bit; unsigned short nirr = inw(HD64461_NIRR); unsigned short nimr = inw(HD64461_NIMR); nirr &= ~nimr; for (bit = 1, irq = 0; irq < 16; bit <<= 1, irq++) if (nirr & bit) break; if (irq == 16) irq = CONFIG_HD64461_IRQ; else irq += HD64461_IRQBASE; } return __irq_demux(irq); }
int hd64461_irq_demux(int irq) { if (irq == CONFIG_HD64461_IRQ) { unsigned short bit; unsigned short nirr = inw(HD64461_NIRR); unsigned short nimr = inw(HD64461_NIMR); int i; nirr &= ~nimr; for (bit = 1, i = 0; i < 16; bit <<= 1, i++) if (nirr & bit) break; if (i == 16) irq = CONFIG_HD64461_IRQ; else { irq = HD64461_IRQBASE + i; if (hd64461_demux[i].func != 0) { irq = hd64461_demux[i].func(irq, hd64461_demux[i].dev); } } } return __irq_demux(irq); }