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

本主题介绍为 PCI Express (PCIe) Virtual Function (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. 微型端口驱动程序初始化 标头 成员。 驱动程序将 HeaderType 成员设置为 NDIS_OBJECT_TYPE_DEFAULT。

      从 NDIS 6.30 开始,微型端口驱动程序将 HeaderRevision 成员设置为 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 结构。

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

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

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

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