目录
开发高级配置和电源接口(ACPI)规范是为了建立工业通用接口,以支持设备和整个系统的健壮的操作系统(OS)导向的主板设备配置和电源管理。ACPI是面向操作系统的配置和电源管理(OSPM)中的关键元素。
ACPI将现有的pre-ACPI电源管理BIOS代码集合、高级电源管理(APM)应用程序编程接口(api、PNPBIOS api、多处理器规范(MPS)表等演化为定义良好的电源管理和配置接口规范。ACPI提供了从现有(遗留)硬件有序过渡到ACPI硬件的方法,它允许ACPI和遗留机制同时存在于单个机器中,并根据需要使用它们。
此外,在最初的ACPI规范开始时构建的系统架构,扩展了历史上的“即插即用”接口的限制。ACPI改进了现有的主板配置接口,以更健壮、可能更有效的方式支持高级架构。
本规范中定义的接口和OSPM概念适用于所有类别的计算机,包括(但不限于)桌面、移动、工作站和服务器机器。从电源管理的角度来看,OSPM/ACPI提出了一个概念,即系统应该通过将未使用的设备转换到低功耗状态(包括在可能的情况下将整个系统置于低功耗状态(睡眠状态))来节约能源。
本文档描述了ACPI硬件接口、ACPI软件接口和ACPI数据结构,当实现ACPI时,可以支持健壮的OS-directed configuration and power management (OSPM)。
1.1主要目标
ACPI是实现OSPM的关键元素。acpi定义的接口旨在广泛采用,以鼓励硬件和软件供应商构建与acpi兼容(因此也与ospm兼容)的实现。
ACPI和OSPM的主要目标是:
•使用适当的成本/功能权衡,使所有计算机系统实现主板配置和电源管理功能:
计算机系统包括(但不限于)台式机、移动机、工作站和服务器机。
-机器实现者可以自由地实现广泛的解决方案,从非常简单的到非常激进的,同时仍然保持完整的操作系统支持。
-电源管理的广泛实施将使其切实可行,并吸引应用程序支持和利用它。它将使pc机的新用途更加实用,并使pc机的现有用途更加经济。
•增强电源管理功能和健壮性:
-电源管理策略太复杂,无法在平台固件中实现,可以在操作系统中实现和支持,允许廉价的电源管理硬件支持非常精细的电源管理策略。
-将来自用户、应用程序和硬件的电源管理信息一起收集到操作系统中,将有助于更好地进行电源管理决策和执行。
—统一操作系统的电源管理算法,减少固件与操作系统之间的冲突,提高可靠性。
•促进和加速全行业电源管理的实施:
- ospm和ACPI减少了整个行业在电源管理方面的冗余投资,因为这些投资和功能将聚集到操作系统中。这将允许行业参与者将他们的努力和投资集中在创新上,而不是简单的平等。
-操作系统可以独立于硬件进行进化,允许所有acpi兼容的机器从操作系统的改进和创新中获益。
•创建一个健壮的接口,用于配置主板设备:
-启用现有接口无法实现的新的高级设计。
1.2电源管理基本原理
有必要将电源管理转移到操作系统中,并在操作系统和硬件之间使用抽象接口(ACPI)来实现上述主要目标。因为ACPI是抽象的,操作系统可以从硬件独立发展,同样,硬件也可以从操作系统独立发展。
ACPI本质上更易于跨操作系统和处理器移植。ACPI控制方法允许非常灵活地实现特定特性。
旧的电源管理方法存在以下问题:
•对电源管理的最小支持限制了应用程序供应商支持或利用它。
-将电源管理功能移动到操作系统中,使得它在安装了操作系统的每台机器上都可用。功能级别(省电等)因机器而异,但用户和应用程序在所有OSPM机器上看到的都是相同的电源接口和语义。
-这将使应用程序供应商能够投资在他们的产品中增加电源管理功能。
•遗留电源管理算法受到平台固件可用信息的限制。这限制了可以实现的功能。
集中操作系统中来自用户、应用和硬件的电源管理信息和指令,可以实现更强大的功能。例如,一个操作系统可以有一个将I/O操作分为正常I/O操作和惰性I/O操作的策略。懒惰的I/O操作(例如在后台保存文件的字处理器)将被收集成簇,并且只有在由于其他原因需要的I/O设备启动时才会执行。当所需的设备下电时发出的非惰性I/O请求将导致设备立即上电,执行非惰性I/O请求,并执行任何挂起的惰性I/O操作。这种策略需要知道I/O设备何时启动,知道哪些应用程序I/O请求是惰性的,并能够确保这些惰性I/O操作不会饿死。
•电器功能,如电话答录机,需要全球一致的电力决策。
例如,电话应答应用程序可以调用操作系统并断言:“我正在等待来电;系统进入的任何睡眠状态都必须允许我在1秒内醒来并接听电话。”然后,当用户按下“关闭”按钮时,系统将选择符合电话应答服务需求的深度睡眠状态。
-平台固件处理电源管理变得非常复杂。很难使用操作系统,并且仅限于硬件的静态置。
-平台固件需要保留和管理的状态信息少得多(因为操作系统管理它)。
-电源管理算法在操作系统中是统一的,使得操作系统与硬件的集成更好。
-因为可以加载额外的ACPI表(定义块),例如,当一个移动系统对接时,操作系统可以处理动态机器配置。
-因为平台固件的功能更少,也更简单,所以更容易实现和支持(因此更便宜)。
1.3传统的支持
ACPI提供了从遗留硬件到ACPI硬件的有序转换的支持,并允许在单个机器中存在这两种机制,并在需要时使用它们。
Hardware/OS | Legacy OS | ACPI OS with OSPM |
Legacy hardware | A legacy OS on legacy hardware does what it always did. | If the OS lacks legacy support, legacy support is completely contained within the hardware functions. |
Legacy and ACPI hardware support in machine | It works just like a legacy OS on legacy hardware. | During boot, the OS tells the hardware to switch from legacy to OSPM/ACPI mode and from then on, the system has full OSPM/ACPI support. |
ACPI-only hardware | There is no power management. | There is full OSPM/ACPI support. |
1.4 OEM实现策略
任何原始设备制造商都可以像往常一样,免费构建他们认为合适的硬件。考虑到ACPI规范的存在,有两种通用的实现策略:
•原始设备制造商(OEM)可以采用操作系统供应商提供的ACPI OSPM软件,并以多种可能的方式之一实现ACPI规范的硬件部分(针对给定平台)。
•OEM可以开发不兼容acpi的驱动程序和硬件。这个策略提供了更多硬件实现的可能性。然而,实现与ospm兼容但不与acpi兼容的硬件的原始设备制造商将承担为其实现开发、测试和分发驱动程序的成本。
1.5电源和休眠按钮
OSPM为消费者提供了一个新的设备接口。特别地,它提供了一个睡眠按钮,这是一个“软”按钮,它不是物理上关闭机器,而是向操作系统发出信号,让机器处于软关闭或睡眠状态。ACPI定义了两种类型的“软”按钮:一种用于使机器进入睡眠状态,另一种用于使机器进入软关闭状态。
这给OEM提供了两种不同的实现机器的方法:一键模式或两键模式。一键模式有一个单一的按钮,可以用作电源按钮或睡眠按钮,由用户设置。这款有两个按钮的机型有一个方便使用的睡眠按钮和一个单独的电源按钮。在这两种模型中,还需要一个覆盖特性,在没有OSPM交互的情况下强制机器进入软关闭状态,以处理各种罕见但有问题的情况。
1.6 ACPI规范和ACPI结构
该规范定义了ACPI硬件接口、ACPI软件接口和ACPI数据结构。该规范还定义了这些接口的语义。
下面的图1.1列出了OSPM/ACPI的软件和硬件组件,以及它们之间的关系。这个规范描述了组件之间的接口、ACPI系统描述表的内容以及其他ACPI组件的相关语义。请注意,ACPI系统描述表(描述特定平台的硬件)是ACPI实现的核心,ACPI系统固件的作用主要是提供ACPI表(而不是本地指令API)。
ACPI不是一个软件规范;它不是一个硬件规范,尽管它解决了软件和硬件以及它们必须如何工作。相反,ACPI是一个由软件和硬件元素组成的接口规范。
ACPI有三个运行时组件:
ACPI系统描述表
描述到硬件的接口。一些描述限制了可以构建的内容(例如,一些控件嵌入在固定的寄存器块中,表指定了寄存器块的地址)。大多数描述允许以任意方式构建硬件,并可以描述使硬件运行所需的任意操作序列。包含“定义块”的ACPI表可以使用一种伪代码类型的语言,它的解释由操作系统执行。也就是说,OSPM包含并使用一个解释器,该解释器执行用伪代码语言编码并存储在包含“Definition Blocks”的ACPI表中的过程。伪代码语言称为ACPI机器语言(AML),是一种紧凑的、标记化的、抽象的机器语言类型。
ACPI寄存器
硬件接口的受限部分,由ACPI系统描述表描述(至少在位置上描述)。
ACPI平台固件
指与ACPI规范兼容的固件部分。通常,这是引导机器的代码(就像旧的bios所做的那样),并实现sleep、wake和一些重启操作的接口。与遗留BIOS相比,它很少被调用。ACPI描述表也由ACPI平台固件提供。
1.7 操作系统和平台遵从性
ACPI规范只包含接口规范。ACPI不包含任何平台遵从性需求。以下部分提供了引用ACPI定义的接口的类特定平台实现的指导方针,以及操作系统完全支持OSPM/ACPI可能需要的增强指导方针。还提供了acpi兼容操作系统的最低特性实现要求。
1.7.1 acpi定义接口的平台实现
系统平台通过平台硬件和ACPI定义的软件接口实现ACPI定义的硬件接口,通过ACPI系统固件实现系统描述表。acpi定义的特定接口和OSPM概念虽然适用于一类机器(例如,移动系统),但可能不适用于另一类机器(例如,多域企业服务器)。指定平台类所需的所有平台类和适当的acpi定义的接口超出了本规范的能力和范围。
鼓励平台设计指南的作者要求适当的acpi定义的接口和硬件需求,这些接口和硬件需求适合特定设计指南中所述的特定系统平台类。平台设计指南不应该定义提供与ACPI规范中定义的功能相似的替代接口。
1.7.1.1设计指南推荐特性和接口说明
设计指南中应该使用通用的描述文本和类别名称来描述ACPI规范定义的作为平台类需求的所有特性、概念和接口。下面列出了用于描述ACPI定义的特性、概念和接口的推荐的高级文本和类别名称集。
注意:下面指定的接口的定义和关系需求通常分布在ACPI规范中:
•系统地址映射接口
•acpi系统描述表
•根系统描述指针(RSDP)
•系统描述表头
•根系统描述表(RSDT)
•固定ACPI描述表(FADT)
•固件ACPI控制结构(FACS)
•差分系统描述表(DSDT)
•辅助系统描述表(SSDT)
•多个APIC描述表(MADT)
•智能电池表(SBST)
•扩展系统描述表(XSDT)
•嵌入式控制器启动资源表(ECDT)
•系统资源亲和性表(SRAT)
•系统位置信息表
•已修正的平台错误轮询表(CPEP)
•最大系统特性表(MSCT)
•acpi RAS特性表(RASF)
•内存电源状态表(MPST)
•平台内存拓扑表
•启动图形资源表(BGRT)
•固件性能数据表(FPDT)
•通用定时器描述表(GTDT)
•固定ACPI描述表(FADT)
•电源管理定时器控制/状态
•S5覆盖的电源或睡眠按钮(也可以在通用空间)
•实时时钟唤醒告警控制/状态
•sci /SMI路由控制/电源管理和通用事件的状态
•系统电源状态控制(睡眠/唤醒控制)
•处理器电源状态控制(c状态)
•处理器节流控制/状态
•处理器性能状态控制/状态
•通用事件控制/状态
•全局锁控制/状态
•系统复位控制
•嵌入式控制器控制/状态
•smbus Host Controller (HC)控制/状态
•智能电池子系统
•在ACPI命名空间中定义通用寄存器接口和对象定义。
•通用事件处理
•主板设备识别、配置和插入/移除
•热区域
•电源资源控制
•设备电源状态控制
•系统电源状态控制
•系统指标
•设备和设备控制:
-处理器
-控制方法电池
-智能电池子系统
-手机盖
-S5覆盖的电源或睡眠按钮(也可以在固定空间)
-嵌入式控制器
-风扇
-通用总线桥接
-ata控制器
-软盘控制器
-gpe块
-模块
-记忆
•全局锁相关接口
•acpi事件编程模型
•acpi定义的平台固件责任
•acpi定义的状态定义:
-全局系统电源状态(g -state, S0, S5)
-系统休眠状态(s状态S1-S4)
-设备电源状态(d状态)
-处理器电源状态(C-states)
-设备和处理器性能状态(p状态)
1.7.1.2设计指南术语示例
下面的示例展示了客户端平台设计指南如何使用推荐的术语定义ACPI需求,目标是要求对系统类进行健壮的配置和电源管理。
注意:这个示例是作为ACPI术语的使用指南提供的。它不应该被解释为ACPI要求的声明。
符合本平台设计指南的平台必须实现以下ACPI定义的系统特性、概念和接口,以及它们相关的事件模型:
•系统地址映射接口
•系统固件中提供的acpi系统描述表
•acpi定义的固定寄存器接口:
•电源管理定时器控制/状态
•电源或睡眠按钮与S5覆盖(也可能在通用寄存器空间实现)
•实时时钟唤醒告警控制/状态
•通用事件控制/状态
•sci /SMI路由控制/电源管理和通用事件的状态(仅当系统支持传统模式时需要控制)
•系统电源状态控制(睡眠/唤醒控制)
•处理器电源状态控制(用于C1)
•全局锁控制/状态(如果系统需要全局锁接口)
•在ACPI命名空间中定义通用寄存器接口和对象定义:
-通用事件处理
-主板设备标识、配置和插入/移除
-系统电源状态控制(章节7.3)
-设备和设备控制:
*处理器
*控制方法电池(或移动系统上的智能电池子系统)
*智能电池子系统(或移动系统上的控制方法电池)
* S5覆盖的电源或睡眠按钮(也可以在固定的寄存器空间实现)
-当操作系统和固件环境共享硬件中的逻辑寄存器时,全局锁相关接口
•acpi事件编程模型
•acpi定义的平台固件责任
•acpi定义的状态定义:
-系统休眠状态(至少一个系统休眠状态,S1-S4)
-设备电源状态(d状态必须按照设备类规范实现)
-处理器电源状态(所有处理器必须支持C1电源状态)
下面的示例展示了设计指南如何使用推荐的术语来定义执行多个OS实例的系统的ACPI相关需求,目标是要求系统类的健壮配置和持续可用性。
注意:这个示例是作为ACPI术语的使用指南提供的。它不应该被解释为ACPI要求的声明。
符合本平台设计指南的平台必须实现以下ACPI定义的系统特性和接口,以及它们相关的事件模型:
•系统地址映射接口
•系统固件中提供的acpi系统描述表
•acpi定义的固定寄存器接口:
•电源管理定时器控制/状态
•通用事件控制/状态
•sci /SMI路由控制/电源管理和通用事件的状态
•(仅当系统支持传统模式时才需要控制)
•系统电源状态控制(睡眠/唤醒控制)
•处理器电源状态控制(用于C1)
•全局锁控制/状态(如果系统需要全局锁接口)
•在ACPI命名空间中定义通用寄存器接口和对象定义:
-通用事件处理
-主板设备标识、配置和插入/移除(第6节)
-系统电源状态控制(章节7.3)
-系统指标
-设备和设备控制:
*处理器
•当硬件中的逻辑寄存器在操作系统和固件环境之间共享时,全局锁相关接口
•acpi事件编程模型(章节5.6)
•acpi定义的平台固件责任(章节15)
•acpi定义的状态定义:
处理器电源状态(所有处理器必须支持C1电源状态)
1.7.2 OSPM实现
需要对操作系统进行增强,以支持acpi定义的特性、概念和接口,以及与操作系统执行的系统平台类相关的事件模型。这是OSPM的实现。下面概述了支持所有acpi定义的接口所需的操作系统增强和元素。
为了通过实施OSPM来支持ACPI,需要将操作系统修改为:
•使用系统地址映射接口。
•查找并使用ACPI系统描述表。
•解释ACPI机器语言(AML)。
•枚举和配置主板设备描述在ACPI命名空间。
•与电源管理定时器接口。
•与实时时钟唤醒报警接口。
•进入ACPI模式(在遗留硬件系统上)。
•执行设备电源管理策略。
•实施电源资源管理。
•在调度程序空闲处理程序中实现处理器功率状态。
•控制处理器和设备的性能状态。
•实现ACPI热模型。
•支持ACPI事件编程模型,包括处理SCI中断、管理固定事件、通用事件、嵌入式控制器中断和动态设备支持。
•支持全球锁的获取和发布。
•使用reset寄存器复位系统。
•提供api来影响电源管理策略。
•为acpi定义的设备实现驱动支持。
•实现支持系统指标的api。
•支持所有系统状态S1-S5。
1.7.3操作系统需求
兼容OSPM/ acpi的操作系统的最低要求如下:
•使用第15节获取英特尔架构(IA)平台上的系统地址映射:
•int 15H, E820H -查询系统地址映射接口(参见第15节)
•efi GetMemoryMap()引导服务函数(参见第15节)
•查找并使用ACPI系统描述表(参见第5节)。
•实现AML解释器,支持所有定义的AML语法元素(见第20节)。
•支持ACPI事件编程模型,包括处理SCI中断、管理固定事件、通用事件、嵌入式控制器中断和动态设备支持。
•枚举和配置主板设备描述在ACPI命名空间。
•实现本规范中定义的ACPI设备的支持:
•嵌入式控制器设备(见第12节)
•gpe块设备(见9.11节)
•ACPI热模型的实现(参见第3.10节)。
•支持全球锁的获取和发布。
•os导向的电源管理支持(设备驱动程序负责维护设备上下文,如第22节中描述的设备电源管理类规范所述)。
1.8目标受众
本规范适用于以下用户:
•构建包含acpi兼容接口的硬件的oem
•操作系统和设备驱动程序开发人员
•所有平台系统固件开发人员
•cpu和芯片组供应商
•外围供应商
1.9文档组织
ACPI规范文档分为以下四部分:
•规范的第一部分(第1章到第3章)介绍了ACPI,并提供了执行概述。
•第二部分(第4章和第5章)定义了ACPI硬件和软件编程模型。
•第三部分(第6章到第17章)指定了ACPI实现的细节;规范的这一部分主要是针对开发人员的。
•第4部分(第18章和第19章)是技术参考资料:第18章是ACPI源语言(ASL)参考资料,在本规范的许多其他章节中引用了该参考资料。
•附录包含设备类规范,描述特定设备类的电源管理特性,以及特定设备类的ACPI接口。
1.9.1 ACPI简介和概述
规范的前三部分提供了ACPI的执行概述。
第1章:引言讨论了规范的目的和目标,概述了acpiccompatible系统架构,指定了acpi兼容系统的最低需求,并提供了相关规范的参考。
第二章:术语定义定义本规范中使用的关键术语。特别地,整个系统状态(机械关闭、软关闭、睡眠、工作和非挥发性睡眠)在本章中定义,以及设备电源状态定义:关闭(D3)、D3hot、D2、D1和完全打开(D0)。设备和处理器性能状态(P0, P1,…Pn)也进行了讨论。
第3章:ACPI概述概述了ACPI规范中涉及的功能领域:系统电源管理、设备电源管理、处理器电源管理、即插即用、系统事件处理、电池管理和热管理。
1.9.2编程模型
第4章和第5章定义ACPI硬件和软件编程模型。规范的这一部分主要针对系统设计人员、开发人员和项目经理。
该规范的所有面向实现、参考和平台示例章节(该规范的所有其余章节)都是基于第4章和第5章中定义的模型。这些章节是ACPI规范的核心。在这两章之间有广泛的相互参照。
第4章:ACPI硬件规范定义一组硬件接口,以满足该规范的目标。
第5章:ACPI软件编程模型定义了一组满足本规范目标的软件接口。
1.9.3实现细节
该规范的第三部分定义了实际构建在acpi兼容平台上工作的组件所需的实现细节。规范的这一部分主要是为开发人员准备的。
第6章:配置定义用于配置和分配资源给设备的保留的即插即用对象,共享资源和用于跟踪设备插入和移除的保留对象。还定义了与acpi兼容的资源描述符的格式。
第7章:电源与性能管理定义预留的设备电源管理对象和预留的系统电源管理对象。
第8章:处理器配置和控制定义了当系统处于工作状态时,操作系统如何管理处理器的功耗和其他控制。
第9章:特定于ACPI的设备对象列出了需要支持某些特定于设备的ACPI控件的集成设备,以及可以提供的特定于设备的ACPI控件。大多数设备对象通过通用对象和控制方法进行控制,并具有通用设备id;本章讨论例外情况。
第10章:电源设备定义预留的电池设备和交流适配器对象。
第11章:热管理定义预留的热管理对象。
第12章:ACPI嵌入式控制器接口规范定义ACPI兼容操作系统与嵌入式控制器之间的接口。
第13章:ACPI系统管理总线接口规范定义ACPI兼容操作系统与SMBus (System Management Bus)主控制器之间的接口。
第14章:平台通信通道解释了OSPM与平台中的实体通信的通用机制,定义了一个新的地址空间类型。
第15章:系统地址映射接口解释在基于ISA/EISA/PCI总线的系统中使用的特殊INT 15调用。这个调用为操作系统提供了一个干净的内存映射,指示保留的地址范围和主板上可用的范围。还描述了基于uefi的内存地址映射报告接口。
第16章:唤醒和睡眠详细定义了系统工作和睡眠状态之间的转换以及它们与唤醒事件的关系。引用第6、7和8章中定义的保留对象。
第17章:非统一内存访问(NUMA)体系结构平台详细讨论ACPI如何定义接口来描述NUMA体系结构平台。引用第5、6、8和9章中定义的保留对象。
第18章:ACPI平台错误接口定义接口,使OSPM能够处理由基于平台的错误检测硬件检测的不同类型的硬件错误事件。
1.9.4技术参考
规范的第四部分包含了开发人员的参考资料。
第19章:ACPI源语言参考定义了所有可以用来编写ACPI控制方法的ASL语句的语法,以及示例语法用法。
第20章:ACPI机器语言规范定义ACPI虚拟机语言的语法。ASL转换器(编译器)输出AML。
第21章:ACPI数据表和表语言定义描述一种简单的语言(表定义语言或TDL),可以用来生成任何ACPI数据表。
附录A:设备类规范描述了基于每个设备类的设备特定的电源管理行为。
附录B:视频扩展包含视频设备类专用的ACPI接口
1.9.5 修订版
ACPI规范的更新被认为是新的修订或勘误表,如下所述:
•当有实质性的新内容或可能改变现有行为的变化时,产生新的修订。新修订由专业指定。次要版本号(例如6.3)。在变化非常小的情况下,我们可能有一个Major.Minor.Minor命名约定(例如6.3.1)。
•如果对规范提出的变更或修正不包括任何重要的新材料或对现有行为的修改,则产生勘误表。勘误表是通过在版本号末尾添加一个大写字母来指定的,例如6.2A。
1.10相关文档
旧硬件平台的电源管理和即插即用规范可从acpi相关文件的链接中获得:
•advanced Power Management (APM) BIOS规范
即插即用BIOS规范
intel架构规范可以在http://developer.intel.com和https://software.intel.com/en-us/ articles/intel-sdm上找到。
其他UEFI规格请访问https://uefi.org/specifications:
统一可扩展固件接口(UEFI)规范
平台集成(PI)规范
智能电池系统组件和SMBus的文档和规格可在以下链接获得:
•智能电池系统规格
•smbus规范