ACPI 简析

什么是ACPI?

ACPI的全称是Advanced Configuration and PowerInterface。它是由早期的APM发展和改进起来的,其主要作用是为操作系统提供一套标准的电源管理接口。

ACPI关键概念:

什么Gx State, Cx State, Sx State:


  1. Power Management State(电源管理状态)

为了方便电源管理,ACPI Specification 中定义了四种关键的电源管理状态:

  •  Global State (Gx State) 全局态,这个属于是top-level 的状态
    • G0 --Working State 工作态(S0)
    • G1 --Sleeping State 睡眠态(S1-S4)
    • G2 --Soft-off State  (S5)
    • G3 --Mechanical -off  State
  • System Sleeping State(Sx)  系统睡眠态, S1-S4主要是由恢复到运行态的时间来区分的
    • S0 --对应G0,运行态
    • S1 --系统时钟停止,处理器停止
    • S2 --系统 Cache清除,处理器停止
    • S3 --Suspend to RAM
    • S4 --Suspend to Disk
    • S5 --Soft-off
  • CPU Power State(Cx)
    • C0 -- 工作态,全速运行
    • C1 -- CPU停止工作
    • C2 -- 低功耗,高延时
    • C3 -- 更低功耗,更高延时
  • Device State(Dx)
    • D0 -- Full Power 全速
    • D1 -- 中间态
    • D2 -- 比D1能耗低,延时高
    • D3 -- Off
  1. ASL & AML Language

ASL是一种解释性的语言,由它可以编译成支持ACPI的OS认识的AML语言。

  1. ACPI Control Method (ACPI控制方法)

类似于C语言中的函数,AML的函数叫做Method. 跟据ACPI的规范,BIOS提供了一些标准的Method给OS调用。例如_PTS, _WAK等等。

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初始化的流程吧,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状态被唤醒时走的

猜你喜欢

转载自blog.csdn.net/changexhao/article/details/78492082
今日推荐