确定 SR-IOV 功能
本主题介绍 NDIS 和过度分配驱动程序如何确定网络适配器的单根 I/O 虚拟化 (SR-IOV) 功能。 本主题包含以下信息:
在 MiniportInitializeEx 期间报告 SR-IOV 功能
在 MiniportInitializeEx 期间报告 SR-IOV 功能
当 NDIS 调用微型端口驱动程序的 MiniportInitializeEx 函数时,驱动程序提供以下 SR-IOV 功能:
网络适配器可以支持的完整 SR-IOV 硬件功能集。
当前在网络适配器上启用的 SR-IOV 功能。
微型端口驱动程序是管理 PCI Express (PCIe) 物理功能 (PF) 还是虚拟函数 (VF) 。
微型端口驱动程序通过通过以下方式初始化的 NDIS_SRIOV_CAPABILITIES 结构报告基础网络适配器的 SR-IOV 硬件功能:
微型端口驱动程序初始化 标头 成员。 驱动程序将 Header 的 Type 成员设置为 NDIS_OBJECT_TYPE_DEFAULT。
从 NDIS 6.30 开始,微型端口驱动程序将 Header 的 Revision 成员设置为 NDIS_SRIOV_CAPABILITIES _REVISION_1,将 Size 成员设置为 NDIS_SIZEOF_SRIOV_CAPABILITIES_REVISION_1。
微型端口驱动程序在 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 功能:
微型端口驱动程序初始化 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 关键字。
驱动程序调用 NdisMSetMiniportAttributes 并将 MiniportAttributes 参数设置为指向 NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 结构的指针。
有关适配器初始化过程的详细信息,请参阅 初始化微型端口适配器。
通过覆盖驱动程序来查询 SR-IOV 功能
NDIS 通过以下方式将网络适配器当前启用的 SR-IOV 功能传递给绑定到网络适配器的驱动程序:
当 NDIS 调用覆盖筛选器驱动程序的 FilterAttach 函数时,NDIS 通过 AttachParameters 参数传递网络适配器的 SR-IOV 功能。 此参数包含指向 NDIS_FILTER_ATTACH_PARAMETERS 结构的指针。 此结构的 SriovCapabilities 成员包含指向 NDIS_SRIOV_CAPABILITIES 结构的指针。
当 NDIS 调用覆盖协议驱动程序的 ProtocolBindAdapterEx 函数时,NDIS 通过 BindParameters 参数传递网络适配器的 SR-IOV 功能。 此参数包含指向 NDIS_FILTER_ATTACH_PARAMETERS 结构的指针。 此结构的 SriovCapabilities 成员包含指向 NDIS_SRIOV_CAPABILITIES 结构的指针。
当 NDIS 处理对象标识符 (OID) 查询OID_SRIOV_HARDWARE_CAPABILITIES和OID_SRIOV_CURRENT_CAPABILITIES的查询请求时,它还返回NDIS_SRIOV_CAPABILITIES结构,这些请求由过度部署协议或筛选器驱动程序发出。