Share via


Abfragen des PCI-Konfigurationsbereichs für eine virtuelle Funktion

Hinweis Diese Methode kann nur von Übertreibern verwendet werden, die im Verwaltungsbetriebssystem der übergeordneten Hyper-V-Partition ausgeführt werden.

Der Miniporttreiber für eine PCI Express (PCIe) Virtual Function (VF) wird im Gastbetriebssystem einer untergeordneten Hyper-V-Partition ausgeführt. Aus diesem Fall kann der VF-Miniporttreiber nicht direkt auf Hardwareressourcen zugreifen, z. B. auf den PCIe-Konfigurationsbereich des VF. Nur der Miniporttreiber für die physische PCIe-Funktion (PF) kann auf den PCIe-Konfigurationsbereich für eine VF zugreifen. Der PF-Miniporttreiber wird im Verwaltungsbetriebssystem einer übergeordneten Hyper-V-Partition ausgeführt und hat privilegierten Zugriff auf die VF-Ressourcen.

Ein überlappierender Treiber, der im Verwaltungsbetriebssystem ausgeführt wird, gibt eine OID-Methodenanforderung (Object Identifier) von OID_SRIOV_READ_VF_CONFIG_SPACE aus, um Daten aus dem PCIe-Konfigurationsbereich für einen angegebenen VF auf dem Netzwerkadapter zu lesen.

Beispielsweise gibt der Virtualisierungsstapel, der im Verwaltungsbetriebssystem ausgeführt wird, die OID-Methodenanforderung von OID_SRIOV_READ_VF_CONFIG_SPACE aus, wenn der VF-Miniporttreiber NdisMGetBusData aufruft , um aus seinem VF-PCIe-Konfigurationsbereich zu lesen.

Bevor diese OID-Methodenanforderung ausgibt, muss der überlastende Treiber die Member der NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS-Struktur wie folgt festlegen:

  • Der VFId-Member muss auf den Bezeichner des VF festgelegt werden, aus dem die Informationen gelesen werden sollen.

  • Der Offset-Member muss auf den Offset innerhalb des PCIe-Konfigurationsraums des VF festgelegt werden, in dem Daten gelesen werden.

  • Der Length-Member muss auf die Anzahl der Bytes festgelegt werden, die aus dem PCIe-Konfigurationsbereich des VF gelesen werden sollen.

  • Der BufferOffset-Member muss auf den Offset innerhalb des Puffers festgelegt werden (auf den der InformationBuffer-Member verweist), der die Daten enthält, die aus dem angegebenen VF-PCI-Konfigurationsbereich gelesen werden. Dieser Offset wird vom Anfang der NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS-Struktur in Byteeinheiten angegeben.

Wenn er die OID-Methodenanforderung von OID_SRIOV_READ_VF_CONFIG_SPACE verarbeitet, muss der PF-Miniporttreiber die folgenden Richtlinien befolgen:

  • Der Miniporttreiber muss überprüfen, ob der VF, der vom VFId-Member der NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS-Struktur angegeben wird, ressourcen enthält, die zuvor zugeordnet wurden. Der Miniporttreiber ordnet Ressourcen für eine VF über eine OID-Methodenanforderung von OID_NIC_SWITCH_ALLOCATE_VF zu. Wenn Ressourcen für den angegebenen VF nicht zugeordnet wurden, muss der Treiber die OID-Anforderung nicht ausführen.

  • Der Miniporttreiber muss überprüfen, ob der Puffer (auf den der InformationBuffer-Member der NDIS_OID_REQUEST-Struktur verweist) groß genug ist, um die angeforderten PCIe-Konfigurationsspeicherdaten zurückzugeben. Wenn dies nicht der Fall ist, muss der Treiber die OID-Anforderung nicht ausführen.

  • Der Miniporttreiber ruft in der Regel NdisMGetVirtualFunctionBusData auf, um den angeforderten PCIe-Konfigurationsbereich abzufragen. Der Miniporttreiber kann jedoch auch PCIe-Konfigurationsspeicherdaten für den VF zurückgeben, die der Treiber aus vorherigen Lese- oder Schreibvorgängen des PCIe-Konfigurationsbereichs zwischengespeichert hat.

    Hinweis Wenn ein unabhängiger Hardwareanbieter (IHV) einen virtuellen Bustreiber (VBD) als Teil seines SR-IOV-Treiberpakets bereitstellt, darf sein Miniporttreiber NdisMGetVirtualFunctionBusData nicht aufrufen. Stattdessen muss der Treiber über einen privaten Kommunikationskanal mit dem VBD kommunizieren und anfordern, dass der VBD ReadVfConfigBlock aufruft. Diese Funktion wird über die GUID_VPCI_INTERFACE_STANDARD-Schnittstelle verfügbar gemacht, die vom zugrunde liegenden VPCI-Bustreiber (Virtual PCI) unterstützt wird.

Nach einer erfolgreichen Rückgabe von dieser OID-Methodenanforderung enthält der InformationBuffer-Member der NDIS_OID_REQUEST-Struktur einen Zeiger auf einen vom Aufrufer zugewiesenen Puffer. Dieser Puffer ist so formatiert, dass er Folgendes enthält: