VOID
MacDeferredProcessingRoutine(
IN PVOID SystemSpecific1,
IN PVOID InterruptContext,
IN PVOID SystemSpecific2,
IN PVOID SystemSpecific3
);
MacDeferredProcessingRoutine is called to complete interrupt processing that the driver’s MacInterruptServiceRoutine, which should return control as quickly as possible, does not.
MacDeferredProcessingRoutine runs at a lower hardware priority than MacInterruptServiceRoutine and typically executes immediately after the ISR returns control.
MacDeferredProcessingRoutine does all the work of interrupt handling except for determining whether the interrupt belongs to the network interface card and, if necessary, saving enough interrupt state information for the driver’s MacDeferredProcessingRoutine to complete the operation that caused the interrupt. Because it runs at DIRQL, the MacInterruptServiceRoutine handles only the minimum necessary operations before it returns control.
MacDeferredProcessingRoutine must be able to handle processing for any number of NIC interrupts unless the NIC driver’s MacInterruptServiceRoutine disables interrupts on the NIC. In such a driver, MacDeferredProcessingRoutine clears the state of the network interface card and re-enables interrupts, handling only the most recent device interrupt.
If MacDeferredProcessingRoutine shares resources, such as state, with other nonISR driver functions, it can call NdisDprAcquireSpinLock and NdisDprReleaseSpinLock to synchronize its access to the shared resources. Like any other driver function that shares resources with the ISR, MacDeferredProcessingRoutine must call NdisSynchronizeWithInterrupt when it needs to access resources shared with MacInterruptServiceRoutine.
MacDeferredProcessingRoutine runs at IRQL DISPATCH_LEVEL.
MacAddAdapter, MacInterruptServiceRoutine, MacSynchronizeFunction, MiniportHandleInterrupt, NdisDprAcquireSpinLock, NdisDprReleaseSpinLock, NdisInitializeInterrupt, NdisRegisterAdapter, NdisSynchronizeWithInterrupt