方案 1:关闭设备
1.设备驱动程序:保存专有设备状态。
2.PCI 驱动程序:保存即插即用配置,禁用设备 (中断和 BAR) ,并使用 PCI-PM 寄存器将设备置于 D3 中。
3.ACPI 驱动程序:运行 ASL 代码 (_PS3 和 _OFF,以便不再使用电源资源) 来控制芯片外部的状态。
方案 2:PCI 电源管理和设备驱动程序
- ACPI 驱动程序:运行 ASL 代码 (_PS0 并_ON任何 OnNow 所需的电源资源,) 控制芯片外部的状态。
- PCI 驱动程序:使用 PCI-PM 寄存器将设备置于 D0 中,并还原即插即用配置 (中断和 BAR-这些可能与设备以前) 不同。
- 设备驱动程序:还原设备中的专有上下文。
方案 3:启用唤醒
- 设备驱动程序:在芯片中设置专有寄存器以启用唤醒。 例如,在模式匹配网络唤醒中,这是将模式编程到适配器中的时间。
- PCI 驱动程序:设置 PCI PM 寄存器中的唤醒启用位,以允许设备断言 PME。
- ACPI 驱动程序:在与 PME (关联的芯片集中启用 GPE,如根 PCI 总线) 下列出的 _PRW 对象所述。
方案 4:唤醒
- ACPI 驱动程序:唤醒并扫描 GPE 状态位以查找唤醒事件,禁用设置 GPE 状态位的 GPE,并运行与设置的 GPE 位关联的任何_Lxx或_Exx方法。 为了响应 PCI 总线上的唤醒通知,ACPI 驱动程序将完成 PCI 驱动程序的WAIT_WAKE IRP,以通知 PCI 驱动程序正在唤醒系统。
- PCI 驱动程序:扫描配置空间,查找具有设置 PME 状态位的任何设备。 对于每个设备,它会禁用 PME 并完成该设备的WAIT_WAKE IRP,以通知驱动程序它正在断言唤醒。 当 PCI 驱动程序通过所有 PCI 设备完成未找到任何断言 PME 且 PME 停止断言时,它将停止扫描唤醒设备。
- 设备驱动程序:请求将设备放入 D0 (请参阅方案 2) 并在芯片中设置处理唤醒事件所需的任何专有寄存器。