Dear Friends, I am sending a mail after a long time. I am facing a problem now. Please help me to come out of this.
Environment: ~~~~~~~~~~~~ RT-Linux - Version 3.1 Linux - 2.4.16 with RT patch from contribution Hardware ~~~~~~~~ Pentium III - 700 MHz 128 MB SDRAM 40GB HAR DISK ADD-ON Module ~~~~~~~~~~~~~~ Supports PCI Ver 2.1 Memory Requirement - 1 MB PCI IO Requirement - 256 bytes I/O IRQ - 1 Line INT A We are developing a driver for a PCI add-on module which is actually a communication add-on like RS-422 and 1553B. The problem here is if I put more than one PCI add-on (same module) in the same PC, I am not able to service interrupts properly. Because, both are sharing the same interrupt the line. When I program the BIOS to allocate different IRQs there is no problem. Please tell me wheather RT-Linux supports IRQ sharing, if so how to implement that. Because I have return a single driver to handle multiple cards, I am having a single ISR and registering with the rtl_request_interrupt function. In that function, whenever I get an interrupt, I am checking which board is using the raised IRQ number (from ISR function parameter), then I am servicing the interrupt. If more that one board matches I am reading the IRQ status from the board and verifying wheather it has generated the Interrupt, if not I will go to the next matching board, I am also verifying the other board even the Interrupt is raised by the any one of the matching boards. Code snippet ~~~~~~~~~~~~ PCI_ISR(irqno, regs) { for(i=0; i <= g_uiTotalBrds; i++) { if(g_strBrdDetail[i].IRQ == irqno) { // Read Interrupts Status // Clear Interrupt } } rtl_irq_hardenable(irqno); } The Problem ~~~~~~~~~~~ * In an instance, if two or more boards is raising interrupts on the same line, IRQ is serviced for any one board only, with this effect the system is hanging and stops responding. This is due to the un serviced interrupts of other boards. Typical case: Let us say the Interrupt is raised for the third board, my interrupt service routine is called immediately. Now in the processing when the loop reaches the third iteration (Board 3, i=2), assume board 2 is raising interrupt, in this case there won't be any call to ISR because the IRQ line is same for both boards and in RT-Linux the IRQ line is disabled when the ISR is called. Because the loop is in third iteration and board 2 has raised the interrupt there will not be any chance of servicing the Board 2 until the loop is fully executed and ISR is returned with the rtl_irq_hard_enable. My Problem is, the ISR is not getting invoked even though there is a pending interrupt on the same line. Please advice on how to handle this problem. Regards RD -- [rtl] --- To unsubscribe: echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED] -- For more information on Real-Time Linux see: http://www.rtlinux.org/