本文将介绍设计人员将 PCI 纳入新式待机系统的注意事项。
为了满足 DRIPS 要求,通常建议 PCI 设备的驱动程序尽可能选择加入 D3Cold 支持。 对于外部连接的设备(例如通过 Thunderbolt™ 连接),建议驱动程序支持 D3Cold,以便系统进入 DRIPS。
下面是通用 PCI 电源管理和有关 D3Cold 支持的信息的概述。 有关特定于设备类的 D3Cold 注意事项,请参阅 设备特定设计下的单个设备页。
PCI 电源管理概述
PCI 电源管理(PCI-PM)需要在总线驱动程序和设备驱动程序之间进行协作。 在 PCI-PM 中,PCI 总线驱动程序负责读取 PCI-PM 寄存器并确定设备的功能。 它还会修改 PCI-PM 寄存器,将设备设置为 Dx 状态,以响应相应的电源 IRP。 设备驱动程序作为电源策略所有者,负责请求更改设备的电源状态。 它还必须在电源状态变化时保存和还原设备特定的上下文。
某些 On-SoC 设备还需要 ACPI 驱动程序参与电源管理流,因为他们需要 ACPI 源语言汇编程序(ASL)才能完全管理设备。
有关 PCI 电源管理(PCI-PM)兼容硬件如何与作系统中的设备驱动程序交互以及如何 PCI-PM 与 ACPI 集成的详细信息,请参阅 PCI 电源管理和设备驱动程序。
在驱动程序中支持 D3cold
建议根端口支持 D3(已准备好 L2/L3 的 D3.cold 终结点)。 通常,还建议设备驱动程序尽可能地选择加入 D3Cold 支持。 在现代待机系统中,无法进入 D3Cold 状态的设备可能会阻止其他设备进入低功耗的 Dx 状态,从而阻止系统进入 DRIPS。
设备驱动程序是设备的电源策略负责人,负责确定其设备是否可以支持 D3Cold。 在为设备启用 D3Cold 之前,设备驱动程序必须确保设备在输入 D3Cold 后仍可正常运行。 例如,如果设备在 D3Cold 中需要唤醒功能,驱动程序必须验证系统是否有足够的支持。 有关如何确定设备的 D3Cold 功能的详细信息,请参阅设备的 D3Cold 功能。
驱动程序应使用以下清单来验证平台支持,并决定是否为其设备启用 D3cold 支持:
- 如果设备不需要从 D3Cold 状态唤醒,则由驱动程序负责确定设备是否支持 D3Cold。
- 如果设备需要从 D3Cold 状态唤醒,WDM 驱动程序应调用 GetIdleWakeInfo 例程,以确定设备可以发出唤醒事件信号的最低功耗设备电源状态,并据此决定是否启用 D3Cold。 KMDF 驱动程序应调用 WdfDeviceAssignS0IdleSettings 例程,以使设备在最低功率设备电源状态下空闲,在该状态下设备可以发出唤醒事件信号。
有关用于支持从 Dx 状态唤醒的父总线驱动程序和 ACPI 固件要求的详细信息,请参阅以下文档:D3cold 的固件要求。 有关在设备驱动程序中支持 D3Cold 的更多详细信息,请参阅 驱动程序中的支持 D3Cold。