共用方式為


Component-Level 電源管理

從 Windows 8 開始,電源管理架構 (PoFx) 可讓驅動程式管理裝置中個別元件的電源狀態。 元件層級電源管理與裝置層級電源管理並存。 如需簡介,請參閱 Power Management Framework 概觀

此頁面說明適用於 Component-Level 電源管理的PoFx API。

若要註冊要由PoFx管理的裝置,驅動程式會呼叫 PoFxRegisterDevice 例程。 驅動程式會將這個例程傳遞 PO_FX_DEVICE 結構,其中包含其他數據以及 PO_FX_COMPONENT 結構的陣列。 此陣列中的每個元素都會描述裝置中元件的 Fx 電源狀態,以及每個 Fx 狀態的屬性。 (至少,不支援元件層級電源管理的元件只會實作 F0 狀態。特定元件中特定 Fx 電源狀態的屬性是由包含下列值的 PO_FX_COMPONENT_IDLE_STATE 結構所描述:

  • 轉換延遲,這是從這個 Fx 狀態轉換為 F0 (完全開啟) 狀態所需的時間。
  • 居住要求,是指元件必須在這個 Fx 狀態停留的時間,以使转移到該狀態是值得的。
  • 名義電源,這是這個 Fx 狀態元件所耗用的電源。

PoFx 會使用這項資訊(除了其他全系統輸入和相依性之外)來做出智慧決策,以決定元件在任何特定時間應該處於哪個 Fx 電源狀態。 PoFx 必須平衡兩個競爭目標。 首先,閑置的元件應該設定為盡可能少耗電量。 其次,元件必須準備好快速從低功率的 Fx 狀態切換到 F0,以保持裝置一律開啟和一律連線的外觀。

只有在裝置處於 D0(完全開啟)電源狀態時,才能執行元件層級電源管理。 當裝置處於 D1(幾乎開啟)、D2(幾乎關閉)或 D3 電源狀態時,裝置無法存取。 當裝置處於 D0 狀態時,只有驅動程式正在使用的元件必須維持在 F0 狀態。 閑置元件可能會切換到低功率 Fx 狀態,以減少耗電量。

當裝置處於 D0 電源狀態時,驅動程式會遵循簡單的通訊協定來啟用元件層級電源管理。 當驅動程式需要存取元件時,驅動程式會呼叫 PoFxActivateComponent 例程來要求存取元件。 如果元件在此呼叫發生時處於低功率 Fx 狀態,PoFx 會起始轉換至 F0 狀態,並在完成此轉換時通知驅動程式。 驅動程式接著可以存取元件。 當驅動程式不再需要存取元件時,驅動程式會呼叫 PoFxIdleComponent 例程來通知PoFx。 為了回應此呼叫,PoFx 可能會將元件切換至低功率 Fx 狀態。

可存取的元件處於 使用中狀態。 無法存取的元件處於 閑置狀態。 若要追蹤裝置中元件的存取範圍,PoFx 會在每個元件上維護啟用參考計數。 PoFxActivateComponent 呼叫會將指定元件上的計數遞增一,而 PoFxIdleComponent 呼叫會將計數遞減一。

如果 PoFxActivateComponent 呼叫將計數從零遞增為一,則 PoFx 會起始從閑置條件轉換為使用中條件的轉換,並在此轉換完成時通知驅動程式。 如果 PoFxActivateComponent 發生在元件已處於使用中狀態時,元件會保留在使用中條件中,而驅動程式不會收到任何通知。

如果 PoFxIdleComponent 呼叫將計數從一個遞減為零,PoFx 會起始從作用中條件轉換為閑置條件的轉換,並在完成此轉換時通知驅動程式。 如果 PoFxIdleComponent 呼叫遞減計數,但計數維持非零,元件會保留在使用中條件中,而驅動程式不會收到任何通知。

啟用參考計數可方便處理相同驅動程式中兩個或多個程式代碼路徑可能需要同時存取裝置中相同元件的情況。 藉由維護此計數,PoFx 可讓驅動程式的各個部分獨立維護元件的存取權,而不需要驅動程式集中管理元件的存取權。

元件的作用中/閑置條件是驅動程序判斷元件是否可存取的唯一可靠方法。 處於 F0 電源狀態但處於閑置狀態的元件可能即將切換到低功率 Fx 狀態。

處於作用中條件的元件一律處於 F0 狀態。 元件在進入閑置條件之前,無法離開 F0。 處於閑置狀態的元件可能處於 F0 或處於低功率 Fx 狀態。 如果 當 PoFxActivateComponent 呼叫起始從閒置條件轉換為使用中條件時,元件處於低功率 Fx 狀態,則 PoFx 必須先將元件切換為 F0,元件才能進入使用中條件。

裝置電源管理參考