查詢虛擬函式的 PCI 設定空間
注意 這個方法只能由在 Hyper-V 父資料分割的管理作業系統中執行的驅動程式過度使用。
PCI Express (PCIe 的迷你埠驅動程式) 虛擬函式 (VF) 會在 Hyper-V 子分割的客體作業系統中執行。 因此,VF 迷你埠驅動程式無法直接存取硬體資源,例如 VF 的 PCIe 設定空間。 只有 PCIe 實體函式的迷你埠驅動程式 (PF) 才能存取 VF 的 PCIe 設定空間。 PF 迷你埠驅動程式會在 Hyper-V 父磁碟分割的管理作業系統中執行,並具有 VF 資源的特殊許可權存取權。
在管理作業系統中執行的過度驅動程式會發出物件識別碼 (OID) 方法要求 , OID_SRIOV_READ_VF_CONFIG_SPACE從網路介面卡上指定 VF 的 PCIe 設定空間讀取資料。
例如,當 VF 迷你埠驅動程式呼叫NdisMGetBusData從其 VF PCIe 設定空間讀取時,在管理作業系統中執行的虛擬化堆疊會發出OID_SRIOV_READ_VF_CONFIG_SPACE的 OID 方法要求。
發出這個 OID 方法要求之前,過度配置驅動程式必須以下列方式設定 NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS 結構的成員:
VFId成員必須設定為要從中讀取資訊的 VF 識別碼。
Offset 成員必須設定為要讀取資料的 VF 之 PCIe 設定空間內的 位 移。
Length成員必須設定為從 VF 的 PCIe 設定空間讀取的位元組數目。
BufferOffset成員必須設定為由InformationBuffer成員所參考之緩衝區內 (位移) ,其中包含從指定 VF 的 PCI 組態空間讀取的資料。 這個位移是以從 NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS 結構開頭的位元組單位指定。
當它處理 OID_SRIOV_READ_VF_CONFIG_SPACE的 OID 方法要求時,PF 迷你埠驅動程式必須遵循下列指導方針:
迷你埠驅動程式必須確認由 NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS結構的VFId 成員指定的 VF,具有先前配置的資源。 迷你埠驅動程式會透過 OID_NIC_SWITCH_ALLOCATE_VF的 OID 方法要求,為 VF 配置資源。 如果未配置指定 VF 的資源,驅動程式必須失敗 OID 要求。
迷你埠驅動程式必須確認NDIS_OID_REQUEST) 結構的InformationBuffer成員所參考的緩衝區 (夠大,足以傳回要求的 PCIe 設定空間資料。 如果這不是 True,驅動程式必須失敗 OID 要求。
迷你埠驅動程式通常會呼叫 NdisMGetVirtualFunctionBusData 來查詢要求的 PCIe 設定空間。 不過,迷你埠驅動程式也可以傳回驅動程式從先前 PCIe 組態空間讀取或寫入作業快取的 VF 的 PCIe 設定空間資料。
注意 如果獨立硬體廠商 (IHV) 提供虛擬匯流排驅動程式 (VBD) 作為 SR-IOV 驅動程式套件的一部分,則其迷你埠驅動程式不得呼叫 NdisMGetVirtualFunctionBusData。 相反地,驅動程式必須透過私人通道與 VBD 進行介面,並要求 VBD 呼叫 ReadVfConfigBlock。 此函式會從基礎虛擬 PCI () 匯流排驅動程式支援的 GUID_VPCI_INTERFACE_STANDARD 介面公開。
從這個 OID 方法要求成功傳回之後,NDIS_OID_REQUEST結構的InformationBuffer成員會包含呼叫端配置的緩衝區指標。 此緩衝區的格式設定為包含下列內容:
NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS結構,其中包含 VF 之 PCIe 設定空間讀取作業的參數。
要從 PCIe 設定空間讀取資料的其他緩衝區空間。 驅動程式會將資料複製到NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS 結構之BufferOffset成員所指定位移的緩衝區。