新式待机平台的 Wi-Fi 电源管理

在实现新式待机电源模型的 Windows 硬件平台中,Wi-Fi 设备在平台处于新式待机电源状态时保持其与网络的连接。 对 Wi-Fi 设备进行正确的电源管理(不管是在新式待机期间还是在打开显示屏的时候)对于延长电池使用时间至关重要。

Wi-Fi 是一种无处不在的中程无线技术,可在计算机系统、设备和 Internet 之间实现高带宽、低延迟的通信。

每个支持新式待机的 Windows 硬件平台都必须配备 Wi-Fi 设备或移动宽带 (MBB) 设备。 由于 Wi-Fi 集成更加普遍和广泛,因此预计 Wi-Fi 设备将几乎始终处于启用状态和连接状态。

概述

新式待机平台中的 Wi-Fi 设备必须支持几个关键的电源管理功能,以降低设备和整个平台的功耗。

第一个功能称为省电模式,允许 Wi-Fi 设备在保持连接到接入点的同时降低其功耗。 省电模式可降低功耗,但代价是数据传输延迟增加。 当平台使用电池电源运行时,预计将始终启用省电模式,除非需要低延迟连接(例如,针对 VOIP 呼叫)。 有关详细信息,请参阅 Wi-Fi 自动省电模式

第二个关键的电源管理功能是模式匹配唤醒。 当 Wi-Fi 设备检测到与存储的模式匹配的网络数据包时,此功能允许 Windows 配备 Wi-Fi 设备以唤醒片上系统 (SoC)。 模式匹配唤醒仅在新式待机期间可操作。 启用模式匹配唤醒后,Wi-Fi 设备以极低功耗模式运行,并侦听发往特定系统服务或注册应用程序的传入数据(例如,推送通知和电子邮件)。 同时,硬件平台中的其他组件处于低功耗状态。 有关详细信息,请参阅网络唤醒事件

此外,新式待机平台中的 Wi-Fi 设备必须支持以下运行时电源管理功能:

本文为新式待机平台中的 Wi-Fi 设备提供设计指南,这些设备通过安全数字输入/输出 (I/O) (SDIO) 或 PCI Express (PCIe) 总线连接到 SoC,或物理集成到 SoC 本身。 Microsoft 尚未在新式待机平台中测试通过通用串行总线 (USB) 连接的 Wi-Fi 设备,并且未发布此类设备的设计指南。

Wi-Fi 设备由 Wi-Fi 微型端口驱动程序管理,该驱动程序由 Wi-Fi 设备供应商提供。 Windows 向设备发出电源管理请求 (NDIS OID) 以配置省电模式和模式匹配唤醒。 Windows 在平台进入和退出时启用和禁用模式匹配唤醒新式待机。 Wi-Fi 微型端口驱动程序通过在 SDIO、PCIe 或专有 SoC 总线上配置 Wi-Fi 设备来处理这些请求。

新式待机平台中的 Wi-Fi 设备几乎始终处于开机状态,并且预计将具有高能效。 当没有通过 Wi-Fi 链路传输数据且启用省电模式时,Wi-Fi 设备的平均功耗应低于 10 毫瓦。 如果用户通过启用飞行模式或通过在 Windows 设置应用程序中明确关闭 Wi-Fi 将无线电打开/关闭状态设置为“关闭”,则 Wi-Fi 设备的平均功耗必须低于 1 毫瓦。

设备电源管理模式

Wi-Fi 设备必须支持多种电源管理模式。 每种模式都是设备活动、网络连接和启用模式匹配唤醒的组合。

活动

Wi-Fi 设备已连接到网络并正在主动传输数据。

转换机制:Wi-Fi 设备硬件自主地从连接空闲模式转换到活动模式。

连接空闲

Wi-Fi 设备已连接到网络,但未主动传输数据。

转换机制:

  • Wi-Fi 设备硬件自主地从连接空闲模式转换到活动模式。
  • 设备在主动模式下的功耗将受无线技术(即 802.11a/b/g/n)、与接入点的距离、传输的数据量等因素影响。
连接睡眠

Wi-Fi 设备已连接到接入点,但平台的其余部分处于非常低功耗的状态。 启用模式匹配唤醒,以便 Wi-Fi 设备在一组特定的传入网络数据包上唤醒 SoC。

转换机制:

  • 在 Wi-Fi 设备离开 D0 之前,NDIS 将发送 OID_PM_ADD_WOL_PATTERN 请求以指示 Wi-Fi 微型端口驱动程序添加 LAN 唤醒模式。
  • 为了指示 Wi-Fi 微型端口驱动程序启用模式匹配唤醒,NDIS 将发送 OID_PM_PARAMETERS 请求。
  • NDIS 将发送一个 OID_PNP_SET_POWER 请求,其 NDIS_DEVICE_POWER_STATE 值为 NdisDeviceStateD2(对于 SDIO)或 NdisDeviceStateD3(对于 PCIe)。
断开连接睡眠

Wi-Fi 设备已通电但未连接到接入点,因为范围内没有首选接入点。 平台的其余部分处于非常低功耗的状态。 模式匹配唤醒已启用,网络卸载列表已连接到 Wi-Fi 设备。 Wi-Fi 设备使用网络卸载列表定期扫描要连接的首选网络。

转换机制:

  • Wi-Fi 设备使用网络卸载列表定期扫描要连接的首选网络。
  • 如果在这些定期扫描期间找到匹配的网络,Wi-Fi 设备将唤醒 SoC。
无线电关闭

Wi-Fi 设备仍通电,但无线电(RF 组件)已关闭。

转换机制:

设备断电

Wi-Fi 设备已完全断电。

转换机制:

  • NDIS 将发送一个 OID_PNP_SET_POWER 请求,其 NDIS_DEVICE_POWER_STATE 值为 NdisDeviceStateD3。
  • 如果 Wi-Fi 设备连接到 SDIO 或 PCIe,系统 ACPI 固件将使用从 SoC 到 Wi-Fi 设备的 GPIO 线从 Wi-Fi 设备断电或重置 Wi-Fi 设备。
  • 如果 Wi-Fi 设备集成到 SoC 中,系统固件负责使用专有机制关闭或重置 Wi-Fi 设备。

平均功耗和退出延迟

下表显示了每种电源管理模式退出活动状态时的预期功耗和延迟。 对于这些数字,假设 Wi-Fi 设备始终连接到具有 WPA2-Personal 安全性的单个接入点,但在断开连接睡眠模式和断电模式下除外。


设备电源管理模式 设备电源状态 平均功率消耗 退出延迟到活动状态
Active mode D0 <= 750 毫瓦 空值
连接空闲模式 D0 <= 25 毫瓦 <= 100 毫秒
连接睡眠模式 D2 适用于 SDIO;D3 适用于 PCIe <= 10 毫瓦 <= 300 毫瓦
断开睡眠模式 D2 适用于 SDIO;D3 适用于 PCIe <= 10 毫瓦 <= 300 毫瓦
无线电关闭模式 D0 或 D2 <= 1 毫瓦 <= 2 秒
断电模式(唤醒禁用) D3 <= 1 毫瓦 <= 5 秒

对于 SDIO 连接的设备,D2 是新式待机的最深可唤醒设备电源状态。 对于 PCIe 连接的设备,D3(更具体地说,D3hot 子状态)是新式待机中最深的可唤醒设备电源状态。

Windows 8、Windows 8.1 和 Windows 10 在通过 SDIO 总线连接的脱离 SoC Wi-Fi 设备上支持新式待机。 Windows 8.1 还支持在通过 PCIe 总线连接的非 SoC Wi-Fi 设备上新式待机。

Wi-Fi 设备共享电路时的要求

在某些 Wi-Fi 设备设计中,Wi-Fi 设备与蓝牙和可选的 FM 无线电通信设备共享模拟和射频电路。 在这些 Wi-Fi 设备设计中,Wi-Fi 设备和其他集成通信设备之间不得存在电源状态依赖性。 Wi-Fi 设备必须具有内部电源门控电路,以确保在无线电关闭模式下的平均功耗低于 1 毫瓦。

软件电源管理机制

Wi-Fi 设备的电源管理主要基于 Wi-Fi 微型端口驱动程序从 Windows 网络子系统接收的 NDIS 命令。 Wi-Fi 微型端口驱动程序负责将这些 NDIS 命令(称为 OID 请求)转换为特定于设备的消息,以通过 I/O 总线发送到 Wi-Fi 设备。

开发 NDIS 驱动程序是一项复杂的任务,其范围超出了 Wi-Fi 设备电源管理。 如需帮助理解本节,请查看本机 802.11 无线 LAN 主题。 如果你是 Wi-Fi 开发人员,你应该熟悉 Windows 硬件认证工具包中的网络设备测试集,并将这些测试用作确保 Wi-Fi 设备及其 Wi-Fi 微型端口驱动程序的事实参考运行正常。

Wi-Fi 设备应始终通电并连接到网络,除非新式待机平台处于 S5(关闭)系统电源状态。 因此,无论是在新式待机期间还是在显示器打开时,Wi-Fi 设备的正确电源管理对于系统电池寿命都至关重要。 Wi-Fi 设备的电源管理模式可能会随着设备响应软件请求扫描新网络或设备本身检测到接入点已断开连接而频繁更改。 以下讨论中描述的软件电源管理机制和由此产生的功耗假设 Wi-Fi 设备连接到具有合理信号强度的单个接入点。

Wi-Fi 微型端口驱动程序必须启用以下关键电源管理功能,以确保 Wi-Fi 设备在新式待机期间和显示屏打开时均能高效节能:

以下段落详细讨论了这两个功能的要求。

除了省电模式和模式匹配唤醒之外,Wi-Fi 设备和 Wi-Fi 微型端口驱动程序还必须支持其他几个功能。 有关详细信息,请参阅 Wi-Fi 电源管理的其他要求

省电模式

802.11 规范描述了 Wi-Fi 网络的 Wi-Fi 自动省电模式(又名省电轮询)。 在这种模式下,Wi-Fi 无线电跳过对广播信标子集的轮询,从而降低设备的平均功耗。 当设备处于活动 (D0)、连接空闲 (D0) 或连接睡眠(SDIO 为 D2;PCIe 为 D3)电源管理模式时,Windows 要求 Wi-Fi 设备启用省电模式。 当 Wi-Fi 设备处于无线电关闭电源管理模式时,省电模式没有意义。

当 Wi-Fi 设备处于以下电源管理模式时,Wi-Fi 微型端口驱动程序必须支持并启用省电模式:

  • 主动 (D0)
  • 连接空闲 (D0)
  • 连接睡眠 (D2/D3)

Wi-Fi 微型端口驱动程序必须通过将 DOT11_EXTSTA_ATTRIBUTES 结构的 bAutoPowerSaveMode 成员设置为 TRUE 向 Windows 报告它支持节能模式的自动协商。 为响应此设置,Windows 将向 Wi-Fi 微型端口驱动程序发送 OID_DOT11_POWER_MGMT_MODE_AUTO_ENABLED 请求。 此请求指示驱动程序自动启用省电模式。 Wi-Fi 微型端口驱动程序必须使用远程访问点和 Wi-Fi 设备本身的功能来确定要启用的正确节能级别。

启用自动省电模式后,Windows 可能会向 Wi-Fi 微型端口驱动程序发送 OID_DOT11_POWER_MGMT_REQUEST 请求。 此消息指定四个定义的节能级别之一。 必须将此消息中的节能级别视为对 Wi-Fi 微型端口驱动程序的提示,以了解操作系统或用户当前的节能预期。 当驱动程序无法检测到远程接入点支持省电模式时,可以使用 OID_DOT11_POWER_MGMT_REQUEST 请求返回的值。

模式匹配唤醒

Windows 要求新式待机平台中的所有网络设备支持模式匹配唤醒。 此功能使网络设备能够在 SoC 或芯片组断电时监控网络连接中感兴趣的数据包(通过将传入数据包与设备中存储的模式进行比较),并在检测到匹配模式时唤醒 SoC 或芯片组上的主处理器。 这种从主处理器卸载 Wi-Fi 处理的能力是在新式待机中实现低功耗操作的关键。 在平台进入新式待机并且 Wi-Fi 设备转换到连接睡眠(SDIO 为 D2;PCIe 为 D3)模式之前,Windows 向 Wi-Fi 微型端口驱动程序发送 Wi-Fi 设备必须注意的相关模式的集合。

模式匹配唤醒是新式待机的关键启用功能。 当 Wi-Fi 设备处于连接睡眠 (D2/D3) 模式时,将启用模式匹配唤醒。 在 Wi-Fi 设备进入此模式之前,Windows 会指示设备忽略所有网络数据包,但与一组指定的模式匹配的数据包除外。 Windows 根据当前正在使用的服务和应用程序(例如,推送通知和电子邮件)生成匹配模式。 与 Wi-Fi 设备匹配的卸载模式允许关闭硬件平台的其余部分或在低功耗模式下运行。 同时,Wi-Fi 设备保持打开状态,等待重要的传入网络流量。

若要支持模式匹配唤醒,Wi-Fi 微型端口驱动程序必须首先播发它支持连接睡眠 (D2/D3) 模式,并且能够将系统从 D2/D3 电源状态唤醒。 若要播发模式匹配唤醒支持,Wi-Fi 微型端口驱动程序必须执行以下操作:

  • NDIS_PM_CAPABILITIES 结构的“SupportedWoLPacketPatterns”成员中设置 NDIS_PM_WOL_BITMAP_PATTERN 位,以指示 Wi-Fi 设备支持基于位图模式检测唤醒 SoC。

  • 将 NDIS_PM_CAPABILITIES 结构的 MinPatternWakeUp 成员设置为 NdisDeviceStateD2(对于 SDIO)或 NdisDeviceStateD3(对于 PCIe),以指示当设备处于 D2/D3 电源状态并检测到匹配模式时,Wi-Fi 设备可以唤醒 SoC。

  • 将“NDIS_PM_CAPABILITIES 结构的 NumTotalWoLPatterns 成员设置为小数点 22(或更大)的值。 此值指示 Windows 可以使用最多 22 个(或更多)唯一匹配模式对 Wi-Fi 设备进行编程,以唤醒 SoC。

  • 在 NDIS_PM_CAPABILITIES 结构的 Flags 成员中设置 NDIS_PM_WAKE_PACKET_INDICATION_SUPPORTED 位。 此标志表示 Wi-Fi 设备支持存储和检索导致 Wi-Fi 设备唤醒 SoC 的数据包。

当 Windows 首次检测到系统服务或托管应用程序需要模式匹配唤醒支持时,它将向 Wi-Fi 微型端口驱动程序发送 OID_PM_ADD_WOL_PATTERN 请求,以指定要匹配的模式。 这个请求是在 Wi-Fi 设备转换到连接睡眠模式 (D2/D3) 之前发送的。

在启用模式匹配唤醒的情况下进入连接待机状态

当硬件平台进入新式待机时,Windows 会将 Wi-Fi 设备转换为连接睡眠(SDIO 为 D2;PCIe 为 D3)模式,方法是发送一个 OID_PNP_SET_POWER 请求,该请求将设备电源状态指定为 NdisDeviceStateD2(对于 SDIO)或 NdisDeviceStateD3(对于 PCIe)。 为了响应此请求,Wi-Fi 微型端口驱动程序必须执行以下操作:

  1. 停止向基础总线驱动程序或硬件发送任何新的 I/O 请求。 如果 Wi-Fi 设备位于 SoC 外部并通过 SDIO 连接,则基础总线驱动程序将是 Windows SD 总线驱动程序 Sdbus.sys。 如果 Wi-Fi 设备位于 SoC 外部并通过 PCIe 连接,则基础总线驱动程序将是 Windows PCI 总线驱动程序 Pci.sys。 如果 Wi-Fi 设备已集成到 SoC 中,则底层总线驱动程序将由 SoC 供应商提供。

  2. 等待所有正在进行的 I/O 请求,并完成所有排队的 I/O 请求。

  3. 针对所有已配置的唤醒模式和唤醒事件对 Wi-Fi 设备进行编程。

  4. 将 Wi-Fi 设备转换为正确的低功耗状态 (D2/D3),以达到连接睡眠模式。

  5. 如果 Wi-Fi 设备位于 SoC 外部并通过 SDIO 总线连接:

    1. 将 Wi-Fi 设备配置为使用带外 GPIO 唤醒中断唤醒 SoC。 (有关详细信息,请参阅支持的硬件电源配置。)

    2. 屏蔽 Wi-Fi 设备中断并取消所有相关计时器。 Wi-Fi 微型端口驱动程序必须通过调用 SdBusSubmitRequest 例程将 SDP_FUNCTION_INT_ENABLE 属性设置为 FALSE。

    3. 指示 SD 总线驱动程序停止转发 Wi-Fi 设备中断。 Wi-Fi 微型端口驱动程序必须通过调用 SdBusSubmitRequest 例程将 SDP_SET_CARD_INTERRUPT_FORWARD 属性设置为 FALSE。

    4. 完成 OID_PNP_SET_POWER 请求以获得 NdisDeviceStateD2 状态。

  6. 如果 Wi-Fi 设备位于 SoC 外部并通过 PCIe 总线连接:

    1. 根据 PCIe 标准配置 Wi-Fi 设备以唤醒系统(使用 PM_PME 消息;这将在下一节中进一步详细讨论。)

    2. 屏蔽 Wi-Fi 设备中断。 Wi-Fi 微型端口驱动程序必须通过调用 IoDisconnectInterruptEx 例程来断开中断。

    3. 完成 NdisDeviceStateD3 状态的 OID_PNP_SET_POWER 请求。

当 Wi-Fi 设备处于连接睡眠模式时,设备应保持与关联 Wi-Fi 网络的连接,检查匹配的唤醒模式,并在发生网络状态更改时唤醒 SoC。 例如,如果接入点突然断开关联,Wi-Fi 设备必须能够唤醒 SoC。

下图显示了软件和硬件组件的配置,以支持位于 SoC 外部并通过 SDIO 总线与 SoC 通信的 Wi-Fi 设备。 a wi-fi device that is connected via sdio

退出新式待机以匹配模式

当 Wi-Fi 设备检测到具有匹配模式的数据包时,必须首先将此数据包保存在本地非易失性存储中,以便以后由 Wi-Fi 微型端口驱动程序检索。 Windows 将让驱动程序检索有关数据包的信息,以便可以将传入的数据包通知相应的系统服务或应用程序。

接下来,Wi-Fi 设备必须生成中断才能唤醒 SoC。

如果 Wi-Fi 设备位于 SDIO 端口上的 SoC 外部,则应通过带外 GPIO 中断传送中断,并导致 SoC 唤醒。 然后,ACPI 子系统确定 Wi-Fi 设备的 GPIO 中断是否已导致 SoC 唤醒,并将通过完成 NDIS 端口驱动程序代表 Wi-Fi 微型端口驱动程序在 ACPI 驱动程序中自动保持挂起的等待唤醒 IRP(IRP_MN_WAIT_WAKE 请求)来做出响应。

如果 Wi-Fi 设备位于 PCIe 总线上的 SoC 外部,并且 ACPI 固件向操作系统授予对本机 PCIe 功能的控制,则使用以下步骤根据 PCIe 规范处理唤醒事件:

  1. 当 Wi-Fi 设备进入低功耗状态时,NDIS 端口驱动程序会自动将等待唤醒 IRP 沿 Wi-Fi 驱动程序堆栈发送到收件箱 PCI 总线驱动程序 Pci.sys(不是 ACPI 驱动程序,Acpi.sys),后者将 IRP 标记为等待未来唤醒事件的待处理。

  2. 当 Wi-Fi 设备需要唤醒时,它应向 PCIe 层次结构的根目录生成 WAKE 通知。 为此,设备通过 PCIe 总线发送带内 PM_PME 消息。

  3. 唤醒通知将路由到 Wi-Fi 设备上方 PCIe 层次结构的根端口。 根端口将处于 D0 电源状态,并且预计会对收件箱 PCI 总线驱动程序 Pci.sys 产生 PME 中断。

  4. 根端口上的 PCI 总线驱动程序将该根端口下的整个设备层次结构返回到 D0。

  5. PCI 总线驱动程序检查层次结构中每个设备的 PME_Status 位,以确定它是否发出了 WAKE 通知。 如果设置了 Wi-Fi 设备的 PMEStatus 位,则 PCI 总线驱动程序将完成该设备挂起的任何未完成的等待唤醒 IRP,这会导致在步骤 1 中挂起的 IRP 返回到 NDIS。

有关详细信息,请参阅局域网唤醒的低功耗

如果将 Wi-Fi 设备集成到 SoC 中,则该设备的操作类似于 SoC 外 SDIO 端口实现所描述的操作。 SoC 供应商必须在 ACPI 固件的 DSDT 表中描述该设备。 然后,ACPI 子系统将枚举 Wi-Fi 设备并完成等待唤醒 IRP。 我们建议使用集成了 Wi-Fi 设备的 SoC 的系统集成商在 Wi-Fi 设备集成和驱动程序开发方面与 SoC 供应商密切合作。

等待唤醒 IRP 完成后,NDIS 将首先将沿着堆栈向下方向将 D0 IRP(DevicePowerState 类型的 IRP_MN_SET_POWER 请求)发送到总线驱动程序。 在完成 D0 IRP 之前,NDIS 将向 Wi-Fi 微型端口驱动程序发送目标状态为 NdisDeviceStateD0 的 OID_PNP_SET_POWER 请求。 作为响应,Wi-Fi 微型端口驱动程序必须执行以下操作:

  1. 检查 Wi-Fi 设备硬件以确定唤醒中断的原因。 Wi-Fi 微型端口驱动程序必须通过生成 NDIS_STATUS_PM_WAKE_REASON 状态事件来通知 NDIS 唤醒中断的原因。 如果唤醒中断是由传入的网络数据包引起的,则驱动程序必须先通过常规 NDIS 数据路径将此数据包传递到 NDIS,然后再将此数据包传递到 NDIS。

  2. 还原完成 Wi-Fi 设备向连接空闲 (D0) 模式的转换所需的任何寄存器状态或其他硬件上下文。

  3. 如果 Wi-Fi 设备位于 SoC 外部并通过 SDIO 连接,则 Wi-Fi 微型端口驱动程序必须:

    1. 指示 SD 总线驱动程序将中断转发到 Wi-Fi 微型端口驱动程序。 Wi-Fi 微型端口驱动程序必须通过调用 SdBusSubmitRequest 例程将 SDP_SET_CARD_INTERRUPT_FORWARD 属性设置为 FALSE。

    2. 屏蔽 Wi-Fi 设备中断。 Wi-Fi 微型端口驱动程序必须通过调用 SdBusSubmitRequest 例程将 SDP_FUNCTION_INT_ENABLE 属性设置为 TRUE。

  4. 完成 IRP_MN_SET_POWER 请求。

模式匹配唤醒和将 SoC 从低功耗空闲状态唤醒的能力对于在新式待机期间保持网络连接至关重要。 Wi-Fi 驱动程序开发人员应与 Microsoft 密切合作,开发实现这些所需功能的 Wi-Fi 微型端口驱动程序。

Wi-Fi 电源管理的其他要求

除了省电模式和模式匹配唤醒之外,Wi-Fi 设备和微型端口驱动程序还必须支持新式待机平台中 Wi-Fi 设备的其他几个运行时电源管理功能。 这些功能对于降低 Wi-Fi 设备和整体硬件平台的功耗至关重要。 如前所述,Wi-Fi 设备和微型端口驱动程序必须支持以下功能:

无线电打开/关闭状态

Wi-Fi 微型端口驱动程序必须响应 Windows 请求才能更改 Wi-Fi 设备的无线电开/关状态。 用户可以通过启用飞行模式或在 Windows 的“设置”应用程序中显式关闭 Wi-Fi,将无线电开/关状态更改为关闭。

当用户将 Wi-Fi 设备的无线电开/关状态更改为关闭时,Windows 会向 Wi-Fi 微型端口驱动程序发送值为 FALSE 的 OID_DOT11_NIC_POWER_STATE 请求。 作为响应,Wi-Fi 微型端口驱动程序必须使用带内消息从 Wi-Fi 设备中的无线电(RF 子系统)中断开电源,并将设备置于平均消耗不超过 1 毫瓦的电源状态。

当用户将 Wi-Fi 设备的无线电开/关状态更改为开启时,Windows 会向 Wi-Fi 微型端口驱动程序发送值为 TRUE 的 OID_DOT11_NIC_POWER_STATE 请求。 作为响应,Wi-Fi 微型端口驱动程序必须使用带内消息向 Wi-Fi 设备中的无线电供电,并将设备返回到连接的空闲电源模式。

当 Wi-Fi 设备的无线电开/关状态设置为关闭时,Wi-Fi 设备可以处于 D0 或 D2 电源状态。 NDIS 将始终将 Wi-Fi 设备转换为 D0 电源状态,然后再通知 Wi-Fi 微型端口驱动程序无线电开/关状态的更改。 如果用户之前已将无线电开/关状态设置为关闭,则当硬件平台进入新式待机时,Wi-Fi 微型端口驱动程序不需要执行任何特定操作。 如果无线电开/关状态设置为关闭,无线电将在新式待机中保持关闭状态,并且在系统退出新式待机后,无线电开/关状态仍将设置为关闭,直到用户将状态更改为开启。

网络列表卸载 (NLO)

网络列表卸载 (NLO) 功能允许将 Wi-Fi 配置文件信息复制到 Wi-Fi 设备中的本地存储。 Wi-Fi 设备使用此配置文件信息扫描有限数量的通道以查找首选网络(而不是扫描所有接入点的所有可用通道),从而降低 Wi-Fi 设备的功耗。 新式待机平台中的 Wi-Fi 设备和 Wi-Fi 微型端口驱动程序必须支持网络列表卸载。 此支持包括处理 OID_DOT11_OFFLOAD_NETWORK_LIST 请求。

若要播发 NLO 功能,Wi-Fi 微型端口驱动程序必须在 NDIS_PM_CAPABILITIES 结构的 MediaSpecificWakeUpEvents 成员中设置 NDIS_WLAN_WAKE_ON_NLO_DISCOVERY_SUPPORTED 标志。

ARP/NS 卸载

Wi-Fi 微型端口驱动程序和 Wi-Fi 设备必须支持 ARP/NS 卸载,这允许 Wi-Fi 设备自主响应常见的网络请求。 ARP/NS 卸载功能可避免唤醒具有简单且可预测响应的常见网络请求的 SoC。 若要指示对 ARP/NS 卸载的支持,Wi-Fi 微型端口驱动程序必须在 NDIS_PM_CAPABILITIES 结构的“支持的协议卸载”成员中设置 NDIS_PM_PROTOCOL_OFFLOAD_ARP_SUPPORTED 和 NDIS_PM_PROTOCOL_OFFLOAD_NS_SUPPORTED 标志。

此外,Wi-Fi 微型端口驱动程序和 Wi-Fi 设备必须支持至少一个 IPv4 ARP 卸载地址和至少两个 DIPv6 NS 卸载地址。 Wi-Fi 微型端口驱动程序必须将 NumArpOffloadIPv4Addresses 成员的 NDIS_PM_CAPABILITIES 结构设置为值 1 或更大。 Wi-Fi 微型端口驱动程序必须将 NumNSOffloadIPv6 地址成员的值设置为 NDIS_PM_CAPABILITIES 结构的值为 2 或更大。 Windows 使用 OID_PM_ADD_PROTOCOL_OFFLOAD 请求向 Wi-Fi 微型端口驱动程序提供 ARP 和 NS 卸载地址。

D0 数据包合并

Wi-Fi 设备和 Wi-Fi 微型端口驱动程序必须支持 D0 数据包合并,这是一项功能,使 Wi-Fi 设备能够对常见的低优先级网络数据包进行批处理,以便 SoC 进行批量检索。 此功能可减少核心芯片组中断的总量和频率,以便 SoC 在低功耗状态下可以停留更长时间,从而延长电池寿命。 Wi-Fi 微型端口驱动程序通过在 NDIS_RECEIVE_FILTER_CAPABILITIES 结构中设置多个值来通告对 D0 数据包合并的支持。

以下成员列表汇总了 Wi-Fi 设备需要支持的 D0 数据包合并功能以及 Wi-Fi 微型端口驱动程序需要报告的功能。 Wi-Fi 微型端口驱动程序必须在 NDIS_RECEIVE_FILTER_CAPABILITIES 结构中指定这些功能。 对于每个成员,该列表显示此结构的特定成员所需的最小值。 NDIS 将向 Wi-Fi 微型端口驱动程序发送 OID_RECEIVE_FILTER_SET_FILTER 请求,以设置数据包合并筛选器。 数据包合并筛选器指示需要在 Wi-Fi 设备上的合并缓冲区中批处理哪些数据包。

SupportedQueueProperties

NDIS_RECEIVE_FILTER_PACKET_COALESCING_SUPPORTED_ON_DEFAULT_QUEUE

注意:   HardwareReceiveFilterCapabilities 中必须始终存在此标志,以指示硬件功能。 当且仅当 *PacketCoalescing 高级关键字为非零时,此标志必须存在于 CurrentReceptiveFilterCapability 中。
EnabledFilterTypes,最小值:

NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED

SupportedFilterTests,最小值:

NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_EQUAL_SUPPORTED
NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_NOT_EQUAL_SUPPORTED
NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_MASK_EQUAL_SUPPORTED

SupportedHeaders,最小值:

NDIS_RECEIVE_FILTER_MAC_HEADER_SUPPORTED
NDIS_RECEIVE_FILTER_ARP_HEADER_SUPPORTED
NDIS_RECEIVE_FILTER_IPV4_HEADER_SUPPORTED
NDIS_RECEIVE_FILTER_IPV6_HEADER_SUPPORTED
NDIS_RECEIVE_FILTER_UDP_HEADER_SUPPORTED

SupportedMacHeaderFields,最小值:

NDIS_RECEIVE_FILTER_MAC_HEADER_DEST_ADDR_SUPPORTED
NDIS_RECEIVE_FILTER_MAC_HEADER_PROTOCOL_SUPPORTED
NDIS_RECEIVE_FILTER_MAC_HEADER_PACKET_TYPE_SUPPORTED

SupportedARPHeaderFields,最小值:

NDIS_RECEIVE_FILTER_ARP_HEADER_OPERATION_SUPPORTED
NDIS_RECEIVE_FILTER_ARP_HEADER_SPA_SUPPORTED
NDIS_RECEIVE_FILTER_ARP_HEADER_TPA_SUPPORTED

SupportedIPv4HeaderFields,最小值:

NDIS_RECEIVE_FILTER_IPV4_HEADER_PROTOCOL_SUPPORTED

SupportedIPv6HeaderFields,最小值:

NDIS_RECEIVE_FILTER_IPV6_HEADER_PROTOCOL_SUPPORTED

SupportedUdpHeaderFields,最小值:

NDIS_RECEIVE_FILTER_UDP_HEADER_DEST_PORT_SUPPORTED

MaxFieldTestsPerPacketCoalescingFilter,最小值:

5

MaxPacketCoalescingFilters,最小值:

10

当不再需要以前设置的数据包合并筛选器时,NDIS 发送 OID_RECEIVE_FILTER_CLEAR_FILTER 请求以清除这些筛选器。 NDIS 可能会动态设置和清除单个数据包合并筛选器。 Wi-Fi 微型端口驱动程序需要始终跟踪当前数据包合并筛选器集,但仅当 Wi-Fi 设备处于 D0 电源状态(并且处于活动模式或连接空闲模式)时,才能应用合并。

动态 DTIM 配置

Wi-Fi 微型端口驱动程序必须支持传递流量指示消息 (DTIM) 间隔的动态配置。 在连接休眠期间动态将 DTIM 间隔调整为更大的值(SDIO 为 D2;PCIe 为 D3)模式将允许 Wi-Fi 设备消耗非常少的功率,同时持续保持与接入点的连接。 在连接休眠 (D2/D3) 模式下,由较长的 DTIM 间隔导致的额外延迟并不重要。

Wi-Fi 微型端口驱动程序应通过实现以下指南来支持动态 DTIM 间隔:

  • Wi-Fi 设备(在 STA 模式下)必须向接入点播发侦听间隔值 10。 此值将强制接入点缓存 Wi-Fi 客户端的数据,间隔为 10 个信标。

  • 若要准备 Wi-Fi 设备以进入连接睡眠 (D2/D3) 模式,驱动程序必须将 DTIM 间隔的长度更改为大约 500 毫秒。 要指定的 DTIM 值取决于正常流量指示消息 (TIM) 的值。 例如,如果 TIM 当前为 100 毫秒,则 Wi-Fi 设备应使用 DTIM 值 5(间隔为 500 毫秒)。 如果 TIM 当前为 300 毫秒,则 Wi-Fi 设备应使用 DTIM 值 2(间隔为 600 毫秒)。

当 Wi-Fi 设备转换回连接空闲 (D0) 模式时,Wi-Fi 设备必须恢复到与接入点协商的原始 DTIM。

Wi-Fi 连接唤醒触发器

当 Wi-Fi 设备在新式待机期间连接到网络时,Wi-Fi 设备和 Wi-Fi 微型端口驱动程序还必须支持基于一组 Wi-Fi 连接唤醒触发器唤醒 SoC。 要求如下:

  • 在新式待机中执行 GTK (WPA/WPA2) 和 IGTK 刷新 (WPA2)。
  • 支持在 GTK 和 IGTK 握手错误时唤醒。
  • 支持在收到 802.1x EAP-Request/Identity 数据包时唤醒。
  • 支持收到四方握手请求时唤醒。
  • 支持与当前接入点的关联丢失时唤醒。

在这些 Wi-Fi 特定事件上唤醒 SoC 可以让 Windows 在 Wi-Fi 连接处于危险中或 Wi-Fi 设备失去与关联接入点的连接时收到通知。 作为响应,Windows 可能会指示 Wi-Fi 微型端口驱动程序和设备连接到备用 Wi-Fi 网络。 或者,Windows 可能改为使用移动宽带 (MBB) 无线电来建立连接。 Wi-Fi 微型端口驱动程序必须在 NDIS_PM_CAPABILITIES 结构的 SupportedWakeUpEvents 成员中指定每个唤醒触发功能(例如,通过设置 NDIS_WLAN_WAKE_ON_AP_ASSOCIATION_LOST_SUPPORTED 标志)。

支持的硬件电源配置

Windows 支持新式待机平台中 Wi-Fi 设备的三种硬件电源管理配置。 Wi-Fi 设备必须位于 SoC 外部并通过 SDIO 或 PCIe 连接,或者必须物理集成到 SoC 芯片中并通过专有内部总线连接。

系统设计人员不得使用 USB 总线连接将 Wi-Fi 设备集成到新式待机平台中。

在 SoC 外部,通过 SDIO 连接

上述框图所示的配置中,Wi-Fi 设备位于 SoC 外部,并通过 SDIO 总线连接到 SoC。 Wi-Fi 设备可能有一个或多个引脚连接到 SoC 上的 GPIO 引脚。 Wi-Fi 设备必须连接到始终通电的电源轨,或直接连接到电源管理 IC (PMIC)。

Wi-Fi 设备必须能够通过从 Wi-Fi 设备上的中断输出引脚路由到 SoC 上的 GPIO 引脚的带外信号线生成唤醒中断。 设备的中断线必须连接到 SoC 上始终开启的 GPIO 引脚,以便 Wi-Fi 设备的唤醒信号可以在新式待机期间将 SoC 从其最低功耗状态唤醒。 系统集成商必须使用 ACPI GpioInt 宏来描述 ACPI 命名空间中 Wi-Fi 设备下的 GPIO 中断连接。 GpioInt 宏的 Shared 字段必须设置为 ExclusiveAndWake,以表明 GPIO 中断能够将系统从睡眠中唤醒。 ExclusiveAndWake 设置使 ACPI 驱动程序能够自动完成 Wi-Fi 设备的等待唤醒 IRP,如果设备在中断时处于连接睡眠 (D2) 模式,则将设备返回到连接空闲 (D0) 模式 SoC。 ACPI 固件必须表明 Wi-Fi 设备可以将平台从连接睡眠 (D2) 模式唤醒。 为此,系统集成商必须在 Wi-Fi 设备下的 ACPI 命名空间中包含 _S4W 和 _S0W 对象,如以下示例所示:

    Name(_S0W, 2)
    Name(_S4W, 2)

此示例中的值 2 表示 D2 设备电源状态。

作为一个选项,Wi-Fi 设备可以有一个输入引脚,该引脚接受来自 SoC 上的 GPIO 输出引脚的启用或复位信号。 GPIO 引脚由系统固件控制。 GPIO 引脚可以切换为完全断电或重置 Wi-Fi 设备。 如果此类 GPIO 引脚用于启用或重置 Wi-Fi 设备,则系统集成商必须在 GPIO 操作区域中公开此引脚。 系统集成商还必须在 ACPI 命名空间中的 Wi-Fi 设备下包含 _PS0 和 _PS3 控制方法。

_PS3 方法的实现必须通过 GPIO 操作区域改变 GPIO 输出引脚的状态,从而关闭 Wi-Fi 设备的电源或将其重置。 如果 Wi-Fi 设备有特定的复位时序要求,系统集成商必须在 ACPI 固件中实现这些要求,方法是使用 ACPI 睡眠方法延迟执行或将复位线保持在所需的信号电平一段时间。

_PS0 控制方法的实现必须可靠地为 Wi-Fi 设备供电并使设备运行。

在 SoC 外部,通过 PCIe 连接

在此配置中,Wi-Fi 设备位于 SoC 外部并连接到 PCIe 总线。 当设备在连接睡眠模式或断开睡眠模式下运行时,设备处于 D3 设备电源状态。 在 D3 中,设备保持在 D3hot 子状态,不会进入 D3cold 子状态。 Wi-Fi 设备必须连接到始终通电的系统电源轨,或直接连接到系统电源管理 IC (PMIC)。

注意:Wi-Fi 硬件应使用 PCI 架构方法来生成唤醒事件 (PME)。   

在 D3 中时,设备必须能够通过发送通过 PCIe 总线在带内传播的 PM_PME 消息来发出唤醒事件的信号。 唤醒事件将从 PCIe 根端口生成一个中断,该中断将由收件箱 PCI 总线驱动程序 Pci.sys 处理。

要授予操作系统对本机 PCIe 功能的控制权,ACPI 固件必须在 ACPI 命名空间中包含 _OSC 控制方法。 此外,ACPI 命名空间必须包含一个 _S0W 对象,以指示 Wi-Fi 设备可以将平台从连接睡眠模式或断开睡眠模式唤醒。 此对象必须位于 ACPI 命名空间中的 Wi-Fi 设备下,并如以下示例所示声明:

    Name(_S0W, 3)

下图显示了软件和硬件组件的配置,以支持位于 SoC 外部并通过 PCIe 总线与 SoC 通信的 Wi-Fi 设备。

a wi-fi device that is connected via pcie

集成到 SoC 中

如果 Wi-Fi 设备集成到 SoC 中,则需要 Wi-Fi 微型端口驱动程序和专有 SoC 总线驱动程序之间的紧密耦合。 此驱动程序的实现超出了本文档的范围。 但是,Wi-Fi 微型端口驱动程序必须实现软件电源管理机制中描述的所有功能。

系统集成商应联系 SoC 供应商,了解直接集成到 SoC 中的 Wi-Fi 设备的 ACPI 实施细节。

测试和验证

Wi-Fi 设备的测试和验证应侧重于直接测量功耗并验证模式匹配唤醒是否正常工作。

设备功耗的直接测量是 Wi-Fi 设备测试和验证的关键部分。 因为当平台未处于 S5(关机)系统电源状态时,Wi-Fi 设备几乎总是上电的,所以系统集成商必须在许多不同的系统场景和配置中测试和验证 Wi-Fi 功耗。 对于下表中显示的两种连接,我们建议直接测量 Wi-Fi 设备的功耗。


场景 目标平均功率 注释
飞行模式,无线电关闭
  • 屏幕打开,D0 状态
<= 1 毫瓦 在显示屏打开时以及新式待机期间,无线电都有可能会关闭。 无线电关闭时,D0 和 D2 的平均功耗不得超过 1 毫瓦。
屏幕亮起,空闲
  • 自动状态下启用的省电模式
  • 无主动数据传输
  • DTIM 配置为接入点支持
  • WPA2-个人安全
<= 10 毫瓦 应使用连接到各种消费类和商业 Wi-Fi 接入点的 Wi-Fi 设备执行测试。
连接睡眠
  • 屏幕关闭,模式匹配唤醒启用,D2 状态
  • DTIM 配置为 5
  • WPA2-个人安全
<= 10 毫瓦

电源管理清单

系统集成商和 SoC 供应商应使用下面的清单来验证他们的 Wi-Fi 设备和 Wi-Fi 微型端口电源管理设计是否与 Windows 8 和 Windows 8.1 兼容。

注意 Windows 硬件认证工具包包括一组广泛的 Wi-Fi 驱动程序测试,以帮助确保 Wi-Fi 设备与 Windows 8 和 Windows 8.1 兼容。 我们鼓励 Wi-Fi 设备供应商和 Wi-Fi 微型端口驱动程序开发人员查看 Windows 硬件认证工具包测试,并在设计周期中尽早使用它们来验证其驱动程序实现。

  • Wi-Fi 设备供应商必须开发执行以下操作的驱动程序:

    • 支持模式匹配唤醒。
    • 支持省电模式。
    • 支持打开/关闭无线电。
    • 支持网络列表卸载 (NLO)。
    • 支持 D0 数据包合并。
    • 支持 AP 断开连接唤醒和其他 Wi-Fi 唤醒触发器。
    • 支持 ARP/NS 卸载。
    • 支持动态 DTIM 配置。
    • 通过 Windows 硬件认证工具包中的所有适用网络测试。
  • 如果 Wi-Fi 设备位于 SoC 外部并通过 SDIO 连接,则系统集成商必须开发硬件和固件,以使 Wi-Fi 设备执行以下操作:

    • 将 Wi-Fi 唤醒中断从 Wi-Fi 设备路由到 SoC 上始终开启的 GPIO 引脚。

    • 在 ACPI 命名空间中的 Wi-Fi 设备下包含 GPIOInt 宏,并将 Shared 字段设置为 ExclusiveAndWake。

    • 在 ACPI 命名空间中的 Wi-Fi 设备下包含 _S4W 对象,D2 的最深唤醒状态为 0x2。 指定为“Name(_S4W, 2)”。

    • 在 ACPI 命名空间中的 Wi-Fi 设备下包含 _S0W 对象,D2 的最深唤醒状态为 0x2。 指定为“Name(_S0W, 2)”。

    • 将任何电源启用或复位信号从 SoC 上的 GPIO 输出引脚路由到 Wi-Fi 设备。

    • 描述 GPIO 操作区域中可选的电源使能或复位 GPIO 输出引脚。

    • 提供 _PS3 和 _PS0 控制方法和/或 _PRn 电源参考。 这些条目应位于 ACPI 命名空间中的 Wi-Fi 设备下。

    • 实现 _PS3 方法或电源资源方法以断开 Wi-Fi 设备的电源。

    • 实现 _PS0 方法或电源资源方法以恢复 Wi-Fi 设备的电源。

    • 在 _PS3 和 _PS0 方法的实现中,包括任何特定于设备的上电或复位排序时序。 可以使用 Sleep 方法来延迟 ACPI 方法的执行。

  • 如果 Wi-Fi 设备位于 SoC 外部并通过 PCIe 连接,则系统集成商必须开发硬件和固件,以使 Wi-Fi 设备执行以下操作:

    • 在 ACPI 命名空间中包含一个 _OSC 控制方法,以授予操作系统对本机 PCIe 功能的控制权。

      在 ACPI 命名空间中的 Wi-Fi 设备下包含 _S4W 对象,D3 的最深唤醒状态为 0x3。 指定为“Name(_S4W, 3)”。

  • 系统集成商必须通过执行以下操作来测试和验证 Wi-Fi 设备的正确电源管理:

    • 验证 Wi-Fi 设备在无线电关闭模式下的平均功耗是否小于 1 毫瓦。

    • 验证 Wi-Fi 设备在连接睡眠(SDIO 为 D2;PCIe 为 D3)模式或连接空闲 (D0) 模式且未主动传输任何数据时的平均功耗小于 10 毫瓦.

    • 验证 Wi-Fi 微型端口是否正确支持模式匹配唤醒,并且能够在检测到匹配模式时将 SoC 从其最深空闲状态唤醒。

    • 验证 Wi-Fi 设备是否可以在设备失去与关联接入点的连接时将 SoC 从其最深空闲状态唤醒。

    • 验证 Wi-Fi 设备不会对 SoC 产生虚假唤醒。

    • 使用 Windows 硬件认证工具包中提供的测试来验证 Wi-Fi 设备是否正确实现了网络列表卸载 (NLO)、ARP/NS 卸载和 D0 数据包合并。