5.2.11. 定义块
定义块由AML格式的数据组成(请参见第 5.4 节“定义块编码”),并包含有关硬件实现细节的信息,其形式为AML对象,其中包含数据、AML代码或其他AML对象。加载定义块后,该信息的顶级组织在分层命名空间中进行名称标记。
OSPM“加载”或“卸载”整个定义块作为逻辑单元。当执行 AMLLoad() 或 LoadTable() 运算符,或者在初始化过程中遇到表定义时,OSPM 会加载定义块。在初始化期间,OSPM 使用从 FADT 检索到的 DSDT 指针加载差分系统描述表 (DSDT),其中包含差分定义块。由于在 RSDT/XSDT 中遇到辅助系统描述表 (SSDT) 的定义,OSPM 也会在初始化期间加载其他定义块。每个 SSDT 都必须按照其在 RSDT/XSDT 中出现的顺序加载。以下部分介绍 DSDT 和 SSDT。
如前所述,AMLLoad() 和 LoadTable() 运算符使定义块能够静态或动态地加载其他定义块,而它们又可以定义新的系统属性,或者在某些情况下基于先前的定义进行构建。尽管这使硬件能够在实现上进行广泛的变化,但它也将其限制在合理的范围内。在某些情况下,定义块格式只能描述特定且易于理解的差异。在其他情况下,它允许只能通过一组指定的“内置”运算符来表达实现。例如,定义块具有内置的 I/O 空间运算符。
理论上,可以通过从 I/O 空间构建来在定义块中定义类似PCI配置空间的内容,但这不是定义块的目标。这样的空间通常被定义为“内置”运算符。
一些AML运算符执行简单功能,而其他运算符则包含复杂功能。定义块的强大之处在于它能够以多种方式将这些操作粘合在一起,从而为OSPM提供功能。
本规范中定义的AML运算符旨在允许轻松表达许多有用的硬件设计,而不是允许表达所有硬件设计。
注:为了适应超过 32 位的寻址,在 ACPI 2.0 中整数类型扩展为 64 位,请参见 第 19.3.5 节。现有的ACPI定义块实现可能包含 32 位整数宽度的固有假设。因此,为了保持向后兼容性,OSPM使用包含定义块的系统描述表的标头部分中的修订字段来确定定义块中声明的整数是否将被评估为 32 位值或 64 位值。修订字段值大于或等于 2 表示定义块中声明的整数将被评估为 64 位值。 ASL编写器通过ASL定义块的ComplianceRevision 字段指定定义块表头的Revision 字段的值。有关更多信息,请参阅第 19.6.29 节。 ASL编写者有责任在设置ComplianceRevision字段时确保定义块与相应整数宽度的兼容性。
5.2.11.1. 差分系统描述表 (DSDT)
差分系统描述表(DSDT)是系统固定描述的一部分。 DSDT由系统描述表头和定义块格式的数据组成。有关定义块的描述,请参见第 5.2.11 节。在初始化期间,OSPM 在固定ACPI 描述表中查找指向DSDT 的指针(使用FADT 的DSDT 或X_DSDT 字段),然后加载DSDT 以创建ACPI 命名空间。
| 表 5.17 区分系统描述表字段 (DSDT) 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 签名 | 4 | 0 | ‘DSDT’ 差分系统描述表的签名。 |
| 长度 | 4 | 4 | 整个DSDT(包括标头)的长度(以字节为单位)。 |
| 修订 | 1 | 8 |
- 该字段还设置AML解释器的全局整数宽度。小于 2 的值将导致解释器使用 32 位整数和数学。 2 或更大的值将导致解释器使用完整的 64 位整数和数学。
校验和| 1 | 9 |整个表的总和必须为零。 OEMID | 6 | 10 | 10 OEM ID OEM 表ID | 8 | 16 | 16制造型号ID。 OEM 修订 | 4 | 24 | OEM 所提供OEM 表ID 的DSDT 修订版。 创建者ID | 4 | 28 | 28 ASL 编译器的供应商 ID。 创建者修订| 4 | 32 | 32 ASL 编译器的修订号。 定义块| n | 36 | 36 n 个字节的AML代码(参见第 5.4 节)。
5.2.11.2. 辅助系统描述表 (SSDT)
辅助系统描述表 (SSDT) 是 DSDT 的延续。 SSDT由系统描述表头和定义块格式的数据组成。可以存在多个 SSDT。在OSPM加载DSDT以创建ACPI命名空间后,RSDT/XSDT中列出的每个辅助系统描述表以及唯一的OEM表ID将按照RSDT/XSDT。
- 附加表只能添加数据;他们无法覆盖以前表中的数据。
这使得OEM能够在一个表中提供基本支持,并在其他表中添加较小的系统选项。例如,OEM可能会将动态对象定义放入辅助表中,以便固件可以在启动时构建动态信息,而无需编辑静态DSDT。 SSDT只能依赖于在其之前加载的DSDT。
| 表 5.18 辅助系统描述表字段 (SSDT) 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 标题 | |||
| 签名 | 4 | 0 | “SSDT”辅助系统描述表的签名。 |
| 长度 | 4 | 4 | 整个SSDT(包括标头)的长度(以字节为单位)。 |
| 修订 | 1 | 8 | 2 |
| 校验和 | 1 | 9 | 整个表的总和必须为零。 |
| OEMID | 6 | 10 | 10 OEM ID |
| OEM 表 ID | 8 | 16 | 16制造型号ID。 |
| OEM 修订 | 4 | 24 | OEM 所提供OEM 表ID 的DSDT 修订版。 |
| 创建者ID | 4 | 28 | 28 ASL 编译器的供应商 ID。 |
| 创建者修订 | 4 | 32 | 32 ASL 编译器的修订号。 |
| 定义块 | n | 36 | 36 n 个字节的AML代码(参见第 5.4 节)。 |
5.2.11.3. 持久系统描述表 (PSDT)
表签名“PSDT”指的是ACPI 1.0 规范中定义的持久系统描述表(PSDT)。 PSDT被认为没有提供任何特定的好处,因此已从ACPI规范的后续版本中删除。 OSPM 将评估带有“PSDT”签名的表,其方式与评估 SSDT 类似,如第 5.2.11.2 节所述