ACPI 中文文档ACPI 中文文档
首页
第 1 章
第 2 章
第 3 章
第 4 章
第 5 章
第 6 章
第 7 章
第 8 章
第 9 章
第 10 章
第 11 章
第 12 章
第 13 章
第 14 章
第 15 章
第 16 章
第 17 章
第 18 章
第 19 章
第 20 章
第 21 章
附录 A
首页
第 1 章
第 2 章
第 3 章
第 4 章
第 5 章
第 6 章
第 7 章
第 8 章
第 9 章
第 10 章
第 11 章
第 12 章
第 13 章
第 14 章
第 15 章
第 16 章
第 17 章
第 18 章
第 19 章
第 20 章
第 21 章
附录 A
  • 第 4 章

    • 总览
    • 4.1. 硬件精简型 ACPI
    • 4.2. 固定硬件编程模型
    • 4.3. 通用硬件编程模型
    • 4.4. 图例
    • 4.5. 寄存器位表示法
    • 4.6. ACPI 硬件模型
    • 4.7. ACPI 硬件功能
    • 4.8. ACPI 寄存器模型
      • 4.8.1. ACPI 寄存器摘要
      • 4.8.2. 固定硬件特性
      • 4.8.3. 电源管理定时器
      • 4.8.4. 固定硬件寄存器
      • 4.8.5. 通用硬件寄存器

4.3. 通用硬件编程模型

尽管固定硬件编程模型要求硬件寄存器定义在特定地址位置,但通用硬件编程模型允许硬件寄存器驻留在大多数地址空间中,并为系统 OEM 在硬件中实现特定功能提供了高度灵活性。OSPM 直接访问固定硬件寄存器,但依赖 OEM 提供的 ACPI 机器语言(AML)代码来访问通用硬件寄存器。

AML 代码使 OEM 能够为 OSPM 提供控制通用硬件特性的控制逻辑和事件逻辑的方法。

标题为“ACPI 源语言参考”的章节描述了 ACPI 源语言(ASL)——一种 OEM 用来创建 AML 的编程语言。ASL 语言提供了许多常见面向对象编程语言中的运算符,但它经过了优化,以便能够描述平台电源管理和配置硬件。ASL 编译器将 ASL 源代码转换为 AML,AML 是一种非常紧凑的机器语言,由 ACPI AML 代码解释器执行。

AML 做两件事:

  • 将硬件从 OSPM 中抽象出来

  • 在 OEM 代码与不同 OS 实现之间提供缓冲

ACPI 的一个目标是允许 OEM 的“增值”硬件在 ACPI 配置中基本保持不变。增值硬件的一个属性是其实现方式各不相同。为了使 OSPM 能够在不同类型的增值硬件上正确执行,ACPI 定义了更高层次的“控制方法”,并通过调用这些方法来执行操作。OEM 提供与控制方法相关联并由 OSPM 执行的 AML 代码。通过提供 AML 代码,通用硬件几乎可以采用任何形式。

ACPI 的另一个重要目标是提供 OS 独立性。为此,OEM 的 AML 代码必须能够在任何兼容 ACPI 的 OS 下以相同方式执行。ACPI 通过将 AML 代码解释器作为 OSPM 的一部分来实现这一点。这使 OSPM 能够处理各特定 OS 所特有的同步和阻塞问题。

通用特性模型如下框图所示。在该模型中,通用特性通过 AML 代码向 OSPM 描述。该描述采用对象的形式,位于与其增值硬件相关联的 ACPI 命名空间中。

../_images/Generic_hardware_feature_model.PNG

图 4.1 通用硬件特性模型

作为通用硬件控制特性的一个示例,平台可能被设计为使 IDE HDD 的 D3 状态具有用于切断驱动器电源的增值硬件。然后,IDE 驱动器将在其命名空间中具有对 AML PowerResource 对象(其控制增值电源平面)的引用,并且与该对象关联的是由 OSPM 调用以控制驱动器 D3 状态的控制方法:

  • _PS0:一种控制方法,用于将 IDE 驱动器按顺序切换到 D0 状态。

  • _PS3:一种控制方法,用于将 IDE 驱动器按顺序切换到 D3 状态。

  • _PSC:一种控制方法,返回 IDE 驱动器的状态(开或关)。

此对象下的控制方法在 OSPM 与硬件之间提供了一个抽象层。OSPM 通过其定义的 PowerResource 对象理解如何控制电源平面(将其打开或关闭,或获取其状态),而硬件则具有平台特定的 AML 代码(包含在相应的控制方法中)来执行所需功能。在此示例中,平台将通过在 _PS3 控制方法中编写并放置用于关闭硬件的 AML 代码,向 ACPI OS 描述其硬件。这使得能够进行如下顺序:

当 OSPM 决定将 IDE 驱动器置于 D3 状态时,它会调用 IDE 驱动程序并通知其将驱动器置于 D3 状态(此时驱动程序保存设备的上下文)。

当 IDE 驱动程序返回控制权后,OSPM 将驱动器置于 D3 状态。

OSPM 查找与 HDD 关联的对象,然后在该对象中查找与 D3 状态关联的任何 AML 代码。

OSPM 执行适当的 _PS3 控制方法,以控制这种增值的“通用”硬件,从而将 HDD 置于更低的功耗状态。

作为通用事件功能的一个示例,平台可能具有对接能力。在这种情况下,它将希望生成一个事件。请注意,所有 ACPI 事件都会生成一个 SCI,而该 SCI 可以映射到任何可共享的系统中断。在对接的情况下,当检测到已发生对接或当用户请求将系统取消对接时,就会生成该事件。这使得能够进行如下顺序:

OSPM 响应该 SCI,并调用与该通用事件关联的 AML 代码事件处理程序。ACPI 表将硬件事件与 AML 代码事件处理程序相关联。

AML 代码事件处理程序收集适当的信息,然后执行一个 AML Notify 命令,以向 OSPM 指示某个特定总线需要重新枚举。

以下各节描述 ACPI 的固定硬件和通用硬件功能集。这些章节使读者能够理解以下内容:

  • 当平台类别的设计指南要求某个 ACPI 功能、概念或接口时,哪些硬件寄存器是必需的或可选的

  • 如何设计固定硬件功能

  • 如何设计通用硬件功能

  • ACPI 事件模型

Prev
4.2. 固定硬件编程模型
Next
4.4. 图例