include vpicd.inc mov eax, IRQNum ; IRQ number VxDcall VPICD_Get_IRQ_Complete_Status jc already_virtualized ; carry flag set if IRQ is already virtualized mov [Status], ecx ; status |
The VPICD_Get_IRQ_Complete_Status service returns the complete status for the specified IRQ. This service is similar to VPICD_Get_Complete_Status, except that it takes an IRQ number as a parameter instead of an IRQ handle.
IRQNum
Specifies the number of the IRQ for which to retrieve status.
The carry flag is set if the IRQ has been virtualized. Otherwise, the carry flag is clear.
The ECX register contains a combination of the following status flag values:
Value | Meaning |
VPICD_Stat_In_Service | The IRQ is virtually in service. |
VPICD_Stat_IRET_Pending | A virtual iret is pending. |
VPICD_Stat_Phys_In_Serv | The IRQ is physically in service. |
VPICD_Stat_Phys_Mask | The IRQ is physically masked. |
VPICD_Stat_Phys_Req | The physical interrupt request has been set. |
VPICD_Stat_Virt_Dev_Req | The virtual interrupt request has been set by the calling virtual device. |
VPICD_Stat_Virt_Mask | The virtual machine has masked the IRQ. |
VPICD_Stat_Virt_Req | The virtual interrupt request for the virtual machine has been set (by a virtual device, not necessarily the caller). |
Virtual devices typically use this service to inspect an IRQ before attempting to virtualize it, or to inspect the state of another virtual device's interrupt. Since the service indicates whether an IRQ has been virtualized, virtual devices use this service to avoid conflicts when more than one device may want to use an IRQ.
ECX, Flags