ACPI_ENABLE, |
当向SMI_CMD写入这个值的时候,系统将触发事件进入ACPI模式 |
GPE0_BLK, GPE1_BLK |
General Purpose Event 0 and General Purpose Event 1 Block |
P_BLK |
Processor Controlling features. 处理器功能相关 |
SCI_EN |
如果置1,将使用SCI中断, 如果清零,将使用SMI中断 |
SLP_EN |
用于切换Sleeping State,一般和SLP_TYPE一起使用 |
SLP_TYPE |
当SLP_EN置1的时候,系统将进入到SLP_TYPE所定义的状态 |
SMI_CMD |
SMI Command Port |
WAK_STS |
当系统由睡眠态被唤醒时,此位被置位 |
X_GPE0_BLK, X_GPE1_BLK |
Extended General Purpose E vent |
X_Firmware_Waking_Vector |
64 bits firmware waking vector |
SCI是针对ACPI的叫法,SMI是针对APM的叫法。
SCI is a system interrupt used by hardware to notify the OS of ACPI events.
SMI is OS-transparent interrupt generated by interrupt event on legacy systems
ACPI BIOS主要使用ACPI Table来描述主板上的所有资源,OS以此来对系统进行电源管理。
ACPI的主要结构如下所示:
FACS:Firmware ACPI Control Structure
FACS是BIOS用来完成firmware与OS之间交互的这样一种内存结构, 它主要包含了以下三个部分:
FADT: Fixed ACPI Description Table: 包含了FACS和DSDT的物理地址
RSDT: Root System Description Table
MADT: Multiple ACPI Description Table
DSDT: Differentiated System Description Table
SSDT: Secondary System Description Table
PSDT: Persistent System Description Table
先说BIOS初始化的流程吧,BIOS由Boot Vector启动后,首先要判断一下Sleep Type,
Sleep Type == S2: 如是要是从S2状态被唤醒的,则只用初始化CPU, Enable内存和配置一下cache就可以直接时Waking Vector了;
Sleep Type != S2: 初始化CPU, 初始化内存控制器,使能内存,配置Cache,使能Cache,初始化Chipset
再判断Sleep Type是否等于S3:
Sleep Type == S3: 直接跳到Waking Vector
Sleep Type != S3: 判断Sleep Type 是否等于S4:
Sleep Type == S4BIOS: 重新装载memory image, 然后转入Waking Vector
Sleep Type != S4BIOS: 说明从S4 Boot, 需要重新post然后时OSBootloader
图figure 16-74中显示了OS初始化的流程:
这里可以看到,有两条路径可以进入到OS:
一条是通过OS boot loader, 这条路径是S4进入时走的
另一条是通过Waking Vector,这条路径是由S2, S3状态被唤醒时走的