停止 PF 微型端口驱动程序

本主题讨论在支持单根 I/O 虚拟化 (SR-IOV) 的适配器上停止 PCI Express (PCIe) 物理功能 (PF) 的微型端口驱动程序所涉及的步骤。 下图显示了这些步骤。

此图显示了停止 PF 微型端口驱动程序的过程,并说明了过度覆盖驱动程序、NDIS 和 PF 微型端口驱动程序之间的请求和函数流。

本主题包含以下信息:

在调用 MiniportHaltEx 之前由 NDIS 和过大驱动程序执行的操作

在 NDIS 调用 PF 微型端口驱动程序的 MiniportHaltEx 函数之前,它首先执行以下操作:

  • NDIS 取消绑定以前绑定到基础 PF 微型端口驱动程序的所有协议驱动程序。 NDIS 通过调用协议驱动程序的 ProtocolUnbindAdapterEx 函数来执行此操作。

  • NDIS 分离以前绑定到基础 PF 微型端口驱动程序的所有筛选器驱动程序。 NDIS 通过调用筛选器驱动程序的 FilterDetach 函数来执行此操作。

当取消绑定协议或筛选器驱动程序或从 PF 微型端口驱动程序分离时,必须按照以下步骤操作:

  1. 驱动程序必须发出对象标识符 (OID) OID_RECEIVE_FILTER_CLEAR_FILTER 集请求,以清除之前设置的任何接收筛选器。 驱动程序在默认虚拟端口 (VPort) 或网络适配器上 NIC 交换机的任何非默认 VPort 上设置这些筛选器。 驱动程序通过向 PF 微型端口驱动程序发出 OID_RECEIVE_FILTER_SET_FILTER 的 OID 方法请求来设置这些筛选器。

  2. 驱动程序必须发出 OID_NIC_SWITCH_DELETE_VPORT 的 OID 集请求,以删除之前在 NIC 交换机上创建的任何非默认 VPort。 驱动程序通过向 PF 微型端口驱动程序发出 OID_NIC_SWITCH_CREATE_VPORT 的 OID 方法请求来设置这些 VPort。

  3. 驱动程序必须发出 OID_NIC_SWITCH_FREE_VF 的 OID 集请求,以释放之前在 NIC 交换机上分配的任何 PCIe 虚拟函数 (VF) 的资源。 驱动程序通过向 PF 微型端口驱动程序发出 OID_NIC_SWITCH_ALLOCATE_VF 的 OID 方法请求,为 VF 分配资源。

    有关详细信息,请参阅 释放虚拟函数的资源

    注意 释放 VF 的资源后,NDIS 会调用 VF 微型端口驱动程序的 MiniportHaltEx 函数。 有关详细信息,请参阅 停止 VF 微型端口驱动程序

从 NIC 交换机中删除所有接收筛选器、非默认 VPort 和 VF 后,NDIS 将按照以下步骤操作:

调用 MiniportHaltEx 时由 PF 微型端口驱动程序执行的操作

当 NDIS 调用 MiniportHaltEx 时,PF 微型端口驱动程序必须遵循以下步骤:

  1. 如果 PF 微型端口驱动程序支持静态创建 NIC 交换机,并且已删除所有 NIC 交换机,则驱动程序必须通过调用 NdisMEnableVirtualization 来禁用适配器上的虚拟化, 同时将 EnableVirtualization 参数设置为 FALSE,并将 NumVFs 参数设置为零。

    NdisMEnableVirtualization 在网络适配器的 PF 的 PCIe 配置空间中清除 SR-IOV 扩展功能结构中的 NumVFs 成员和 VF Enable 位。

    注意如果 PF 微型端口驱动程序支持动态创建和配置 NIC 交换机,则在驱动程序处理 OID_NIC_SWITCH_DELETE_SWITCH 的 OID 集请求时,它必须调用 NdisMEnableVirtualization。 此 OID 请求是在调用 MiniportHaltEx 之前发出的。

  2. PF 微型端口驱动程序执行与微型端口停止操作关联的其他任务。 有关详细信息,请参阅 停止微型端口适配器