static void neponset_IRQ_demux( int irq, void *dev_id, struct pt_regs *regs ) { int irr; for(;;){ irr = IRR & (IRR_ETHERNET | IRR_USAR | IRR_SA1111); /* Let's have all active IRQ bits high. * Note: there is a typo in the Neponset user's guide * for the SA1111 IRR level. */ irr ^= (IRR_ETHERNET | IRR_USAR); if (!irr) break; if( irr & IRR_ETHERNET ) do_IRQ(IRQ_NEPONSET_SMC9196, regs); if( irr & IRR_USAR ) do_IRQ(IRQ_NEPONSET_USAR, regs); if( irr & IRR_SA1111 ) sa1111_IRQ_demux(irq, dev_id, regs); } }
/********************************************************************* * Install IRQ handler */ static void system3_IRQ_demux( int irq, void *dev_id, struct pt_regs *regs ) { u_char irr; for(;;){ //irr = PTCPLD_REG_IRQSR & (PT_IRQ_LAN | PT_IRQ_USAR | PT_IRQ_SA1111); irr = PT_IRQSR & (PT_IRQ_LAN | PT_IRQ_SA1111); irr ^= (PT_IRQ_LAN); if (!irr) break; if( irr & PT_IRQ_LAN ) do_IRQ(IRQ_SYSTEM3_SMC9196, regs); #if 0 /* Highspeed Serial Bus not yet used */ if( irr & PT_IRQ_USAR ) do_IRQ(PT_USAR_IRQ, regs); #endif if( irr & PT_IRQ_SA1111 ) sa1111_IRQ_demux(irq, dev_id, regs); } }