[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Sharing interrupts



Hi,

I'm having an interrupt conflict between my USB controller
and a a custom PCI card. As far as I can tell, there is no
way to physically move either device to a different interrupt
line (and I don't really want to).

The PCI card driver is running under Real Time Linux. I tried
to pass the pending interrupt to the non real-time part of the
kernel using this code fragment within the real time ISR:

unsigned int  handler(unsigned int irq_number, struct pt_regs *p) {

	unsigned long tmp;

	/* If the interrupt is not originating from card, schedule it for unreal-time */
	if (!Bit(EPLD_New_Block,inl(RegBase+EPLD_Status))) {
		rtl_global_pend_irq(cInt);
		rtl_hard_enable_irq(cInt);
		return 0;
	}

	...
	Real Time ISR code
	...

	rtl_hard_enable_irq(cInt);
	return 0;

}

Unfortunately, it still doesn't work. Every time the driver
for the USB controller is loaded (with the real time driver
running), the system just freezes and needs a reset. The same
thing happened without the mentioned code.

Do you have any idea what I'm missing here?

Thanks,

Iwo