HwScsiInterrupt

BOOLEAN
    HwScsiInterrupt(

        IN PVOID  DeviceExtension
        );

HwScsiInterrupt is called when the HBA generates an interrupt. Miniport drivers of HBAs that do not generate interrupts do not have this routine.

Parameters

DeviceExtension
Points to the miniport driver’s per-HBA storage area.

Return Value

If the miniport finds that its HBA did not generate the interrupt, HwScsiInterrupt should return FALSE as soon as possible.

Comments

HwScsiInterrupt is responsible for completing interrupt-driven I/O operations. This routine must clear the interrupt on the HBA before it returns TRUE.

Miniport drivers of HBAs that require interrupt processing that takes more than 50 microseconds should have a pair of HwScsi..InterruptsCallback routines. Such a driver’s HwScsiInterrupt routine should do the following, rather than calling ScsiPortStallExecution to tie up the processor while its HBA updates hardware state:

  1. Disable interrupts on the HBA.

  2. Set up the DeviceExtension with any context necessary to complete the operation.

  3. Call ScsiPortNotification with the NotificationType value CallEnableInterrupts and the entry point for the driver’s HwScsiEnableInterruptsCallback routine.

  4. Return control.

Using this technique improves overall I/O throughput, including that of any other HBAs the miniport driver supports.

If a miniport’s HwScsiInterrupt routine cannot disable interrupts on its HBA but its interrupt-driven transfer operations take more than 50 microseconds in the HwScsiInterrupt routine, the miniport should limit the maximum size for transfers that it accepts. Such a miniport’s HwScsiFindAdapter routine can set the MaximumTransferLength member of the PORT_CONFIGURATION_INFORMATION structure to a value that restricts execution time in the HwScsiInterrupt routine for transfers. The miniport writer should adjust this value during driver development so there is no user-noticeable impact on the performance of the mouse, serial, and/or parallel drivers. Otherwise, the mouse pointer can appear to “jump” or the serial/parallel throughput to degrade noticeably whenever that miniport is transferring data.

See Also

HwScsiDisableInterruptsCallback, HwScsiEnableInterruptsCallback, ScsiPortNotification, ScsiPortStallExecution