WHvMapVpciDeviceInterrupt

Atanan bir sanal PCI cihazı için MSI veya MSI-X kesmesini eşler ve MSI adresini ve verileri cihaza programlayarak döndürür.

Sözdizimi

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

Sanal PCI cihazının sahibi olan bölümün işleyicisi.

LogicalDeviceId

Cihaz oluşturulduğunda atanan sanal PCI cihazının mantıksal cihaz kimliğini belirtir.

Index

Oluşturulacak kesme eşleme girdisinin dizinini belirtir. Her eşleme isteğinin benzersiz, kullanılmayan bir dizin belirtmesi gerekir.

MessageCount

Kesme için istenen ileti sayısını belirtir. Çok iletili MSI kesintisi için bu, 1 ile 32 (dahil) arasında iki güç sağlar. MSI-X kesme için bu değeri 1 olarak ayarlayın.

Target

Kesme için hedef vektör ve işlemci kümesini sağlayan bir yapıya yönelik bir WHV_VPCI_INTERRUPT_TARGET işaretçi belirtir. 1'den büyük olduğunda MessageCount , her ileti aynı hedef işlemci kümesiyle başlatılır.

MsiAddress

Kesmeye atanan MSI adresini alır. Bu değeri cihazın MSI veya MSI-X özelliğinde programla.

MsiData

Kesmeye atanan MSI veri yükünü alır. Bu değeri cihazın MSI veya MSI-X özelliğinde programla.

Dönüş Değeri

İşlev başarılı olursa, dönüş değeri olur S_OK.

İşlev, 65535'ten büyük olduğundaIndex, 0 veya 32'den büyük olduğunda Target->FlagsMessageCount, tanımsız bir bayrak belirttiğinde, Target->ProcessorCount 0 olduğunda veya bölümdeki sanal işlemci sayısını aştığında, içindeki Target->Processors bir işlemci geçerli bir sanal işlemci dizini olmadığında veya WHvVpciInterruptTargetFlagMulticast tek bir hedef işlemciyle birlikte ayarlandığında döndürürE_INVALIDARG. Arm64'te, hiper yönetici her MSI'yi Arm64'te tek bir sanal işlemciye hedeflediğinden işlev 1'den büyük olduğunda WHvVpciInterruptTargetFlagMulticast veya ayarlandığında döndürür.E_INVALIDARGTarget->ProcessorCount

Açıklamalar

İşlev, WHvMapVpciDeviceInterrupt atanan cihazı destekleyen fiziksel kaynaklar tarafından verilen kesintilerin cihazın sahibi olan bölümün hedef sanal işlemcilerine yönlendirilmesi için bir eşleme oluşturur. Eşleme oluşturulduktan sonra döndürülen MsiAddress ve MsiData değerleri cihazın MSI veya MSI-X özelliğine program edin.

Cihaz mantıksal kesmeler etkinleştirilerek oluşturulduğunda, çağıran da döndürülen MsiAddress ve MsiDataWHvRequestVpciDeviceInterruptgeçirerek kesmeyi doğrudan onaylayabilir.

Çok iletili MSI kesmesi eşlenirken (MessageCount 1'den büyük), tüm iletiler aynı hedef işlemci kümesiyle başlatılır. Daha sonra tek tek iletileri farklı bir işlemci kümesine yeniden hedeflemek için kullanın WHvRetargetVpciDeviceInterrupt . ile WHvGetVpciDeviceInterruptTargeteşlenmiş kesmenin geçerli hedefini sorgulayıp ile WHvUnmapVpciDeviceInterrupteşlemeyi kaldırın.

Requirements

Requirement Değer
Desteklenen en düşük Windows Windows 10, sürüm 20H2 (x64); Windows 11, sürüm 24H2, derleme 26100.3915 (Arm64)
Header WinHvPlatform.h
Kütüphane WinHvPlatform.lib
DLL WinHvPlatform.dll
Architecture x64, Arm64

Ayrıca bakınız