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

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

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

SR-IOV 网络适配器必须实现一个硬件网桥,该桥通过适配器上的物理端口和内部虚拟端口 (VPorts) 转发网络流量。 此网桥称为 NIC 交换机。 有关详细信息,请参阅 NIC 开关

如果 PF 微型端口驱动程序支持在 SR-IOV 网络适配器上静态创建 NIC 交换机,则在为设备堆栈中的网络适配器创建功能设备对象 (FDO) 时,它可能需要分配交换机资源。 在这种情况下,驱动程序必须在 NDIS 调用 MiniportInitializeEx 之前分配这些资源。 为此,驱动程序必须注册可选的即插即用 (PnP) 处理程序,以便在从设备堆栈添加或删除适配器的 FDO 时,它可以参与该过程。

微型端口驱动程序必须提供 MiniportSetOptions 函数来注册这些 PnP 处理程序函数。 为此,驱动程序从调用其 DriverEntry 函数的上下文中遵循以下步骤:

  1. 微型端口驱动程序使用 MiniportXxx 函数的入口点初始化NDIS_MINIPORT_DRIVER_CHARACTERISTICS结构。 具体而言,驱动程序将 SetOptionsHandler 成员设置为驱动程序的 MiniportSetOptions 函数的入口点。

  2. 微型端口驱动程序调用 NdisMRegisterMiniportDriver 函数来注册其入口点。 从此调用的上下文中,NDIS 调用驱动程序的 MiniportSetOptions 函数

  3. 当 NDIS 调用 MiniportSetOptions 时,微型端口驱动程序调用 NdisSetOptionalHandlers 函数并指定 NDIS_MINIPORT_PNP_CHARACTERISTICS 结构。 此结构定义 MiniportAddDeviceMiniportRemoveDeviceMiniportStartDeviceMiniportFilterResourceRequirements 函数的 入口点。 NDIS 在处理 PCI 总线驱动程序发出的 PnP I/O 请求数据包 (IRP) 时调用这些处理程序函数。

    如果 PF 微型端口驱动程序必须在 NDIS 调用驱动程序的 MiniportInitializeEx 函数之前为 NIC 开关分配其他软件资源,则驱动程序必须注册 MiniportAddDevice 函数。 当 NDIS 调用 MiniportAddDevice 函数时,PF 微型端口驱动程序可以调用 NdisReadConfiguration,以从注册表中读取 NIC 交换机配置关键字 (keyword) 设置。 有关这些关键字的详细信息,请参阅 SR-IOV 的标准化 INF 关键字

    有关 MiniportAddDevice 函数指南的详细信息,请参阅 MiniportAddDevice Guidelines for PF 微型端口驱动程序

有关如何创建 NIC 交换机的详细信息,请参阅 创建 NIC 交换机