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. All versions of the specification are available for download from the
ACPI website at www.acpi.info.
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 3.0b specification.
Development is still not complete in some areas, and
continues to this day. ACPICA is also actively
maintained. Releases occur on a approximately one month
schedule, and contain both new features and bug fixes.
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 3.0b 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.