GIISR_INFO (Compact 2013)

3/28/2014

This structure is passed to the interrupt service routine (ISR) through KernelLibIoControl after the ISR is loaded with LoadIntChainHandler.


typedef struct _GIISR_INFO {
  DWORD  SysIntr;
  BOOL CheckPort;
  BOOL PortIsIO;
  BOOL UseMaskReg;
  DWORD PortAddr;
  DWORD PortSize;
  DWORD Mask;
  DWORD MaskAddr;
} GIISR_INFO, *PGIISR_INFO;

SysIntr

System interrupt number (SYSINTR) for the ISR to return if the associated device is asserting the interrupt request (IRQ).

This value is read from the registry.

CheckPort

If TRUE, the ISR reads a port on the device to determine whether the device is asserting the IRQ. A PortAddr is required to address the port that is read to determine if the device is asserting the interrupt.

If FALSE, the ISR assumes the device is asserting the IRQ and immediately returns SysIntr.

This option is used only if the interrupt line that the device is using is not shared, or if the ISR is guaranteed to be last in the chain; for example, the ISR is installed with the last LoadIntChainHandler call on this IRQ.

In general, use this option only if there is no means to detect whether the device is asserting the IRQ.

PortIsIO

If TRUE, the port is the I/O port.

This determines whether the port is I/O or memory-mapped.

This is relevant for x86 architectures because all other microprocessors are memory-mapped.

UseMaskReg

If TRUE, read from MaskAddr to obtain mask. Optionally, another device register can be used as a mask.

This feature is activated if the UseMaskReg field is TRUE. The associated MaskAddr field is the statically mapped virtual address of the mask register.

This option is used if the device has multiple interrupt sources that are enabled by the register pointed to by MaskAddr. Disabled bits mask off the interrupt pending register pointed to by PortAddr.

PortAddr

Port address.

This is a statically-mapped virtual address that is obtained through TransBusAddrToStatic.

This is required if CheckPort is TRUE.

PortSize

Port data width in 1, 2, or 4 bytes.

Mask

A mask to use on the port to determine if the device is asserting the IRQ.

This member is used to mask off the value of PortAddr so individual bits can be examined by Mask and the contents of the register residing at PortAddr.

If the result is nonzero, the ISR returns SysIntr.

Otherwise, SYSINTR_CHAIN is returned, indicating that the device is not currently asserting the IRQ.

MaskAddr

Address of register to use as mask.

Header

giisr.h

Show: