## Physical Device Driver Reference

[prev][next][parent][TOC]

### Spurious Interrupts

To handle a spurious interrupt in an edge-triggered interrupt environment, reset the interrupt at the 8259 interrupt controller (EOI), issue the global rearm if sharing interrupts, and enable processor interrupts. Generally, these actions would be taken by the last interrupt handler in the list of interrupt handlers.

To handle a spurious interrupt in a level-sensitive interrupt environment, reset the interrupt condition at the device, issue the EOI, and enable processor interrupts.

ABIOS provides the capability to reset a spurious interrupt at the device through the use of an Advanced BIOS default interrupt handler for the LID. The handler calls the ABIOS default interrupt handler for its LID if there are no outstanding incomplete-waiting-on-interrupt request blocks. The ABIOS default interrupt handler will indicate either that the interrupt condition was successfully reset or that the interrupt did not belong to the device referenced by the LID. If the ABIOS handler replies that the device was successfully reset, the interrupt handler must issue the EOI and return as owning the interrupt.

Where there are incomplete-waiting-on-interrupt request blocks outstanding, ABIOS keeps track of which interrupts are expected. It will automatically service a spurious interrupt when called by the interrupt handler. The handler must call ABIOS with every request block that is incomplete-waiting -on-interrupt for a LID, even if the first one returns an indication that it performed some processing. The handler must also be able to process the spurious interrupt return code from any one of these calls to the ABIOS interrupt service.

For a physical device driver directly interfaces to the device, it must check the device for the interrupt condition, even if the interrupt condition does not correspond to an outstanding I/O request. If the device had caused the spurious interrupt, the interrupt handler must reset the interrupting condition at the device, issue the EOI, and return as owning the interrupt.

Note: If the device causing the spurious interrupt in the level-sensitive interrupt environment is not identified and reset, the interrupt level will interrupt continuously. This is a feature of the 8259 interrupt controller operating in level-sensitive mode. If no device driver that is registered for an interrupting interrupt level claims the interrupt, the OS/2 interrupt manager is forced to disable the interrupt level at the 8259 interrupt controller because it cannot clear the interrupt at the device. If the interrupt is not disabled, the device will continue to generate spurious interrupts, the interrupt manager will continue to call all device drivers registered on the interrupt level, and all lower-priority interrupts will fail to be serviced.