BOOLEAN HwVidInterrupt(
PVOID HwDeviceExtension | |
); |
If its video adapter generates interrupts, a miniport driver must have a HwVidInterrupt function.
Parameters
HwDeviceExtension
Points to the miniport driver’s per-adapter storage area.
Return Value
If HwVidInterrupt determines that the hardware is not interrupting, it returns FALSE. Otherwise, it must dismiss the interrupt on its adapter before it returns TRUE.
Comments
First, HwVidInterrupt should determine whether its adapter actually caused the interrupt. If not, this function should return FALSE immediately so the ISR of the device that caused the interrupt will be called promptly.
Otherwise, HwVidInterrupt must dismiss interrupts on the adapter before it returns control.
If a miniport driver has a HwVidInterrupt function, no register or memory location that can be accessed by HwVidInterrupt can be visible to the corresponding display driver. An interrupt can occur while the display driver is modifying one of the registers or memory locations involved, and there is no way to ensure synchronization. Therefore, all functions requiring access to the critical registers or memory locations for interrupt-driven operations must be in the miniport driver.
If any other miniport function shares memory, such as part of the HwDeviceExtension, with HwVidInterrupt, it must call VideoPortSynchronizeExecution to synchronize its access to the shared area.
HwVidInterrupt can call only a subset of the system-supplied VideoPortXxx routines safely. In particular, it can call the following functions:
·VideoPortEnableInterrupt and VideoPortDisableInterrupt
·VideoPortZeroDeviceMemory and VideoPortZeroMemory
·VideoPortLogError
·VideoPortStallExecution, but it should avoid calling this function if possible
·All VideoPortReadXxx and VideoPortWriteXxx
HwVidInterrupt must not call any VideoPortXxx that is not in the preceding list.
A HwVidInterrupt function cannot be pageable, nor can any function that it calls.
See Also
HwVidSynchronizeExecutionCallback, VideoPortDisableInterrupt, VideoPortEnableInterrupt, VideoPortLogError, VideoPortReadXxx, VideoPortStallExecution, VideoPortSynchronizeExecution, VideoPortWriteXxx, VideoPortZeroDeviceMemory, VideoPortZeroMemory