Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Типы данных 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 индексов процессора после фиксированной части структуры.
См. также
WHvAllocateVpciResourceWHvCreateVpciDeviceWHvDeleteVpciDeviceWHvGetVpciDevicePropertyWHvGetVpciDeviceNotificationWHvMapVpciDeviceMmioRangesWHvUnmapVpciDeviceMmioRangesWHvSetVpciDevicePowerStateWHvReadVpciDeviceRegisterWHvWriteVpciDeviceRegisterWHvMapVpciDeviceInterruptWHvRetargetVpciDeviceInterruptWHvGetVpciDeviceInterruptTarget- Windows Определения API платформы гипервизора