PF 微型端口驱动程序的 MiniportInitializeEx 指导原则

本主题介绍为 PCI Express (PCIe) 物理功能 (PF) 的微型端口驱动程序编写 MiniportInitializeEx 函数的准则。 PF 是网络适配器的一个组件,支持单根 I/O 虚拟化 (SR-IOV) 。

注意 这些准则仅适用于 PF 微型端口驱动程序。 有关适配器的 PCIe 虚拟函数 (VF) 微型端口驱动程序的初始化准则,请参阅 初始化 VF 微型端口驱动程序

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

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

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

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

  2. PF 微型端口驱动程序必须读取 SR-IOV 标准化关键字,以确定 SR-IOV 是否已启用并获取 NIC 交换机配置设置。 有关这些关键字的详细信息,请参阅 SR-IOV 的标准化 INF 关键字

    注意 如果 PF 微型端口驱动程序向 MiniportSetOptions 函数注册了入口点,则驱动程序可能以前在 NDIS 调用 MiniportSetOptions 时从注册表中获取了这些设置。

  3. 如果网络适配器支持 SR-IOV、虚拟机队列 (VMQ) 或 RSS,则微型端口驱动程序必须确定要在网络适配器上启用的功能。 有关如何确定这一点的详细信息,请参阅 处理 SR-IOV、VMQ 和 RSS 标准化 INF 关键字

  4. 除了 RSS 和 VMQ 硬件功能 ((如果支持) ),微型端口驱动程序还必须报告其完整的硬件 SR-IOV 功能集。 无论注册表中的 SR-IOV 标准化关键字 (keyword) 设置如何,都必须播发这些功能。

    如果在网络适配器上启用了 SR-IOV,微型端口驱动程序还必须报告适配器上当前启用的 SR-IOV 设置。

    有关报告 SR-IOV 功能的详细信息,请参阅 确定 SR-IOV 功能

  5. 微型端口驱动程序必须报告其完整的硬件 NIC 交换机功能集。 无论注册表中的 SR-IOV 标准化关键字 (keyword) 设置如何,都必须播发这些功能。

    如果在网络适配器上启用了 SR-IOV,微型端口驱动程序还必须报告适配器上当前启用的 NIC 交换机设置。

    有关报告 NIC 交换机功能的详细信息,请参阅 确定 NIC 交换机功能

  6. 微型端口驱动程序必须报告其完整的硬件接收筛选功能集。 无论注册表中的 SR-IOV 标准化关键字 (keyword) 设置如何,都必须播发这些功能。

    如果在网络适配器上启用了 SR-IOV,微型端口驱动程序还必须报告适配器上当前启用的接收筛选设置。

    有关报告接收筛选功能的详细信息,请参阅 确定接收筛选功能

  7. 如果微型端口驱动程序支持静态 NIC 交换机创建,则必须在调用 MiniportInitializeEx 的上下文中执行以下操作。

    • 驱动程序根据 NIC 交换机标准化关键字 (keyword) 设置配置适配器硬件。 基于这些设置,驱动程序为 NIC 交换机分配必要的硬件和软件资源。

    • 微型端口驱动程序调用 NdisMEnableVirtualization 以启用 SR-IOV 并设置网络适配器上的 VF 数。 此函数在适配器的 PCI 配置空间中配置 SR-IOV 扩展功能。 如果此函数返回NDIS_STATUS_SUCCESS,则启用 SR-IOV 并通过 PCIe 接口公开 VF。

    有关详细信息,请参阅 静态创建 NIC 开关

    注意 如果微型端口驱动程序支持动态 NIC 交换机创建,则会在处理对象标识符 (OID) 方法请求OID_NIC_SWITCH_CREATE_SWITCH时创建开关并启用虚拟化。 有关详细信息,请参阅 动态创建 NIC 开关