Backchannel-Kommunikation vom PF-Miniport-Treiber
Ein Miniporttreiber der PHYSISCHEn Funktion (PCIe) kommuniziert mit einem Miniporttreiber der virtuellen PCIe-Funktion (VF), um Benachrichtigungen über Änderungen an den Daten eines VF-Konfigurationsblocks auszugeben. Der PF-Miniporttreiber gibt diese Benachrichtigungen aus, um die Daten im VF-Konfigurationsblock ungültig zu machen. Als Reaktion auf diese Benachrichtigung kann der VF-Miniporttreiber eine Rückkanalanforderung an den PF-Miniporttreiber ausgeben, um die Daten aus einem ungültigen VF-Konfigurationsblock zu lesen.
Ein VF-Konfigurationsblock wird für die Backchannelkommunikation zwischen den PF- und VF-Miniporttreibern verwendet. Die IHV kann einen oder mehrere VF-Konfigurationsblöcke für das Gerät definieren. Jeder VF-Konfigurationsblock hat ein IHV-definiertes Format, eine länge und eine Block-ID.
Hinweis Daten aus jedem VF-Konfigurationsblock werden nur von den PF- und VF-Miniporttreibern verwendet. Das Format und der Inhalt dieser Daten sind für Komponenten des Windows-Betriebssystems nicht transparent.
Die folgenden Schritte werden beim Ausgeben und Behandeln von Benachrichtigungen zu ungültigen VF-Konfigurationsdaten ausgeführt:
Im Gastbetriebssystem gibt NDIS eine E/A-Steuerungsanforderung von IOCTL_VPCI_INVALIDATE_BLOCK aus. Wenn diese IOCTL abgeschlossen ist, wird NDIS benachrichtigt, dass sich die VF-Konfigurationsdaten geändert haben.
Im Verwaltungsbetriebssystem, das in der übergeordneten Hyper-V-Partition ausgeführt wird, werden die folgenden Schritte ausgeführt:
Der PF-Miniporttreiber ruft die NdisMInvalidateConfigBlock-Funktion auf, um NDIS zu benachrichtigen, dass SICH DIE VF-Konfigurationsdaten geändert haben und nicht mehr gültig sind. Der Treiber legt den BlockMask-Parameter auf eine ULONGLONGLONG-Bitmaske fest, die angibt, welche VF-Konfigurationsblöcke geändert wurden. Jedes Bit in der Bitmaske entspricht einem VF-Konfigurationsblock. Wenn das Bit auf eins festgelegt ist, haben sich die Daten im entsprechenden VF-Konfigurationsblock geändert.
NDIS signalisiert dem Virtualisierungsstapel, der im Verwaltungsbetriebssystem ausgeführt wird, die Änderung an VF-Konfigurationsblockdaten. Der Virtualisierungsstapel speichert die BlockMask-Parameterdaten zwischen.
Hinweis Jedes Mal, wenn der PF-Miniporttreiber NdisMInvalidateConfigBlock aufruft, verwendet der Virtualisierungsstapel die BlockMask-Parameterdaten mit dem aktuellen Wert im Cache.
Der Virtualisierungsstapel benachrichtigt den virtuellen PCI-Treiber (VPCI), der im Gastbetriebssystem ausgeführt wird, über die Ungültigkeit von VF-Konfigurationsdaten. Der Virtualisierungsstapel sendet die zwischengespeicherten BlockMask-Parameterdaten an den VPCI-Treiber.
Im Gastbetriebssystem, das in einer untergeordneten Hyper-V-Partition ausgeführt wird, werden die folgenden Schritte ausgeführt:
Der VPCI-Treiber speichert die zwischengespeicherten BlockMask-Parameterdaten im BlockMask-Member der VPCI_INVALIDATE_BLOCK_OUTPUT-Struktur , die der IOCTL_VPCI_INVALIDATE_BLOCK-Anforderung zugeordnet ist.
Der VPCI-Treiber schließt die IOCTL_VPCI_INVALIDATE_BLOCK Anforderung erfolgreich ab. In diesem Fall gibt NDIS eine OID-Methodenanforderung (Object Identifier) von OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK an den VF-Miniporttreiber aus. In der OID-Anforderung wird ein NDIS_SRIOV_VF_INVALIDATE_CONFIG_BLOCK_INFO übergeben. Diese Struktur enthält die zwischengespeicherten BlockMask-Parameterdaten .
NDIS stellt außerdem eine weitere IOCTL_VPCI_INVALIDATE_BLOCK-Anforderung zur Verarbeitung aufeinander folgender Benachrichtigungen über Änderungen an VF-Konfigurationsdaten.
Wenn der VF-Treiber die OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK-Anforderung verarbeitet, kann er Daten aus den angegebenen VF-Konfigurationsblöcken lesen, indem er NdisMReadConfigBlock aufruft. Weitere Informationen zu diesem Prozess finden Sie unter Backchannel Communication from a VF Miniport Driver.For more information about this process, see Backchannel Communication from a VF Miniport Driver.