共用方式為


設定虛擬函式的PCI組態數據

PCI Express (PCIe) 虛擬函式 (VF) 的迷你埠驅動程式會在 Hyper-V 子磁碟分區的客體作系統中執行。 因此,VF 迷你埠驅動程式無法直接存取硬體資源,例如 VF 的 PCI 設定空間。 只有 PCIe 實體函式的迷你埠驅動程式 (PF) 可以存取 VF 的 PCI 設定空間。 PF 迷你埠驅動程式會在 Hyper-V 父磁碟分區的管理作系統中執行,並具有 VF 資源的特殊許可權存取權。

當 VF 迷你埠驅動程式呼叫 NdisMSetBusData 寫入其 PCI 組態空間時,上層驅動程式,例如虛擬化堆疊,會發出 OID_SRIOV_WRITE_VF_CONFIG_SPACE 的 OID 集合要求。

在發出此 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 迷你埠驅動程式也可以傳回 VF 的 PCI 設定空間資料,這些資料是驅動程式從先前讀取或寫入 PCI 設定空間的作業中進行快取的。

    注意 如果獨立硬體廠商 (IHV) 在其 SR-IOV 驅動程式套件中提供虛擬總線驅動程式 (VBD),則其 PF 迷你埠驅動程式不得呼叫 NdisMSetVirtualFunctionBusData。 相反地,驅動程式必須透過私人通道與 VBD 介面,並要求 VBD 呼叫 SetVirtualFunctionData。 此功能呈現於由虛擬PCI (VPCI) 總線驅動程式支援的 GUID_VPCI_INTERFACE_STANDARD 介面。

如果 PF 小型埠驅動程式可以順利完成 OID 要求,則驅動程式必須將所要求的 PCI 配置空間數據複製到由 InformationBuffer 成員引用的 NDIS_OID_REQUEST 結構的緩衝區中。 驅動程式會將數據複製到由BufferOffset 成員在NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS 結構中指定的緩衝區位移。