从 VF 微型端口驱动程序进行反向通道通信
PCI Express (PCIe) Virtual Function (VF 的微型端口驱动程序) 与 PCIe 物理函数 (PF) 的微型端口驱动程序进行通信,以从 VF 配置块读取或写入数据。
VF 配置块用于 PF 和 VF 微型端口驱动程序之间的反向通道通信。 独立硬件供应商 (IHV) 可以为设备定义一个或多个 VF 配置块。 每个 VF 配置块都有 IHV 定义的格式、长度和块 ID。 例如,IHV 可以定义一个 VF 配置块,该块可用于媒体访问控制 (MAC) VF 微型端口驱动程序的地址。 另一个 VF 配置块可用于当前 VF 和虚拟端口 (VPort) 配置。
注意 每个 VF 配置块中的数据仅由 PF 和 VF 微型端口驱动程序使用。 此数据的格式和内容对于 Windows 操作系统的组件是不透明的。
IHV 为每个 VF 配置块分配一个唯一标识符。 这允许 VF 微型端口驱动程序查询或设置有关特定 VF 配置块的信息。
VF 微型端口驱动程序通过以下函数对指定的 VF 配置块启动读取或写入操作:
NdisMReadConfigBlock,它从指定的 VF 配置块读取数据。 当 VF 微型端口驱动程序调用此函数时,它会指定要读取的数据的块标识符和长度。 驱动程序还会传递指向将包含所请求数据的缓冲区的指针。
NdisMWriteConfigBlock,用于将数据写入指定的 VF 配置块。 VF 微型端口驱动程序调用此函数时,它会指定要写入的数据的块标识符和长度。 驱动程序还会传递指向要从中写入数据的缓冲区的指针。
PF 微型端口驱动程序通过以下方式管理对指定 VF 配置块的访问:
当 VF 微型端口驱动程序调用 NdisMReadConfigBlock 时,NDIS 向 PF 微型端口驱动程序发出对象标识符 (OID) 方法请求 OID_SRIOV_READ_VF_CONFIG_BLOCK 。 此 OID 请求包含 VF 微型端口驱动程序在函数调用中传递的参数数据。
PF 微型端口驱动程序执行读取操作,并在驱动程序完成 OID 请求时返回请求的数据。 完成 OID 请求后,NDIS 将从调用 NdisMReadConfigBlock 返回。
当 VF 微型端口驱动程序调用 NdisMWriteConfigBlock 时,NDIS 向 PF 微型端口驱动程序发出 OID_SRIOV_WRITE_VF_CONFIG_BLOCK 的 OID 方法请求。 此 OID 请求包含 VF 微型端口驱动程序在函数调用中传递的参数数据。
PF 微型端口驱动程序执行写入操作并完成 OID 请求。 完成 OID 请求后,NDIS 将从调用 NdisMWriteConfigBlock 返回。
下图显示了通过 SR-IOV 反向通道接口读取和写入 VF 配置块所涉及的过程。