Component-Level電源管理
從Windows 8開始,電源管理架構 (PoFx) 可讓驅動程式管理裝置中個別元件的電源狀態。 元件層級電源管理會與裝置層級電源管理並存。 如需簡介,請參閱 Power Management Framework 概觀。
此頁面描述適用于Component-Level電源管理的 PoFx API。
若要註冊要由 PoFx 管理的裝置,驅動程式會呼叫 PoFxRegisterDevice 常式。 驅動程式會將此常式傳遞 PO_FX_DEVICE 結構,其中其他資料包含 PO_FX_COMPONENT 結構的陣列。 此陣列中的每個元素都會描述裝置中元件的 Fx 電源狀態,以及每個 Fx 狀態的屬性。 (至少,不支援元件層級電源管理的元件只會實作 F0 state.) 特定元件中特定 Fx 電源狀態的屬性是由包含下列值的 PO_FX_COMPONENT_IDLE_STATE 結構所描述:
- 轉換延遲,這是從這個 Fx 狀態轉換到 F0 (完全處於) 狀態所需的時間。
- 落地需求,這是元件必須在此 Fx 州花費的時間,才能轉換到值得的狀態。
- 標準電源,這是此 Fx 狀態的元件所耗用的電源。
PoFx 除了其他全系統輸入和相依性之外,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,元件才能進入使用中條件。