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