http://groups.google.com/group/acpi_CN/web/acpi-sleeping-states?hl=zh-CN
(之前有用记事本画了一个流程图,可惜到了Google这边全变成乱码,害我郁闷了半天,只好用这种方式来贴图了。)
ACPI详细定义了G0,G1系统状态之间的不同:
(1)在G0状态,OS和硬件正常工作,CPU或任意硬件设备可以在任意一个定义的电源状态(C0~C3或D0~D3),然而,系统是在工作状态,正
在执行某个工作。
(2)在G1状态,系统被认为是不工作的。在进入G1状态之前,OS电源管理将令设备进入与相应睡眠状态兼容的设备电源状态;如果一个设备被设为能唤
醒系统,则OS电源管理令设备进入能支持唤醒的最低耗的Dx状态,这在该设备对象的电源资源描述中有定义。
G1状态的定义包括下列:
× 在G1状态CPUs不执行指令
× 硬件设备不工作(能触发唤醒事件的设备除外)
×对ACPI寄存器的影响如下:
!根据唤醒使能状况,唤醒事件位在相应的fixed或General-purpose寄存器中被置位
! PM1控制寄存器被设置为所需的睡眠状态
!在睡眠状态中由硬件置位WAK_STS位
所有的睡眠状态都符合以上的规范。ACPI定义了附加的属性使ACPI平台能支持4种不同的睡眠状态,可以选择不同的电源功耗,唤醒延时和实现的花
费。
从软件的角度来看,S3状态的功能和S2状态是一样的。运作上的不同点是:一些在S2状态可能是开启的电源资源在S3状态下可能变为不可用。如:一些设
备在S3状态下比在S2状态的功耗更低。类似地,一些设备在S2状态下能唤醒在S3状态下却不能
S3睡眠状态实现范例:
当SLP_TYPx设为S3(值从\_S3对象来)并置位SLP_EN时,硬件实现S2的转换动作如下:
1.将系统内存拉入自刷新或suspend刷新状态
2.系统中的设备各自独立维护内存
3.系统会掉电.此时,仅有内存带电(可能是部分带电).RTC是唯一运行的时钟
此时,唤醒事件使系统重新上电并重启大部分的设备,执行控制从CPU的boot vector开始,BIOS要做如下动作:
1.设置CPU的初始化启动配置(如CPU的MSR和MTRR寄存器)
2.初始化缓存控制器到它的初始化启动时的大小和配置
3.Enable内存控制器支持内存访问
4.跳转到waking vector
注意:若缓存内存控制器的配置在睡眠期间有丢失,则BIOS需要将其重新配置为睡眠前的状态或初始化启动状态。BIOS可将缓存内存控制器的配置保存到
预留的内存空间,在唤醒后可以恢复它的值。OSPM将在睡眠之前调用_PTS方法。
BIOS也负责恢复内存控制器的配置。若在S3睡眠期间该配置数据被破坏,BIOS要从非易失性内存区块(如RTC CMOS RAM)中恢复其睡眠前
的状态配置或初始化启动状态配置。
当OSPM从S3睡眠状态回来重枚举总线时,将发现设备的插入或移除并配置设备。
15.1.4 S4睡眠状态
S4睡眠状态是ACPI支持的最低功耗,最长唤醒周期的睡眠状态。为了将功耗降到最低,假设硬件平台所有设备都会掉电。
因为这仍是一个睡眠状态,所以要维护平台的上下文环境。维护系统上下文的动作因进入S4睡眠状态的方式而异。
S4支持两种进入机制:OS发起和BIOS发起。OSPM发起机制类似进入S1~S3睡眠状态,OSPM驱动写SLP_TYPx区块并置位
SLP_EN;BIOS发起机制由OSPM写S4BIOS_REQ到SMI_CMD端口将控制权交给BIOS。
由OSPM发起进入S4睡眠状态时,OSPM负责保存所有的系统上下文。在进入S4状态之前,OSPM将保存所有的内存包括报告为type
AddressRangeReserved的内存异常。当唤醒时,OSPM将恢复系统上下文。OSPM在从S4睡眠返回重枚举总线时将发现设备的插入或
拔除,并配置开启设备。
由BIOS发起进入S4睡眠状态时,OSPM负责的系统上下文与S3状态描述的一样(BIOS恢复内存和芯片上下文)。S4BIOS将控制权传给
BIOS,由BIOS保存上下文到非易失性存储设备(如硬盘分区)。
15.1.4.2 S4BIOS转换
BIOS发起S4转换始于OSPM写S4BIOS_REQ值到SMI_CMD端口(在FADT表中定义)。一旦得到控制权,BIOS会保存相应的内存和
chipset上下文,然后将平台拉入S4状态(使所有的设备断电)。
在FACS内存表中,S4BIOS_F位代表硬件支持BIOS发起S4转换。若硬件平台支持S4BIOS状态,将在启动到OS前置位FACS表中的
S4BIOS_F标志位。FACS表中的S4BIOS_F标志位置位,则表示OSPM可请求BIOS将平台转入S4BIOS睡眠状态,通过写
S4BIOS_REQ值(在FADT表)到SMI_CMD端口(FADT定义的SMI_CMD值)。
在唤醒时BIOS软件恢复内存上下文并跳转到waking vector(类似于从S3状态唤醒)。从S4BIOS状态返回,BIOS必须只配置启动设
备(使其能读取保存系统上下文的硬盘分区)。当OSPM重枚举总线时将发现设备的插入或拔除,并配置开启设备。