处理 OID_NIC_SWITCH_ALLOCATE_VF 请求

当网络适配器上的 PCI Express (PCIe) 物理功能 (PF) 的微型端口驱动程序处理 OID_NIC_SWITCH_ALLOCATE_VF的对象标识符 (OID) 方法请求时,它将执行以下操作:

  • PF 微型端口驱动程序为网络适配器上的 PCIe 虚拟功能 (VF) 分配软件资源。 这些资源是根据 NDIS_NIC_SWITCH_VF_PARAMETERS 结构中指定的参数配置的。

  • PF 微型端口驱动程序将 VF 分配给网络适配器上的 NIC 交换机。 NIC 开关由 NDIS_NIC_SWITCH_VF_PARAMETERS 结构的 SwitchId 成员标识。

    有关 NIC 开关的详细信息,请参阅 NIC 开关

  • PF 微型端口驱动程序使用 VF 标识符更新 VFId 成员。 此标识符是从零开始的索引,在 PF 微型端口驱动程序在 NIC 交换机上分配的所有 VF 中必须是唯一的。

    覆盖驱动程序在OID_NIC_SWITCH_FREE_VFOID_NIC_SWITCH_VF_PARAMETERS的连续 OID 请求中使用 VFId 成员的值。

  • PF 微型端口驱动程序使用 VF 的 PCIe 请求程序标识符 (RID) 更新 RequestorId 成员。

    微型端口驱动程序调用 NdisMGetVirtualFunctionLocation 以获取与 VF 对应的 RID 信息。 然后,驱动程序根据调用 NdisMGetVirtualFunctionLocation 返回的信息,使用 NDIS_MAKE_RID 宏创建 RID。

    虚拟化堆栈使用 RID 重新映射 DMA 和 PF 和 VF 之间的中断。 RID 还允许硬件输入/输出内存管理单元 (IOMMU) 将来宾物理地址转换为主机物理地址。

  • PF 微型端口驱动程序初始化并公开 VF。 这使得 VF 可供虚拟化堆栈使用。

如果 PF 微型端口驱动程序可以成功分配必要的软件资源并初始化 VF,则驱动程序会通过NDIS_STATUS_SUCCESS完成 OID 请求。 PF 微型端口驱动程序必须保留每个已分配 VF 的 VF ID。 NDIS 和上层驱动程序在对 PF 微型端口驱动程序的连续 OID 请求中使用 VF 标识符进行各种操作,例如重置或释放 VF。

注意 分配 VF 的资源后,VF 处于未附加状态,因为 VPort) (虚拟端口未附加到 VF。 覆盖驱动程序可以发出 OID 请求 ,OID_NIC_SWITCH_CREATE_VPORT 创建 VPort 并将其附加到 VF。 有关详细信息,请参阅 创建虚拟端口