할당된 가상 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 대상 벡터 및 프로세서 집합을 제공하는 구조체에 대한 포인터를 지정합니다. 1보다 크면 MessageCount 모든 메시지가 동일한 대상 프로세서 집합으로 초기화됩니다.
MsiAddress
인터럽트에서 할당된 MSI 주소를 받습니다. 이 값을 디바이스의 MSI 또는 MSI-X 기능에 프로그래밍합니다.
MsiData
인터럽트에서 할당된 MSI 데이터 페이로드를 받습니다. 이 값을 디바이스의 MSI 또는 MSI-X 기능에 프로그래밍합니다.
반환 값
함수가 성공하면 반환 값은 .입니다 S_OK.
이 함수는 65535보다 크거나MessageCount, 0 또는 32보다 큰 경우, 정의되지 않은 플래그를 지정하는 경우 Target->FlagsTarget->ProcessorCount, 파티션의 가상 프로세서 수가 0이거나, 프로세서 Target->Processors 가 유효한 가상 프로세서 인덱스가 아니거나, 단일 대상 프로세서와 함께 설정된 경우 WHvVpciInterruptTargetFlagMulticast 를 반환 E_INVALIDARGIndex 합니다. Arm64에서 하이퍼바이저는 각 MSI를 Arm64의 단일 가상 프로세서로 대상으로 하기 때문에 1보다 크거나 설정된 경우 WHvVpciInterruptTargetFlagMulticast 함수가 반환 E_INVALIDARGTarget->ProcessorCount 됩니다.
Remarks
이 함수는 WHvMapVpciDeviceInterrupt 할당된 디바이스를 지원하는 물리적 리소스에서 발생하는 인터럽트를 디바이스를 소유하는 파티션의 대상 가상 프로세서로 라우팅되도록 매핑을 설정합니다. 매핑을 만든 후 반환 MsiAddress 된 값과 MsiData 값을 디바이스의 MSI 또는 MSI-X 기능에 프로그래밍합니다.
논리적 인터럽트 사용으로 디바이스를 만들 때 호출자는 반환 MsiAddress 된 인터럽트 및 MsiData 에 전달하여 인터럽트 직접 어설션할 WHvRequestVpciDeviceInterrupt수도 있습니다.
다중 메시지 MSI 인터럽트(MessageCount 1보다 큼)를 매핑하면 모든 메시지가 동일한 대상 프로세서 집합으로 초기화됩니다. 나중에 개별 메시지를 다른 프로세서 집합으로 대상을 다시 지정하는 데 사용합니다 WHvRetargetVpciDeviceInterrupt . 매핑된 인터럽트 WHvGetVpciDeviceInterruptTarget에서 현재 대상을 쿼리하고 WHvUnmapVpciDeviceInterrupt.
Requirements
| 요구 사항 | Value |
|---|---|
| 지원되는 최소 Windows | Windows 10, 버전 20H2(x64); Windows 11 버전 24H2, 빌드 26100.3915(Arm64) |
| Header | WinHvPlatform.h |
| 라이브러리 | WinHvPlatform.lib |
| 동적 링크 라이브러리 (DLL) | WinHvPlatform.dll |
| 아키텍처 | x64, Arm64 |