Типы данных Virtual PCI

Типы данных virtual PCI (VPCI) определяют флаги, коды свойств и структуры значений, используемые для выделения ресурсов устройств, создания виртуальных устройств PCI, сопоставления диапазонов MMIO, регистрации устройств доступа и прерываний целевого устройства.

Синтаксис

//
// Virtual PCI type definitions.
//

typedef enum WHV_ALLOCATE_VPCI_RESOURCE_FLAGS
{
    WHvAllocateVpciResourceFlagNone = 0x00000000,
    WHvAllocateVpciResourceFlagAllowDirectP2P = 0x00000001
} WHV_ALLOCATE_VPCI_RESOURCE_FLAGS;

// Enables bitwise operators on the WHV_ALLOCATE_VPCI_RESOURCE_FLAGS enumeration.
DEFINE_ENUM_FLAG_OPERATORS(WHV_ALLOCATE_VPCI_RESOURCE_FLAGS);

#define WHV_MAX_DEVICE_ID_SIZE_IN_CHARS 200 // PnP manager limit

typedef struct WHV_SRIOV_RESOURCE_DESCRIPTOR
{
    WCHAR PnpInstanceId[WHV_MAX_DEVICE_ID_SIZE_IN_CHARS];
    LUID VirtualFunctionId;
    UINT16 VirtualFunctionIndex;
    UINT16 Reserved;
} WHV_SRIOV_RESOURCE_DESCRIPTOR;

typedef enum WHV_VPCI_DEVICE_NOTIFICATION_TYPE
{
    WHvVpciDeviceNotificationUndefined = 0,
    WHvVpciDeviceNotificationMmioRemapping = 1,
    WHvVpciDeviceNotificationSurpriseRemoval = 2
} WHV_VPCI_DEVICE_NOTIFICATION_TYPE;

typedef struct WHV_VPCI_DEVICE_NOTIFICATION
{
    WHV_VPCI_DEVICE_NOTIFICATION_TYPE NotificationType;
    UINT32 Reserved1;
    union
    {
        UINT64 Reserved2;
    };
} WHV_VPCI_DEVICE_NOTIFICATION;

typedef enum WHV_CREATE_VPCI_DEVICE_FLAGS
{
    WHvCreateVpciDeviceFlagNone = 0x00000000,
    WHvCreateVpciDeviceFlagPhysicallyBacked = 0x00000001,
    WHvCreateVpciDeviceFlagUseLogicalInterrupts = 0x00000002
} WHV_CREATE_VPCI_DEVICE_FLAGS;

// Enables bitwise operators on the WHV_CREATE_VPCI_DEVICE_FLAGS enumeration.
DEFINE_ENUM_FLAG_OPERATORS(WHV_CREATE_VPCI_DEVICE_FLAGS);

typedef enum WHV_VPCI_DEVICE_PROPERTY_CODE
{
    WHvVpciDevicePropertyCodeUndefined   = 0,
    WHvVpciDevicePropertyCodeHardwareIDs = 1,
    WHvVpciDevicePropertyCodeProbedBARs  = 2
} WHV_VPCI_DEVICE_PROPERTY_CODE;

typedef struct WHV_VPCI_HARDWARE_IDS
{
    UINT16 VendorID;
    UINT16 DeviceID;
    UINT8 RevisionID;
    UINT8 ProgIf;
    UINT8 SubClass;
    UINT8 BaseClass;
    UINT16 SubVendorID;
    UINT16 SubSystemID;
} WHV_VPCI_HARDWARE_IDS;

#define WHV_VPCI_TYPE0_BAR_COUNT 6

typedef struct WHV_VPCI_PROBED_BARS
{
    UINT32 Value[WHV_VPCI_TYPE0_BAR_COUNT];
} WHV_VPCI_PROBED_BARS;

typedef enum WHV_VPCI_MMIO_RANGE_FLAGS
{
    WHvVpciMmioRangeFlagReadAccess = 0x00000001,
    WHvVpciMmioRangeFlagWriteAccess = 0x00000002
} WHV_VPCI_MMIO_RANGE_FLAGS;

// Enables bitwise operators on the WHV_VPCI_MMIO_RANGE_FLAGS enumeration.
DEFINE_ENUM_FLAG_OPERATORS(WHV_VPCI_MMIO_RANGE_FLAGS);

typedef enum WHV_VPCI_DEVICE_REGISTER_SPACE
{
    WHvVpciConfigSpace = -1,
    WHvVpciBar0 = 0,
    WHvVpciBar1 = 1,
    WHvVpciBar2 = 2,
    WHvVpciBar3 = 3,
    WHvVpciBar4 = 4,
    WHvVpciBar5 = 5
} WHV_VPCI_DEVICE_REGISTER_SPACE;

typedef struct WHV_VPCI_MMIO_MAPPING
{
    WHV_VPCI_DEVICE_REGISTER_SPACE Location;
    WHV_VPCI_MMIO_RANGE_FLAGS Flags;
    UINT64 SizeInBytes;
    UINT64 OffsetInBytes;
    PVOID VirtualAddress;
} WHV_VPCI_MMIO_MAPPING;

typedef struct WHV_VPCI_DEVICE_REGISTER
{
    WHV_VPCI_DEVICE_REGISTER_SPACE Location;
    UINT32 SizeInBytes;
    UINT64 OffsetInBytes;
} WHV_VPCI_DEVICE_REGISTER;

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;

Members

WHV_ALLOCATE_VPCI_RESOURCE_FLAGS

Указывает параметры ресурса, выделенного WHvAllocateVpciResource.

WHvAllocateVpciResourceFlagNone

Указывает, что специальные параметры не применяются к выделенному ресурсу.

WHvAllocateVpciResourceFlagAllowDirectP2P

Указывает, что выделенный ресурс разрешено участвовать в прямых транскционных транзакциях с одноранговым доступом (P2P).

WHV_SRIOV_RESOURCE_DESCRIPTOR

Описывает виртуальную функцию виртуализации одно корневых операций ввода-вывода (SR-IOV) для выделения. Передайте эту структуру в качестве ResourceDescriptor времениNULLProviderId.WHvAllocateVpciResource

PnpInstanceId

Указывает идентификатор экземпляра Plug and Play (PnP) физической функции, в которую размещается виртуальная функция. Идентификатор находится в большинстве WHV_MAX_DEVICE_ID_SIZE_IN_CHARS символов, совпадая с ограничением диспетчера PnP.

VirtualFunctionId

Задает локальный уникальный идентификатор (LUID) виртуальной функции для выделения.

VirtualFunctionIndex

Задает индекс виртуальной функции в физической функции.

Reserved

Зарезервировано. Установите значение нулю.

WHV_VPCI_DEVICE_NOTIFICATION_TYPE

Определяет тип асинхронного уведомления, сообщаемого для устройства WHvGetVpciDeviceNotificationVPCI.

WHvVpciDeviceNotificationUndefined

Указывает, что уведомление недоступно. При WHvGetVpciDeviceNotification возврате этого типа вызывающий объект слил все ожидающие уведомления.

WHvVpciDeviceNotificationMmioRemapping

Указывает, что диапазоны MMIO устройства переназначены. Вызывающий объект должен переназначить диапазоны MMIO устройства.WHvMapVpciDeviceMmioRanges

WHvVpciDeviceNotificationSurpriseRemoval

Указывает, что устройство было неожиданно удалено (неожиданное удаление).

WHV_VPCI_DEVICE_NOTIFICATION

Получает тип и данные уведомления об устройстве VPCI, возвращенные WHvGetVpciDeviceNotification.

NotificationType

Получает значение, определяющее WHV_VPCI_DEVICE_NOTIFICATION_TYPE уведомление.

Reserved1

Зарезервировано.

Reserved2

Зарезервировано.

WHV_CREATE_VPCI_DEVICE_FLAGS

Указывает необязательные характеристики устройства, созданного с помощью WHvCreateVpciDevice.

WHvCreateVpciDeviceFlagNone

Указывает, что необязательные характеристики не применяются.

WHvCreateVpciDeviceFlagPhysicallyBacked

Указывает, что устройство поддерживается физическими ресурсами, определяемыми предоставленным дескриптором ресурсов VPCI.

WHvCreateVpciDeviceFlagUseLogicalInterrupts

Указывает, что устройство предоставляет логические прерывания гостевой операционной системе.

WHV_VPCI_DEVICE_PROPERTY_CODE

Определяет свойство устройства VPCI, запрашиваемое по запросу WHvGetVpciDeviceProperty.

WHvVpciDevicePropertyCodeUndefined

Зарезервировано. Недопустимый код свойства.

WHvVpciDevicePropertyCodeHardwareIDs

Выбирает идентификаторы оборудования устройства. Значение свойства — это WHV_VPCI_HARDWARE_IDS структура.

WHvVpciDevicePropertyCodeProbedBARs

Выбирает зарегистрированные базовые адреса (BAR) для устройства. Значение свойства — это WHV_VPCI_PROBED_BARS структура.

WHV_VPCI_HARDWARE_IDS

Содержит идентификаторы оборудования PCI устройства VPCI. Возвращается WHvGetVpciDeviceProperty для WHvVpciDevicePropertyCodeHardwareIDs свойства.

VendorID

Получает идентификатор поставщика PCI.

DeviceID

Получает идентификатор устройства PCI.

RevisionID

Получает идентификатор редакции PCI.

ProgIf

Получает байт интерфейса программирования кода класса PCI.

SubClass

Получает подкласс байт кода класса PCI.

BaseClass

Получает байт базового класса кода класса PCI.

SubVendorID

Получает идентификатор поставщика подсистемы PCI.

SubSystemID

Получает идентификатор подсистемы PCI.

WHV_VPCI_PROBED_BARS

Содержит пробные значения регистров базовых адресов (BAR) устройства VPCI типа 0. Возвращается WHvGetVpciDeviceProperty для WHvVpciDevicePropertyCodeProbedBARs свойства.

Value

Получает пробное значение каждого WHV_VPCI_TYPE0_BAR_COUNT типа (6) типа 0 BAR.

WHV_VPCI_MMIO_RANGE_FLAGS

Указывает доступ, предоставленный диапазону MMIO, описанному WHV_VPCI_MMIO_MAPPING.

WHvVpciMmioRangeFlagReadAccess

Указывает, что процесс вызывающего объекта имеет доступ на чтение к диапазону.

WHvVpciMmioRangeFlagWriteAccess

Указывает, что в процессе вызывающего объекта есть доступ на запись в диапазон.

WHV_VPCI_DEVICE_REGISTER_SPACE

Определяет регистр устройства VPCI, используемого WHV_VPCI_MMIO_MAPPING и WHV_VPCI_DEVICE_REGISTER.

WHvVpciConfigSpace

Определяет пространство конфигурации PCI устройства.

WHvVpciBar0 через WHvVpciBar5

Определите базовые регистры адресов устройства (BAR) от 0 до 5.

WHV_VPCI_MMIO_MAPPING

Описывает один под-диапазон MMIO, сопоставленный с процессом WHvMapVpciDeviceMmioRangesвызывающего объекта.

Location

Идентифицирует панель, к которой принадлежит под диапазон, в качестве WHV_VPCI_DEVICE_REGISTER_SPACE значения.

Flags

Указывает доступ, предоставленный процессу вызывающего объекта для этого подзаготовки, в виде сочетания значений WHV_VPCI_MMIO_RANGE_FLAGS .

SizeInBytes

Задает длину в байтах под-диапазона.

OffsetInBytes

Указывает смещение (в байтах) под диапазоном от базового адреса панели, определяемой Location.

VirtualAddress

Указывает виртуальный адрес в процессе вызывающего объекта, с которым сопоставляется под диапазон.

WHV_VPCI_DEVICE_REGISTER

Идентифицирует регистр для чтения или WHvReadVpciDeviceRegister записи с WHvWriteVpciDeviceRegisterпомощью .

Location

Задает регистровое пространство в качестве WHV_VPCI_DEVICE_REGISTER_SPACE значения (пространства конфигурации или определенной панели bar).

SizeInBytes

Задает размер в байтах для доступа к регистру.

OffsetInBytes

Указывает смещение в байтах регистра в пространстве, определяемом пользователем Location.

WHV_VPCI_INTERRUPT_TARGET_FLAGS

Указывает параметры целевого объекта прерывания, описанного в WHV_VPCI_INTERRUPT_TARGETразделе .

WHvVpciInterruptTargetFlagNone

Указывает, что специальные параметры не применяются к целевому объекту прерывания.

WHvVpciInterruptTargetFlagMulticast

Указывает, что прерывание доставляется набору целевых процессоров в виде многоадресной рассылки.

WHV_VPCI_INTERRUPT_TARGET

Указывает целевой объект прерывания устройства VPCI: вектор и набор виртуальных процессоров. Эта структура имеет переменную длину, так как Processors является гибким элементом массива.

Vector

Указывает вектор прерывания для доставки целевым процессорам.

Flags

Задает параметры целевого объекта в виде сочетания значений WHV_VPCI_INTERRUPT_TARGET_FLAGS .

ProcessorCount

Указывает количество допустимых записей в массиве Processors .

Processors

Указывает индексы виртуальных процессоров, предназначенных для целевых объектов прерывания.

Remarks

Устройство VPCI, назначенное секции, представляет виртуальную функцию виртуализации одно корневых операций ввода-вывода (SR-IOV), дискретную физическую функцию или виртуальное устройство, которое не поддерживается физическими ресурсами. Типичный жизненный цикл заключается в выделении ресурса, WHvAllocateVpciResourceсоздании устройства с WHvCreateVpciDeviceпомощью сопоставления диапазонов WHvMapVpciDeviceMmioRangesMMIO устройства, сопоставлении WHvMapVpciDeviceInterruptего прерываний и, наконец, уничтожении устройства.WHvDeleteVpciDevice

Функции WHV_VPCI_INTERRUPT_TARGET прерывания устройства и типы используются функциями прерывания WHvMapVpciDeviceInterruptустройства и WHvRetargetVpciDeviceInterruptWHvGetVpciDeviceInterruptTarget.WHV_VPCI_INTERRUPT_TARGET_FLAGS Так как Processors это гибкий элемент массива, вызывающие серверы должны выделить буфер достаточно большой для хранения ProcessorCount индексов процессора после фиксированной части структуры.

См. также