本文釐清了廠商在了解符合 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 WDK 所述,正確地轉送 POWER IRPs。
案例 1:關閉裝置
設備驅動器:儲存專屬裝置狀態。
PCI 驅動程式:儲存隨插即用組態、停用裝置(中斷和 BAR),並透過 PCI-PM 暫存器將裝置置於 D3。
ACPI 驅動程式:執行 ASL 程式代碼(_PS3 和 _OFF),以對不再使用的電源資源進行控制,調整晶片外部的狀態。
案例 2:PCI 電源管理和設備驅動器
ACPI 驅動程式:針對任何 OnNow 所需的電源資源執行 ASL 程式代碼(_PS0和_ON),以控制晶片外部的狀態。
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),並在處理喚醒事件所需的晶片中設定任何專屬緩存器。
對於 PCI 電源管理和設備驅動器的行動呼籲
如本文所述,將ACPI和 PCI-PM 功能整合到您的裝置。
PCI 電源管理規格可在 PCI-SIG 網站上取得。
ACPI 規格可在 https://www.uefi.org/specifications取得。 此連結會離開 Microsoft.com 網站。
您可以在 找到 https://acpica.org/downloads/binary-toolsACPI 元件架構 (ACPICA) 編譯程式。