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);
	}
}
Example #2
0
/*********************************************************************
 * 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);
	}
}