停止 PF 微型端口驱动程序
本主题讨论在支持单根 I/O 虚拟化 (SR-IOV) 的适配器上停止 PCI Express (PCIe) 物理功能 (PF) 的微型端口驱动程序所涉及的步骤。 下图显示了这些步骤。
本主题包含以下信息:
在调用 MiniportHaltEx 之前由 NDIS 和过大驱动程序执行的操作
在 NDIS 调用 PF 微型端口驱动程序的 MiniportHaltEx 函数之前,它首先执行以下操作:
NDIS 取消绑定以前绑定到基础 PF 微型端口驱动程序的所有协议驱动程序。 NDIS 通过调用协议驱动程序的 ProtocolUnbindAdapterEx 函数来执行此操作。
NDIS 分离以前绑定到基础 PF 微型端口驱动程序的所有筛选器驱动程序。 NDIS 通过调用筛选器驱动程序的 FilterDetach 函数来执行此操作。
当取消绑定协议或筛选器驱动程序或从 PF 微型端口驱动程序分离时,必须按照以下步骤操作:
驱动程序必须发出对象标识符 (OID) OID_RECEIVE_FILTER_CLEAR_FILTER 集请求,以清除之前设置的任何接收筛选器。 驱动程序在默认虚拟端口 (VPort) 或网络适配器上 NIC 交换机的任何非默认 VPort 上设置这些筛选器。 驱动程序通过向 PF 微型端口驱动程序发出 OID_RECEIVE_FILTER_SET_FILTER 的 OID 方法请求来设置这些筛选器。
驱动程序必须发出 OID_NIC_SWITCH_DELETE_VPORT 的 OID 集请求,以删除之前在 NIC 交换机上创建的任何非默认 VPort。 驱动程序通过向 PF 微型端口驱动程序发出 OID_NIC_SWITCH_CREATE_VPORT 的 OID 方法请求来设置这些 VPort。
驱动程序必须发出 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 将按照以下步骤操作:
NDIS 通过向 PF 微型端口驱动程序发出 OID_NIC_SWITCH_DELETE_SWITCH 的 OID 集请求来删除所有 NIC 交换机。 有关如何删除 NIC 开关的详细信息,请参阅 删除 NIC 开关。
注意 从 Windows Server 2012 开始,SR-IOV 接口仅支持网络适配器上的默认 NIC 开关。
成功删除所有 NIC 开关后,NDIS 将调用 PF 微型端口驱动程序的 MiniportHaltEx 函数。
调用 MiniportHaltEx 时由 PF 微型端口驱动程序执行的操作
当 NDIS 调用 MiniportHaltEx 时,PF 微型端口驱动程序必须遵循以下步骤:
如果 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 之前发出的。
PF 微型端口驱动程序执行与微型端口停止操作关联的其他任务。 有关详细信息,请参阅 停止微型端口适配器。