设备的 D3cold 功能
在作为设备的电源策略所有者 (PPO) 的驱动程序允许设备在计算机保持 S0) 时进入 D3cold (之前,驱动程序必须验证设备是否响应,并在设备进入 D3cold 后继续正常运行。
对于即插即用 (PnP) 设备,操作系统通常从父总线驱动程序获取有关设备的 D3cold 功能的信息。
例如,如果设备连接到 PCI 或 PCI Express 总线,则设备的 PCI 配置空间包含一个指示设备功能的电源管理寄存器块。 此块中的功能标志指定设备电源状态,设备可以从中向电源管理事件发出信号,或 PME (唤醒事件) 的 PCI 术语。 这些状态可能包括 D3hot 和 D3cold。 有关 PCI 电源管理的详细信息,请参阅 PCI 总线电源管理接口规范。
如果设备必须能够从它进入的任何低功率 Dx 状态发出唤醒事件信号,则设备不应进入 D3cold,除非设备、父总线控制器和硬件平台支持从 D3cold 发出唤醒事件信号。
设备的 KMDF 驱动程序调用 WdfDeviceAssignS0IdleSettings 方法,使设备能够在设备可以发出唤醒事件信号的最低功率状态下空闲。 从 KMDF 版本 1.11 开始, WdfDeviceAssignS0IdleSettings 将 D3cold 包含在可能的低功率 Dx 状态范围内。 仅当设备、父总线驱动程序和 ACPI 系统固件支持从 D3cold 发出唤醒事件的信号时,此方法才允许设备在 D3cold 中空闲。
设备的 WDM 驱动程序必须决定设备空闲时要将设备移动到哪个低功耗 Dx 状态。 (相反, WdfDeviceAssignS0IdleSettings 会自动选择此 Dx 状态,以便驱动程序不必。) 如果设备必须能够从它进入的任何低功率 Dx 状态发出唤醒事件信号,驱动程序可以调用 GetIdleWakeInfo 例程来确定设备可从中发出唤醒事件信号的最低功率设备电源状态。 若要获取此信息, GetIdleWakeInfo 会查询基础总线驱动程序和 ACPI 系统固件。 根据 GetIdleWakeInfo 中的信息,驱动程序可以调用 SetD3ColdSupport 例程来启用或禁用设备到 D3cold 的转换。
设备可能不需要能够发出来自 D3cold 的唤醒事件信号。 设备可能只是为了响应软件启动的操作,才需要从 D3cold 转换到 D0。 例如,如果驱动程序收到设备的 I/O 请求,则驱动程序可能需要唤醒设备。 少数例外,此类设备的驱动程序可以允许设备进入 D3cold。 一个可能的例外是需要大量时间才能从 D3cold 转换到 D0 的设备。 例如,显示设备可能包含大量需要在设备进入 D3cold 之前保存的内存,并在设备退出 D3cold 后还原这些内存。
有关 D3cold 的 ACPI 支持的详细信息,请参阅 D3cold 的固件要求。