裝置電源管理參考
驅動程式可以將其裝置硬體分成多個邏輯元件,以啟用精細的電源管理。 元件有一組電源狀態,可以獨立於相同裝置中其他元件的電源狀態進行管理。 在 F0 狀態中,元件已完全開啟。 元件可能支援其他低功率狀態 F1、F2 等等。
裝置的電源原則擁有者通常是裝置的功能驅動程式。 若要啟用元件層級電源管理,此驅動程式會向 電源管理架構 (PoFx) 註冊裝置。 藉由註冊裝置,驅動程式會負責在正在使用元件時以及元件閑置時通知PoFx。 PoFx 會根據元件活動、延遲容錯、預期的閑置持續時間和喚醒需求的相關信息,為裝置做出智慧型手機閑置狀態選擇。 藉由控制元件層級的電源使用量,PoFx 可以降低電源需求,同時保留系統回應性。 如需詳細資訊,請參閱 元件層級電源管理。
裝置電源管理例程
這些例程是由電源管理架構 (PoFx) 實作,以啟用裝置電源管理。 這些例程是由裝置電源原則擁有者 (PPO) 的驅動程式所呼叫。 一般而言,裝置的函式驅動程式是此裝置的 PPO。
主題 | 說明 |
---|---|
PoFxActivateComponent | PoFxActivateComponent 例程會遞增指定元件上的啟用參考計數。 |
PoFxCompleteDevicePowerNotRequired | PoFxCompleteDevicePowerNotRequired 例程會通知電源管理架構 (PoFx) 呼叫驅動程式已完成對驅動程式 DevicePowerNotRequiredCallback 回呼例程的呼叫。 |
PoFxCompleteIdleCondition | PoFxCompleteIdleCondition 例程會通知電源管理架構 (PoFx) 指定的元件已完成閑置條件的擱置變更。 |
PoFxCompleteIdleState | PoFxCompleteIdleState 例程會通知電源管理架構 (PoFx) 指定的元件已完成 Fx 狀態的擱置變更。 |
PoFxIdleComponent | PoFxIdleComponent 例程會遞減指定元件上的啟用參考計數。 |
PoFxIssueComponentPerfStateChange | PoFxIssueComponentPerfStateChange 例程會提交要求,以將裝置元件置於特定效能狀態。 |
PoFxIssueComponentPerfStateChangeMultiple | PoFxIssueComponentPerfStateChangeMultiple 例程會提交要求,以同時為裝置元件變更多個效能狀態集中的效能狀態。 |
PoFxNotifySurprisePowerOn | PoFxNotifySurprisePowerOn 例程會通知電源管理架構 (PoFx) 裝置已開啟,做為向其他裝置提供電源的副作用。 |
PoFxPowerControl | PoFxPowerControl 例程會將電源控制要求傳送至電源管理架構 (PoFx)。 |
PoFxQueryCurrentComponentPerfState | PoFxQueryCurrentComponentPerfState 例程會擷取元件效能狀態集中的作用中效能狀態。 |
PoFxRegisterComponentPerfStates | PoFxRegisterComponentPerfStates 例程會註冊裝置元件,以供電源管理架構 (PoFx) 管理效能狀態。 |
PoFxRegisterDevice | PoFxRegisterDevice 例程會向電源管理架構 (PoFx) 註冊裝置。 |
PoFxReportDevicePoweredOn | PoFxReportDevicePoweredOn 例程會通知電源管理架構 (PoFx) 裝置已完成要求轉換至 D0 (完全開啟) 電源狀態。 |
PoFxSetComponentLatency | PoFxSetComponentLatency 例程會指定在從閑置條件轉換為指定元件中作用中條件時可容許的最大延遲。 |
PoFxSetComponentResidency | PoFxSetComponentResidency 例程會設定元件進入閑置條件之後,元件可能保持閑置的估計時間。 |
PoFxSetComponentWake | PoFxSetComponentWake 例程會指出每當元件進入閑置條件時,驅動程式是否要對指定的元件進行喚醒。 |
PoFxSetDeviceIdleTimeout | PoFxSetDeviceIdleTimeout 例程會指定從裝置的最後一個元件進入閑置條件到電源管理架構呼叫驅動程式的 DevicePowerNotRequiredCallback 回呼例程時的最低時間間隔。 |
PoFxStartDevicePowerManagement | PoFxStartDevicePowerManagement 例程會完成裝置註冊與電源管理架構 (PoFx) 並啟動裝置電源管理。 |
PoFxUnregisterDevice | PoFxUnregisterDevice 例程會從電源管理架構 (PoFx) 移除裝置的註冊。 |
裝置電源管理回呼
電源管理架構 (PoFx) 需要這些回呼例程,才能啟用裝置電源管理。 裝置電源原則擁有者的驅動程式會實作這些回呼例程。 PoFx 會呼叫這些例程來查詢和設定裝置中元件的電源狀態。
主題 | 說明 |
---|---|
ComponentActiveConditionCallback | ComponentActiveConditionCallback 回呼例程會通知驅動程式指定的元件已完成從閑置條件轉換為使用中條件的轉換。 |
ComponentIdleConditionCallback | ComponentIdleConditionCallback 回呼例程會通知驅動程式指定的元件已完成從作用中條件轉換為閑置條件的轉換。 |
ComponentIdleStateCallback | ComponentIdleStateCallback 回呼例程會通知指定元件的 Fx 電源狀態暫止變更的驅動程式。 |
ComponentPerfStateCallback | ComponentPerfStateCallback 回呼例程會通知驅動程式其變更元件效能狀態的要求已完成。 |
DevicePowerNotRequiredCallback | DevicePowerNotRequiredCallback 回呼例程會通知裝置驅動程式,裝置不需要維持 D0 電源狀態。 |
DevicePowerRequiredCallback | DevicePowerRequiredCallback 回呼例程會通知裝置驅動程式裝置必須進入並維持在 D0 電源狀態。 |
PowerControlCallback | PowerControlCallback 回呼例程會執行電源管理架構 (PoFx) 所要求的電源控制作業。 |
裝置電源管理結構
電源管理架構 (PoFx) 會定義這些結構以支援裝置電源管理。
主題 | 說明 |
---|---|
PO_FX_COMPONENT_V1 PO_FX_COMPONENT_V2 | PO_FX_COMPONENT 結構描述裝置中元件的電源狀態屬性。 |
PO_FX_COMPONENT_IDLE_STATE | PO_FX_COMPONENT_IDLE_STATE 結構會指定裝置中元件之 Fx 電源狀態的屬性。 |
PO_FX_COMPONENT_PERF_INFO | PO_FX_COMPONENT_PERF_INFO結構描述裝置內單一元件的所有效能狀態集。 |
PO_FX_COMPONENT_PERF_SET | PO_FX_COMPONENT_PERF_SET結構代表裝置內單一元件的一組效能狀態。 |
PO_FX_DEVICE_V1 PO_FX_DEVICE_V2PO_FX_DEVICE_V3 | PO_FX_DEVICE結構描述裝置對電源管理架構 (PoFx) 的電源屬性。 |
PO_FX_PERF_STATE | PO_FX_PERF_STATE 結構代表裝置內單一元件的效能狀態。 |
PO_FX_PERF_STATE_CHANGE | PO_FX_PERF_STATE_CHANGE 結構包含呼叫 PoFxIssueComponentPerfStateChange 或 PoFxIssueComponentPerfStateChangeMultiple 例程所要求效能狀態變更的相關信息。 |
裝置電源管理列舉
電源管理架構 (PoFx) 會定義這些列舉,以支援裝置電源管理。
主題 | 說明 |
---|---|
PO_FX_PERF_STATE_TYPE | PO_FX_PERF_STATE_TYPE列舉包含值,描述PO_FX_COMPONENT_PERF_SET中的效能狀態類型。 |
PO_FX_PERF_STATE_UNIT | PO_FX_PERF_STATE_UNIT列舉包含值,這些值描述PO_FX_COMPONENT_PERF_SET中效能狀態所控制的單位類型。 |
裝置電源管理常數
PO_FX_FLAG_XXX旗標位
PO_FX_FLAG_XXX常數是旗標位,指出變更元件條件的要求是以同步或異步方式執行。
#define PO_FX_FLAG_BLOCKING 0x1
#define PO_FX_FLAG_ASYNC_ONLY 0x2
PO_FX_FLAG_XXX常數
持續性 | 描述 |
---|---|
PO_FX_FLAG_BLOCKING | 讓條件變更同步。 如果設定此旗標,要求條件變更的例程不會傳回呼叫驅動程式的控制,直到元件硬體完成轉換至新條件為止。 只有在呼叫端在 IRQL < DISPATCH_LEVEL執行時,才能使用此旗標。 |
PO_FX_FLAG_ASYNC_ONLY | 讓條件變更完全異步。 如果設定此旗標,呼叫驅動程式的回呼例程會從呼叫條件變更的線程以外的線程呼叫。 因此,要求條件變更的例程一律會以異步方式傳回,而不需要等待回呼完成。 |
PO_FX_FLAG_XXX備註
下列例程的 Flags 參數可以設定為 PO_FX_FLAG_XXX 常數:
- PoFxActivateComponent
- PoFxIdleComponent
- PoFxIssueComponentPerfStateChange
- PoFxIssueComponentPerfStateChangeMultiple
PO_FX_FLAG_BLOCKING和PO_FX_FLAG_ASYNC_ONLY旗標位互斥。 呼叫端可以在 Flags 參數中設定一或另一個旗標位,但不能同時設定這兩個旗標位。
PO_FX_FLAG_XXX需求
版本 | 頁首 |
---|---|
從 Windows 8 開始支援。 | Wdm.h |
PO_FX_FLAG_PERF_XXX旗標位
PO_FX_FLAG_PERF_XXX常數是旗標位,可定義電源管理架構 (PoFx) 如何管理裝置元件的效能狀態。
#define PO_FX_FLAG_PERF_PEP_OPTIONAL 0x1
#define PO_FX_FLAG_PERF_QUERY_ON_F0 0x2
#define PO_FX_FLAG_PERF_QUERY_ON_ALL_IDLE_STATES 0x4
常數 | 值 | Description |
---|---|---|
PO_FX_FLAG_PERF_PEP_OPTIONAL | 1 (0x1) | 表示驅動程式可以在不需要平臺擴充功能外掛程式 (PEP) 協助的情況下變更效能狀態,或驅動程式只為了記錄目的向 PoFx 註冊效能狀態。 如果設定此旗標,如果 PEP 不支援元件的效能狀態, PoFxRegisterComponentPerfStates 呼叫仍然會成功。 |
PO_FX_FLAG_PERF_QUERY_ON_F0 | 2 (0x2) | 針對某些裝置,PEP 可能需要在元件閒置元件時將效能狀態設定為特定效能狀態(稱為 名義效能狀態)。 如果元件包含名義效能狀態,驅動程式會設定此旗標,在此情況下,PoFx 會查詢 PEP,以在元件轉換為 F0 時判斷目前的效能狀態。 |
PO_FX_FLAG_PERF_QUERY_ON_ALL_IDLE_STATES | 4 (0x4) | 針對某些裝置,PEP 可能需要將元件的效能狀態設定成特定效能狀態(稱為 名義效能狀態),當元件在閑置狀態之間轉換元件時。 如果此元件包含名義效能狀態,驅動程式會設定此旗標,在此情況下,PoFx 會查詢 PEP,以在元件在閑置狀態之間轉換時判斷目前的效能狀態。 |
PO_FX_FLAG_PERF_XXX備註
PoFxRegisterComponentPerfStates 例程的 Flags 參數可以設定為PO_FX_FLAG_PERF_XXX常數。
PO_FX_FLAG_PERF_XXX需求
需求 | 版本 |
---|---|
從 Windows 10 開始支援。 | Wdm.h |