映射一個 MSI 或 MSI-X 中斷,針對指定的虛擬 PCI 裝置,並回傳 MSI 位址與資料以進行程式編寫。
語法
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
);
Parameters
Partition
處理到擁有虛擬 PCI 裝置的分割區。
LogicalDeviceId
指定虛擬 PCI 裝置的邏輯裝置 ID,該裝置在建立時所指派。
Index
指定要建立的中斷映射條目的索引。 每個映射請求都必須指定一個唯一且未使用的索引。
MessageCount
指定中斷所需訊息數量。 對於多訊息 MSI 中斷,這是介於 1 到 32 之間的二的冪次方。 對於 MSI-X 中斷,將此值設為 1。
Target
指定一個指向 WHV_VPCI_INTERRUPT_TARGET 結構的指標,該結構提供中斷的目標向量與處理器集合。 當 大於 1 時 MessageCount ,每個訊息初始化時都使用相同的目標處理器設定。
MsiAddress
接收分配給中斷的 MSI 位址。 將此數值編碼到裝置的 MSI 或 MSI-X 功能中。
MsiData
接收分配給中斷的 MSI 資料有效載荷。 將此數值編碼到裝置的 MSI 或 MSI-X 功能中。
傳回值
如果函式成功,則傳回值為 S_OK。
當 Index 大於 65535、MessageCount當 0 或大於 32、Target->Flags指定未定義的旗標、Target->ProcessorCount當 為 0 或超過分割區中的虛擬處理器數量、當 中的Target->Processors某個處理器不是有效的虛擬處理器索引,或 WHvVpciInterruptTargetFlagMulticast 與單一目標處理器一起設定時,該函式會回傳E_INVALIDARG。 在 Arm64 上,當 Target->ProcessorCount 大於 1 或WHvVpciInterruptTargetFlagMulticast設定時,函式會回傳E_INVALIDARG,因為 hypervisor 將每個 MSI 鎖定在 Arm64 上的單一虛擬處理器。
Remarks
該 WHvMapVpciDeviceInterrupt 函式建立映射,使得由支援該裝置的實體資源所發出的中斷,會被路由到擁有該裝置的分割區的目標虛擬處理器。 映射建立完成後,將回傳 MsiAddress 的值 MsiData 編程到裝置的 MSI 或 MSI-X 功能中。
當裝置建立時啟用邏輯中斷,呼叫者也可以直接將中 MsiAddressMsiDataWHvRequestVpciDeviceInterrupt斷傳給 。
當映射多訊息 MSI 中斷(MessageCount 大於 1)時,所有訊息初始化為相同的目標處理器。 之後再用 WHvRetargetVpciDeviceInterrupt 來將個別訊息重新定位到不同的處理器集。 查詢映射 WHvGetVpciDeviceInterruptTarget中斷的當前目標,並用 移除映射 WHvUnmapVpciDeviceInterrupt。
Requirements
| 需求 | 價值 |
|---|---|
| 最低支援的 Windows | Windows 10,版本 20H2(x64);Windows 11,版本 24H2,建置版 26100.3915(Arm64) |
| Header | WinHvPlatform.h |
| 圖書館 | WinHvPlatform.lib |
| DLL | WinHvPlatform.dll |
| Architecture | x64、Arm64 |