Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ordnet eine MSI- oder MSI-X Interrupt für ein zugewiesenes virtuelles PCI-Gerät zu und gibt die MSI-Adresse und Daten zurück, die auf dem Gerät zu programmieren sind.
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
);
Parameter
Partition
Behandeln Sie die Partition, die das virtuelle PCI-Gerät besitzt.
LogicalDeviceId
Gibt die logische Geräte-ID des virtuellen PCI-Geräts an, die beim Erstellen des Geräts zugewiesen wurde.
Index
Gibt den Index des zu erstellenden Interruptzuordnungseintrags an. Jede Zuordnungsanforderung muss einen eindeutigen, nicht verwendeten Index angeben.
MessageCount
Gibt die Anzahl der für den Interrupt angeforderten Nachrichten an. Bei einem MSI-Interrupt mit mehreren Nachrichten ist dies eine Leistung von zwei zwischen 1 und 32 einschließlich. Legen Sie für einen MSI-X Interrupt diesen Wert auf 1 fest.
Target
Gibt einen Zeiger auf eine WHV_VPCI_INTERRUPT_TARGET Struktur an, die den für den Interrupt festgelegten Zielvektor und prozessor bereitstellt. Wenn MessageCount größer als 1 ist, wird jede Nachricht mit demselben Zielprozessorsatz initialisiert.
MsiAddress
Empfängt die MSI-Adresse, die dem Interrupt zugewiesen ist. Programmieren Sie diesen Wert in die MSI- oder MSI-X-Funktion des Geräts.
MsiData
Empfängt die MSI-Datennutzlast, die dem Interrupt zugewiesen ist. Programmieren Sie diesen Wert in die MSI- oder MSI-X-Funktion des Geräts.
Rückgabewert
Wenn die Funktion erfolgreich ist, lautet S_OKder Rückgabewert .
Die Funktion gibt zurück E_INVALIDARG , wenn Index größer als 65535 ist, wenn MessageCount 0 oder größer als 32 ist, wenn Target->Flags ein nicht definiertes Flag angegeben wird, wenn Target->ProcessorCount 0 ist oder die Anzahl der virtuellen Prozessoren in der Partition überschreitet, wenn ein Prozessor Target->Processors kein gültiger virtueller Prozessorindex ist oder zusammen WHvVpciInterruptTargetFlagMulticast mit einem einzelnen Zielprozessor festgelegt wird. Bei Arm64 gibt die Funktion zurück E_INVALIDARG , wenn Target->ProcessorCount größer als 1 oder festgelegt WHvVpciInterruptTargetFlagMulticast ist, da der Hypervisor auf jede MSI-Datei auf einen einzelnen virtuellen Prozessor auf Arm64 ausgerichtet ist.
Remarks
Die WHvMapVpciDeviceInterrupt Funktion stellt eine Zuordnung her, sodass Unterbrechungen, die von den physischen Ressourcen ausgegeben werden, die das zugewiesene Gerät unterstützen, an die virtuellen Zielprozessoren der Partition weitergeleitet werden, die das Gerät besitzt. Nachdem die Zuordnung erstellt wurde, programmieren Sie die zurückgegebenen MsiAddress Und MsiData Werte in die MSI- oder MSI-X-Funktion des Geräts.
Wenn das Gerät mit aktivierten logischen Unterbrechungen erstellt wurde, kann der Aufrufer den Interrupt auch direkt durch Übergeben der zurückgegebenen MsiAddress und MsiData an .WHvRequestVpciDeviceInterrupt
Beim Zuordnen eines MSI-Interrupts mit mehreren Nachrichten (MessageCount größer als 1) werden alle Nachrichten mit demselben Zielprozessorsatz initialisiert. Verwenden Sie WHvRetargetVpciDeviceInterrupt anschließend, um einzelne Nachrichten auf einen anderen Prozessorsatz umzutarnen. Abfragen des aktuellen Ziels eines zugeordneten Interrupts mit WHvGetVpciDeviceInterruptTarget, und entfernen Sie die Zuordnung mit WHvUnmapVpciDeviceInterrupt.
Anforderungen
| Anforderung | Wert |
|---|---|
| Mindestens unterstützte Windows | Windows 10, Version 20H2 (x64); Windows 11, Version 24H2, Build 26100.3915 (Arm64) |
| Header | WinHvPlatform.h |
| Bibliothek | WinHvPlatform.lib |
| DLL | WinHvPlatform.dll |
| Architecture | x64, Arm64 |