确定 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. 微型端口驱动程序初始化 标头 成员。 驱动程序将 HeaderType 成员设置为 NDIS_OBJECT_TYPE_DEFAULT。

    从 NDIS 6.30 开始,微型端口驱动程序将 HeaderRevision 成员设置为 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 关键字 (keyword) 的注册表设置的值为 1,则当前在网络适配器上启用 SR-IOV 功能。 微型端口驱动程序将 CurrentSriovCapabilities 成员设置为指向同一 NDIS_SRIOV_CAPABILITIES 结构的指针。

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

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

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

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

通过覆盖驱动程序来查询 SR-IOV 功能

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

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