ACPI表定义及TDL

387 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第23天,点击查看活动详情

简介

这里主要是ACPI定义语言以及TDL的应用点。

一、ACPI 表定义语言

用附带的字段名来描述,看如下示例方法:

    Signature : "ECDT" [Embedded Controller Boot Resources Table]
    Table Length : 00000000
    Revision : 01
    Checksum : 00
    Oem ID : "OEM "
    Oem Table ID : "MACHINE1"
    Oem Revision : 00000001
    Asl Compiler ID : ""
    Asl Compiler Revision : 00000000
    

注意:在ACPI表头中,TableLength、Checksum、AsICompilerld和AslCompilerRevision字段都是输出字段,是由编译器在生成表时自动填写的。另外,字段名是由反汇编器输出的,该反汇编器将现有的表格式化为TDL代码。表转换成TDL代码。

二、 TDL语法规范

整数

ACPI中的所有整数都是无符号的。编译器支持四种主要的无符号整数类型编译器支持四种主要的无符号整数。字节、字、DWords和QWords。此外,在特殊情况下,还有一些奇异的大小的整数,如24位和56位。一个整数的实际所需宽度是由 ACPI表定义。如果指定的整数在数字上大于输入源的目标字段的宽度,编译器会发出一个错误。编译器希望整数以十六进制输入,没有"十六进制 "前缀。

例子:

[001] Revision : 04// Byte (8-bit)
[002] C2 Latency : 0000// Word (16-bit)
[004] DSDT Address : 00000001// DWord (32-bit)
[008] Address : 0000000000000001// QWord (64-bit)

Length of non-power-of-two examples:

[003] Reserved : 000000// 24 bits
[007] Capabilities : 00000000000000 // 56 bits

整数表达式

ACPI在所有需要整数值的字段中都支持表达式。 支持的运算符如下(标准C的含义,按优先级排列): ()Parentheses、!Logical NOT、~Bitwise ones compliment (NOT)、*Multiply、/Divide等等。


[001] Revision : 04 * (4 + 7)   // Byte (8-bit)
[002] C2 Latency : 0032 + 8     // Word (16-bit)

标志

许多ACPI表都包含标志字段。对于这些字段,只需要向编译器指定各个标志位。编译器会将各个位汇总成一个适当大小的单一整数。

示例:


[002] Flags (decoded below) : 0005
Polarity : 1
Trigger Mode : 1

在这个例子中,只有极性和触发模式字段需要被指定给编译器(作为0或1)。然后,编译器为ACPI表创建最后的16位Flags字段。

三、完结

本章未完结,待续。