ACPI常用的寄存器,及寄存器位的含义
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 和 SMI的区别?
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 Table名称及含义
ACPI BIOS主要使用ACPI Table来描述主板上的所有资源,OS以此来对系统进行电源管理。
ACPI的主要结构如下所示:
常见的ACPI Table如下:
FACS:Firmware ACPI Control Structure
FACS是BIOS用来完成firmware与OS之间交互的这样一种内存结构, 它主要包含了以下三个部分:
- Hardware Signature: 当系统从S4被唤醒的时候,OS会去读取Hardwaresignature 来验证系统 的硬件是否有被改动过,如果被改动,刚系统不能直接load以前保存的image信息,而是应该执行一次coldreboot。
- Firmware Waking Vector : 在Waking Vector中主要保存了唤配系统后应该执行的程序的物理地址。
- Global Lock:主要用于OS和firmware在访问硬件资源的时候同步。
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
DSDT首先被OS加载,然后是SSDT。
在此总结一下BIOS初始化的流程和OS初始化的流程(Figure 16-71):
先说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状态被唤醒时走的