WHvMapVpciDeviceInterrupt

Esegue il mapping di un'interruzione msi o MSI-X per un dispositivo PCI virtuale assegnato e restituisce l'indirizzo MSI e i dati da programmare nel dispositivo.

Sintassi

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

Gestire la partizione proprietaria del dispositivo PCI virtuale.

LogicalDeviceId

Specifica l'ID dispositivo logico del dispositivo PCI virtuale, come assegnato al momento della creazione del dispositivo.

Index

Specifica l'indice della voce di mapping interrupt da creare. Ogni richiesta di mapping deve specificare un indice univoco inutilizzato.

MessageCount

Specifica il numero di messaggi richiesti per l'interrupt. Per un interrupt MSI a più messaggi, questa è una potenza di due tra 1 e 32 inclusi. Per un MSI-X interrupt, impostare questo valore su 1.

Target

Specifica un puntatore a una WHV_VPCI_INTERRUPT_TARGET struttura che fornisce il vettore di destinazione e il processore impostati per l'interrupt. Quando MessageCount è maggiore di 1, ogni messaggio viene inizializzato con lo stesso set di processori di destinazione.

MsiAddress

Riceve l'indirizzo MSI assegnato all'interrupt. Programmare questo valore nella funzionalità MSI o MSI-X del dispositivo.

MsiData

Riceve il payload dei dati MSI assegnato all'interrupt. Programmare questo valore nella funzionalità MSI o MSI-X del dispositivo.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è S_OK.

La funzione restituisce E_INVALIDARG quando è maggiore di 65535, quando MessageCount è 0 o maggiore di 32, quando Target->Flags specifica un flag non definito, quando IndexTarget->ProcessorCount è 0 o supera il numero di processori virtuali nella partizione, quando un processore in Target->Processors non è un indice del processore virtuale valido o quando WHvVpciInterruptTargetFlagMulticast viene impostato insieme a un singolo processore di destinazione. In Arm64 la funzione restituisce E_INVALIDARG quando Target->ProcessorCount è maggiore di 1 o quando WHvVpciInterruptTargetFlagMulticast viene impostato, perché l'hypervisor è destinato a ogni identità del servizio gestito a un singolo processore virtuale in Arm64.

Remarks

La WHvMapVpciDeviceInterrupt funzione stabilisce un mapping in modo che gli interrupt emessi dalle risorse fisiche che supportino il dispositivo assegnato vengano indirizzati ai processori virtuali di destinazione della partizione proprietaria del dispositivo. Dopo aver creato il mapping, programmare i valori restituiti MsiAddress e MsiData nella funzionalità MSI o MSI-X del dispositivo.

Quando il dispositivo è stato creato con interrupt logici abilitati, il chiamante può anche asserire l'interrupt direttamente passando l'oggetto restituito MsiAddress e MsiData a WHvRequestVpciDeviceInterrupt.

Quando si esegue il mapping di un interrupt MSI a più messaggi (MessageCount maggiore di 1), tutti i messaggi vengono inizializzati con lo stesso set di processori di destinazione. Usare WHvRetargetVpciDeviceInterrupt in seguito per ridestinare i singoli messaggi in un set di processori diverso. Eseguire una query sulla destinazione corrente di un interrupt mappato con WHvGetVpciDeviceInterruptTargete rimuovere il mapping con WHvUnmapVpciDeviceInterrupt.

Requisiti

Requisito Valore
Minimo Windows supportato Windows 10 versione 20H2 (x64); Windows 11, versione 24H2, build 26100.3915 (Arm64)
Header WinHvPlatform.h
Libreria WinHvPlatform.lib
DLL WinHvPlatform.dll
Architecture x64, Arm64

Vedere anche