WHvMapVpciDeviceInterrupt

Memetakan MSI atau MSI-X mengganggu perangkat PCI virtual yang ditetapkan dan mengembalikan alamat dan data MSI untuk diprogram ke perangkat.

Syntax

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

Tangani ke partisi yang memiliki perangkat PCI virtual.

LogicalDeviceId

Menentukan ID perangkat logis perangkat PCI virtual, seperti yang ditetapkan saat perangkat dibuat.

Index

Menentukan indeks entri pemetaan interupsi yang akan dibuat. Setiap permintaan pemetaan harus menentukan indeks unik yang tidak digunakan.

MessageCount

Menentukan jumlah pesan yang diminta untuk interupsi. Untuk interupsi MSI multi-pesan, ini adalah kekuatan dua antara 1 dan 32, inklusif. Untuk interupsi MSI-X, atur nilai ini ke 1.

Target

Menentukan penunjuk ke WHV_VPCI_INTERRUPT_TARGET struktur yang memasok vektor target dan prosesor yang ditetapkan untuk interupsi. Ketika MessageCount lebih besar dari 1, setiap pesan diinisialisasi dengan set prosesor target yang sama.

MsiAddress

Menerima alamat MSI yang ditetapkan untuk interupsi. Programkan nilai ini ke dalam kemampuan MSI atau MSI-X perangkat.

MsiData

Menerima payload data MSI yang ditetapkan ke interupsi. Programkan nilai ini ke dalam kemampuan MSI atau MSI-X perangkat.

Mengembalikan Nilai

Jika fungsi berhasil, nilai yang dikembalikan adalah S_OK.

Fungsi mengembalikan E_INVALIDARG ketika Index lebih besar dari 65535, ketika MessageCount adalah 0 atau lebih besar dari 32, ketika Target->Flags menentukan bendera yang tidak ditentukan, ketika Target->ProcessorCount adalah 0 atau melebihi jumlah prosesor virtual dalam partisi, ketika prosesor dalam Target->Processors bukan indeks prosesor virtual yang valid, atau ketika WHvVpciInterruptTargetFlagMulticast diatur bersama dengan prosesor target tunggal. Pada Arm64, fungsi kembali E_INVALIDARG ketika Target->ProcessorCount lebih besar dari 1 atau ketika WHvVpciInterruptTargetFlagMulticast diatur, karena hypervisor menargetkan setiap MSI ke satu prosesor virtual di Arm64.

Remarks

Fungsi ini WHvMapVpciDeviceInterrupt menetapkan pemetaan sehingga gangguan yang dikeluarkan oleh sumber daya fisik yang mendukung perangkat yang ditetapkan dirutekan ke prosesor virtual target partisi yang memiliki perangkat. Setelah pemetaan dibuat, programkan nilai dan MsiData yang dikembalikan MsiAddress ke dalam kemampuan MSI atau MSI-X perangkat.

Ketika perangkat dibuat dengan interupsi logis diaktifkan, pemanggil juga dapat menegaskan interupsi secara langsung dengan meneruskan yang dikembalikan MsiAddress dan MsiData ke WHvRequestVpciDeviceInterrupt.

Saat memetakan gangguan MSI multi-pesan (MessageCount lebih besar dari 1), semua pesan diinisialisasi dengan set prosesor target yang sama. Gunakan WHvRetargetVpciDeviceInterrupt setelah itu untuk menargetkan ulang pesan individual ke set prosesor yang berbeda. Kueri target saat ini dari interupsi yang dipetakan dengan WHvGetVpciDeviceInterruptTarget, dan hapus pemetaan dengan WHvUnmapVpciDeviceInterrupt.

Requirements

Persyaratan Nilai
Windows minimum yang didukung Windows 10, versi 20H2 (x64); Windows 11, versi 24H2, build 26100.3915 (Arm64)
Header WinHvPlatform.h
Perpustakaan WinHvPlatform.lib
DLL WinHvPlatform.dll
Architecture x64, Arm64

Baca juga