WHvMapVpciDeviceInterrupt

할당된 가상 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

참고하십시오