仮想 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
割り当てる単一ルート I/O 仮想化 (SR-IOV) 仮想関数について説明します。 この構造体は、ProviderIdがNULLされたときにWHvAllocateVpciResourceするResourceDescriptorとして渡します。
PnpInstanceId
仮想関数をホストする物理関数のプラグ アンド プレイ (PnP) インスタンス識別子を指定します。 識別子は最大 WHV_MAX_DEVICE_ID_SIZE_IN_CHARS 文字であり、PnP マネージャーの制限に一致します。
VirtualFunctionId
割り当てる仮想関数のローカル一意識別子 (LUID) を指定します。
VirtualFunctionIndex
仮想関数の物理関数のインデックスを指定します。
Reserved
予約済み。 0 に設定します。
WHV_VPCI_DEVICE_NOTIFICATION_TYPE
WHvGetVpciDeviceNotificationによって VPCI デバイスに対して報告される非同期通知の種類を識別します。
WHvVpciDeviceNotificationUndefined
使用可能な通知がないことを示します。
WHvGetVpciDeviceNotificationがこの型を返すと、呼び出し元はすべての保留中の通知をドレインしています。
WHvVpciDeviceNotificationMmioRemapping
デバイスの MMIO 範囲が再マップされたことを示します。 呼び出し元は、デバイスの MMIO 範囲を WHvMapVpciDeviceMmioRangesに再マップする必要があります。
WHvVpciDeviceNotificationSurpriseRemoval
デバイスが予期せず削除されたことを示します (突然の削除)。
WHV_VPCI_DEVICE_NOTIFICATION
WHvGetVpciDeviceNotificationによって返された VPCI デバイス通知の種類とデータを受信します。
NotificationType
通知を識別する WHV_VPCI_DEVICE_NOTIFICATION_TYPE 値を受け取ります。
Reserved1
予約済み。
Reserved2
予約済み。
WHV_CREATE_VPCI_DEVICE_FLAGS
WHvCreateVpciDeviceによって作成されたデバイスのオプションの特性を指定します。
WHvCreateVpciDeviceFlagNone
省略可能な特性が適用されていないことを指定します。
WHvCreateVpciDeviceFlagPhysicallyBacked
指定された VPCI リソース ハンドルによって識別される物理リソースによってデバイスがバックアップされることを指定します。
WHvCreateVpciDeviceFlagUseLogicalInterrupts
デバイスがゲスト オペレーティング システムに論理割り込みを公開することを指定します。
WHV_VPCI_DEVICE_PROPERTY_CODE
WHvGetVpciDevicePropertyによって照会された VPCI デバイスプロパティを識別します。
WHvVpciDevicePropertyCodeUndefined
予約済み。 有効なプロパティ コードではありません。
WHvVpciDevicePropertyCodeHardwareIDs
デバイスのハードウェア識別子を選択します。 プロパティ値は WHV_VPCI_HARDWARE_IDS 構造体です。
WHvVpciDevicePropertyCodeProbedBARs
デバイスのプローブされたベース アドレス レジスタ (BAR) を選択します。 プロパティ値は WHV_VPCI_PROBED_BARS 構造体です。
WHV_VPCI_HARDWARE_IDS
VPCI デバイスの PCI ハードウェア識別子が含まれます。
WHvVpciDevicePropertyCodeHardwareIDs プロパティのWHvGetVpciDevicePropertyによって返されます。
VendorID
PCI ベンダー識別子を受け取ります。
DeviceID
PCI デバイス識別子を受け取ります。
RevisionID
PCI リビジョン識別子を受け取ります。
ProgIf
PCI クラス コードのプログラミング インターフェイス バイトを受け取ります。
SubClass
PCI クラス コードのサブクラス バイトを受け取ります。
BaseClass
PCI クラス コードの基底クラス バイトを受け取ります。
SubVendorID
PCI サブシステム ベンダー識別子を受け取ります。
SubSystemID
PCI サブシステム識別子を受け取ります。
WHV_VPCI_PROBED_BARS
VPCI デバイスのタイプ 0 ベース アドレス レジスタ (BAR) のプローブされた値が含まれます。
WHvVpciDevicePropertyCodeProbedBARs プロパティのWHvGetVpciDevicePropertyによって返されます。
Value
WHV_VPCI_TYPE0_BAR_COUNT (6) タイプ 0 の各 BAR のプローブされた値を受け取ります。
WHV_VPCI_MMIO_RANGE_FLAGS
WHV_VPCI_MMIO_MAPPINGによって記述された MMIO 範囲に付与されるアクセスを指定します。
WHvVpciMmioRangeFlagReadAccess
呼び出し元のプロセスが範囲への読み取りアクセス権を持っていることを示します。
WHvVpciMmioRangeFlagWriteAccess
呼び出し元のプロセスが範囲への書き込みアクセス権を持っていることを示します。
WHV_VPCI_DEVICE_REGISTER_SPACE
WHV_VPCI_MMIO_MAPPINGおよびWHV_VPCI_DEVICE_REGISTERによって使用される VPCI デバイスのレジスタ領域を識別します。
WHvVpciConfigSpace
デバイスの PCI 構成領域を識別します。
WHvVpciBar0 から WHvVpciBar5
デバイスのベース アドレス レジスタ (BAR) 0 から 5 を識別します。
WHV_VPCI_MMIO_MAPPING
WHvMapVpciDeviceMmioRangesによって呼び出し元のプロセスにマップされた 1 つの MMIO サブ範囲について説明します。
Location
サブ範囲が属する BAR を WHV_VPCI_DEVICE_REGISTER_SPACE 値として識別します。
Flags
このサブ範囲の呼び出し元のプロセスに付与されるアクセスを、 WHV_VPCI_MMIO_RANGE_FLAGS 値の組み合わせとして指定します。
SizeInBytes
サブ範囲の長さをバイト単位で指定します。
OffsetInBytes
Locationで識別される BAR のベース アドレスからのサブ範囲のオフセットをバイト単位で指定します。
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 デバイスは、単一ルート I/O 仮想化 (SR-IOV) 仮想関数、個別に割り当て可能な物理機能、または物理リソースによってサポートされていない仮想デバイスを表します。 一般的なライフサイクルは、 WHvAllocateVpciResourceでリソースを割り当て、 WHvCreateVpciDeviceを使用してデバイスを作成し、デバイスの MMIO 範囲を WHvMapVpciDeviceMmioRangesにマップし、その割り込みを WHvMapVpciDeviceInterruptにマップし、最後に WHvDeleteVpciDeviceでデバイスを破棄することです。
WHV_VPCI_INTERRUPT_TARGETとWHV_VPCI_INTERRUPT_TARGET_FLAGSの種類は、デバイス割り込み関数WHvMapVpciDeviceInterrupt、WHvRetargetVpciDeviceInterrupt、およびWHvGetVpciDeviceInterruptTargetによって共有されます。
Processorsは柔軟な配列メンバーであるため、呼び出し元は構造体の固定部分の後にプロセッサ インデックスProcessorCount保持するのに十分な大きさのバッファーを割り当てる必要があります。
こちらも参照ください
WHvAllocateVpciResourceWHvCreateVpciDeviceWHvDeleteVpciDeviceWHvGetVpciDevicePropertyWHvGetVpciDeviceNotificationWHvMapVpciDeviceMmioRangesWHvUnmapVpciDeviceMmioRangesWHvSetVpciDevicePowerStateWHvReadVpciDeviceRegisterWHvWriteVpciDeviceRegisterWHvMapVpciDeviceInterruptWHvRetargetVpciDeviceInterruptWHvGetVpciDeviceInterruptTarget- Windows Hypervisor Platform API Definitions