从S0状态进入sleep状态的过程

来源:互联网 发布:手机淘宝开店开通不了 编辑:程序博客网 时间:2024/06/06 02:12

从S0状态进入sleep状态的过程


ACPI规范中对wakeing 和sleeping有一个专门的章节讲述,呈现的概念包括ACPI中定义的working state和sleeping state的几种状态,同时描述各种状态之间的转换,工作状态到睡眠状态,或者睡眠状态到工作状态的转换。

主要的状态有,

global power :G0,G1,G2,G3

sleep states  :S0,S1,S2,S3,S4,S5.

具体的各个状态的概念,在各个状态时系统的情况,可以参考ACPIspec,或者查阅相关资料。这里只大概列举如下:

而各种状态之间的关系和转换流程可以从如下流程图看到大概情况。

 

从S0状态进入Sleep状态的具体过程如下:

1、OSPM决定系统将要进入sleeping 状态。可以通过用户指定,也可以通过程序指定。比如用户要进入待机,而选择待机键。

2、OSPM调用ACPI Drvier去执行ACPI method _TTS,以指定对应的sleep状态的,此部分即以数字形式告诉机器程序,比如1、2、3、4分别对应S1、S2、S3、S4。

3、OSPM 检测所有能够唤醒系统的device,对应的找到可以唤醒系统的function和相应的支持的sleeping state。同时_PRW在每个device中指定的目标也要检测一次。

4、OSPM接着驱动所有device 进入到特定的Dx状态,如果该设备支持wake功能,则进入Dx状态。如果不支持的话,直接进入D3。

5、OSPM调用_PTS控制method,传递相应的sleeptype值。

6、OSPM保存所有其他处理器的上下文context到memory中,不包括本身处理器。

7、OSPM会将FACS table对应的唤醒向量写入到memory中。

8、OSPM执行_GTS控制method,同理,参数传递sleeptype值。

9、OSPM将PM1x_STS中的WAK_STS状态值清零。

10、OSPM保存本地处理器的上下文到memory中。

11、OSPMflush cashe,这只在进入S1、S2、S3过程中才发生。

12、OSPM使能GPE enable位,并确保所有可以wake的信号都设定好了。

13、如果是进入S4状态,可以有S4BIOS机制和System-Initial S4机制。如果是S4BIOS模式的话,OSPM将FADT中设定的S4BIOS_REQ值写入SMI_CMD端口,使进入SMI, BIOS来接管控制,系统进入S4BIOS state。

14、如果不是S4BIOS状态,OSPM则会将sleep type值写入PM1x_CNT寄存器中的SLP_TYPx位。同时使能slp_en 位。

15、此时,系统进入sleep状态,当然chipset有相关机制会检测WAK_STS位的状态,也就是检测是否有唤醒事件发生。如果有就可以唤醒系统。ACPI中也有描述相关从sleeping状态进入working状态的过程。

 

从S0进入S5的过程和进入其他sleeping 状态的有区分,具体如下:

1、这个步骤可以理解成和进入sleeping前两个步骤一样。OSPM调用ACPI Drvier去执行ACPI method _TTS,以指定对应的sleep状态的。

2、OSPM执行_PTS控制method,传入参数5.

3、OSPM开始准备系统各个部分进入shutdown状态,包括flush disk cache。

4、OSPM写入sleep type值到PM1x_CNT的SLP_TYPx中。并使能SLP_EN位。

5、系统开始进入Soft off状态。

2 0
原创粉丝点击