27.10.2015 Views

Advanced Configuration and Power Interface Specification

ACPI_6.0

ACPI_6.0

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Advanced</strong> <strong>Configuration</strong> <strong>and</strong> <strong>Power</strong> <strong>Interface</strong> <strong>Specification</strong><br />

Different implementations will result in different address spaces being used for different functions.<br />

The ACPI specification consists of fixed hardware registers <strong>and</strong> generic hardware registers. Fixed<br />

hardware registers are required to implement ACPI-defined interfaces. The generic hardware<br />

registers are needed for any events generated by value-added hardware.<br />

ACPI defines register blocks. An ACPI-compatible system provides an ACPI table (the FADT, built<br />

in memory at boot-up) that contains a list of pointers to the different fixed hardware register blocks<br />

used by OSPM. The bits within these registers have attributes defined for the given register block.<br />

The types of registers that ACPI defines are:<br />

• Status/Enable Registers (for events)<br />

• Control Registers<br />

If a register block is of the status/enable type, then it will contain a register with status bits, <strong>and</strong> a<br />

corresponding register with enable bits. The status <strong>and</strong> enable bits have an exact implementation<br />

definition that needs to be followed (unless otherwise noted), which is illustrated by the following<br />

diagram:<br />

Event Input<br />

Status Bit<br />

Event Output<br />

Enable Bit<br />

Figure 4-12 Block Diagram of a Status/Enable Cell<br />

Notice that the status bit, which hardware sets by the Event Input being set in this example, can only<br />

be cleared by software writing a 1 to its bit position. Also, the enable bit has no effect on the setting<br />

or resetting of the status bit; it only determines if the SET status bit will generate an “Event Output,”<br />

which generates an SCI when set if its enable bit is set.<br />

ACPI also defines register groupings. A register grouping consists of two register blocks, with two<br />

pointers to two different blocks of registers, where each bit location within a register grouping is<br />

fixed <strong>and</strong> cannot be changed. The bits within a register grouping, which have fixed bit positions, can<br />

be split between the two register blocks. This allows the bits within a register grouping to reside in<br />

either or both register blocks, facilitating the ability to map bits within several different chips to the<br />

same register thus providing the programming model with a single register grouping bit structure.<br />

OSPM treats a register grouping as a single register; but located in multiple places. To read a register<br />

grouping, OSPM will read the “A” register block, followed by the “B” register block, <strong>and</strong> then will<br />

logically “OR” the two results together (the SLP_TYP field is an exception to this rule). Reserved<br />

bits, or unused bits within a register block always return zero for reads <strong>and</strong> have no side effects for<br />

writes (which is a requirement).<br />

The SLP_TYPx field can be different for each register grouping. The respective sleeping object \_Sx<br />

contains a SLP_TYPa <strong>and</strong> a SLP_TYPb field. That is, the object returns a package with two integer<br />

values of 0-7 in it. OSPM will always write the SLP_TYPa value to the “A” register block followed<br />

by the SLP_TYPb value within the field to the “B” register block. All other bit locations will be<br />

written with the same value. Also, OSPM does not read the SLP_TYPx value but throws it away.<br />

70 April, 2015 Version 6.0

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!