Sanal PCI Veri Türleri

Sanal PCI (VPCI) veri türleri, cihaz kaynaklarını ayırmak, sanal PCI cihazları oluşturmak, MMIO aralıklarını eşlemek, cihaz kayıtlarına erişmek ve cihaz kesintilerini hedeflemek için kullanılan bayrakları, özellik kodlarını ve değer yapılarını tanımlar.

Sözdizimi

//
// 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

tarafından WHvAllocateVpciResourceayrılan kaynak için seçenekleri belirtir.

WHvAllocateVpciResourceFlagNone

Ayrılan kaynağa özel bir seçenek uygulanmadığını belirtir.

WHvAllocateVpciResourceFlagAllowDirectP2P

Ayrılan kaynağın doğrudan, çevrilmiş eşler arası (P2P) işlemlere katılmasına izin verildiğini belirtir.

WHV_SRIOV_RESOURCE_DESCRIPTOR

Ayrılacak tek kök G/Ç sanallaştırma (SR-IOV) sanal işlevini açıklar. bu yapıyı ResourceDescriptor olduğunda ProviderIdNULLolarak WHvAllocateVpciResource geçirin.

PnpInstanceId

Sanal işlevi barındıran fiziksel işlevin Tak ve Kullan (PnP) örnek tanımlayıcısını belirtir. Tanımlayıcı, PnP yöneticisi sınırıyla eşleşen en çok WHV_MAX_DEVICE_ID_SIZE_IN_CHARS karakterdir.

VirtualFunctionId

Ayrılacak sanal işlevin yerel olarak benzersiz tanımlayıcısını (LUID) belirtir.

VirtualFunctionIndex

Sanal işlevin fiziksel işlevindeki dizinini belirtir.

Reserved

Rezerve edilmiş. Sıfır olarak ayarlayın.

WHV_VPCI_DEVICE_NOTIFICATION_TYPE

tarafından bir VPCI cihazı WHvGetVpciDeviceNotificationiçin bildirilen zaman uyumsuz bildirimin türünü tanımlar.

WHvVpciDeviceNotificationUndefined

Kullanılabilir bildirim olmadığını gösterir. Bu tür döndürdüğünde WHvGetVpciDeviceNotification , arayan tüm bekleyen bildirimleri boşaltmış olur.

WHvVpciDeviceNotificationMmioRemapping

Cihazın MMIO aralıklarının yeniden eşlendiğini gösterir. Çağıran, cihazın MMIO aralıklarını ile WHvMapVpciDeviceMmioRangesyeniden eşlemelidir.

WHvVpciDeviceNotificationSurpriseRemoval

Cihazın beklenmedik bir şekilde kaldırıldığını gösterir (sürpriz kaldırma).

WHV_VPCI_DEVICE_NOTIFICATION

tarafından WHvGetVpciDeviceNotificationdöndürülen bir VPCI cihaz bildiriminin türünü ve verilerini alır.

NotificationType

Bildirimi tanımlayan bir WHV_VPCI_DEVICE_NOTIFICATION_TYPE değer alır.

Reserved1

Rezerve edilmiş.

Reserved2

Rezerve edilmiş.

WHV_CREATE_VPCI_DEVICE_FLAGS

tarafından WHvCreateVpciDeviceoluşturulan bir cihazın isteğe bağlı özelliklerini belirtir.

WHvCreateVpciDeviceFlagNone

İsteğe bağlı özelliklerin uygulanacağını belirtir.

WHvCreateVpciDeviceFlagPhysicallyBacked

Cihazın, sağlanan VPCI kaynak tanıtıcısı tarafından tanımlanan fiziksel kaynaklar tarafından yedeklendiğini belirtir.

WHvCreateVpciDeviceFlagUseLogicalInterrupts

Cihazın konuk işletim sisteminde mantıksal kesmeleri kullanıma çıkardığını belirtir.

WHV_VPCI_DEVICE_PROPERTY_CODE

tarafından WHvGetVpciDevicePropertysorgulanan bir VPCI cihaz özelliğini tanımlar.

WHvVpciDevicePropertyCodeUndefined

Rezerve edilmiş. Geçerli bir özellik kodu değil.

WHvVpciDevicePropertyCodeHardwareIDs

Cihazın donanım tanımlayıcılarını seçer. Özellik değeri bir WHV_VPCI_HARDWARE_IDS yapıdır.

WHvVpciDevicePropertyCodeProbedBARs

Cihazın olası temel adres yazmaçlarını (BAR) seçer. Özellik değeri bir WHV_VPCI_PROBED_BARS yapıdır.

WHV_VPCI_HARDWARE_IDS

VPCI cihazının PCI donanım tanımlayıcılarını içerir. özelliği için WHvVpciDevicePropertyCodeHardwareIDs tarafından WHvGetVpciDeviceProperty döndürülür.

VendorID

PCI satıcı tanımlayıcısını alır.

DeviceID

PCI cihaz tanımlayıcısını alır.

RevisionID

PCI düzeltme tanımlayıcısını alır.

ProgIf

PCI sınıf kodunun programlama arabirimi baytını alır.

SubClass

PCI sınıf kodunun alt sınıf baytını alır.

BaseClass

PCI sınıf kodunun temel sınıf baytını alır.

SubVendorID

PCI alt sistemi satıcı tanımlayıcısını alır.

SubSystemID

PCI alt sistem tanımlayıcısını alır.

WHV_VPCI_PROBED_BARS

VPCI cihazının tür 0 temel adres yazmaçlarının (BAR) olası değerlerini içerir. özelliği için WHvVpciDevicePropertyCodeProbedBARs tarafından WHvGetVpciDeviceProperty döndürülür.

Value

(6) türü 0 BAR'ların her birinin WHV_VPCI_TYPE0_BAR_COUNT olası değerini alır.

WHV_VPCI_MMIO_RANGE_FLAGS

tarafından WHV_VPCI_MMIO_MAPPINGaçıklanan bir MMIO aralığına verilen erişimi belirtir.

WHvVpciMmioRangeFlagReadAccess

Çağıranın işleminin aralığa okuma erişimi olduğunu gösterir.

WHvVpciMmioRangeFlagWriteAccess

Çağıranın işleminin aralığa yazma erişimi olduğunu gösterir.

WHV_VPCI_DEVICE_REGISTER_SPACE

ve WHV_VPCI_DEVICE_REGISTERtarafından WHV_VPCI_MMIO_MAPPING kullanılan bir VPCI cihazının kayıt alanını tanımlar.

WHvVpciConfigSpace

Cihazın PCI yapılandırma alanını tanımlar.

WHvVpciBar0 ile WHvVpciBar5 arasında

Cihazın temel adres kayıtlarını (BAR) 0 ile 5 arasında tanımlayın.

WHV_VPCI_MMIO_MAPPING

tarafından çağıranın işlemiyle WHvMapVpciDeviceMmioRangeseşlenen tek bir MMIO alt aralığını açıklar.

Location

Alt aralığın ait olduğu ÇUBUĞU bir WHV_VPCI_DEVICE_REGISTER_SPACE değer olarak tanımlar.

Flags

Bu alt aralık için çağıranın işlemine verilen erişimi değerlerin WHV_VPCI_MMIO_RANGE_FLAGS bir bileşimi olarak belirtir.

SizeInBytes

Alt aralığın uzunluğunu bayt cinsinden belirtir.

OffsetInBytes

tarafından Locationtanımlanan BAR'ın temel adresinden alt aralığın uzaklığını bayt cinsinden belirtir.

VirtualAddress

Çağıranın işlemindeki alt aralığın eşlendiği sanal adresi belirtir.

WHV_VPCI_DEVICE_REGISTER

ile WHvReadVpciDeviceRegisterWHvWriteVpciDeviceRegisterokunacak veya ile yazacak bir kayıt tanımlar.

Location

Yazmaç alanını bir WHV_VPCI_DEVICE_REGISTER_SPACE değer (yapılandırma alanı veya belirli bir BAR) olarak belirtir.

SizeInBytes

Yazmaç erişiminin boyutunu bayt cinsinden belirtir.

OffsetInBytes

tarafından Locationtanımlanan alan içindeki yazmaç uzaklığını bayt cinsinden belirtir.

WHV_VPCI_INTERRUPT_TARGET_FLAGS

tarafından WHV_VPCI_INTERRUPT_TARGETaçıklanan kesme hedefi seçeneklerini belirtir.

WHvVpciInterruptTargetFlagNone

Kesme hedefi için hiçbir özel seçeneğin geçerli olmadığını belirtir.

WHvVpciInterruptTargetFlagMulticast

Kesmenin hedef işlemci kümesine çok noktaya yayın olarak teslim edilir.

WHV_VPCI_INTERRUPT_TARGET

VPCI cihaz kesintisinin hedefini belirtir: vektör ve sanal işlemci kümesi. Bu yapı, esnek bir dizi üyesi olduğundan Processors değişken uzunluktadır.

Vector

Hedef işlemcilere teslim etmek için kesme vektörlerini belirtir.

Flags

Değerlerin bir bileşimi WHV_VPCI_INTERRUPT_TARGET_FLAGS olarak hedef için seçenekleri belirtir.

ProcessorCount

Dizideki Processors geçerli girdilerin sayısını belirtir.

Processors

Kesmenin hedeflediğini sanal işlemcilerin dizinlerini belirtir.

Açıklamalar

Bölüme atanan VPCI cihazı tek kök G/Ç sanallaştırma (SR-IOV) sanal işlevini, ayrı olarak atanabilir bir fiziksel işlevi veya herhangi bir fiziksel kaynak tarafından desteklenmeyen bir sanal cihazı temsil eder. Tipik yaşam döngüsü, ile WHvAllocateVpciResourcebir kaynak ayırmak, ile WHvCreateVpciDevicecihazı oluşturmak, cihazın MMIO aralıklarını ile WHvMapVpciDeviceMmioRangeseşlemek, kesmelerini ile WHvMapVpciDeviceInterrupteşlemek ve son olarak cihazı ile WHvDeleteVpciDeviceyok etmektir.

WHV_VPCI_INTERRUPT_TARGET ve WHV_VPCI_INTERRUPT_TARGET_FLAGS türleri, , WHvRetargetVpciDeviceInterruptve WHvGetVpciDeviceInterruptTargetcihaz kesme işlevleri WHvMapVpciDeviceInterrupttarafından paylaşılır. Processors Esnek bir dizi üyesi olduğundan, çağıranların yapının sabit bölümünü izleyen işlemci dizinlerini tutacak ProcessorCount kadar büyük bir arabellek ayırması gerekir.

Ayrıca bakınız