11.02.2006

Suspend/Resume

Suspend 狀態是將 CPU 中,所有週邊和cpu core的clock ,power 都停掉,只留下
  • DRAM refresh
  • RTC
  • INT
三個部份還有動作,這樣的目的是要減少電源消耗,同時盡量維持執行狀態。
讓裝置回到正常狀態的方式有
  • 外部中斷
  • RTC TimerUp (也是中斷)
從PowerOff中恢復後,要盡量讓系統回到當初power Off的狀態。

Suspend/Recover的動作有一點像Task Switch,就是Stack Frame的操作:在斷電前將StackFrame保存在固定的地方,Recover時到那個地方拿回Stack Frame回存,動作跟TaskSwitch一模一樣。

CE 的Suspend/Resume 動作 需要driver的配合,所以所有Driver都要implement (and export) PowerUp/PowerDown function。另外GUI 的部份也要response to WM_XX 這個power state change message。

在PUBLIC\COMMON\OAK\DRIVERS\PM\MDD\pmresume.cpp 的comment中有說明:
Application (Drvier) 中不可以直接呼叫 PowerOffSystem( )來suspend system,要藉由 SetSystemPowerState ( ) 這個 Win32 funtion 來轉換 power status 到 suspend/resume 狀態才行。 因為 SetSystemPowerState( ) 在呼叫PowerOffSystem( ) 之前,還會呼叫PM 的function 一一呼叫所有Device 的 PowerOn/PowerDown function,還會post necessary message to GWES server,最後才呼叫PowerOffSystem( )將所有cpu core關閉。
SetSystemPowerState()是一個手套,會去呼叫PlatformSetSystemPowerState(),

沒有留言: