初始化 VF 微型端口驱动程序

本主题介绍为 PCI Express (PCIe) 虚拟函数 (VF) 的微型端口驱动程序编写 MiniportInitializeEx 函数的准则。 VF 由支持单根 I/O 虚拟化 (SR-IOV) 的网络适配器公开。

注意

 这些准则仅适用于 SR-IOV 网络适配器的 VF 微型端口驱动程序。 有关适配器 PCIe 物理函数 (PF) 的微型端口驱动程序的初始化指南,请参阅初始化 PF 微型端口驱动程序。 

当调用 VF 微型端口驱动程序的 MiniportInitializeEx 函数时,遵循与任何 NDIS 微型端口驱动程序相同的步骤。 有关这些步骤的详细信息,请参阅初始化微型端口驱动程序

除这些步骤外,NDIS 调用驱动程序的 MiniportInitializeEx 函数时 VF 微型端口驱动程序还必须遵循以下附加步骤:

  • VF 微型端口驱动程序调用 NdisGetHypervisorInfo 函数,以验证它是否在 Hyper-V 子分区中运行。 此函数返回定义分区类型的 NDIS_HYPERVISOR_INFO 结构。 如果分区类型报告为 NdisHypervisorPartitionMsHvChild,则微型端口驱动程序在附加到适配器上的 PF 的 Hyper-V 子分区中运行。

    注意

    如果分区类型报告为 NdisHypervisorPartitionMsHvParent,则微型端口驱动程序在附加到适配器上的 PF 的 Hyper-V 父分区中运行。 在这种情况下,微型端口驱动程序不得初始化为 VF 驱动程序。 如果可能,驱动程序必须初始化为 PF 驱动程序,如 PF 微型端口驱动程序的初始化序列中所述。

  • 与 PF 微型端口驱动程序不同,VF 微型端口驱动程序不得与 SR-IOV 标准化关键字一起安装,并且不得尝试读取这些关键字。 有关这些关键字的详细信息,请参阅 SR-IOV 的标准化 INF 关键字

  • 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 成员中的 NDIS_SRIOV_CAPS_PF_MINIPORT 标志设置为报告 SR-IOV 功能。

      注意

      VF 微型端口驱动程序必须同时设置 NDIS_SRIOV_CAPS_VF_MINIPORT 标志和 NDIS_SRIOV_CAPS_SRIOV_SUPPORTED 标志。

    VF 微型端口驱动程序按照以下步骤注册网络适配器的 SR-IOV 功能:

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

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

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

  • VF 微型端口驱动程序不得播发虚拟机队列 (VMQ) 功能。 但是,驱动程序可以播发对其他 NDIS 技术的支持,例如电源管理和接收端缩放 (RSS)。

    有关 RSS 的详细信息,请参阅接收端缩放