割り当てられた仮想 PCI デバイスの MSI または MSI-X 割り込みをマップし、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 の間の 2 つの累乗です(両端を含む)。 MSI-X 割り込みの場合は、この値を 1 に設定します。
Target
割り込みのターゲット ベクターとプロセッサ セットを提供する WHV_VPCI_INTERRUPT_TARGET 構造体へのポインターを指定します。
MessageCountが 1 より大きい場合、すべてのメッセージは同じターゲット プロセッサ セットで初期化されます。
MsiAddress
割り込みに割り当てられた MSI アドレスを受け取ります。 この値を MSI またはデバイスの MSI-X 機能にプログラムします。
MsiData
割り込みに割り当てられた MSI データ ペイロードを受け取ります。 この値を MSI またはデバイスの MSI-X 機能にプログラムします。
戻り値
関数が成功した場合、戻り値は S_OK。
この関数は、Indexが 65535 より大きい場合、MessageCountが 0 または 32 より大きい場合、Target->Flagsが未定義フラグを指定した場合、Target->ProcessorCountが 0 またはパーティション内の仮想プロセッサの数を超えている場合、Target->Processors内のプロセッサが有効な仮想プロセッサ インデックスでない場合、または 1 つのターゲット プロセッサと共にWHvVpciInterruptTargetFlagMulticastが設定されている場合に、E_INVALIDARGを返します。 Arm64 では、Target->ProcessorCountが 1 より大きい場合、またはWHvVpciInterruptTargetFlagMulticastが設定されている場合、この関数はE_INVALIDARGを返します。これは、ハイパーバイザーが各 MSI を Arm64 上の単一の仮想プロセッサを対象とするためです。
Remarks
WHvMapVpciDeviceInterrupt関数は、割り当てられたデバイスをバックアップする物理リソースによって発行された割り込みが、デバイスを所有するパーティションのターゲット仮想プロセッサにルーティングされるようにマッピングを確立します。 マッピングが作成されたら、返された MsiAddress をプログラムし、デバイスの MSI または MSI-X 機能に値を MsiData します。
デバイスが論理割り込みを有効にして作成された場合、呼び出し元は、返されたMsiAddressを渡してWHvRequestVpciDeviceInterruptにMsiDataすることで、割り込みを直接アサートすることもできます。
マルチメッセージ 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 |