Share via


Abfragen der PCI-Basisadressregister einer virtuellen Funktion

Hinweis Diese Methode kann nur verwendet werden, indem Treiber überlasten, die im Verwaltungsbetriebssystem der übergeordneten Hyper-V-Partition ausgeführt werden.

Der PCI-Bustreiber, der im Verwaltungsbetriebssystem der übergeordneten Hyper-V-Partition ausgeführt wird, fragt die Speicher- oder E/A-Adressraumanforderungen jedes PCI-Basisadressregisters (BAR) des Netzwerkadapters ab. Der PCI-Bustreiber führt diese Abfrage aus, wenn er den Adapter auf dem Bus zum ersten Mal erkennt.

Mit dieser PCI BAR-Abfrage bestimmt der PCI-Bustreiber Folgendes:

  • Gibt an, ob eine PCI-BAR vom Netzwerkadapter unterstützt wird.

  • Wenn eine BAR unterstützt wird, wie viel Arbeitsspeicher oder E/A-Adressraum für die BAR benötigt wird.

Der PCI-Treiber führt diese PCI BAR-Abfrage wie folgt aus:

  1. Der PCI-Treiber schreibt zunächst alle in eine BAR.

  2. Der PCI-Treiber liest dann den BAR aus, um den erforderlichen Arbeitsspeicher oder Adressraum zu ermitteln, der für die BAR erforderlich ist. Der Wert null gibt an, dass der BAR vom Netzwerkadapter nicht unterstützt wird.

Der virtuelle PCI-Bustreiber (VPCI) wird im Gastbetriebssystem einer untergeordneten Hyper-V-Partition ausgeführt. Wenn eine PCI Express (PCIe) Virtual Function (VF) an die untergeordnete Partition angefügt ist, macht der VPCI-Bustreiber einen virtuellen Netzwerkadapter für den VF (VF-Netzwerkadapter) verfügbar. Zuvor muss der VPCI-Bustreiber eine PCI BAR-Abfrage ausführen, um den erforderlichen Arbeitsspeicher oder Adressraum zu ermitteln, der für den VF-Netzwerkadapter erforderlich ist.

Da der Zugriff auf den PCI-Konfigurationsraum ein privilegierter Vorgang ist, kann er nur von Komponenten ausgeführt werden, die im Verwaltungsbetriebssystem einer übergeordneten Hyper-V-Partition ausgeführt werden. Wenn der VPCI-Bustreiber die PCI-BARs abfragt, stellt NDIS eine OID-Abfrageanforderung (Object Identifier) von OID_SRIOV_PROBED_BARS an den PF-Miniporttreiber aus. Die von dieser OID-Abfrageanforderung zurückgegebenen Ergebnisse werden an den VPCI-Bustreiber weitergeleitet, damit er bestimmen kann, wie viel Arbeitsspeicheradressraum vom VF-Netzwerkadapter benötigt wird.

Hinweis OID-Anforderungen von OID_SRIOV_BAR_RESOURCES können nur von NDIS ausgestellt werden. Die OID-Anforderung darf nicht von überlastenden Treibern wie Protokoll- oder Filtertreibern ausgegeben werden.

Die OID_SRIOV_PROBED_BARS Abfrageanforderung enthält eine NDIS_SRIOV_PROBED_BARS_INFO-Struktur . Wenn der PF-Miniporttreiber diese OID verarbeitet, muss der Treiber die PCI BAR-Werte innerhalb des Arrays zurückgeben, auf das vom BaseRegisterValuesOffset-Member der NDIS_SRIOV_PROBED_BARS_INFO-Struktur verwiesen wird. Für jeden Offset innerhalb des Arrays muss der PF-Miniporttreiber das Arrayelement auf den ULONG-Wert des BAR-Werts im gleichen Offset innerhalb des PCI-Konfigurationsraums des physischen Netzwerkadapters festlegen.

Jeder vom Treiber zurückgegebene BAR-Wert muss derselbe Wert sein, der einer PCI BAR-Abfrage folgen würde, die vom PCI-Treiber ausgeführt wird, der im Verwaltungsbetriebssystem ausgeführt wird. Der PF-Miniporttreiber kann NdisMQueryProbedBars aufrufen, um diese Informationen zu ermitteln.

Weitere Informationen zu den Basisadressenregistern eines PCI-Geräts finden Sie in der PCI Local Bus-Spezifikation.