ACPI 系统说明表
基于 SoC 的平台不需要执行高级配置和电源接口 (ACPI) 硬件规范,但需要(或可能需要)遵循大部分 ACPI 软件规范。 ACPI 定义了一种通用可扩展表传递机制,以及用于向操作系统描述平台的特定表。
表结构和标头(包括 ID 和校验和字段)在 ACPI 5.0 规范中定义。 除了本文所述的特定表之外,Windows 还会使用这种表传递机制。
这些表格背后的理念是使通用软件能够支持标准的知识产权 (IP) 模块,并能以不同的方式集成到各种平台中。 通过表格策略,特定平台的平台变量属性将以表格的形式提供,通用软件可利用这些属性来适应集成到平台中的特定 IP 模块集。 因此,此软件只需编写一次,经过全面测试,然后再随着时间的推移不断加以优化。
根系统说明指针 (RSDP)
Windows 依靠 UEFI 固件来启动硬件平台。 因此,Windows 将使用 EFI 系统表来定位 RSDP,如 ACPI 5.0 规范第 5.2.5.2 节“在支持 UEFI 的系统上查找 RSDP”所述。 平台固件会在 RSDP 中填写 RSDT 或 XSDT 的地址。 (如果同时提供两个表地址,则 Windows 会优先选择 XSDT。)
根系统说明表 (RSDT)
RSDT(或 XSDT)包括指向平台上提供的任何其他系统说明表的指针。 具体来说,此表包含指向以下表的指针:
固定 ACPI 硬件表 (FADT)
多重中断控制器表 (MADT)
(可选)核心系统资源表 (CSRT)
调试端口表 2 (DBG2)
启动图形资源表 (BGRT)
固件性能数据表 (FPDT)
基本系统说明表 (DSDT)
(可选)其他系统说明表 (SSDT)
固定 ACPI 说明表 (FADT)
固定 ACPI 硬件表 (FADT) 包含有关平台上各种可用固定硬件功能的重要信息。 为了支持硬件减少的 ACPI 平台,ACPI 5.0 对 FADT 表定义进行了如下扩展:
FADT 中的“标志”字段(偏移量 112)新增了两个标志:
HARDWARE_REDUCED_ACPI 位偏移量 20。 指明此平台上没有可用的 ACPI 硬件。 如果未实现 ACPI 固定硬件编程模型,则必须设置此标志。
LOW_POWER_S0_IDLE_CAPABLE 位偏移量 21。 指明平台支持 ACPI S0 系统电源状态下的低功耗空闲状态,这种状态比任何 Sx 睡眠状态都更节能。 如果设置了此标志,Windows 将不会尝试休眠和恢复,而是使用平台空闲状态和连接待机状态。
FADT Preferred_PM_Profile 字段(字节偏移量 45)新增了“Tablet”角色条目。 此角色会影响显示和输入的电源管理策略,并影响屏幕键盘的显示。
“IA-PC 启动架构标志”字段(偏移量 109)新增了“CMOS RTC 不存在”标志(位偏移量 5),用于指明 PC 的 CMOS RTC 未执行或不存在于传统地址中。 如果设置了此标志,平台就必须执行 ACPI 时间和警报控制方法设备。 如需了解更多信息,请参阅 ACPI 定义的设备一文中的控制方法时间和警报设备部分。
新增了字段以支持硬件减少的 ACPI 平台上的传统 PC 休眠/恢复。 Windows 将忽略这些字段,但为符合规定,表中必须包含这些字段。
如果设置了 HARDWARE_REDUCED_ACPI 标志,操作系统将忽略与 ACPI 硬件规范有关的所有字段。
所有其他 FADT 设置均保留上一版本 (ACPI 4.0) 中的含义。 有关详细信息,请参阅 ACPI 5.0 规范的第 5.2.9 节“固定 ACPI 说明表 (FADT)”。
多个 APIC 说明表 (MADT)
在 ACPI 的电脑实现中,多个 APIC 说明表 (MADT) 和特定于电脑的中断控制器描述符会被用于描述系统中断模型。 对于基于 Arm 的 SoC 平台,ACPI 5.0 新增了 Arm Holdings 的通用中断控制器 (GIC) 和 GIC Distributor 描述符。 Windows 包含对 GIC 和 GIC Distributor 的收件箱支持。 有关这些描述符的详细信息,请参阅 ACPI 5.0 规范第 5.2.12.14 节“GIC 结构”和第 5.2.12.15 节“GIC Distributor 结构”。
中断控制器描述符结构紧跟在 MADT 的标志字段之后。 对于 Arm 平台,会为每个 GIC 列出一个描述符,然后为每个 GIC Distributor 再列出一个描述符。 与启动处理器相对应的 GIC 必须是中断控制器描述符列表中的第一个条目。
通用计时器说明表 (GTDT)
与中断控制器一样,ACPI 中也有一个标准的计时器说明表。 对于使用 GIT 定时器的 Arm 系统,可以使用 ACPI 的 GTDT 来充分利用 Windows 对 GIT 的内置支持。
核心系统资源表 (CSRT)
核心系统资源 (CSR) 是操作系统必须序列化访问的共享硬件功能,如中断控制器、计时器和 DMA 控制器。 在计时器和中断控制器(x86 和 Arm 架构)等功能推出了行业标准的情况下,Windows 会根据 ACPI 中描述的标准表(如 MADT 和 GTDT)提供对这些功能的支持。 但是,在行业就 DMA 控制器接口标准达成一致之前,操作系统需要支持一些非标准设备。
Windows 支持 HAL 扩展概念来解决这一问题。 HAL 扩展是以 DLL 形式实现的 SoC 特定模块,可将 Windows HAL 与 Windows 所需的特定 CSR 类别的特定硬件接口相匹配。 为了标识和加载这些非标准 CSR 模块,Microsoft 定义了一个新的 ACPI 表。 该表在 ACPI 规范中的保留签名为“CSRT”,如果在平台上使用非标准 CSR,则它必须包含在 RSDT 中。
CSRT 说明了 CSR 的资源组,其中每个资源组都标识了特定类型的硬件。 Windows 使用为资源组提供的标识符来查找并加载该组所需的 HAL 扩展。 CSRT 中的资源组还可能包含单个资源描述符,具体取决于 CSR 类型和 HAL 扩展的需要。 这些资源描述符的格式和使用由 HAL 扩展编写者定义,编写者只需更改 CSRT 中包含的资源描述符,就能显著提高扩展的可移植性,从而支持各种不同的 SoC 平台。
为了支持 HAL 扩展的维护,并管理这些扩展所使用的系统资源,CSRT 中说明的每个资源组还必须在平台的 ACPI 名称空间中表示为一个设备。 有关详细信息,请参阅下面的“区分系统说明表 (DSDT)”部分。 资源组标头中使用的设备标识符必须与设备命名空间节点中使用的标识符相一致。 有关详细信息,请参阅设备管理命名空间对象文章中的 ACPI 中的设备标识部分。 有了这些资源组命名空间设备,Windows Update 服务就能为 HAL 扩展提供服务。
有关详细信息,请参阅核心系统资源表 (CSRT) 规范。
调试端口表 2 (DBG2)
Microsoft 要求在所有系统上都有一个调试端口。 为了说明平台内置的调试端口,Microsoft 为 ACPI 定义了调试端口表 2 (DBG2)。 此表指定了一个或多个用于调试的独立端口。 存在 DBG2 表即表明该平台至少包含一个调试端口。 此表包含有关调试端口的身份和配置的信息。 该表与其他 ACPI 表一起位于系统内存中,并且必须在 ACPI RSDT 表中引用。
Windows 使用 DBG2 表中的端口类型值来标识和加载系统所需的内核调试器 (KD) 传输(例如 USB 或串口)。 然后,KD 传输会使用 DBG2 表中的端口子类型值来识别端口使用的硬件接口。 DBG2 表中的其他信息指定了端口寄存器的系统地址,该地址由硬件接口模块用于指定的子类型。 最后,DBG2 表必须包含对 ACPI 名称空间中与调试端口相对应的设备节点的引用。 如果调试使用与设备正常使用之间存在冲突,此参考让 Windows 能够管理冲突,并将调试器与电源转换相集成。
有关详细信息,请参阅 Microsoft 调试端口表 2 (DBG2) 规范。
区分系统说明表 (DSDT)
在 ACPI 中,平台上的外围设备和系统硬件功能在区分系统说明表 (DSDT) 或辅助系统说明表 (SSDT) 中说明,前者在启动时加载,而后者在运行时动态加载。 对于 SoC 而言,平台配置通常是静态的,因此 DSDT 可能就已足够,但是 SSDT 也可用于提高平台说明的模块化程度。
ACPI 定义了一种解释语言(ACPI 源语言,或 ASL)和一种执行环境(ACPI 虚拟机),用于以与操作系统无关的方式来描述系统设备和功能及其特定于平台的控制。 ASL 用于定义 ACPI 命名空间中的命名对象,Microsoft ASL 编译器用于生成 ACPI 机器语言 (AML) 字节代码,以便在 DSDT 中传输给操作系统。 收件箱 Windows ACPI 驱动程序 (Acpi.sys) 实现了 ACPI 虚拟机并解释 AML 字节代码。 AML 对象可能只会返回说明信息。 或者,AML 对象可能是一种执行计算或 I/O 操作的方法。 控制方法是一个可执行的 AML 对象,它使用操作系统的设备驱动程序在平台硬件上执行 I/O 操作。 ASL 使用 OpRegions 来抽象出操作系统中可访问的各种地址空间。 控制方法执行的 I/O 操作是一系列与 OpRegions 中声明的命名字段之间的传输。
有关 OpRegions 的详细信息,请参阅 ACPI 5.0 规范中的第 5.5.2.4 节“访问操作区域”。 有关 ASL 和控制方法的更多信息,请参阅 ACPI 5.0 规范中的第 5.5 节“ACPI 命名空间”。
Windows 支持 ASL 代码的开发和调试。 ASL 编译器包含一个反汇编程序,使实现者能够从调试目标加载命名空间。 然后,可以使用 ASL 编译器将命名空间重新应用到目标上,以实现快速原型开发和测试,而无需闪存系统固件。 此外,Windows 内核调试器与 Acpi.sys 驱动程序的已校验 (CHK) 版本相结合,支持跟踪和分析 AML 的执行。 有关详细信息,请参阅 AMLI 调试器。
Windows SMM 安全缓解表 (WSMT)
Windows SMM 安全缓解表 (WSMT) 规范包含高级配置和电源接口 (ACPI) 表的详细信息,该表是为使用基于 Windows 虚拟化的安全 (VBS) 功能的 Windows 操作系统而创建的。
此信息适用于以下操作系统:
Windows Server 2016
Windows 10 版本 1607
有关详细信息,请参阅 Windows SMM 安全缓解表 (WSMT) 规范(DOCX 下载)。
iSCSI 启动固件表 (iBFT)
iSCSI 启动固件 (iBF) 表 (iBFT) 是一个信息块,其中包含对 iSCSI 启动过程有用的各种参数。 iBFT 是向操作系统传递 iBF 参数值的机制。 iBF 生成并填充 iBFT。 iBFT 可供 Windows 操作系统使用,以便让启动过程保持一致。
有关详细信息,请参阅 iSCSI 启动固件表 (iBFT) 规范(DOCX 下载)。