ACPICA User Guide and Programmer Reference 翻译4
2.2.1 ACPI表管理
此模块管理所有ACPI表,例如,RSDT/XSDT,FADT, FACS,DSDT, SSDT等等。这些表可以从固件程序提供,也可以由主操作系统提供。此模块的管理功能包括:
- ACPI 表校验
- ACPI表安装和卸载
- 使用ACPI表
2.2.2对ACPI表的初始使用
很多情况下,系统/内核的初始化的较早阶段需要一些ACPI表。例如,在硬件被初始化之前,需要ECDT和MADT表。因此,可能在内核动态内存(和虚拟内存)可用之前,就需要初始化与ACPI表相关的内容。
为了能使初始化正常进行,ACPICA表管理模块被设计成为一个独立的模块,这个模块可以独立于ACPICA子系统的其他部分而被初始化和使用。在任意一个特定的时间,仅仅需要一个内存映射而不需要动态内存,这个模块就能被执行。(这句话啥意思,我也没明白)。
2.2.3 AML翻译器
AML翻译器负责解析和执行由计算机系统厂商提供的AML代码。其他大部分服务都是以AML翻译器作为基础而建立的。因此,没有直接调用翻译器的外部接口。AML翻译器为其他功能模块提供的服务包含如下内容:
- ACPI表解析
- 执行AML控制方法
- Evaluation of Namespace Objects
2.2.4 命名空间管理
命名空间模块在AML翻译器的基础上提供ACPI命名空间服务。命名空间管理模块负责创建和管理内部的ACPI命名空间。这些服务包括:
- 根据ACPI表初始化命名空间
- 设备枚举
- 使用命名空间
- 使用ACPI数据和ACPI表
2.2.5 资源管理
资源管理模块在命名空间和AML翻译器的基础上提供对资源的请求和配置的服务。这些服务包括:
- 获取、设置当前的资源
- 获取可能有的资源
- 获取IRQ路由表
- 获取电源依赖关系
2.2.6 ACPI硬件管理
硬件管理模块负责对ACPi寄存器、时钟和其他ACPI相关的硬件的控制。模块提供的服务包括:
- 使用ACPI状态寄存器和使能寄存器
- 使用ACPI寄存器(通常就是对ACPI寄存器的读和写)
- 使用电源管理时钟
- 使能/失能ACPI模式
- 全局锁
- 睡眠模式转换(S态)
2.2.7事件处理
事件控制模块管理ACPI系统控制中断(SCI)。ACPI时钟、fixed事件和通用事件(GPEs)复用SCI中断。此模块还负责分派通知(notification)和管理地址空间/操作域事件。此模块提供的服务如下:
- 使能/失能ACPI事件(fixed事件,GPEs)
- 处理Fxied事件(安装、卸载和分派)
- 处理通用事件(安装、卸载和分派)
- 处理notify(安装、卸载和分派)
- 处理地址空间和操作域(安装、卸载和分派)
2.2.8Host 操作系统到ACPI子系统的请求
主操作系统能够直接使用以Acpi开头的外部接口来请求ACPI服务。
ACPI提供的实际的服务(以及对这些服务的请求),对于不同的操作系统来说都是不同的。然而,大部分OS对ACPI功能的请求都会包含在以下几类中:启动时服务,device load time 功能和运行时服务。
下图显示了OS到ACPICA请求的服务流程。