映射分配的虚拟 PCI 设备的 MSI 或 MSI-X 中断,并将 MSI 地址和数据返回到设备中。
Syntax
typedef enum WHV_VPCI_INTERRUPT_TARGET_FLAGS
{
WHvVpciInterruptTargetFlagNone = 0x00000000,
WHvVpciInterruptTargetFlagMulticast = 0x00000001,
} WHV_VPCI_INTERRUPT_TARGET_FLAGS;
// Enables bitwise operators on the WHV_VPCI_INTERRUPT_TARGET_FLAGS enumeration.
DEFINE_ENUM_FLAG_OPERATORS(WHV_VPCI_INTERRUPT_TARGET_FLAGS);
typedef struct WHV_VPCI_INTERRUPT_TARGET
{
UINT32 Vector;
WHV_VPCI_INTERRUPT_TARGET_FLAGS Flags;
UINT32 ProcessorCount;
UINT32 Processors[ANYSIZE_ARRAY];
} WHV_VPCI_INTERRUPT_TARGET;
HRESULT
WINAPI
WHvMapVpciDeviceInterrupt(
_In_ WHV_PARTITION_HANDLE Partition,
_In_ UINT64 LogicalDeviceId,
_In_ UINT32 Index,
_In_ UINT32 MessageCount,
_In_ const WHV_VPCI_INTERRUPT_TARGET* Target,
_Out_ UINT64* MsiAddress,
_Out_ UINT32* MsiData
);
参数
Partition
拥有虚拟 PCI 设备的分区句柄。
LogicalDeviceId
指定创建设备时分配的虚拟 PCI 设备的逻辑设备 ID。
Index
指定要创建的中断映射项的索引。 每个映射请求都必须指定唯一未使用的索引。
MessageCount
指定为中断请求的消息数。 对于多消息 MSI 中断,这是 1 到 32(含 1 到 32)之间的两个电源。 对于 MSI-X 中断,请将此值设置为 1。
Target
指定指向提供中断的目标向量和处理器集的结构的指针 WHV_VPCI_INTERRUPT_TARGET 。 如果 MessageCount 大于 1,则会使用相同的目标处理器集初始化每个消息。
MsiAddress
接收分配给中断的 MSI 地址。 将此值编程为 MSI 或设备 MSI-X 功能。
MsiData
接收分配给中断的 MSI 数据有效负载。 将此值编程为 MSI 或设备 MSI-X 功能。
返回值
如果函数成功,则返回值为 S_OK.
当大于 65535、0 或大于 32 时MessageCountTarget->Flags,当指定未定义的标志、当Target->ProcessorCount为 0 或超过分区中的虚拟处理器数、处理器中的Target->Processors处理器不是有效的虚拟处理器索引或与单个目标处理器一起设置时WHvVpciInterruptTargetFlagMulticast,该函数将返回E_INVALIDARGIndex。 在 Arm64 上,函数返回E_INVALIDARG大于 1 或设置时间Target->ProcessorCountWHvVpciInterruptTargetFlagMulticast,因为虚拟机监控程序将每个 MSI 定向到 Arm64 上的单个虚拟处理器。
Remarks
该 WHvMapVpciDeviceInterrupt 函数建立一个映射,以便将支持分配设备的物理资源发出的中断路由到拥有设备的分区的目标虚拟处理器。 创建映射后,将返回 MsiAddress 的值编程 MsiData 为 MSI 或设备 MSI-X 功能。
创建启用了逻辑中断的设备时,调用方还可以通过传递返回 MsiAddress 的和 MsiData 传递给 WHvRequestVpciDeviceInterrupt来直接断言中断。
映射多消息 MSI 中断(MessageCount 大于 1)时,所有消息都使用相同的目标处理器集进行初始化。 之后使用 WHvRetargetVpciDeviceInterrupt ,将单个消息重定向到其他处理器集。 使用
要求
| 要求 | 价值 |
|---|---|
| 支持的最低Windows | Windows 10版本 20H2 (x64):Windows 11版本 24H2 内部版本 26100.3915 (Arm64) |
| Header | WinHvPlatform.h |
| 图书馆 | WinHvPlatform.lib |
| DLL | WinHvPlatform.dll |
| Architecture | x64、Arm64 |