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