Backchannel-Kommunikation über einen VF Miniport-Treiber
Ein Miniporttreiber einer PCI Express (PCIe) Virtual Function (VF) kommuniziert mit dem Miniporttreiber der PCIe Physical Function (PF), um Daten aus einem VF-Konfigurationsblock zu lesen oder zu schreiben.
Ein VF-Konfigurationsblock wird für die Backchannel-Kommunikation zwischen den PF- und VF-Miniporttreibern verwendet. Der unabhängige Hardwareanbieter (Independent Hardware Vendor, IHV) kann einen oder mehrere VF-Konfigurationsblöcke für das Gerät definieren. Jeder VF-Konfigurationsblock verfügt über ein IHV-definiertes Format, eine länge und eine Block-ID. Der IHV kann beispielsweise einen VF-Konfigurationsblock definieren, der für die MAC-Adresse (Media Access Control) des VF-Miniporttreibers verwendet werden kann. Ein weiterer VF-Konfigurationsblock kann für die aktuelle VF- und VPort-Konfiguration (Virtual Port) verwendet werden.
Hinweis Daten aus den einzelnen VF-Konfigurationsblöcken 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.
Jedem VF-Konfigurationsblock wird vom IHV ein eindeutiger Bezeichner zugewiesen. Dadurch kann der VF-Miniporttreiber Informationen zu bestimmten VF-Konfigurationsblöcken abfragen oder festlegen.
VF-Miniporttreiber initiieren den Lese- oder Schreibvorgang für einen angegebenen VF-Konfigurationsblock über die folgenden Funktionen:
NdisMReadConfigBlock, der Daten aus einem angegebenen VF-Konfigurationsblock liest. Wenn der VF-Miniporttreiber diese Funktion aufruft, gibt er den Blockbezeichner und die Länge der zu lesenden Daten an. Der Treiber übergibt auch einen Zeiger an den Puffer, der die angeforderten Daten enthält.
NdisMWriteConfigBlock, der Daten in einen angegebenen VF-Konfigurationsblock schreibt. Wenn der VF-Miniporttreiber diese Funktion aufruft, gibt er den Blockbezeichner und die Länge der zu schreibenden Daten an. Der Treiber übergibt auch einen Zeiger auf den Puffer, aus dem die Daten geschrieben werden sollen.
Der PF-Miniporttreiber verwaltet den Zugriff auf den angegebenen VF-Konfigurationsblock wie folgt:
Wenn der VF-Miniporttreiber NdisMReadConfigBlock aufruft, gibt NDIS eine OID-Methodenanforderung (Object Identifier) von OID_SRIOV_READ_VF_CONFIG_BLOCK an den PF-Miniporttreiber aus. Diese OID-Anforderung enthält die Parameterdaten, die vom VF-Miniporttreiber im Funktionsaufruf übergeben wurden.
Der PF-Miniporttreiber führt den Lesevorgang aus und gibt die angeforderten Daten zurück, wenn der Treiber die OID-Anforderung abgeschlossen hat. Nachdem die OID-Anforderung abgeschlossen wurde, wird NDIS vom Aufruf von NdisMReadConfigBlock zurückgegeben.
Wenn der VF-Miniporttreiber NdisMWriteConfigBlock aufruft, gibt NDIS eine OID-Methodenanforderung von OID_SRIOV_WRITE_VF_CONFIG_BLOCK an den PF-Miniporttreiber aus. Diese OID-Anforderung enthält die Parameterdaten, die vom VF-Miniporttreiber im Funktionsaufruf übergeben wurden.
Der PF-Miniporttreiber führt den Schreibvorgang aus und schließt die OID-Anforderung ab. Nachdem die OID-Anforderung abgeschlossen wurde, wird NDIS vom Aufruf von NdisMWriteConfigBlock zurückgegeben.
Die folgende Abbildung zeigt den Prozess beim Lesen und Schreiben von VF-Konfigurationsblöcken über die SR-IOV-Backchannel-Schnittstelle.