4.8.1. ACPI 寄存器摘要
下列表格汇总了 ACPI 寄存器:
表 4.2 PM1 事件寄存器
| 寄存器 | 大小(字节) | 地址(相对于寄存器块) |
|---|---|---|
| PM1a_STS | PM1_EVT_LEN/2 | <PM1a_EVT_BLK> |
| PM1a_EN | PM1_EVT_LEN/2 | <PM1a_EVT_BLK>+PM1_EVT_LEN/2 |
| PM1b_STS | PM1_EVT_LEN/2 | <PM1b_EVT_BLK> |
| PM1b_EN | PM1_EVT_LEN/2 | <PM1b_EVT_BLK>+PM1_EVT_LEN/2 |
表 4.3 PM1 控制寄存器
| 寄存器 | 大小(字节) | 地址(相对于寄存器块) |
|---|---|---|
| PM1_CNTa | PM1_CNT_LEN | <PM1a_CNT_BLK> |
| PM1_CNTb | PM1_CNT_LEN | <<PM1b_CNT_BLK> |
表 4.4 PM2 控制寄存器
| 寄存器 | 大小(字节) | 地址(相对于寄存器块) |
|---|---|---|
| PM2_CNT | PM2_CNT_LEN | <PM2_CNT_BLK> |
表 4.5 PM 定时器寄存器
| 寄存器 | 大小(字节) | 地址(相对于寄存器块) |
|---|---|---|
| PM_TMR | PM_TMR_LEN | <PM_TMR_BLK> |
表 4.6 处理器控制寄存器
| 寄存器 | 大小(字节) | 地址(相对于寄存器块) |
|---|---|---|
| P_CNT | 4 | <P_BLK> 或由 PTC 对象指定 - 参见 Processor Throttling Controls |
| P_LVL2 | 1 | <P_BLK>+4h |
| P_LVL3 | 1 | <P_BLK>+5h |
表 4.7 通用用途事件寄存器
| 寄存器 | 大小(字节) | 地址(相对于寄存器块) |
|---|---|---|
| GPE0_STS | GPE0_LEN/2 | <GPE0_BLK> |
| GPE0_EN | GPE0_LEN/2 | <GPE0_BLK>+GPE0_LEN/2 |
| GPE1_STS | GPE1_LEN/2 | <GPE1_BLK> |
| GPE1_EN | GPE1_LEN/2 | <GPE1_BLK>+GPE1_LEN/2 |
4.8.1.1. PM1 事件寄存器
PM1 事件寄存器分组包含两个寄存器块:当某个特定类别的平台设计指南要求以下 ACPI 接口类别时,PM1a_EVT_BLK 是必需的寄存器块:
电源管理定时器控制/状态
处理器电源状态控制/状态
与全局锁相关的接口
电源按钮或睡眠按钮(固定寄存器接口)
系统电源状态控制(睡眠/唤醒控制)
PM1b_EVT_BLK 是可选寄存器块。每个寄存器块在固定 ACPI 表(FADT)中都有一个唯一的 32 位指针,以允许将 PM1 事件位划分到两个芯片之间。如果不支持 PM1b_EVT_BLK,则其指针在 FADT 中包含值零。
PM1 事件分组中的每个寄存器块都包含两个要求大小相同的寄存器:PM1x_STS 和 PM1x_EN(其中 x 可以是“a”或“b”)。寄存器的长度是可变的,由 FADT 中的 PM1_EVT_LEN 字段描述,该字段指示寄存器块的总长度(以字节为单位)。因此,如果给定长度为“4”,则表示每个寄存器包含两个字节的 I/O 空间。PM1 事件寄存器块的最小大小为 4 字节。
4.8.1.2. PM1 控制寄存器
PM1 控制寄存器分组包含两个寄存器块:当某个特定类别的平台设计指南要求以下 ACPI 接口类别时,PM1a_CNT_BLK 是必需的寄存器块:
用于电源管理和通用事件的 SCI/SMI 路由控制/状态
处理器电源状态控制/状态
与全局锁相关的接口
系统电源状态控制(睡眠/唤醒控制)
PM1b_CNT_BLK 是可选寄存器块。每个寄存器块在固定 ACPI 表(FADT)中都有一个唯一的 32 位指针,以允许将 PM1 事件位划分到两个芯片之间。如果不支持 PM1b_CNT_BLK,则其指针在 FADT 中包含值零。
PM1 控制分组中的每个寄存器块都包含一个单独的寄存器:PM1x_CNT。寄存器的长度是可变的,由 FADT 中的 PM1_CNT_LEN 字段描述,该字段指示寄存器块的总长度(以字节为单位)。PM1 控制寄存器块的最小大小必须为 2 字节。
4.8.1.3. PM2 控制寄存器
PM2 控制寄存器包含在 PM2_CNT_BLK 寄存器块中。FADT 为此寄存器块包含一个长度变量(PM2_CNT_LEN),它等于 PM2_CNT 寄存器的大小(以字节为单位)(这是该寄存器块中的唯一寄存器)。该寄存器块是可选的;如果不支持,则其块指针和长度包含值零。
4.8.1.4. PM 定时器寄存器
PM 定时器寄存器包含在 PM_TMR_BLK 寄存器块中。它是一个可选寄存器块;当某个特定类别的平台设计指南要求电源管理定时器控制/状态 ACPI 接口类别时,必须实现该寄存器块。
如果定义了该寄存器块,它包含返回电源管理定时器运行值的寄存器。FADT 还为该寄存器块包含一个长度变量(PM_TMR_LEN),它等于 PM_TMR 寄存器的大小(以字节为单位)(这是该寄存器块中的唯一寄存器)。
4.8.1.5. 处理器控制块(P_BLK)
系统中的每个处理器都有一个可选的处理器控制寄存器块。由于这是一个同构特性,所有处理器都必须具有相同级别的支持。ACPI OS 将回退到处理器控制块支持的最低共同级别。处理器控制块包含处理器控制寄存器(P_CNT——一个 32 位性能控制配置寄存器),以及 P_LVL2 和 P_LVL3 CPU 睡眠状态控制寄存器。32 位 P_CNT 寄存器控制该处理器的处理器时钟逻辑行为,P_LVL2 寄存器用于将 CPU 置于 C2 状态,P_LVL3 寄存器用于将处理器置于 C3 状态。
4.8.1.6. 通用事件寄存器
通用事件寄存器包含所有通用特性的根级事件。为便于灵活地划分根事件,ACPI 提供了两个不同的通用事件块:GPE0_BLK 和 GPE1_BLK。它们是独立的寄存器块,而不是一个寄存器分组,因为没有必要保持正交的位排列。此外,每个寄存器块在 FADT 中都包含自己的长度变量,其中 GPE0_LEN 和 GPE1_LEN 表示各寄存器块的长度(以字节为单位)。
每个寄存器块包含两个长度相等的寄存器:GPEx_STS 和 GPEx_EN(其中 x 为 0 或 1)。GPE0_STS 和 GPE0_EN 寄存器的长度等于 GPE0_LEN 的一半。GPE1_STS 和 GPE1_EN 寄存器的长度等于 GPE1_LEN 的一半。如果不支持某个通用寄存器块,则其在 FADT 表中的相应块指针和值长度字段包含零。GPE0_LEN 和 GPE1_LEN 不需要具有相同的大小。