PCI 电源管理和设备驱动程序

本文阐明了供应商在符合 PCI 电源管理 (PCI-PM) 的硬件如何与操作系统中的设备驱动程序交互以及 PCI-PM 如何与 ACPI 集成方面遇到的一些困惑。 有关详细信息,请参阅 https://www.uefi.org/specifications

设备驱动程序和 PCI 电源管理

本讨论假定你熟悉 Windows 驱动程序模型 (WDM) 驱动程序如何处理电源管理事件,如当前 Windows DDK 中所述。 通常,设备驱动程序的责任如下:

  • 总线驱动程序:总线驱动程序负责枚举、配置和控制设备。 对于 PCI-PM,PCI 驱动程序负责读取 PCI-PM 寄存器以确定硬件的功能。 当 POWER IRP 请求电源状态更改时,PCI 驱动程序会写入 PCI 电源管理寄存器,以将硬件设置为不同的 Dx 状态。

    当设备启用唤醒时,PCI 驱动程序会写入 PCI-PM 寄存器,使设备能够触发 PME (ACPI 也将执行操作,请参阅下一部分) 。 最后,当 ACPI 确定 PCI 总线正在唤醒系统时,PCI 驱动程序会扫描 PCI 配置空间,查找哪个设备正在断言 PME,在该设备中禁用 PME,并通知驱动程序该设备。

  • 设备驱动程序:设备的特定驱动程序负责保存和还原设备上下文,以及以设备策略所有者的身份请求电源状态更改。 当设备驱动程序收到要求更改较低设备电源状态的 POWER IRP 时,设备驱动程序负责保存以后打开设备所需的任何专有设备上下文。 在某些情况下,可能没有任何可保存内容。

PCI-PM 寄存器严格是 PCI 驱动程序的域 -- IHV 的设备驱动程序不需要访问这些寄存器中的任何一个。 这样做会导致系统无法可靠地工作。 设备驱动程序的责任是仅执行专有操作。

集成 ACPI 和 PCI PM

某些设备(尤其是便携式中的主板视频设备)可能需要 PCI 电源管理和 ACPI 源语言汇编程序 (ASL) 才能完全为设备供电。 PCI 电源管理寄存器将控制设备的内部状态,例如内部时钟和电源平面。 ASL 将控制外部状态(如外部时钟和电源平面),或者对于视频控制器,ASL 将控制视频背光。 请注意,ASL 和 PCI-PM 只能在主板设备上组合使用。

OnNow 体系结构是一种分层体系结构,可以自然地处理设备驱动程序、PCI 驱动程序和 ACPI 驱动程序 (和 ASL) 集成。 以下方案显示了调用驱动程序以处理这些设备的顺序。

注意

要使上述方案正常工作,WDM 驱动程序必须按照当前版本的 Microsoft Windows DDK 中所述正确转发 POWER IRP。

方案 1:关闭设备

  1. 设备驱动程序:保存专有设备状态。
  2. PCI 驱动程序:保存即插即用配置,禁用设备 (中断和 BAR) ,并使用 PCI-PM 寄存器将设备置于 D3 中。
  3. ACPI 驱动程序:运行 ASL 代码 (_PS3 和 _OFF,以便不再使用电源资源) 来控制芯片外部的状态。

方案 2:PCI 电源管理和设备驱动程序

  1. ACPI 驱动程序:运行 ASL 代码 (_PS0 并_ON任何 OnNow 所需的电源资源,) 控制芯片外部的状态。
  2. PCI 驱动程序:使用 PCI-PM 寄存器将设备置于 D0 中,并还原即插即用配置 (中断和 BAR-这些可能与设备以前) 不同。
  3. 设备驱动程序:还原设备中的专有上下文。

方案 3:启用唤醒

  1. 设备驱动程序:在芯片中设置专有寄存器以启用唤醒。 例如,在模式匹配网络唤醒中,这是将模式编程到适配器中的时间。
  2. PCI 驱动程序:设置 PCI PM 寄存器中的唤醒启用位,以允许设备断言 PME。
  3. ACPI 驱动程序:在与 PME (关联的芯片集中启用 GPE,如根 PCI 总线) 下列出的 _PRW 对象所述。

方案 4:唤醒

  1. ACPI 驱动程序:唤醒并扫描 GPE 状态位以查找唤醒事件,禁用设置 GPE 状态位的 GPE,并运行与设置的 GPE 位关联的任何_Lxx或_Exx方法。 为了响应 PCI 总线上的唤醒通知,ACPI 驱动程序将完成 PCI 驱动程序的WAIT_WAKE IRP,以通知 PCI 驱动程序正在唤醒系统。
  2. PCI 驱动程序:扫描配置空间,查找具有设置 PME 状态位的任何设备。 对于每个设备,它会禁用 PME 并完成该设备的WAIT_WAKE IRP,以通知驱动程序它正在断言唤醒。 当 PCI 驱动程序通过所有 PCI 设备完成未找到任何断言 PME 且 PME 停止断言时,它将停止扫描唤醒设备。
  3. 设备驱动程序:请求将设备放入 D0 (请参阅方案 2) 并在芯片中设置处理唤醒事件所需的任何专有寄存器。

有关 PCI 电源管理和设备驱动程序的操作号召