持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第22天,点击查看活动详情
简介
这里主要是ACPI数据表及其定义语言。
一、ACPI 数据表和表定义语言
有两种基本类型的ACPI表:
-
包含从ACPI源语言(ASL)产生的AML代码的表格。这些表包括DSDT,任何SSDT,有时还有OEM专用表(OEMx)。
-
包含简单数据和没有AML字节码的表。这些类型的表被称为ACPI数据表。它们包括诸如FADT、MADT、ECDT、SRAT等表。-基本上除了DSDT或SSDT以外的任何表。
-
第一种类型的表是用ASL编译器生成的。
-
第二种类型的表,即ACPI数据表,是由本节讨论的。
本节介绍了一种简单的语言(表定义语言或TDL),可以用来生成任何ACPI数据表。它简化了BIOS供应商的表格生成过程,并且可以自动生成字段,如表长、子表长、校验和、标志字段等。
二、 ACPI数据表格的类型
在表定义语言(TDL)的编译器中,有两种ACPI数据表的类型:
- 编译器 "知道"的ACPI表。这些表通常包括ACPI规范中定义的所有基本ACPI规范中定义的所有基本ACPI表,如FADT、MADT、ECDT等。由于这些表是完全指定的(通常通过ACPI规范,但也有其他来源),TDL编译器知道这些表的所有细节--包括所有需要的数据类型。可选或必需的子表等。
- 编译器不知道的ACPI表。这些表可能包括在ACPI规范中没有定义的表,如MCI表。这些表可能包括ACPI规范中没有定义的表,如MCFG、DBGP等或者只是新的ACPI表,尚未在编译器中实现。
三、ACPI表定义语言规范
下面的部分定义了ACPI表定义语言(TDL)。语法符号 遵循与ASL源语言相同的规则。各种数据类型的完整定义遵循语法规范。
表定义语言
大多数ACPI表共享以下结构(除了FACS):
- 一个普通的36字节的头,包含表的签名、长度、校验和、修订和其他数据。
- 一个包含特定表数据的表体。
表定义语言允许通过一个字段的集合来定义ACPI表。TDL源代码的每一行都是一个字段,并与表定义中的一个数据项相对应。
例如,普通ACPI表头的C语言定义如下:
typedef struct acpi_table_header
{
char Signature[4];
UINT32 Length;
UINT8 Revision;
UINT8 Checksum;
char OemId[6];
char OemTableId[8];
UINT32 OemRevision;
char AslCompilerId[4];
UINT32 AslCompilerRevision;
} ACPI_TABLE_HEADER;
在表定义语言中,一个ACPI表头描述如下:
: "ECDT"
: 00000000
: 01
: 00
: "OEM "
: "MACHINE1"
: 00000001
: ""
: 00000000
四、完结
本章未完结,待续。