确定 SR-IOV 功能

本主题介绍 NDIS 和上层驱动程序如何确定网络适配器的单根 I/O 虚拟化(SR-IOV)功能。 本主题包含以下信息:

MiniportInitializeEx 期间报告 SR-IOV 功能

通过叠加驱动程序查询 SR-IOV 功能

MiniportInitializeEx 期间报告 SR-IOV 功能

当 NDIS 调用微型端口驱动程序的 MiniportInitializeEx 函数时,驱动程序提供以下 SR-IOV 功能:

  • 网络适配器可以支持的完整 SR-IOV 硬件功能集。

  • 网络适配器当前启用的 SR-IOV 功能。

  • 微型端口驱动程序是管理网络适配器上的 PCI Express (PCIe) 物理功能 (PF) 还是虚拟功能 (VF)。

微型端口驱动程序通过以下方式初始化的 NDIS_SRIOV_CAPABILITIES 结构,报告基础网络适配器的 SR-IOV 硬件功能:

  1. 微型端口驱动程序初始化 Header 成员。 驱动程序将 HeaderType 成员设置为NDIS_OBJECT_TYPE_DEFAULT。

    从 NDIS 6.30 开始,微型端口驱动程序会将标头修订成员设置为 NDIS_SRIOV_CAPABILITIES _REVISION_1,并将 Size 成员设置为NDIS_SIZEOF_SRIOV_CAPABILITIES_REVISION_1。

  2. 微型端口驱动程序在 SriovCapabilities 成员中设置相应的标志,以便报告 SR-IOV 功能。

    如果网络适配器支持 SR-IOV,适配器的 PCI Express (PCIe) 物理功能的微型端口驱动程序必须设置以下标志:

    • NDIS_SRIOV_CAPS_SRIOV_SUPPORTED

    • NDIS_SRIOV_CAPS_PF_MINIPORT

    注意

     网络适配器的 PCIe 虚拟函数 (VF) 的微型端口驱动程序必须同时设置 NDIS_SRIOV_CAPS_VF_MINIPORT 标志和 NDIS_SRIOV_CAPS_SRIOV_SUPPORTED 标志。  

当 NDIS 调用微型端口驱动程序的 MiniportInitializeEx 函数时,驱动程序会按照以下步骤注册网络适配器的 SR-IOV 功能:

  1. 微型端口驱动程序初始化 NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 结构。

    微型端口驱动程序将 HardwareSriovCapabilities 成员设置为指向以前初始化的 NDIS_SRIOV_CAPABILITIES 结构的指针。

    如果 *SRIOV INF 关键字的注册表设置的值为 1,则 SR-IOV 功能当前在网络适配器上启用。 微型端口驱动程序会将 CurrentSriovCapabilities 成员设置为指向相同 NDIS_SRIOV_CAPABILITIES 结构的指针。

    如果 *SRIOV INF 关键字的注册表设置值为零,则 SR-IOV 功能当前在网络适配器上处于禁用状态。 微型端口驱动程序必须将 CurrentSriovCapabilities 成员设置为 NULL。

    有关 *SRIOV INF 关键字的详细信息,请参阅 SR-IOV的标准化 INF 关键字。

  2. 驱动程序调用 NdisMSetMiniportAttributes,并将 MiniportAttributes 参数设置为指向 NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 结构的指针。

有关适配器初始化过程的详细信息,请参阅 初始化微型端口适配器

通过叠加驱动程序查询 SR-IOV 功能

NDIS 将网络适配器当前启用的 SR-IOV 功能传递给以以下方式与网络适配器绑定的上层驱动程序:

当 NDIS 处理由过度协议或筛选器驱动程序发出的 OID_SRIOV_HARDWARE_CAPABILITIESOID_SRIOV_CURRENT_CAPABILITIES 的对象标识符(OID)查询请求时,NDIS 还会返回 NDIS_SRIOV_CAPABILITIES 结构。