WHvMapVpciDeviceInterrupt

Сопоставляет MSI или MSI-X прерывание для назначенного виртуального PCI-устройства и возвращает адрес 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, назначенный при создании устройства.

Index

Указывает индекс создаваемой записи сопоставления прерываний. Каждый запрос сопоставления должен указывать уникальный неиспользуемый индекс.

MessageCount

Указывает количество сообщений, запрошенных для прерывания. Для прерывания MSI с несколькими сообщениями это мощность от 1 до 32 включительно. Для прерывания MSI-X задайте для этого значения значение 1.

Target

Указывает указатель на WHV_VPCI_INTERRUPT_TARGET структуру, которая предоставляет целевой вектор и набор процессора для прерывания. Если MessageCount значение больше 1, каждое сообщение инициализируется с одинаковым набором целевого процессора.

MsiAddress

Получает адрес MSI, назначенный прерыванию. Запрограммйте это значение в msi или MSI-X возможности устройства.

MsiData

Получает полезные данные MSI, назначенные прерыванию. Запрограммйте это значение в msi или MSI-X возможности устройства.

Возвращаемое значение

Если функция выполнена успешно, возвращается S_OKзначение.

Функция возвращает E_INVALIDARGIndex значение, если значение больше 65535, если MessageCount значение равно 0 или больше 32, если указывает неопределенный флаг, если Target->ProcessorCountTarget->Flags значение равно 0 или превышает число виртуальных процессоров в секции, если процессор не Target->Processors является допустимым индексом виртуального процессора или если WHvVpciInterruptTargetFlagMulticast задано вместе с одним целевым процессором. В Arm64 функция возвращается E_INVALIDARG , если Target->ProcessorCount задано значение больше 1 или когда WHvVpciInterruptTargetFlagMulticast задано, так как гипервизор предназначен для каждого MSI к одному виртуальному процессору в Arm64.

Remarks

Функция WHvMapVpciDeviceInterrupt устанавливает сопоставление, чтобы прерывания, выданные физическими ресурсами, которые поддерживают назначенное устройство, перенаправлялись на целевые виртуальные процессоры секции, принадлежащей устройству. После создания сопоставления программа возвращает MsiAddress и MsiData значения в msi или MSI-X возможности устройства.

Когда устройство было создано с включенными логическими прерываниями, вызывающий объект также может утверждать прерывание непосредственно путем передачи возвращаемого MsiAddress и MsiData в WHvRequestVpciDeviceInterruptнего.

При сопоставлении прерывания MSI с несколькими сообщениями (MessageCount больше 1), все сообщения инициализированы с одинаковым целевым набором процессоров. Используйте WHvRetargetVpciDeviceInterrupt после этого для перенацеливать отдельные сообщения в другой набор процессоров. Запросите текущий целевой объект сопоставленного прерывания и WHvGetVpciDeviceInterruptTargetудалите сопоставление с WHvUnmapVpciDeviceInterrupt.

Требования

Requirement Ценность
Минимальный поддерживаемый Windows Windows 10 версии 20H2 (x64); Windows 11 версии 24H2, сборка 26100.3915 (Arm64)
Header WinHvPlatform.h
Библиотека WinHvPlatform.lib
DLL WinHvPlatform.dll
Architecture x64, Arm64

См. также