General ACPI Questions
What is ACPI?
ACPI stands for the Advanced Configuration and Power Interface specification. ACPI defines hardware and software interfaces that enable OS-directed configuration and Power Management (OSPM) to enumerate and configure motherboard devices, and manage their power. ACPI, in conjunction with OSPM, replaces APM and PNPBIOS, as well as the MultiProcessor (MPS) specification. ACPI 1.0 was released in 1996. The ACPI 2.0 Specification was released in 2000, and ACPI 3.0b was released in 2006. ACPI 5.0 was released in 2011. ACPI 6.0 was released in April 2015. Newer versions of the specification are available for download from the UEFI website here: http://uefi.org/specifications.
What was wrong with APM?
Using APM (Advanced Power Management), the BIOS controlled all power management independent of the operating system. For example, the user would configure screen and hard drive idle values in the BIOS setup program, and when these were exceeded, the BIOS would turn off the screen, or spin down the hard drive. There were three major flaws with APM.
- Power management policy had to be re-implemented for each platform, and therefore tended to be buggy.
- The BIOS had an incomplete picture of the platform's actual usage, which led to imperfect power management.
- The BIOS didn't have enough room to implement a sophisticated power policy.
What was wrong with PNPBIOS?
PNPBIOS could be unreliable, earning it the nickname "Plug and Pray".
How does ACPI help these issues?
ACPI fixes these issues by moving the power management responsibility to the operating system. The operating system has the most knowledge on a running system's state, and so is in the best position to perform power management. For example, a presentation application can tell the OS the display is in use, and the OS can change its power policy accordingly. Finally, the OS does not have the size limitation of the BIOS.
There are still firmware requirements with ACPI, however. OSPM still needs platform-specific information. The ACPI system firmware describes the system's characteristics by placing data, organized into tables, into main memory. These tables have names like RSDT and DSDT. The DSDT (Differentiated System Description Table) is the biggest and arguably the most important, because this is where the system's devices are described.
What is AML? What is ASL?
AML stands for ACPI Machine Language. This is a binary pseudo-code format, which the operating system's ACPI AML interpreter parses to discover the machine's properties. Since most BIOS implementers do not like to write in binary, the ACPI specification also includes ASL (ACPI Source Language). System designers describe their system in ASL. It is then compiled into AML, and included in the system's flash BIOS. Then, on boot, the BIOS startup code copies it into RAM, where it can be interpreted by the OS's ACPI AML interpreter.
What is ACPICA?
ACPICA stands for the ACPI Component Architecture. This project was started in 1998 to enable the industry's adoption of ACPI for laptops, desktops, and servers. The main barrier to adoption of ACPI has been the implementation of the AML interpreter for each OS. ACPICA provides an interpreter, as well a much of the required infrastructure to locate the ACPI tables, manage ACPI hardware and events, manage resource usage information, etc.
The goal of ACPICA is not to enable any single OS, but to enable all OSs to use ACPI. The ACPICA code is written as a group of OS-independent modules. These modules expose interfaces that the OS uses, and also requires that basic OS-dependent functionality be implemented for each OS, such as memory management, synchronization, threading, etc.
What's the status of ACPICA?
The code is fairly mature, and implements an AML interpreter, table manager, namespace manager, resource manager, fixed and general purpose event support, and ACPI hardware support. It currently supports the ACPI 5.0 specification.
ACPICA is actively maintained and updated. Releases occur on a approximately one month schedule, and contain both new features and bug fixes. ACPICA also closely tracks new releases of the ACPI specification.
Who is using ACPICA for their ACPI implementation?
It is currently being used by many major commercial OS vendors. It is also included in the Linux Kernel.
Under what licensing is the ACPICA source released?
ACPICA can be licensed under the GNU General Public License or via a separate license that may be more favorable to commercial OSVs. Please see the source code license header for specifics.
What is required to use ACPICA in my OS?
ACPI itself has many requirements on the OS. (Please see the ACPI 5.0 Spec, section 1 for a description.)
The use of ACPICA offloads many of these, but also adds the following requirements:
- Your OS must be written in C, or be able to interface to C code.
- You must implement the OS-dependent functions, as applicable for your OS. (For example, to allocate memory, ACPICA always calls AcpiOsAllocate(). You must implement AcpiOsAllocate(), and call your platform-specific memory allocation function.) There are about 25-30 such interfaces that ACPICA requires.
- You must put the ACPICA initialization calls into your OS startup routine.
What is the "implicit return" issue?
The AML definition blocks in some systems contain an error, where the AML return operator is not used to return a value from a control method. Some ACPI-defined control methods (e.g. _STA) must always return a value. Due to an errata, this bug does not manifest itself on Windows' ACPI implementations, and therefore was not detected when OEMs tested their systems using that OS. ACPICA implements a "slack mode" that enables these implicit returns.
Linux ACPI Questions
Linux-specific ACPI questions and answers can be found in the Linux ACPI website FAQ at www.lesswatts.org/projects/acpi/faq.php.