ACPI SPEC定义了ACPI-compatible OS与BIOS之间的接口,ACPI Tables就是BIOS提供给OS的硬件配置数据,包括系统硬件的电源管理和配置管理。
BIOS在POST过程中,将RSDP存在0xE0000--0xFFFFF的内存空间中,然后Move RSDT/XSDT, FADT, DSDT到ACPI Recleam Area, Move FACS到ACPI NVS Area,最后填好表的Entry链接和Checksum。
控制权交给OS之后,由OS来开启ACPI Mode,首先在内存中搜寻ACPI Table,然后写ACPI_Enable到SMI_CMD,SCI_EN也会被HW置起来。
ACPI Tables根据存储的位置,可以分为:
1). RSDP位于F段,用于OSPM搜索ACPI Table,RSDP可以定位其他所有ACPI Table
2). FACS位于ACPI NVS内存,用于系统进行S3保存的恢复指针,内存为NV Store
3). 剩下所有ACPI Table都位于ACPI Reclaim内存,进入OS后,内存可以释放
ACPI Table根据版本又分为1.0B,2.0,3.0,4.0。
2.0以后,支持了64-bit的地址空间,因此几个重要的Table会不大一样,比如:RSDP,RSDT,FADT,FACS。简单的列举一下不同版本的ACPI Table:
1) ACPI 1.0B:RSDP1,RSDT,FADT1,FACS1,DSDT,MADT,SSDT,HPET,MCFG等
2) ACPI 3.0 :RSDP3,RSDT,XSDT,FADT3,FACS3,DSDT,MADT,HPET,MCFG,SSDT等
以系统支持ACPI3.0为例子,说明系统中ACPI table之间的关系如图:
其中绿色代表在内存F段,蓝色是ACPI Reclaim内存,红色是NV store内存
RSDP:Root System Description Pointer
OSPM获得RSDP的方式:
a>. 在Legacy系统下,在Memory Space 0xE0000---0xFFFFF中 Search RSDP的signature: “RSD PTR ”。
b>. 在UEFI系统下, 在EFI System Table里的EFI Configuration Table中Search RSDP的GUID。
1. RSDT(Root System Description Table) Signature: ‘RSDT’
为了兼容ACPI1.0而存在,XSDT取代了RSDT的功能。 如果XSDT存在,ACPI-compatible OS 必须使用XSDT。
2. XSDT(Extended System Description Table) Signature: ‘XSDT’
一组64bit的物理指针,指明其他system description tables的Address。
3. FADT(Fixed ACPI Description Table) Signature: ‘FACP’
FADT包含了OS直接管理ACPI Hardware Register Blocks所必须的Fixed Hardware ACPI information,比如PM1a_EVT_BLK, PM1b_EVT_BLK, PM1a_CNT_BLK, PM1b_CNT_BLK, PM2_CNT_BLK, PM_TMR_BLK, GPE0_BLK, and GPE1_BLK这些的base address。
通过FADT可以找到FACS和DSDT。
4. FACS(Firmware ACPI Control Structure) Signature: ‘FACS’
The FACS contains the system’s hardware signature at last boot, the firmware waking vector, and the Global Lock。
hardware signature:由BIOS搜集,当系统从S4唤醒的时候,OSPM通过比较当前的和已保存的hardware signature是否一致来确定系统能否恢复
firmware waking vector:在休眠之前,OSPM来填写这一项,在POST时,BIOS来确定这一项是否不为空,若不为空则通过jump到这个Address来把控制权交给OSPM。
5. DSDT(Differentiated System Description Table) Signature: ‘DSDT’
DSDT包含了Differentiated Definition Block, 它们包含了整个系统的实现和配置信息。OS在系统启动的过程中将DSDT的information插入到ACPI Namespace, 而且从不会被移除。
6. SSDT(Secondary System Description Table) Signature: ‘SSDT’
SSDT是DSDT的继续。可以有多个SSDT存在。OSPM在Load DSDT 创建出ACPI Namespace之后,会去逐个Load SSDT。注意:附加的tables 只能add data, 而不能override data。
7. MADT(Multiple APIC Description Table) Signature: ‘APIC’
描述OS支持APIC/SAPIC所必须的information,比如IO-APIC address/Local-APIC address等等。
8. SBST(Smart Battery Table) Signature: ‘SBST’
如果系统支持符合Smart Battery Specification V1.0 1.1的电池,则SBST就会存在。主要用来指明:
Warning Energy Level:Warning时的Energy Level
Low Energy Level: OSPM即将进入Sleep状态时的Energy Level
Critical Energy Level: OSPM将要执行紧急关机时的Energy Level
9. MCFG(PCI-Memory Mapped Configuration table and sub-table) Signature: 'MCFG'
PCI Express memory mapped configuration space base address Description Table