Udostępnij za pośrednictwem


Komunikacja zwrotna ze sterownika miniport PF

Sterownik miniportu funkcji fizycznej PCI Express (PCIe) komunikuje się ze sterownikiem miniportu funkcji wirtualnej PCIe (VF), aby przekazywać powiadomienia o zmianach w danych bloku konfiguracyjnego VF. Sterownik miniportu PF generuje te powiadomienia, aby unieważnić danych w bloku konfiguracji programu VF. W odpowiedzi na to powiadomienie sterownik miniportu VF może wysłać żądanie kanału zwrotnego do sterownika miniport PF, aby odczytać dane z unieważnionego bloku konfiguracji VF.

Blok konfiguracji VF jest używany do komunikacji zwrotnej między sterownikami miniportów PF i VF. IHV może zdefiniować jeden lub więcej bloków konfiguracji VF dla urządzenia. Każdy blok konfiguracji VF ma zdefiniowany format, długość i identyfikator bloku IHV.

Uwaga Dane z każdego bloku konfiguracji VF są używane tylko przez sterowniki PF i VF miniport. Format i zawartość tych danych są nieprzezroczyste dla składników systemu operacyjnego Windows.

Podczas wystawiania i obsługi powiadomień o nieprawidłowych danych konfiguracji programu VF są wykonywane następujące kroki:

  1. W systemie operacyjnym gościa NDIS wysyła żądanie sterowania we/wy IOCTL_VPCI_INVALIDATE_BLOCK. Po zakończeniu IOCTL, usługa NDIS jest powiadamiana, że dane konfiguracyjne funkcji VF zostały zmienione.

  2. W systemie operacyjnym zarządzania, który działa w partycji nadrzędnej Hyper-V, są wykonywane następujące kroki:

    1. Sterownik miniportu PF wywołuje funkcję NdisMInvalidateConfigBlock, aby powiadomić NDIS, że dane konfiguracji programu VF uległy zmianie i nie są już prawidłowe. Sterownik ustawia parametr BlockMask na maskę bitów ULONGLONG, która określa, które bloki konfiguracji VF zostały zmienione. Każdy bit maski bitów odpowiada blokowi konfiguracji VF. Jeśli bit jest ustawiony na jeden, dane w odpowiednim bloku konfiguracji VF uległy zmianie.

    2. NDIS sygnalizuje stos wirtualizacyjny, który działa w systemie operacyjnym zarządzania, o zmianie danych bloku konfiguracji VF. Stos wirtualizacji buforuje dane parametrów BlockMask.

      Uwaga Za każdym razem, gdy sterownik miniportu PF wywołuje NdisMInvalidateConfigBlock, stos wirtualizacji wykonuje operację logicznego OR na danych parametru BlockMask z bieżącą wartością w swojej pamięci podręcznej.

    3. Stos wirtualizacji powiadamia wirtualny sterownik PCI (VPCI), który działa w systemie operacyjnym gościa, o unieważnieniu danych konfiguracji VF. Stos wirtualizacji wysyła buforowane dane parametrów BlockMask do sterownika VPCI.

  3. W systemie operacyjnym gościa, który działa w partycji podrzędnej Hyper-V, są wykonywane następujące kroki:

    1. Sterownik VPCI przechowuje buforowane dane parametrów BlockMask w BlockMask członku struktury VPCI_INVALIDATE_BLOCK_OUTPUT powiązanej z żądaniem IOCTL_VPCI_INVALIDATE_BLOCK.

    2. Sterownik VPCI pomyślnie ukończył żądanie IOCTL_VPCI_INVALIDATE_BLOCK. W takim przypadku NDIS wysyła do sterownika VF miniportu żądanie metody identyfikatora obiektu (OID) OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK. NDIS_SRIOV_VF_INVALIDATE_CONFIG_BLOCK_INFO jest przekazywany w żądaniu OID. Ta struktura zawiera buforowane dane parametrów BlockMask.

      Usługa NDIS wysyła również kolejne żądanie IOCTL_VPCI_INVALIDATE_BLOCK do obsługi kolejnych powiadomień o zmianach w danych konfiguracji VF.

    3. Gdy sterownik VF obsługuje żądanie OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK, może odczytywać dane z określonych bloków konfiguracji programu VF, wywołując NdisMReadConfigBlock. Aby uzyskać więcej informacji na temat tego procesu, zobacz Komunikację backchannel w sterowniku miniport VF.