----------------------------------------
8 January 2016. Summary of changes for version 20160108:

1) ACPICA kernel-resident subsystem:

Updated all ACPICA copyrights and signons to 2016: Added the 2016 
copyright to all source code module headers and utility/tool signons. 
This includes the standard Linux dual-license header. This affects 
virtually every file in the ACPICA core subsystem, iASL compiler, all 
ACPICA utilities, and the ACPICA test suite.

Fixed a regression introduced in version 20151218 concerning the 
execution of so-called module-level ASL/AML code. Namespace objects 
created under a module-level If() construct were not properly/fully 
entered into the namespace and could cause an interpreter fault when 
accessed.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

Current Release:
    Non-Debug Version: 102.7K Code, 28.4K Data, 131.1K Total
    Debug Version:     200.4K Code, 81.9K Data, 282.4K Total
  Previous Release:
    Non-Debug Version: 102.6K Code, 28.4K Data, 131.0K Total
    Debug Version:     200.3K Code, 81.9K Data, 282.3K Total


2) iASL Compiler/Disassembler and Tools:

Fixed a problem with the compilation of the GpioIo and GpioInt resource 
descriptors. The _PIN field name was incorrectly defined to be an array 
of 32-bit values, but the _PIN values are in fact 16 bits each. This 
would cause incorrect bit width warnings when using Word (16-bit) fields 
to access the descriptors.


----------------------------------------
18 December 2015. Summary of changes for version 20151218:

1) ACPICA kernel-resident subsystem:

Implemented per-AML-table execution of "module-level code" as individual 
ACPI tables are loaded into the namespace during ACPICA initialization. 
In other words, any module-level code within an AML table is executed 
immediately after the table is loaded, instead of batched and executed 
after all of the tables have been loaded. This provides compatibility 
with other ACPI implementations. ACPICA BZ 1219. Bob Moore, Lv Zheng, 
David Box.

To fully support the feature above, the default operation region handlers 
for the SystemMemory, SystemIO, and PCI_Config address spaces are now 
installed before any ACPI tables are loaded. This enables module-level 
code to access these address spaces during the table load and module-
level code execution phase. ACPICA BZ 1220. Bob Moore, Lv Zheng, David 
Box.

Implemented several changes to the internal _REG support in conjunction 
with the changes above. Also, changes to the AcpiExec/AcpiNames/Examples 
utilities for the changes above. Although these tools were changed, host 
operating systems that simply use the default handlers for SystemMemory, 
SystemIO, and PCI_Config spaces should not require any update. Lv Zheng.

For example, in the code below, DEV1 is conditionally added to the 
namespace by the DSDT via module-level code that accesses an operation 
region. The SSDT references DEV1 via the Scope operator. DEV1 must be 
created immediately after the DSDT is loaded in order for the SSDT to 
successfully reference DEV1. Previously, this code would cause an 
AE_NOT_EXIST exception during the load of the SSDT. Now, this code is 
fully supported by ACPICA.

    DefinitionBlock ("", "DSDT", 2, "Intel", "DSDT1", 1)
    {
        OperationRegion (OPR1, SystemMemory, 0x400, 32)
        Field (OPR1, AnyAcc, NoLock, Preserve)
        {
            FLD1, 1
        }
        If (FLD1)
        {
            Device (\DEV1)
            {
            }
        }
    }
    DefinitionBlock ("", "SSDT", 2, "Intel", "SSDT1", 1)
    {
        External (\DEV1, DeviceObj)
        Scope (\DEV1)
        {
        }
    }

Fixed an AML interpreter problem where control method invocations were 
not handled correctly when the invocation was itself a SuperName argument 
to another ASL operator. In these cases, the method was not invoked. 
ACPICA BZ 1002. Affects the following ASL operators that have a SuperName 
argument:
    Store
    Acquire, Wait
    CondRefOf, RefOf
    Decrement, Increment
    Load, Unload
    Notify
    Signal, Release, Reset
    SizeOf

Implemented automatic String-to-ObjectReference conversion support for 
packages returned by predefined names (such as _DEP). A common BIOS error 
is to add double quotes around an ObjectReference namepath, which turns 
the reference into an unexpected string object. This support detects the 
problem and corrects it before the package is returned to the caller that 
invoked the method. Lv Zheng.

Implemented extensions to the Concatenate operator. Concatenate now 
accepts any type of object, it is not restricted to simply 
Integer/String/Buffer. For objects other than these 3 basic data types, 
the argument is treated as a string containing the name of the object 
type. This expands the utility of Concatenate and the Printf/Fprintf 
macros. ACPICA BZ 1222.

Cleaned up the output of the ASL Debug object. The timer() value is now 
optional and no longer emitted by default. Also, the basic data types of 
Integer/String/Buffer are simply emitted as their values, without a data 
type string -- since the data type is obvious from the output. ACPICA BZ 
1221.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Current Release:
    Non-Debug Version: 102.6K Code, 28.4K Data, 131.0K Total
    Debug Version:     200.3K Code, 81.9K Data, 282.3K Total
  Previous Release:
    Non-Debug Version: 102.0K Code, 28.3K Data, 130.3K Total
    Debug Version:     199.6K Code, 81.8K Data, 281.4K Total


2) iASL Compiler/Disassembler and Tools:

iASL: Fixed some issues with the ASL Include() operator. This operator 
was incorrectly defined in the iASL parser rules, causing a new scope to 
be opened for the code within the include file. This could lead to 
several issues, including allowing ASL code that is technically illegal 
and not supported by AML interpreters. Note, this does not affect the 
related #include preprocessor operator. ACPICA BZ 1212.

iASL/Disassembler: Implemented support for the ASL ElseIf operator. This 
operator is essentially an ASL macro since there is no AML opcode 
associated with it. The code emitted by the iASL compiler for ElseIf is 
an Else opcode followed immediately by an If opcode. The disassembler 
will now emit an ElseIf if it finds an Else immediately followed by an 
If. This simplifies the decoded ASL, especially for deeply nested 
If..Else and large Switch constructs. Thus, the disassembled code more 
closely follows the original source ASL. ACPICA BZ 1211. Example:

    Old disassembly:
        Else
        {
            If (Arg0 == 0x02)
            {
                Local0 = 0x05
            }
        }

    New disassembly:
        ElseIf (Arg0 == 0x02)
        {
            Local0 = 0x05
        }

AcpiExec: Added support for the new module level code behavior and the 
early region installation. This required a small change to the 
initialization, since AcpiExec must install its own operation region 
handlers.

AcpiExec: Added support to make the debug object timer optional. Default 
is timer disabled. This cleans up the debug object output -- the timer 
data is rarely used.

AcpiExec: Multiple ACPI tables are now loaded in the order that they 
appear on the command line. This can be important when there are 
interdependencies/references between the tables.

iASL/Templates. Add support to generate template files with multiple 
SSDTs within a single output file. Also added ommand line support to 
specify the number of SSDTs (in addition to a single DSDT). ACPICA BZ 
1223, 1225.


----------------------------------------
24 November 2015. Summary of changes for version 20151124:

1) ACPICA kernel-resident subsystem:

Fixed a possible regression for a previous update to FADT handling. The 
FADT no longer has a fixed table ID, causing some issues with code that 
was hardwired to a specific ID. Lv Zheng.

Fixed a problem where the method auto-serialization could interfere with 
the current SyncLevel. This change makes the auto-serialization support 
transparent to the SyncLevel support and management.

Removed support for the _SUB predefined name in AcpiGetObjectInfo. This 
interface is intended for early access to the namespace during the 
initial namespace device discovery walk. The _SUB method has been seen to 
access operation regions in some cases, causing errors because the 
operation regions are not fully initialized.

AML Debugger: Fixed some issues with the terminate/quit/exit commands 
that can cause faults. Lv Zheng.

AML Debugger: Add thread ID support so that single-step mode only applies 
to the AML Debugger thread. This prevents runtime errors within some 
kernels. Lv Zheng. 

Eliminated extraneous warnings from AcpiGetSleepTypeData. Since the _Sx 
methods that are invoked by this interface are optional, removed warnings 
emitted for the case where one or more of these methods do not exist. 
ACPICA BZ 1208, original change by Prarit Bhargava.

Made a major pass through the entire ACPICA source code base to 
standardize formatting that has diverged a bit over time. There are no 
functional changes, but this will of course cause quite a few code 
differences from the previous ACPICA release.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Current Release:
    Non-Debug Version: 102.0K Code, 28.3K Data, 130.3K Total
    Debug Version:     199.6K Code, 81.8K Data, 281.4K Total
  Previous Release:
    Non-Debug Version: 101.7K Code, 27.9K Data, 129.6K Total
    Debug Version:     199.3K Code, 81.4K Data, 280.7K Total


2) iASL Compiler/Disassembler and Tools:

iASL/acpiexec/acpixtract/disassembler: Added support to allow multiple 
definition blocks within a single ASL file and the resulting AML file. 
Support for this type of file was also added to the various tools that 
use binary AML files: acpiexec, acpixtract, and the AML disassembler. The 
example code below shows two definition blocks within the same file:

    DefinitionBlock ("dsdt.aml", "DSDT", 2, "Intel", "Template", 
0x12345678)
    {
    }
    DefinitionBlock ("", "SSDT", 2, "Intel", "Template", 0xABCDEF01)
    {
    }

iASL: Enhanced typechecking for the Name() operator. All expressions for 
the value of the named object must be reduced/folded to a single constant 
at compile time, as per the ACPI specification (the AML definition of 
Name()).

iASL: Fixed some code indentation issues for the -ic and -ia options (C 
and assembly headers). Now all emitted code correctly begins in column 1.

iASL: Added an error message for an attempt to open a Scope() on an 
object defined in an SSDT. The DSDT is always loaded into the namespace 
first, so any attempt to open a Scope on an SSDT object will fail at 
runtime.


----------------------------------------
30 September 2015. Summary of changes for version 20150930:

1) ACPICA kernel-resident subsystem:

Debugger: Implemented several changes and bug fixes to assist support for 
the in-kernel version of the AML debugger. Lv Zheng.
- Fix the "predefined" command for in-kernel debugger.
- Do not enter debug command loop for the help and version commands.
- Disallow "execute" command during execution/single-step of a method.

Interpreter: Updated runtime typechecking for all operators that have 
target operands. The operand is resolved and validated that it is legal. 
For example, the target cannot be a non-data object such as a Device, 
Mutex, ThermalZone, etc., as per the ACPI specification.

Debugger: Fixed the double-mutex user I/O handshake to work when local 
deadlock detection is enabled.

Debugger: limited display of method locals and arguments (LocalX and 
ArgX) to only those that have actually been initialized. This prevents 
lines of extraneous output.

Updated the definition of the NFIT table to correct the bit polarity of 
one flag: ACPI_NFIT_MEM_ARMED --> ACPI_NFIT_MEM_NOT_ARMED

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Current Release:
    Non-Debug Version: 101.7K Code, 27.9K Data, 129.6K Total
    Debug Version:     199.3K Code, 81.4K Data, 280.7K Total
  Previous Release:
    Non-Debug Version: 101.3K Code, 27.7K Data, 129.0K Total
    Debug Version:     198.6K Code, 80.9K Data, 279.5K Total


2) iASL Compiler/Disassembler and Tools:

iASL: Improved the compile-time typechecking for operands of many of the 
ASL operators:

-- Added an option to disable compiler operand/operator typechecking (-
ot).

-- For the following operators, the TermArg operands are now validated 
when possible to be Integer data objects: BankField, OperationRegion, 
DataTableRegion, Buffer, and Package.

-- Store (Source, Target): Both the source and target operands are 
resolved and checked that the operands are both legal. For example, 
neither operand can be a non-data object such as a Device, Mutex, 
ThermalZone, etc. Note, as per the ACPI specification, the CopyObject 
operator can be used to store an object to any type of target object.

-- Store (Source, Target): If the source is a Package object, the target 
must be a Package object, LocalX, ArgX, or Debug. Likewise, if the target 
is a Package, the source must also be a Package.

-- Store (Source, Target): A warning is issued if the source and target 
resolve to the identical named object.

-- Store (Source, <method invocation>): An error is generated for the 
target method invocation, as this construct is not supported by the AML 
interpreter.

-- For all ASL math and logic operators, the target operand must be a 
data object (Integer, String, Buffer, LocalX, ArgX, or Debug). This 
includes the function return value also.

-- External declarations are also included in the typechecking where 
possible. External objects defined using the UnknownObj keyword cannot be 
typechecked, however.

iASL and Disassembler: Added symbolic (ASL+) support for the ASL Index 
operator:
- Legacy code: Index(PKG1, 3)
- New ASL+ code: PKG1[3]
This completes the ACPI 6.0 ASL+ support as it was the only operator not 
supported.

iASL: Fixed the file suffix for the preprocessor output file (.i). Two 
spaces were inadvertently appended to the filename, causing file access 
and deletion problems on some systems.

ASL Test Suite (ASLTS): Updated the master makefile to generate all 
possible compiler output files when building the test suite -- thus 
exercising these features of the compiler. These files are automatically 
deleted when the test suite exits.


----------------------------------------
18 August 2015. Summary of changes for version 20150818:

1) ACPICA kernel-resident subsystem:

Fix a regression for AcpiGetTableByIndex interface causing it to fail. Lv 
Zheng. ACPICA BZ 1186.

Completed development to ensure that the ACPICA Disassembler and Debugger 
are fully standalone components of ACPICA. Removed cross-component 
dependences. Lv Zheng.

The max-number-of-AML-loops is now runtime configurable (previously was 
compile-time only). This is essentially a loop timeout to force-abort 
infinite AML loops. ACPCIA BZ 1192.

Debugger: Cleanup output to dump ACPI names and namepaths without any 
trailing underscores. Lv Zheng. ACPICA BZ 1135.

Removed unnecessary conditional compilations across the Debugger and 
Disassembler components where entire modules could be left uncompiled.

The aapits test is deprecated and has been removed from the ACPICA git 
tree. The test has never been completed and has not been maintained, thus 
becoming rather useless. ACPICA BZ 1015, 794.

A batch of small changes to close bugzilla and other reports:
- Remove duplicate code for _PLD processing. ACPICA BZ 1176.
- Correctly cleanup after a ACPI table load failure. ACPICA BZ 1185.
- iASL: Support POSIX yacc again in makefile. Jung-uk Kim.
- ACPI table support: general cleanup and simplification. Lv Zheng, Bob 
Moore.
- ACPI table support: fix for a buffer read overrun in AcpiTbFindTable. 
ACPICA BZ 1184.
- Enhance parameter validation for DataTableRegion and LoadTable ASL/AML 
operators.
- Debugger: Split debugger initialization/termination interfaces. Lv 
Zheng.
- AcpiExec: Emit OemTableId for SSDTs during the load phase for table 
identification.
- AcpiExec: Add debug message during _REG method phase during table 
load/init.
- AcpiNames: Fix a regression where some output was missing and no longer 
emitted.
- Debugger: General cleanup and simplification. Lv Zheng.
- Disassembler: Cleanup use of several global option variables. Lv Zheng.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Current Release:
    Non-Debug Version: 101.3K Code, 27.7K Data, 129.0K Total
    Debug Version:     198.6K Code, 80.9K Data, 279.5K Total
  Previous Release:
    Non-Debug Version: 100.9K Code, 24.5K Data, 125.4K Total
    Debug Version:     197.8K Code, 81.5K Data, 279.3K Total


2) iASL Compiler/Disassembler and Tools:

AcpiExec: Fixed a problem where any more than 32 ACPI tables in the XSDT 
were not handled properly and caused load errors. Now, properly invoke 
and use the ACPICA auto-reallocate mechanism for ACPI table data 
structures. ACPICA BZ 1188

AcpiNames: Add command-line wildcard support for ACPI table files. ACPICA 
BZ 1190.

AcpiExec and AcpiNames: Add -l option to load ACPI tables only. For 
AcpiExec, this means that no control methods (like _REG/_INI/_STA) are 
executed during initialization. ACPICA BZ 1187, 1189.

iASL/Disassembler: Implemented a prototype "listing" mode that emits AML 
that corresponds to each disassembled ASL statement, to simplify 
debugging. ACPICA BZ 1191.

Debugger: Add option to the "objects" command to display a summary of the 
current namespace objects (Object type and count). This is displayed if 
the command is entered with no arguments.

AcpiNames: Add -x option to specify debug level, similar to AcpiExec.


----------------------------------------
17 July 2015. Summary of changes for version 20150717:

1) ACPICA kernel-resident subsystem:

Improved the partitioning between the Debugger and Disassembler 
components. This allows the Debugger to be used standalone within kernel 
code without the Disassembler (which is used for single stepping also). 
This renames and moves one file, dmobject.c to dbobject.c. Lv Zheng.

Debugger: Implemented a new command to trace the execution of control 
methods (Trace). This is especially useful for the in-kernel version of 
the debugger when file I/O may not be available for method trace output. 
See the ACPICA reference for more information. Lv Zheng.

Moved all C library prototypes (used for the local versions of these 
functions when requested) to a new header, acclib.h
Cleaned up the use of non-ANSI C library functions. These functions are 
implemented locally in ACPICA. Moved all such functions to a common 
source file, utnonansi.c

Debugger: Fixed a problem with the "!!" command (get last command 
executed) where the debugger could enter an infinite loop and eventually 
crash.

Removed the use of local macros that were used for some of the standard C 
library functions to automatically cast input parameters. This mostly 
affected the is* functions where the input parameter is defined to be an 
int. This required a few modifications to the main ACPICA source code to 
provide casting for these functions and eliminate possible compiler 
warnings for these parameters.

Across the source code, added additional status/error checking to resolve 
issues discovered by static source code analysis tools such as Coverity.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Current Release:
    Non-Debug Version: 100.9K Code, 24.5K Data, 125.4K Total
    Debug Version:     197.8K Code, 81.5K Data, 279.3K Total
  Previous Release:
    Non-Debug Version: 100.6K Code, 27.6K Data, 128.2K Total
    Debug Version:     196.2K Code, 81.0K Data, 277.2K Total


2) iASL Compiler/Disassembler and Tools:

iASL: Fixed a regression where the device map file feature no longer 
worked properly when used in conjunction with the disassembler. It only 
worked properly with the compiler itself.

iASL: Implemented a new warning for method LocalX variables that are set 
but never used (similar to a C compiler such as gcc). This also applies 
to ArgX variables that are not defined by the parent method, and are 
instead (legally) used as local variables.

iASL/Preprocessor: Finished the pass-through of line numbers from the 
preprocessor to the compiler. This ensures that compiler errors/warnings 
have the correct original line numbers and filenames, regardless of any 
#include files.

iASL/Preprocessor: Fixed a couple of issues with comment handling and the 
pass-through of comments to the preprocessor output file (which becomes 
the compiler input file). Also fixed a problem with // comments that 
appear after a math expression.

iASL: Added support for the TCPA server table to the table compiler and 
template generator. (The client table was already previously supported)

iASL/Preprocessor: Added a permanent #define of the symbol "__IASL__" to 
identify the iASL compiler.

Cleaned up the use of the macros NEGATIVE and POSITIVE which were defined 
multiple times. The new names are ACPI_SIGN_NEGATIVE and 
ACPI_SIGN_POSITIVE.

AcpiHelp: Update to expand help messages for the iASL preprocessor 
directives.


----------------------------------------
19 June 2015. Summary of changes for version 20150619:

Two regressions in version 20150616 have been addressed:

Fixes some problems/issues with the C library macro removal (ACPI_STRLEN, 
etc.) This update changes ACPICA to only use the standard headers for 
functions, or the prototypes for the local versions of the C library 
functions. Across the source code, this required some additional casts 
for some Clib invocations for portability. Moved all local prototypes to 
a new file, acclib.h

Fixes several problems with recent changes to the handling of the FACS 
table that could cause some systems not to boot.


----------------------------------------
16 June 2015. Summary of changes for version 20150616:


1) ACPICA kernel-resident subsystem:

Across the entire ACPICA source code base, the various macros for the C 
library functions (such as ACPI_STRLEN, etc.) have been removed and 
replaced by the standard C library names (strlen, etc.) The original 
purpose for these macros is no longer applicable. This simplification 
reduces the number of macros used in the ACPICA source code 
significantly, improving readability and maintainability.

Implemented support for a new ACPI table, the OSDT. This table, the 
"override" SDT, can be loaded directly by the host OS at boot time. It 
enables the replacement of existing namespace objects that were installed 
via the DSDT and/or SSDTs. The primary purpose for this is to replace 
buggy or incorrect ASL/AML code obtained via the BIOS. The OSDT is slated 
for inclusion in a future version of the ACPI Specification. Lv Zheng/Bob 
Moore.

Added support for systems with (improperly) two FACS tables -- a "32-bit" 
table (via FADT 32-bit legacy field) and a "64-bit" table (via the 64-bit 
X field). This change will support both automatically. There continues to 
be systems found with this issue. This support requires a change to the 
AcpiSetFirmwareWakingVector interface. Also, a public global variable has 
been added to allow the host to select which FACS is desired 
(AcpiGbl_Use32BitFacsAddresses). See the ACPICA reference for more 
details Lv Zheng.

Added a new feature to allow for systems that do not contain an FACS. 
Although this is already supported on hardware-reduced platforms, the 
feature has been extended for all platforms. The reasoning is that we do 
not want to abort the entire ACPICA initialization just because the 
system is seriously buggy and has no FACS.

Fixed a problem where the GUID strings for NFIT tables (in acuuid.h) were 
not correctly transcribed from the ACPI specification in ACPICA version 
20150515.

Implemented support for the _CLS object in the AcpiGetObjectInfo external 
interface.

Updated the definitions of the TCPA and TPM2 ACPI tables to the more 
recent TCG ACPI Specification, December 14, 2014. Table disassembler and 
compiler also updated. Note: The TCPA "server" table is not supported by 
the disassembler/table-compiler at this time.

ACPI 6.0: Added definitions for the new GIC version field in the MADT.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Current Release:
    Non-Debug Version: 100.6K Code, 27.6K Data, 128.2K Total
    Debug Version:     196.2K Code, 81.0K Data, 277.2K Total
  Previous Release:
    Non-Debug Version:  99.9K Code, 27.5K Data, 127.4K Total
    Debug Version:     195.2K Code, 80.8K Data, 276.0K Total


2) iASL Compiler/Disassembler and Tools:

Disassembler: Fixed a problem with the new symbolic operator disassembler 
where incorrect ASL code could be emitted in some cases for the "non-
commutative" operators -- Subtract, Divide, Modulo, ShiftLeft, and 
ShiftRight. The actual problem cases seem to be rather unusual in common 
ASL code, however. David Box.

Modified the linux version of acpidump to obtain ACPI tables from not 
just /dev/mem (which may not exist) and /sys/firmware/acpi/tables. Lv 
Zheng.

iASL: Fixed a problem where the user preprocessor output file (.i) 
contained extra data that was not expected. The compiler was using this 
file as a temporary file and passed through #line directives in order to 
keep compiler error messages in sync with the input file and line number 
across multiple include files. The (.i) is no longer a temporary file as 
the compiler uses a new, different file for the original purpose.

iASL: Fixed a problem where comments within the original ASL source code 
file were not passed through to the preprocessor output file, nor any 
listing files.

iASL: Fixed some issues for the handling of the "#include" preprocessor 
directive and the similar (but not the same) "Include" ASL operator.

iASL: Add support for the new OSDT in both the disassembler and compiler.

iASL: Fixed a problem with the constant folding support where a Buffer 
object could be incorrectly generated (incorrectly formed) during a 
conversion to a Store() operator.

AcpiHelp: Updated for new NFIT GUIDs, "External" AML opcode, and new 
description text for the _REV predefined name. _REV now permanently 
returns 2, as per the ACPI 6.0 specification.

Debugger: Enhanced the output of the Debug ASL object for references 
produced by the Index operator. For Buffers and strings, only output the 
actual byte pointed to by the index. For packages, only print the single 
package element decoded by the index. Previously, the entire 
buffer/string/package was emitted.

iASL/Table-compiler: Fixed a regression where the "generic" data types 
were no longer recognized, causing errors.


----------------------------------------
15 May 2015. Summary of changes for version 20150515:

This release implements most of ACPI 6.0 as described below.

1) ACPICA kernel-resident subsystem:

Implemented runtime argument checking and return value checking for all 
new ACPI 6.0 predefined names. This includes: _BTH, _CR3, _DSD, _LPI, 
_MTL, _PRR, _RDI, _RST, _TFP, _TSN.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Current Release:
    Non-Debug Version:  99.9K Code, 27.5K Data, 127.4K Total
    Debug Version:     195.2K Code, 80.8K Data, 276.0K Total
  Previous Release:
    Non-Debug Version:  99.1K Code, 27.3K Data, 126.4K Total
    Debug Version:     192.8K Code, 79.9K Data, 272.7K Total


2) iASL Compiler/Disassembler and Tools:

iASL compiler: Added compile-time support for all new ACPI 6.0 predefined 
names (argument count validation and return value typechecking.)

iASL disassembler and table compiler: implemented support for all new 
ACPI 6.0 tables. This includes: DRTM, IORT, LPIT, NFIT, STAO, WPBT, XENV. 

iASL disassembler and table compiler: Added ACPI 6.0 changes to existing 
tables: FADT, MADT.

iASL preprocessor: Added a new directive to enable inclusion of binary 
blobs into ASL code. The new directive is #includebuffer. It takes a 
binary file as input and emits a named ascii buffer object into the ASL 
code.

AcpiHelp: Added support for all new ACPI 6.0 predefined names.

AcpiHelp: Added a new option, -d, to display all iASL preprocessor 
directives.

AcpiHelp: Added a new option, -t, to display all known/supported ACPI 
tables.


----------------------------------------
10 April 2015. Summary of changes for version 20150410:

Reverted a change introduced in version 20150408 that caused
a regression in the disassembler where incorrect operator
symbols could be emitted.


----------------------------------------
08 April 2015. Summary of changes for version 20150408:


1) ACPICA kernel-resident subsystem:

Permanently set the return value for the _REV predefined name. It now 
returns 2 (was 5). This matches other ACPI implementations. _REV will be 
deprecated in the future, and is now defined to be 1 for ACPI 1.0, and 2 
for ACPI 2.0 and later. It should never be used to differentiate or 
identify operating systems.

Added the "Windows 2015" string to the _OSI support. ACPICA will now 
return TRUE to a query with this string.

Fixed several issues with the local version of the printf function.

Added the C99 compiler option (-std=c99) to the Unix makefiles.

  Current Release:
    Non-Debug Version:  99.9K Code, 27.4K Data, 127.3K Total
    Debug Version:     195.2K Code, 80.7K Data, 275.9K Total
  Previous Release:
    Non-Debug Version:  98.8K Code, 27.3K Data, 126.1K Total
    Debug Version:     192.1K Code, 79.8K Data, 271.9K Total


2) iASL Compiler/Disassembler and Tools:

iASL: Implemented an enhancement to the constant folding feature to 
transform the parse tree to a simple Store operation whenever possible:
    Add (2, 3, X) ==> is converted to: Store (5, X)
    X = 2 + 3     ==> is converted to: Store (5, X)

Updated support for the SLIC table (Software Licensing Description Table) 
in both the Data Table compiler and the disassembler. The SLIC table 
support now conforms to "Microsoft Software Licensing Tables (SLIC and 
MSDM). November 29, 2011. Copyright 2011 Microsoft". Note: Any SLIC data 
following the ACPI header is now defined to be "Proprietary Data", and as 
such, can only be entered or displayed as a hex data block.

Implemented full support for the MSDM table as described in the document 
above. Note: The format of MSDM is similar to SLIC. Any MSDM data 
following the ACPI header is defined to be "Proprietary Data", and can 
only be entered or displayed as a hex data block.

Implemented the -Pn option for the iASL Table Compiler (was only 
implemented for the ASL compiler). This option disables the iASL 
preprocessor.

Disassembler: For disassembly of Data Tables, added a comment field 
around the Ascii equivalent data that is emitted as part of the "Raw 
Table Data" block. This prevents the iASL Preprocessor from possible 
confusion if/when the table is compiled.

Disassembler: Added an option (-df) to force the disassembler to assume 
that the table being disassembled contains valid AML. This feature is 
useful for disassembling AML files that contain ACPI signatures other 
than DSDT or SSDT (such as OEMx or other signatures).

Changes for the EFI version of the tools:
1) Fixed a build error/issue
2) Fixed a cast warning

iASL: Fixed a path issue with the __FILE__ operator by making the 
directory prefix optional within the internal SplitInputFilename 
function.

Debugger: Removed some unused global variables.

Tests: Updated the makefile for proper generation of the AAPITS suite.


----------------------------------------
04 February 2015. Summary of changes for version 20150204:

ACPICA kernel-resident subsystem:

Updated all ACPICA copyrights and signons to 2014. Added the 2014 
copyright to all module headers and signons, including the standard Linux 
header. This affects virtually every file in the ACPICA core subsystem, 
iASL compiler, all ACPICA utilities, and the test suites.

Events: Introduce ACPI_GPE_DISPATCH_RAW_HANDLER to fix GPE storm issues.
A raw gpe handling mechanism was created to allow better handling of GPE
storms that aren't easily managed by the normal handler. The raw handler
allows disabling/renabling of the the GPE so that interrupt storms can be
avoided in cases where events cannot be timely serviced. In this 
scenario, handlers should use the AcpiSetGpe() API to disable/enable the 
GPE. This API will leave the reference counts undisturbed, thereby 
preventing unintentional clearing of the GPE when the intent in only to 
temporarily disable it. Raw handlers allow enabling and disabling of a 
GPE by removing GPE register locking. As such, raw handlers much provide 
their own locks while using GPE API's to protect access to GPE data 
structures.
Lv Zheng

Events: Always modify GPE registers under the GPE lock.
Applies GPE lock around AcpiFinishGpe() to protect access to GPE register
values. Reported as bug by joe.liu@apple.com.

Unix makefiles: Separate option to disable optimizations and 
_FORTIFY_SOURCE. This change removes the _FORTIFY_SOURCE flag from the 
NOOPT disable option and creates a separate flag (NOFORTIFY) for this 
purpose. Some toolchains may define _FORTIFY_SOURCE which leads redefined 
errors when building ACPICA. This allows disabling the option without 
also having to disable optimazations.
David Box

  Current Release:
    Non-Debug Version: 101.7K Code, 27.9K Data, 129.6K Total
    Debug Version:     199.2K Code, 82.4K Data, 281.6K Total

--
--------------------------------------
07 November 2014. Summary of changes for version 20141107:

This release is available at https://acpica.org/downloads

This release introduces and implements language extensions to ASL that 
provide support for symbolic ("C-style") operators and expressions. These 
language extensions are known collectively as ASL+.


1) iASL Compiler/Disassembler and Tools:

Disassembler: Fixed a problem with disassembly of the UartSerialBus 
macro. Changed "StopBitsNone" to the correct "StopBitsZero". David E. 
Box.

Disassembler: Fixed the Unicode macro support to add escape sequences. 
All non-printable ASCII values are emitted as escape sequences, as well 
as the standard escapes for quote and backslash. Ensures that the 
disassembled macro can be correctly recompiled.

iASL: Added Printf/Fprintf macros for formatted output. These macros are 
translated to existing AML Concatenate and Store operations. Printf 
writes to the ASL Debug object. Fprintf allows the specification of an 
ASL name as the target. Only a single format specifier is required, %o, 
since the AML interpreter dynamically converts objects to the required 
type. David E. Box.

    (old)    Store (Concatenate (Concatenate (Concatenate (Concatenate
                 (Concatenate (Concatenate (Concatenate ("", Arg0),
                 ": Unexpected value for "), Arg1), ", "), Arg2),
                 " at line "), Arg3), Debug)

    (new)    Printf ("%o: Unexpected value for %o, %o at line %o",
                 Arg0, Arg1, Arg2, Arg3)

    (old)    Store (Concatenate (Concatenate (Concatenate (Concatenate
                 ("", Arg1), ": "), Arg0), " Successful"), STR1)

    (new)    Fprintf (STR1, "%o: %o Successful", Arg1, Arg0)

iASL: Added debug options (-bp, -bt) to dynamically prune levels of the 
ASL parse tree before the AML code is generated. This allows blocks of 
ASL code to be removed in order to help locate and identify problem 
devices and/or code. David E. Box.

AcpiExec: Added support (-fi) for an optional namespace object 
initialization file. This file specifies initial values for namespace 
objects as necessary for debugging and testing different ASL code paths 
that may be taken as a result of BIOS options.


2) Overview of symbolic operator support for ASL (ASL+)
-------------------------------------------------------

As an extension to the ASL language, iASL implements support for symbolic 
(C-style) operators for math and logical expressions. This can greatly 
simplify ASL code as well as improve both readability and 
maintainability. These language extensions can exist concurrently with 
all legacy ASL code and expressions.

The symbolic extensions are 100% compatible with existing AML 
interpreters, since no new AML opcodes are created. To implement the 
extensions, the iASL compiler transforms the symbolic expressions into 
the legacy ASL/AML equivalents at compile time.

Full symbolic expressions are supported, along with the standard C 
precedence and associativity rules.

Full disassembler support for the symbolic expressions is provided, and 
creates an automatic migration path for existing ASL code to ASL+ code 
via the disassembly process. By default, the disassembler now emits ASL+ 
code with symbolic expressions. An option (-dl) is provided to force the 
disassembler to emit legacy ASL code if desired.

Below is the complete list of the currently supported symbolic operators 
with examples. See the iASL User Guide for additional information.


ASL+ Syntax      Legacy ASL Equivalent
-----------      ---------------------

    // Math operators

Z = X + Y        Add (X, Y, Z)
Z = X - Y        Subtract (X, Y, Z)
Z = X * Y        Multiply (X, Y, Z)
Z = X / Y        Divide (X, Y, , Z)
Z = X % Y        Mod (X, Y, Z)
Z = X << Y       ShiftLeft (X, Y, Z)
Z = X >> Y       ShiftRight (X, Y, Z)
Z = X & Y        And (X, Y, Z)
Z = X | Y        Or (X, Y, Z)
Z = X ^ Y        Xor (X, Y, Z)
Z = ~X           Not (X, Z)
X++              Increment (X)
X--              Decrement (X)

    // Logical operators

(X == Y)         LEqual (X, Y)
(X != Y)         LNotEqual (X, Y)
(X < Y)          LLess (X, Y)
(X > Y)          LGreater (X, Y)
(X <= Y)         LLessEqual (X, Y)
(X >= Y)         LGreaterEqual (X, Y)
(X && Y)         LAnd (X, Y)
(X || Y)         LOr (X, Y)
(!X)             LNot (X)

    // Assignment and compound assignment operations

X = Y           Store (Y, X)
X += Y          Add (X, Y, X)
X -= Y          Subtract (X, Y, X)
X *= Y          Multiply (X, Y, X)
X /= Y          Divide (X, Y, , X)
X %= Y          Mod (X, Y, X)
X <<= Y         ShiftLeft (X, Y, X)
X >>= Y         ShiftRight (X, Y, X)
X &= Y          And (X, Y, X)
X |= Y          Or (X, Y, X)
X ^= Y          Xor (X, Y, X)


3) ASL+ Examples:
-----------------

Legacy ASL:
        If (LOr (LOr (LEqual (And (R510, 0x03FB), 0x02E0), LEqual (
            And (R520, 0x03FB), 0x02E0)), LOr (LEqual (And (R530, 
0x03FB), 
            0x02E0), LEqual (And (R540, 0x03FB), 0x02E0))))
        {
            And (MEMB, 0xFFFFFFF0, SRMB)
            Store (MEMB, Local2)
            Store (PDBM, Local1)
            And (PDBM, 0xFFFFFFFFFFFFFFF9, PDBM)
            Store (SRMB, MEMB)
            Or (PDBM, 0x02, PDBM)
        }

ASL+ version:
        If (((R510 & 0x03FB) == 0x02E0) ||
            ((R520 & 0x03FB) == 0x02E0) ||
            ((R530 & 0x03FB) == 0x02E0) || 
            ((R540 & 0x03FB) == 0x02E0))
        {
            SRMB = (MEMB & 0xFFFFFFF0)
            Local2 = MEMB
            Local1 = PDBM
            PDBM &= 0xFFFFFFFFFFFFFFF9
            MEMB = SRMB
            PDBM |= 0x02
        }

Legacy ASL:
        Store (0x1234, Local1)
        Multiply (Add (Add (Local1, TEST), 0x20), Local2, Local3)
        Multiply (Local2, Add (Add (Local1, TEST), 0x20), Local3)
        Add (Local1, Add (TEST, Multiply (0x20, Local2)), Local3)
        Store (Index (PKG1, 0x03), Local6)
        Store (Add (Local3, Local2), Debug)
        Add (Local1, 0x0F, Local2)
        Add (Local1, Multiply (Local2, Local3), Local2)
        Multiply (Add (Add (Local1, TEST), 0x20), ToBCD (Local1), Local3)

ASL+ version:
        Local1 = 0x1234
        Local3 = (((Local1 + TEST) + 0x20) * Local2)
        Local3 = (Local2 * ((Local1 + TEST) + 0x20))
        Local3 = (Local1 + (TEST + (0x20 * Local2)))
        Local6 = Index (PKG1, 0x03)
        Debug = (Local3 + Local2)
        Local2 = (Local1 + 0x0F)
        Local2 = (Local1 + (Local2 * Local3))
        Local3 = (((Local1 + TEST) + 0x20) * ToBCD (Local1))


----------------------------------------
26 September 2014. Summary of changes for version 20140926:

1) ACPICA kernel-resident subsystem:

Updated the GPIO operation region handler interface (GeneralPurposeIo). 
In order to support GPIO Connection objects with multiple pins, along 
with the related Field objects, the following changes to the interface 
have been made: The Address is now defined to be the offset in bits of 
the field unit from the previous invocation of a Connection. It can be 
viewed as a "Pin Number Index" into the connection resource descriptor. 
The BitWidth is the exact bit width of the field. It is usually one bit, 
but not always. See the ACPICA reference guide (section 8.8.6.2.1) for 
additional information and examples.

GPE support: During ACPICA/GPE initialization, ensure that all GPEs with 
corresponding _Lxx/_Exx methods are disabled (they may have been enabled 
by the firmware), so that they cannot fire until they are enabled via 
AcpiUpdateAllGpes. Rafael J. Wysocki.

Added a new return flag for the Event/GPE status interfaces -- 
AcpiGetEventStatus and AcpiGetGpeStatus. The new 
ACPI_EVENT_FLAGS_HAS_HANDLER flag is used to indicate that the event or 
GPE currently has a handler associated with it, and can thus actually 
affect the system. Lv Zheng.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Current Release:
    Non-Debug Version:  99.1K Code, 27.3K Data, 126.4K Total
    Debug Version:     192.8K Code, 79.9K Data, 272.7K Total
  Previous Release:
    Non-Debug Version:  98.8K Code, 27.3K Data, 126.1K Total
    Debug Version:     192.1K Code, 79.8K Data, 271.9K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Fixed a memory allocation/free regression introduced in 20140828 
that could cause the compiler to crash. This was introduced inadvertently 
during the effort to eliminate compiler memory leaks. ACPICA BZ 1111, 
1113.

iASL: Removed two error messages that have been found to create false 
positives, until they can be fixed and fully validated (ACPICA BZ 1112):
1) Illegal forward reference within a method
2) Illegal reference across two methods

iASL: Implemented a new option (-lm) to create a hardware mapping file 
that summarizes all GPIO, I2C, SPI, and UART connections. This option 
works for both the compiler and disassembler. See the iASL compiler user 
guide for additional information and examples (section 6.4.6).

AcpiDump: Added support for the version 1 (ACPI 1.0) RSDP in addition to 
version 2. This corrects the AE_BAD_HEADER exception seen on systems with 
a version 1 RSDP. Lv Zheng ACPICA BZ 1097.

AcpiExec: For Unix versions, don't attempt to put STDIN into raw mode 
unless STDIN is actually a terminal. Assists with batch-mode processing. 
ACPICA BZ 1114.

Disassembler/AcpiHelp: Added another large group of recognized _HID 
values.


----------------------------------------
28 August 2014. Summary of changes for version 20140828:

1) ACPICA kernel-resident subsystem:

Fixed a problem related to the internal use of the Timer() operator where 
a 64-bit divide could cause an attempted link to a double-precision math 
library. This divide is not actually necessary, so the code was 
restructured to eliminate it. Lv Zheng.

ACPI 5.1: Added support for the runtime validation of the _DSD package 
(similar to the iASL support).

ACPI 5.1/Headers: Added support for the GICC affinity subtable to the 
SRAT table. Hanjun Guo <hanjun.guo@linaro.org>.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Current Release:
    Non-Debug Version:  98.8K Code, 27.3K Data, 126.1K Total
    Debug Version:     192.1K Code, 79.8K Data, 271.9K Total
  Previous Release:
    Non-Debug Version:  98.7K Code, 27.3K Data, 126.0K Total1
    Debug Version:     192.0K Code, 79.7K Data, 271.7K Total

2) iASL Compiler/Disassembler and Tools:

AcpiExec: Fixed a problem on unix systems where the original terminal 
state was not always properly restored upon exit. Seen when using the -v 
option. ACPICA BZ 1104.

iASL: Fixed a problem with the validation of the ranges/length within the 
Memory24 resource descriptor. There was a boundary condition when the 
range was equal to the (length -1) caused by the fact that these values 
are defined in 256-byte blocks, not bytes. ACPICA BZ 1098

Disassembler: Fixed a problem with the GpioInt descriptor interrupt 
polarity 
flags. The flags are actually 2 bits, not 1, and the "ActiveBoth" keyword 
is 
now supported properly.

ACPI 5.1: Added the GICC affinity subtable to the SRAT table. Supported 
in the disassembler, data table compiler, and table template generator.

iASL: Added a requirement for Device() objects that one of either a _HID 
or _ADR must exist within the scope of a Device, as per the ACPI 
specification. Remove a similar requirement that was incorrectly in place 
for the _DSD object.

iASL: Added error detection for illegal named references within control 
methods that would cause runtime failures. Now trapped as errors are: 1) 
References to objects within a non-parent control method. 2) Forward 
references (within a method) -- for control methods, AML interpreters use 
a one-pass parse of control methods. ACPICA BZ 1008.

iASL: Added error checking for dependencies related to the _PSx power 
methods. ACPICA BZ 1029.
1) For _PS0, one of these must exist within the same scope: _PS1, _PS2, 
_PS3.
2) For _PS1, _PS2, and PS3: A _PS0 object must exist within the same 
scope.

iASL and table compiler: Cleanup miscellaneous memory leaks by fully 
deploying the existing object and string caches and adding new caches for 
the table compiler.

iASL: Split the huge parser source file into multiple subfiles to improve 
manageability. Generation now requires the M4 macro preprocessor, which 
is part of the Bison distribution on both unix and windows platforms.

AcpiSrc: Fixed and removed all extraneous warnings generated during 
entire ACPICA source code scan and/or conversion.


----------------------------------------

24 July 2014. Summary of changes for version 20140724: 

The ACPI 5.1 specification has been released and is available at: 
http://uefi.org/specs/access


0) ACPI 5.1 support in ACPICA:

ACPI 5.1 is fully supported in ACPICA as of this release.

New predefined names. Support includes iASL and runtime ACPICA 
validation.
    _CCA (Cache Coherency Attribute).
    _DSD (Device-Specific Data). David Box.

Modifications to existing ACPI tables. Support includes headers, iASL 
Data Table compiler, disassembler, and the template generator.
    FADT - New fields and flags. Graeme Gregory.
    GTDT - One new subtable and new fields. Tomasz Nowicki.
    MADT - Two new subtables. Tomasz Nowicki.
    PCCT - One new subtable.

Miscellaneous.
    New notification type for System Resource Affinity change events.


1) ACPICA kernel-resident subsystem:

Fixed a regression introduced in 20140627 where a fault can happen during 
the deletion of Alias AML namespace objects. The problem affected both 
the core ACPICA and the ACPICA tools including iASL and AcpiExec.

Implemented a new GPE public interface, AcpiMarkGpeForWake. Provides a 
simple mechanism to enable wake GPEs that have no associated handler or 
control method. Rafael Wysocki.

Updated the AcpiEnableGpe interface to disallow the enable if there is no 
handler or control method associated with the particular GPE. This will 
help avoid meaningless GPEs and even GPE floods. Rafael Wysocki.

Updated GPE handling and dispatch by disabling the GPE before clearing 
the status bit for edge-triggered GPEs. Lv Zheng.

Added Timer() support to the AML Debug object. The current timer value is 
now displayed with each invocation of (Store to) the debug object to 
enable simple generation of execution times for AML code (method 
execution for example.) ACPICA BZ 1093.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Current Release:
    Non-Debug Version:  98.7K Code, 27.3K Data, 126.0K Total
    Debug Version:     192.0K Code, 79.7K Data, 271.7K Total
  Previous Release:
    Non-Debug Version:  98.7K Code, 27.2K Data, 125.9K Total
    Debug Version:     191.7K Code, 79.6K Data, 271.3K Total


2) iASL Compiler/Disassembler and Tools:

Fixed an issue with the recently added local printf implementation, 
concerning width/precision specifiers that could cause incorrect output. 
Lv Zheng. ACPICA BZ 1094.

Disassembler: Added support to detect buffers that contain UUIDs and 
disassemble them to an invocation of the ToUUID operator. Also emit 
commented descriptions of known ACPI-related UUIDs.

AcpiHelp: Added support to display known ACPI-related UUIDs. New option, 
-u. Adds three new files. 

iASL: Update table compiler and disassembler for DMAR table changes that 
were introduced in September 2013. With assistance by David Woodhouse.

----------------------------------------
27 June 2014. Summary of changes for version 20140627:

1) ACPICA kernel-resident subsystem:

Formatted Output: Implemented local versions of standard formatted output 
utilities such as printf, etc. Over time, it has been discovered that 
there are in fact many portability issues with printf, and the addition 
of this feature will fix/prevent these issues once and for all. Some 
known issues are summarized below:

1) Output of 64-bit values is not portable. For example, UINT64 is %ull 
for the Linux kernel and is %uI64 for some MSVC versions.
2) Invoking printf consistently in a manner that is portable across both 
32-bit and 64-bit platforms is difficult at best in many situations.
3) The output format for pointers varies from system to system (leading 
zeros especially), and leads to inconsistent output from ACPICA across 
platforms.
4) Certain platform-specific printf formats may conflict with ACPICA use.
5) If there is no local C library available, ACPICA now has local support 
for printf.

-- To address these printf issues in a complete manner, ACPICA now 
directly implements a small subset of printf format specifiers, only 
those that it requires. Adds a new file, utilities/utprint.c. Lv Zheng.

Implemented support for ACPICA generation within the EFI environment. 
Initially, the AcpiDump utility is supported in the UEFI shell 
environment. Lv Zheng.

Added a new external interface, AcpiLogError, to improve ACPICA 
portability. This allows the host to redirect error messages from the 
ACPICA utilities. Lv Zheng.

Added and deployed new OSL file I/O interfaces to improve ACPICA 
portability:
  AcpiOsOpenFile
  AcpiOsCloseFile
  AcpiOsReadFile
  AcpiOsWriteFile
  AcpiOsGetFileOffset
  AcpiOsSetFileOffset
There are C library implementations of these functions in the new file 
service_layers/oslibcfs.c -- however, the functions can be implemented by 
the local host in any way necessary. Lv Zheng.

Implemented a mechanism to disable/enable ACPI table checksum validation 
at runtime. This can be useful when loading tables very early during OS 
initialization when it may not be possible to map the entire table in 
order to compute the checksum. Lv Zheng.

Fixed a buffer allocation issue for the Generic Serial Bus support. 
Originally, a fixed buffer length was used. This change allows for 
variable-length buffers based upon the protocol indicated by the field 
access attributes. Reported by Lan Tianyu. Lv Zheng.

Fixed a problem where an object detached from a namespace node was not 
properly terminated/cleared and could cause a circular list problem if 
reattached. ACPICA BZ 1063. David Box.

Fixed a possible recursive lock acquisition in hwregs.c. Rakib Mullick.

Fixed a possible memory leak in an error return path within the function 
AcpiUtCopyIobjectToIobject. ACPICA BZ 1087. Colin Ian King.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Current Release:
    Non-Debug Version:  98.7K Code, 27.2K Data, 125.9K Total
    Debug Version:     191.7K Code, 79.6K Data, 271.3K Total
  Previous Release:
    Non-Debug Version:  96.8K Code, 27.2K Data, 124.0K Total
    Debug Version:     189.5K Code, 79.7K Data, 269.2K Total


2) iASL Compiler/Disassembler and Tools:

Disassembler: Add dump of ASCII equivalent text within a comment at the 
end of each line of the output for the Buffer() ASL operator.

AcpiDump: Miscellaneous changes:
  Fixed repetitive table dump in -n mode.
  For older EFI platforms, use the ACPI 1.0 GUID during RSDP search if 
the ACPI 2.0 GUID fails.

iASL: Fixed a problem where the compiler could fault if incorrectly given 
an acpidump output file as input. ACPICA BZ 1088. David Box.

AcpiExec/AcpiNames: Fixed a problem where these utilities could fault if 
they are invoked without any arguments.

Debugger: Fixed a possible memory leak in an error return path. ACPICA BZ 
1086. Colin Ian King.

Disassembler: Cleaned up a block of code that extracts a parent Op 
object. Added a comment that explains that the parent is guaranteed to be 
valid in this case. ACPICA BZ 1069.


----------------------------------------
24 April 2014. Summary of changes for version 20140424:

1) ACPICA kernel-resident subsystem:

Implemented support to skip/ignore NULL address entries in the RSDT/XSDT. 
Some of these tables are known to contain a trailing NULL entry. Lv 
Zheng.

Removed an extraneous error message for the case where there are a large 
number of system GPEs (> 124). This was the "32-bit FADT register is too 
long to convert to GAS struct" message, which is irrelevant for GPEs 
since the GPEx_BLK_LEN fields of the FADT are always used instead of the 
(limited capacity) GAS bit length. Also, several changes to ensure proper 
support for GPE numbers > 255, where some "GPE number" fields were 8-bits 
internally.

Implemented and deployed additional configuration support for the public 
ACPICA external interfaces. Entire classes of interfaces can now be 
easily modified or configured out, replaced by stubbed inline functions 
by default. Lv Zheng.

Moved all public ACPICA runtime configuration globals to the public 
ACPICA external interface file for convenience. Also, removed some 
obsolete/unused globals. See the file acpixf.h. Lv Zheng.

Documentation: Added a new section to the ACPICA reference describing the 
maximum number of GPEs that can be supported by the FADT-defined GPEs in 
block zero and one. About 1200 total. See section 4.4.1 of the ACPICA 
reference.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Current Release:
    Non-Debug Version:  96.8K Code, 27.2K Data, 124.0K Total
    Debug Version:     189.5K Code, 79.7K Data, 269.2K Total
  Previous Release:
    Non-Debug Version:  97.0K Code, 27.2K Data, 124.2K Total
    Debug Version:     189.7K Code, 79.5K Data, 269.2K Total


2) iASL Compiler/Disassembler and Tools:

iASL and disassembler: Add full support for the LPIT table (Low Power 
Idle Table). Includes support in the disassembler, data table compiler, 
and template generator.

AcpiDump utility:
1) Add option to force the use of the RSDT (over the XSDT).
2) Improve validation of the RSDP signature (use 8 chars instead of 4).

iASL: Add check for predefined packages that are too large.  For 
predefined names that contain subpackages, check if each subpackage is 
too large. (Check for too small already exists.)

Debugger: Updated the GPE command (which simulates a GPE by executing the 
GPE code paths in ACPICA). The GPE device is now optional, and defaults 
to the GPE 0/1 FADT-defined blocks.

Unix application OSL: Update line-editing support. Add additional error 
checking and take care not to reset terminal attributes on exit if they 
were never set. This should help guarantee that the terminal is always 
left in the previous state on program exit.


----------------------------------------
25 March 2014. Summary of changes for version 20140325:

1) ACPICA kernel-resident subsystem:

Updated the auto-serialize feature for control methods. This feature 
automatically serializes all methods that create named objects in order 
to prevent runtime errors. The update adds support to ignore the 
currently executing AML SyncLevel when invoking such a method, in order 
to prevent disruption of any existing SyncLevel priorities that may exist 
in the AML code. Although the use of SyncLevels is relatively rare, this 
change fixes a regression where an AE_AML_MUTEX_ORDER exception can 
appear on some machines starting with the 20140214 release.

Added a new external interface to allow the host to install ACPI tables 
very early, before the namespace is even created. AcpiInstallTable gives 
the host additional flexibility for ACPI table management. Tables can be 
installed directly by the host as if they had originally appeared in the 
XSDT/RSDT. Installed tables can be SSDTs or other ACPI data tables 
(anything except the DSDT and FACS). Adds a new file, tbdata.c, along 
with additional internal restructuring and cleanup. See the ACPICA 
Reference for interface details. Lv Zheng.

Added validation of the checksum for all incoming dynamically loaded 
tables (via external interfaces or via AML Load/LoadTable operators). Lv 
Zheng.

Updated the use of the AcpiOsWaitEventsComplete interface during Notify 
and GPE handler removal. Restructured calls to eliminate possible race 
conditions. Lv Zheng.

Added a warning for the use/execution of the ASL/AML Unload (table) 
operator. This will help detect and identify machines that use this 
operator if and when it is ever used. This operator has never been seen 
in the field and the usage model and possible side-effects of the drastic 
runtime action of a full table removal are unknown.

Reverted the use of #pragma push/pop which was introduced in the 20140214 
release. It appears that push and pop are not implemented by enough 
compilers to make the use of this feature feasible for ACPICA at this 
time. However, these operators may be deployed in a future ACPICA 
release.

Added the missing EXPORT_SYMBOL macros for the install and remove SCI 
handler interfaces.

Source code generation:
1) Disabled the use of the "strchr" macro for the gcc-specific 
generation. For some versions of gcc, this macro can periodically expose 
a compiler bug which in turn causes compile-time error(s).
2) Added support for PPC64 compilation. Colin Ian King.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Current Release:
    Non-Debug Version:  97.0K Code, 27.2K Data, 124.2K Total
    Debug Version:     189.7K Code, 79.5K Data, 269.2K Total
  Previous Release:
    Non-Debug Version:  96.5K Code, 27.2K Data, 123.7K Total
    Debug Version:     188.6K Code, 79.0K Data, 267.6K Total


2) iASL Compiler/Disassembler and Tools:

Disassembler: Added several new features to improve the readability of 
the resulting ASL code. Extra information is emitted within comment 
fields in the ASL code:
1) Known _HID/_CID values are decoded to descriptive text.
2) Standard values for the Notify() operator are decoded to descriptive 
text.
3) Target operands are expanded to full pathnames (in a comment) when 
possible.

Disassembler: Miscellaneous updates for extern() handling:
1) Abort compiler if file specified by -fe option does not exist.
2) Silence unnecessary warnings about argument count mismatches.
3) Update warning messages concerning unresolved method externals.
4) Emit "UnknownObj" keyword for externals whose type cannot be 
determined.

AcpiHelp utility:
1) Added the -a option to display both the ASL syntax and the AML 
encoding for an input ASL operator. This effectively displays all known 
information about an ASL operator with one AcpiHelp invocation.
2) Added substring match support (similar to a wildcard) for the -i 
(_HID/PNP IDs) option.

iASL/Disassembler: Since this tool does not yet support execution on big-
endian machines, added detection of endianness and an error message if 
execution is attempted on big-endian. Support for big-endian within iASL 
is a feature that is on the ACPICA to-be-done list.

AcpiBin utility:
1) Remove option to extract binary files from an acpidump; this function 
is made obsolete by the AcpiXtract utility.
2) General cleanup of open files and allocated buffers.


----------------------------------------
14 February 2014. Summary of changes for version 20140214:

1) ACPICA kernel-resident subsystem:

Implemented a new mechanism to proactively prevent problems with ill-
behaved reentrant control methods that create named ACPI objects. This 
behavior is illegal as per the ACPI specification, but is nonetheless 
frequently seen in the field. Previously, this could lead to an 
AE_ALREADY_EXISTS exception if the method was actually entered by more 
than one thread. This new mechanism detects such methods at table load 
time and marks them "serialized" to prevent reentrancy. A new global 
option, AcpiGbl_AutoSerializeMethods, has been added to disable this 
feature if desired. This mechanism and global option obsoletes and 
supersedes the previous AcpiGbl_SerializeAllMethods option.

Added the "Windows 2013" string to the _OSI support. ACPICA will now 
respond TRUE to _OSI queries with this string. It is the stated policy of 
ACPICA to add new strings to the _OSI support as soon as possible after 
they are defined. See the full ACPICA _OSI policy which has been added to 
the utilities/utosi.c file.

Hardened/updated the _PRT return value auto-repair code:
1) Do not abort the repair on a single subpackage failure, continue to 
check all subpackages.
2) Add check for the minimum subpackage length (4).
3) Properly handle extraneous NULL package elements.

Added support to avoid the possibility of infinite loops when traversing 
object linked lists. Never allow an infinite loop, even in the face of 
corrupted object lists.

ACPICA headers: Deployed the use of #pragma pack(push) and #pragma 
pack(pop) directives to ensure that the ACPICA headers are independent of 
compiler settings or other host headers.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Current Release:
    Non-Debug Version:  96.5K Code, 27.2K Data, 123.7K Total
    Debug Version:     188.6K Code, 79.0K Data, 267.6K Total
  Previous Release:
    Non-Debug Version:  96.2K Code, 27.0K Data, 123.2K Total
    Debug Version:     187.5K Code, 78.3K Data, 265.8K Total


2) iASL Compiler/Disassembler and Tools:

iASL/Table-compiler: Fixed a problem with support for the SPMI table. The 
first reserved field was incorrectly forced to have a value of zero. This 
change correctly forces the field to have a value of one. ACPICA BZ 1081.

Debugger: Added missing support for the "Extra" and "Data" subobjects 
when displaying object data.

Debugger: Added support to display entire object linked lists when 
displaying object data.

iASL: Removed the obsolete -g option to obtain ACPI tables from the 
Windows registry. This feature has been superseded by the acpidump 
utility. 


----------------------------------------
14 January 2014. Summary of changes for version 20140114:

1) ACPICA kernel-resident subsystem:

Updated all ACPICA copyrights and signons to 2014. Added the 2014 
copyright to all module headers and signons, including the standard Linux 
header. This affects virtually every file in the ACPICA core subsystem, 
iASL compiler, all ACPICA utilities, and the test suites.

Improved parameter validation for AcpiInstallGpeBlock. Added the 
following checks:
1) The incoming device handle refers to type ACPI_TYPE_DEVICE.
2) There is not already a GPE block attached to the device.
Likewise, with AcpiRemoveGpeBlock, ensure that the incoming object is a 
device.

Correctly support "references" in the ACPI_OBJECT. This change fixes the 
support to allow references (namespace nodes) to be passed as arguments 
to control methods via the evaluate object interface. This is probably 
most useful for testing purposes, however.

Improved support for 32/64 bit physical addresses in printf()-like 
output. This change improves the support for physical addresses in printf 
debug statements and other output on both 32-bit and 64-bit hosts. It 
consistently outputs the appropriate number of bytes for each host. The 
%p specifier is unsatisfactory since it does not emit uniform output on 
all hosts/clib implementations (on some, leading zeros are not supported, 
leading to difficult-to-read output).

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Current Release:
    Non-Debug Version:  96.2K Code, 27.0K Data, 123.2K Total
    Debug Version:     187.5K Code, 78.3K Data, 265.8K Total
  Previous Release:
    Non-Debug Version:  96.1K Code, 27.0K Data, 123.1K Total
    Debug Version:     185.6K Code, 77.3K Data, 262.9K Total


2) iASL Compiler/Disassembler and Tools:

iASL: Fix a possible fault when using the Connection() operator. Fixes a 
problem if the parent Field definition for the Connection operator refers 
to an operation region that does not exist. ACPICA BZ 1064.

AcpiExec: Load of local test tables is now optional. The utility has the 
capability to load some various tables to test features of ACPICA. 
However, there are enough of them that the output of the utility became 
confusing. With this change, only the required local tables are displayed 
(RSDP, XSDT, etc.) along with the actual tables loaded via the command 
line specification. This makes the default output simler and easier to 
understand. The -el command line option restores the original behavior 
for testing purposes.

AcpiExec: Added support for overlapping operation regions. This change 
expands the simulation of operation regions by supporting regions that 
overlap within the given address space. Supports SystemMemory and 
SystemIO. ASLTS test suite updated also. David Box. ACPICA BZ 1031.

AcpiExec: Added region handler support for PCI_Config and EC spaces. This 
allows AcpiExec to simulate these address spaces, similar to the current 
support for SystemMemory and SystemIO.

Debugger: Added new command to read/write/compare all namespace objects. 
The command "test objects" will exercise the entire namespace by writing 
new values to each data object, and ensuring that the write was 
successful. The original value is then restored and verified.

Debugger: Added the "test predefined" command. This change makes this 
test public and puts it under the new "test" command. The test executes 
each and every predefined name within the current namespace.


----------------------------------------
18 December 2013. Summary of changes for version 20131218:

Global note: The ACPI 5.0A specification was released this month. There 
are no changes needed for ACPICA since this release of ACPI is an 
errata/clarification release. The specification is available at 
acpi.info. 


1) ACPICA kernel-resident subsystem:

Added validation of the XSDT root table if it is present. Some older 
platforms contain an XSDT that is ill-formed or otherwise invalid (such 
as containing some or all entries that are NULL pointers). This change 
adds a new function to validate the XSDT before actually using it. If the 
XSDT is found to be invalid, ACPICA will now automatically fall back to 
using the RSDT instead. Original implementation by Zhao Yakui. Ported to 
ACPICA and enhanced by Lv Zheng and Bob Moore.

Added a runtime option to ignore the XSDT and force the use of the RSDT. 
This change adds a runtime option that will force ACPICA to use the RSDT 
instead of the XSDT (AcpiGbl_DoNotUseXsdt). Although the ACPI spec 
requires that an XSDT be used instead of the RSDT, the XSDT has been 
found to be corrupt or ill-formed on some machines. Lv Zheng.

Added a runtime option to favor 32-bit FADT register addresses over the 
64-bit addresses. This change adds an option to favor 32-bit FADT 
addresses when there is a conflict between the 32-bit and 64-bit versions 
of the same register. The default behavior is to use the 64-bit version 
in accordance with the ACPI specification. This can now be overridden via 
the AcpiGbl_Use32BitFadtAddresses flag. ACPICA BZ 885. Lv Zheng.

During the change above, the internal "Convert FADT" and "Verify FADT" 
functions have been merged to simplify the code, making it easier to 
understand and maintain. ACPICA BZ 933.

Improve exception reporting and handling for GPE block installation. 
Return an actual status from AcpiEvGetGpeXruptBlock and don't clobber the 
status when exiting AcpiEvInstallGpeBlock. ACPICA BZ 1019.

Added helper macros to extract bus/segment numbers from the HEST table. 
This change adds two macros to extract the encoded bus and segment 
numbers from the HEST Bus field - ACPI_HEST_BUS and ACPI_HEST_SEGMENT. 
Betty Dall <betty.dall@hp.com>

Removed the unused ACPI_FREE_BUFFER macro. This macro is no longer used 
by ACPICA. It is not a public macro, so it should have no effect on 
existing OSV code. Lv Zheng.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Current Release:
    Non-Debug Version:  96.1K Code, 27.0K Data, 123.1K Total
    Debug Version:     185.6K Code, 77.3K Data, 262.9K Total
  Previous Release:
    Non-Debug Version:  95.9K Code, 27.0K Data, 122.9K Total
    Debug Version:     185.1K Code, 77.2K Data, 262.3K Total


2) iASL Compiler/Disassembler and Tools:

Disassembler: Improved pathname support for emitted External() 
statements. This change adds full pathname support for external names 
that have been resolved internally by the inclusion of additional ACPI 
tables (via the iASL -e option). Without this change, the disassembler 
can emit multiple externals for the same object, or it become confused 
when the Scope() operator is used on an external object. Overall, greatly 
improves the ability to actually recompile the emitted ASL code when 
objects a referenced across multiple ACPI tables. Reported by Michael 
Tsirkin (mst@redhat.com).

Tests/ASLTS: Updated functional control suite to execute with no errors. 
David Box. Fixed several errors related to the testing of the interpreter 
slack mode. Lv Zheng.

iASL: Added support to detect names that are declared within a control 
method, but are unused (these are temporary names that are only valid 
during the time the method is executing). A remark is issued for these 
cases. ACPICA BZ 1022.

iASL: Added full support for the DBG2 table. Adds full disassembler, 
table compiler, and template generator support for the DBG2 table (Debug 
Port 2 table).

iASL: Added full support for the PCCT table, update the table definition. 
Updates the PCCT table definition in the actbl3.h header and adds table 
compiler and template generator support.

iASL: Added an option to emit only error messages (no warnings/remarks). 
The -ve option will enable only error messages, warnings and remarks are 
suppressed. This can simplify debugging when only the errors are 
important, such as when an ACPI table is disassembled and there are many 
warnings and remarks -- but only the actual errors are of real interest.

Example ACPICA code (source/tools/examples): Updated the example code so 
that it builds to an actual working program, not just example code. Added 
ACPI tables and execution of an example control method in the DSDT. Added 
makefile support for Unix generation.


----------------------------------------
15 November 2013. Summary of changes for version 20131115:

This release is available at https://acpica.org/downloads


1) ACPICA kernel-resident subsystem:

Resource Manager: Fixed loop termination for the "get AML length" 
function. The loop previously had an error termination on a NULL resource 
pointer, which can never happen since the loop simply increments a valid 
resource pointer. This fix changes the loop to terminate with an error on 
an invalid end-of-buffer condition. The problem can be seen as an 
infinite loop by callers to AcpiSetCurrentResources with an invalid or 
corrupted resource descriptor, or a resource descriptor that is missing 
an END_TAG descriptor. Reported by Dan Carpenter 
<dan.carpenter@oracle.com>. Lv Zheng, Bob Moore.

Table unload and ACPICA termination: Delete all attached data objects 
during namespace node deletion. This fix updates namespace node deletion 
to delete the entire list of attached objects (attached via 
AcpiAttachObject) instead of just one of the attached items. ACPICA BZ 
1024. Tomasz Nowicki (tomasz.nowicki@linaro.org).

ACPICA termination: Added support to delete all objects attached to the 
root namespace node. This fix deletes any and all objects that have been 
attached to the root node via AcpiAttachData. Previously, none of these 
objects were deleted. Reported by Tomasz Nowicki. ACPICA BZ 1026.

Debug output: Do not emit the function nesting level for the in-kernel 
build. The nesting level is really only useful during a single-thread 
execution. Therefore, only enable this output for the AcpiExec utility. 
Also, only emit the thread ID when executing under AcpiExec (Context 
switches are still always detected and a message is emitted). ACPICA BZ 
972.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Current Release:
    Non-Debug Version:  95.9K Code, 27.0K Data, 122.9K Total
    Debug Version:     185.1K Code, 77.2K Data, 262.3K Total
  Previous Release:
    Non-Debug Version:  95.8K Code, 27.0K Data, 122.8K Total
    Debug Version:     185.2K Code, 77.2K Data, 262.4K Total


2) iASL Compiler/Disassembler and Tools:

AcpiExec/Unix-OSL: Use <termios.h> instead of <termio.h>. This is the 
correct portable POSIX header for terminal control functions.

Disassembler: Fixed control method invocation issues related to the use 
of the CondRefOf() operator. The problem is seen in the disassembly where 
control method invocations may not be disassembled properly if the 
control method name has been used previously as an argument to CondRefOf. 
The solution is to not attempt to emit an external declaration for the 
CondRefOf target (it is not necessary in the first place). This prevents 
disassembler object type confusion. ACPICA BZ 988.

Unix Makefiles: Added an option to disable compiler optimizations and the 
_FORTIFY_SOURCE flag. Some older compilers have problems compiling ACPICA 
with optimizations (reportedly, gcc 4.4 for example). This change adds a 
command line option for make (NOOPT) that disables all compiler 
optimizations and the _FORTIFY_SOURCE compiler flag. The default 
optimization is -O2 with the _FORTIFY_SOURCE flag specified. ACPICA BZ 
1034. Lv Zheng, Bob Moore.

Tests/ASLTS: Added options to specify individual test cases and modes. 
This allows testers running aslts.sh to optionally specify individual 
test modes and test cases. Also added an option to disable the forced 
generation of the ACPICA tools from source if desired. Lv Zheng.

----------------------------------------
27 September 2013. Summary of changes for version 20130927:

This release is available at https://acpica.org/downloads


1) ACPICA kernel-resident subsystem:

Fixed a problem with store operations to reference objects. This change 
fixes a problem where a Store operation to an ArgX object that contained 
a 
reference to a field object did not complete the automatic dereference 
and 
then write to the actual field object. Instead, the object type of the 
field object was inadvertently changed to match the type of the source 
operand. The new behavior will actually write to the field object (buffer 
field or field unit), thus matching the correct ACPI-defined behavior.

Implemented support to allow the host to redefine individual OSL 
prototypes. This change enables the host to redefine OSL prototypes found 
in the acpiosxf.h file. This allows the host to implement OSL interfaces 
with a macro or inlined function. Further, it allows the host to add any 
additional required modifiers such as __iomem, __init, __exit, etc., as 
necessary on a per-interface basis. Enables maximum flexibility for the 
OSL interfaces. Lv Zheng.

Hardcoded the access width for the FADT-defined reset register. The ACPI 
specification requires the reset register width to be 8 bits. ACPICA now 
hardcodes the width to 8 and ignores the FADT width value. This provides 
compatibility with other ACPI implementations that have allowed BIOS code 
with bad register width values to go unnoticed. Matthew Garett, Bob 
Moore, 
Lv Zheng.

Changed the position/use of the ACPI_PRINTF_LIKE macro. This macro is 
used 
in the OSL header (acpiosxf). The change modifies the position of this 
macro in each instance where it is used (AcpiDebugPrint, etc.) to avoid 
build issues if the OSL defines the implementation of the interface to be 
an inline stub function. Lv Zheng.

Deployed a new macro ACPI_EXPORT_SYMBOL_INIT for the main ACPICA 
initialization interfaces. This change adds a new macro for the main init 
and terminate external interfaces in order to support hosts that require 
additional or different processing for these functions. Changed from 
ACPI_EXPORT_SYMBOL to ACPI_EXPORT_SYMBOL_INIT for these functions. Lv 
Zheng, Bob Moore.

Cleaned up the memory allocation macros for configurability. In the 
common 
case, the ACPI_ALLOCATE and related macros now resolve directly to their 
respective AcpiOs* OSL interfaces. Two options:
1) The ACPI_ALLOCATE_ZEROED macro uses a simple local implementation by 
default, unless overridden by the USE_NATIVE_ALLOCATE_ZEROED define.
2) For AcpiExec (and for debugging), the macros can optionally be 
resolved 
to the local ACPICA interfaces that track each allocation (local tracking 
is used to immediately detect memory leaks).
Lv Zheng.

Simplified the configuration for ACPI_REDUCED_HARDWARE. Allows the kernel 
to predefine this macro to either TRUE or FALSE during the system build.

Replaced __FUNCTION_ with __func__ in the gcc-specific header.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Current Release:
    Non-Debug Version:  95.8K Code, 27.0K Data, 122.8K Total
    Debug Version:     185.2K Code, 77.2K Data, 262.4K Total
  Previous Release:
    Non-Debug Version:  96.7K Code, 27.1K Data, 123.9K Total
    Debug Version:     184.4K Code, 76.8K Data, 261.2K Total


2) iASL Compiler/Disassembler and Tools:

iASL: Implemented wildcard support for the -e option. This simplifies use 
when there are many SSDTs that must be included to resolve external 
method 
declarations. ACPICA BZ 1041. Example:
    iasl -e ssdt*.dat -d dsdt.dat

AcpiExec: Add history/line-editing for Unix/Linux systems. This change 
adds a portable module that implements full history and limited line 
editing for Unix and Linux systems. It does not use readline() due to 
portability issues. Instead it uses the POSIX termio interface to put the 
terminal in raw input mode so that the various special keys can be 
trapped 
(such as up/down-arrow for history support and left/right-arrow for line 
editing). Uses the existing debugger history mechanism. ACPICA BZ 1036.

AcpiXtract: Add support to handle (ignore) "empty" lines containing only 
one or more spaces. This provides compatible with early or different 
versions of the AcpiDump utility. ACPICA BZ 1044.

AcpiDump: Do not ignore tables that contain only an ACPI table header. 
Apparently, some BIOSs create SSDTs that contain an ACPI table header but 
no other data. This change adds support to dump these tables. Any tables 
shorter than the length of an ACPI table header remain in error (an error 
message is emitted). Reported by Yi Li.

Debugger: Echo actual command along with the "unknown command" message.

----------------------------------------
23 August 2013. Summary of changes for version 20130823:

1) ACPICA kernel-resident subsystem:

Implemented support for host-installed System Control Interrupt (SCI) 
handlers. Certain ACPI functionality requires the host to handle raw 
SCIs. For example, the "SCI Doorbell" that is defined for memory power 
state support requires the host device driver to handle SCIs to examine 
if the doorbell has been activated. Multiple SCI handlers can be 
installed to allow for future expansion. New external interfaces are 
AcpiInstallSciHandler, AcpiRemoveSciHandler; see the ACPICA reference for 
details. Lv Zheng, Bob Moore. ACPICA BZ 1032.

Operation region support: Never locally free the handler "context" 
pointer. This change removes some dangerous code that attempts to free 
the handler context pointer in some (rare) circumstances. The owner of 
the handler owns this pointer and the ACPICA code should never touch it. 
Although not seen to be an issue in any kernel, it did show up as a 
problem (fault) under AcpiExec. Also, set the internal storage field for 
the context pointer to zero when the region is deactivated, simply for 
sanity. David Box. ACPICA BZ 1039.

AcpiRead: On error, do not modify the return value target location. If an 
error happens in the middle of a split 32/32 64-bit I/O operation, do not 
modify the target of the return value pointer. Makes the code consistent 
with the rest of ACPICA. Bjorn Helgaas.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Current Release:
    Non-Debug Version:  96.7K Code, 27.1K Data, 123.9K Total
    Debug Version:     184.4K Code, 76.8K Data, 261.2K Total
  Previous Release:
    Non-Debug Version:  96.2K Code, 27.1K Data, 123.3K Total
    Debug Version:     185.4K Code, 77.1K Data, 262.5K Total


2) iASL Compiler/Disassembler and Tools:

AcpiDump: Implemented several new features and fixed some problems:
1) Added support to dump the RSDP, RSDT, and XSDT tables.
2) Added support for multiple table instances (SSDT, UEFI).
3) Added option to dump "customized" (overridden) tables (-c).
4) Fixed a problem where some table filenames were improperly 
constructed.
5) Improved some error messages, removed some unnecessary messages.

iASL: Implemented additional support for disassembly of ACPI tables that 
contain invocations of external control methods. The -fe<file> option 
allows the import of a file that specifies the external methods along 
with the required number of arguments for each -- allowing for the 
correct disassembly of the table. This is a workaround for a limitation 
of AML code where the disassembler often cannot determine the number of 
arguments required for an external control method and generates incorrect 
ASL code. See the iASL reference for details. ACPICA BZ 1030.

Debugger: Implemented a new command (paths) that displays the full 
pathnames (namepaths) and object types of all objects in the namespace. 
This is an alternative to the namespace command.

Debugger: Implemented a new command (sci) that invokes the SCI dispatch 
mechanism and any installed handlers.

iASL: Fixed a possible segfault for "too many parent prefixes" condition. 
This can occur if there are too many parent prefixes in a namepath (for 
example, ^^^^^^PCI0.ECRD). ACPICA BZ 1035.

Application OSLs: Set the return value for the PCI read functions. These 
functions simply return AE_OK, but should set the return value to zero 
also. This change implements this. ACPICA BZ 1038.

Debugger: Prevent possible command line buffer overflow. Increase the 
size of a couple of the debugger line buffers, and ensure that overflow 
cannot happen. ACPICA BZ 1037.

iASL: Changed to abort immediately on serious errors during the parsing 
phase. Due to the nature of ASL, there is no point in attempting to 
compile these types of errors, and they typically end up causing a 
cascade of hundreds of errors which obscure the original problem.

----------------------------------------
25 July 2013. Summary of changes for version 20130725:

1) ACPICA kernel-resident subsystem:

Fixed a problem with the DerefOf operator where references to FieldUnits 
and BufferFields incorrectly returned the parent object, not the actual 
value of the object. After this change, a dereference of a FieldUnit 
reference results in a read operation on the field to get the value, and 
likewise, the appropriate BufferField value is extracted from the target 
buffer.

Fixed a problem where the _WAK method could cause a fault under these 
circumstances: 1) Interpreter slack mode was not enabled, and 2) the _WAK 
method returned no value. The problem is rarely seen because most kernels 
run ACPICA in slack mode.

For the DerefOf operator, a fatal error now results if an attempt is made 
to dereference a reference (created by the Index operator) to a NULL 
package element. Provides compatibility with other ACPI implementations, 
and this behavior will be added to a future version of the ACPI 
specification.

The ACPI Power Management Timer (defined in the FADT) is now optional. 
This provides compatibility with other ACPI implementations and will 
appear in the next version of the ACPI specification. If there is no PM 
Timer on the platform, AcpiGetTimer returns AE_SUPPORT. An address of 
zero in the FADT indicates no PM timer.

Implemented a new interface for _OSI support, AcpiUpdateInterfaces. This 
allows the host to globally enable/disable all vendor strings, all 
feature strings, or both. Intended to be primarily used for debugging 
purposes only. Lv Zheng.

Expose the collected _OSI data to the host via a global variable. This 
data tracks the highest level vendor ID that has been invoked by the BIOS 
so that the host (and potentially ACPICA itself) can change behaviors 
based upon the age of the BIOS.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Current Release:
    Non-Debug Version:  96.2K Code, 27.1K Data, 123.3K Total
    Debug Version:     184.4K Code, 76.8K Data, 261.2K Total
  Previous Release:
    Non-Debug Version:  95.9K Code, 26.9K Data, 122.8K Total
    Debug Version:     184.1K Code, 76.7K Data, 260.8K Total


2) iASL Compiler/Disassembler and Tools:

iASL: Created the following enhancements for the -so option (create 
offset table):
1)Add offsets for the last nameseg in each namepath for every supported 
object type
2)Add support for Processor, Device, Thermal Zone, and Scope objects
3)Add the actual AML opcode for the parent object of every supported 
object type
4)Add support for the ZERO/ONE/ONES AML opcodes for integer objects

Disassembler: Emit all unresolved external symbols in a single block. 
These are external references to control methods that could not be 
resolved, and thus, the disassembler had to make a guess at the number of 
arguments to parse.

iASL: The argument to the -T option (create table template) is now 
optional. If not specified, the default table is a DSDT, typically the 
most common case.

----------------------------------------
26 June 2013. Summary of changes for version 20130626:

1) ACPICA kernel-resident subsystem:

Fixed an issue with runtime repair of the _CST object. Null or invalid 
elements were not always removed properly. Lv Zheng. 

Removed an arbitrary restriction of 256 GPEs per GPE block (such as the 
FADT-defined GPE0 and GPE1). For GPE0, GPE1, and each GPE Block Device, 
the maximum number of GPEs is 1016. Use of multiple GPE block devices 
makes the system-wide number of GPEs essentially unlimited.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Current Release:
    Non-Debug Version:  95.9K Code, 26.9K Data, 122.8K Total
    Debug Version:     184.1K Code, 76.7K Data, 260.8K Total
  Previous Release:
    Non-Debug Version:  96.0K Code, 27.0K Data, 123.0K Total
    Debug Version:     184.1K Code, 76.8K Data, 260.9K Total


2) iASL Compiler/Disassembler and Tools:

Portable AcpiDump: Implemented full support for the Linux and FreeBSD 
hosts. Now supports Linux, FreeBSD, and Windows.

Disassembler: Added some missing types for the HEST and EINJ tables: "Set 
Error Type With Address", "CMCI", "MCE", and "Flush Cacheline".

iASL/Preprocessor: Implemented full support for nested 
#if/#else/#elif/#endif blocks. Allows arbitrary depth of nested blocks.

Disassembler: Expanded maximum output string length to 64K. Was 256 bytes 
max. The original purpose of this constraint was to limit the amount of 
debug output. However, the string function in question (UtPrintString) is 
now used for the disassembler also, where 256 bytes is insufficient. 
Reported by RehabMan@GitHub.

iASL/DataTables: Fixed some problems and issues with compilation of DMAR 
tables. ACPICA BZ 999. Lv Zheng.

iASL: Fixed a couple of error exit issues that could result in a "Could 
not delete <file>" message during ASL compilation.

AcpiDump: Allow "FADT" and "MADT" as valid table signatures, even though 
the actual signatures for these tables are "FACP" and "APIC", 
respectively.

AcpiDump: Added support for multiple UEFI tables. Only SSDT and UEFI 
tables are allowed to have multiple instances.

----------------------------------------
17 May 2013. Summary of changes for version 20130517:

1) ACPICA kernel-resident subsystem:

Fixed a regression introduced in version 20130328 for _INI methods. This 
change fixes a problem introduced in 20130328 where _INI methods are no 
longer executed properly because of a memory block that was not 
initialized correctly. ACPICA BZ 1016. Tomasz Nowicki 
<tomasz.nowicki@linaro.org>.

Fixed a possible problem with the new extended sleep registers in the 
ACPI 
5.0 FADT. Do not use these registers (even if populated) unless the HW-
reduced bit is set in the FADT (as per the ACPI specification). ACPICA BZ 
1020. Lv Zheng.

Implemented return value repair code for _CST predefined objects: Sort 
the 
list and detect/remove invalid entries. ACPICA BZ 890. Lv Zheng.

Implemented a debug-only option to disable loading of SSDTs from the 
RSDT/XSDT during ACPICA initialization. This can be useful for debugging 
ACPI problems on some machines. Set AcpiGbl_DisableSsdtTableLoad in 
acglobal.h - ACPICA BZ 1005. Lv Zheng.

Fixed some issues in the ACPICA initialization and termination code: 
Tomasz Nowicki <tomasz.nowicki@linaro.org>
1) Clear events initialized flag upon event component termination. ACPICA 
BZ 1013.
2) Fixed a possible memory leak in GPE init error path. ACPICA BZ 1018. 
3) Delete global lock pending lock during termination. ACPICA BZ 1012.
4) Clear debug buffer global on termination to prevent possible multiple 
delete. ACPICA BZ 1010.

Standardized all switch() blocks across the entire source base. After 
many 
years, different formatting for switch() had crept in. This change makes 
the formatting of every switch block identical. ACPICA BZ 997. Chao Guan.

Split some files to enhance ACPICA modularity and configurability:
1) Split buffer dump routines into utilities/utbuffer.c
2) Split internal error message routines into utilities/uterror.c
3) Split table print utilities into tables/tbprint.c
4) Split iASL command-line option processing into asloptions.c

Makefile enhancements:
1) Support for all new files above.
2) Abort make on errors from any subcomponent. Chao Guan.
3) Add build support for Apple Mac OS X. Liang Qi.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Current Release:
    Non-Debug Version:  96.0K Code, 27.0K Data, 123.0K Total
    Debug Version:     184.1K Code, 76.8K Data, 260.9K Total
  Previous Release:
    Non-Debug Version:  95.6K Code, 26.8K Data, 122.4K Total
    Debug Version:     183.5K Code, 76.6K Data, 260.1K Total


2) iASL Compiler/Disassembler and Tools:

New utility: Implemented an easily portable version of the acpidump 
utility to extract ACPI tables from the system (or a file) in an ASCII 
hex 
dump format. The top-level code implements the various command line 
options, file I/O, and table dump routines. To port to a new host, only 
three functions need to be implemented to get tables -- since this 
functionality is OS-dependent. See the tools/acpidump/apmain.c module and 
the ACPICA reference for porting instructions. ACPICA BZ 859. Notes:
1) The Windows version obtains the ACPI tables from the Registry.
2) The Linux version is under development.
3) Other hosts - If an OS-dependent module is submitted, it will be 
distributed with ACPICA.

iASL: Fixed a regression for -D preprocessor option (define symbol). A 
restructuring/change to the initialization sequence caused this option to 
no longer work properly.

iASL: Implemented a mechanism to disable specific warnings and remarks. 
Adds a new command line option, "-vw <messageid> as well as "#pragma 
disable <messageid>". ACPICA BZ 989. Chao Guan, Bob Moore.

iASL: Fix for too-strict package object validation. The package object 
validation for return values from the predefined names is a bit too 
strict, it does not allow names references within the package (which will 
be resolved at runtime.) These types of references cannot be validated at 
compile time. This change ignores named references within package objects 
for names that return or define static packages.

Debugger: Fixed the 80-character command line limitation for the History 
command. Now allows lines of arbitrary length. ACPICA BZ 1000. Chao Guan.

iASL: Added control method and package support for the -so option 
(generates AML offset table for BIOS support.)

iASL: issue a remark if a non-serialized method creates named objects. If 
a thread blocks within the method for any reason, and another thread 
enters the method, the method will fail because an attempt will be made 
to 
create the same (named) object twice. In this case, issue a remark that 
the method should be marked serialized. NOTE: may become a warning later. 
ACPICA BZ 909.

----------------------------------------
18 April 2013. Summary of changes for version 20130418:

1) ACPICA kernel-resident subsystem:

Fixed a possible buffer overrun during some rare but specific field unit 
read operations. This overrun can only happen if the DSDT version is 1 -- 
meaning that all AML integers are 32 bits -- and the field length is 
between 33 and 55 bits long. During the read, an internal buffer object 
is 
created for the field unit because the field is larger than an integer 
(32 
bits). However, in this case, the buffer will be incorrectly written 
beyond the end because the buffer length is less than the internal 
minimum 
of 64 bits (8 bytes) long. The buffer will be either 5, 6, or 7 bytes 
long, but a full 8 bytes will be written.

Updated the Embedded Controller "orphan" _REG method support. This refers 
to _REG methods under the EC device that have no corresponding operation 
region. This is allowed by the ACPI specification. This update removes a 
dependency on the existence an ECDT table. It will execute an orphan _REG 
method as long as the operation region handler for the EC is installed at 
the EC device node and not the namespace root. Rui Zhang (original 
update), Bob Moore (update/integrate).

Implemented run-time argument typechecking for all predefined ACPI names 
(_STA, _BIF, etc.) This change performs object typechecking on all 
incoming arguments for all predefined names executed via 
AcpiEvaluateObject. This ensures that ACPI-related device drivers are 
passing correct object types as well as the correct number of arguments 
(therefore identifying any issues immediately). Also, the ASL/namespace 
definition of the predefined name is checked against the ACPI 
specification for the proper argument count. Adds one new file, 
nsarguments.c

Changed an exception code for the ASL UnLoad() operator. Changed the 
exception code for the case where the input DdbHandle is invalid, from 
AE_BAD_PARAMETER to the more appropriate AE_AML_OPERAND_TYPE.

Unix/Linux makefiles: Removed the use of the -O2 optimization flag in the 
global makefile. The use of this flag causes compiler errors on earlier 
versions of GCC, so it has been removed for compatibility.

Miscellaneous cleanup:
1) Removed some unused/obsolete macros
2) Fixed a possible memory leak in the _OSI support
3) Removed an unused variable in the predefined name support
4) Windows OSL: remove obsolete reference to a memory list field

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Current Release:
    Non-Debug Version:  95.2K Code, 26.4K Data, 121.6K Total
    Debug Version:     183.0K Code, 76.0K Data, 259.0K Total
  Previous Release:
    Non-Debug Version:  95.6K Code, 26.8K Data, 122.4K Total
    Debug Version:     183.5K Code, 76.6K Data, 260.1K Total


2) iASL Compiler/Disassembler and Tools:

AcpiExec: Added installation of a handler for the SystemCMOS address 
space. This prevents control method abort if a method accesses this 
space.

AcpiExec: Added support for multiple EC devices, and now install EC 
operation region handler(s) at the actual EC device instead of the 
namespace root. This reflects the typical behavior of host operating 
systems.

AcpiExec: Updated to ensure that all operation region handlers are 
installed before the _REG methods are executed. This prevents a _REG 
method from aborting if it accesses an address space has no handler. 
AcpiExec installs a handler for every possible address space.

Debugger: Enhanced the "handlers" command to display non-root handlers. 
This change enhances the handlers command to display handlers associated 
with individual devices throughout the namespace, in addition to the 
currently supported display of handlers associated with the root 
namespace 
node.

ASL Test Suite: Several test suite errors have been identified and 
resolved, reducing the total error count during execution. Chao Guan.

----------------------------------------
28 March 2013. Summary of changes for version 20130328:

1) ACPICA kernel-resident subsystem:

Fixed several possible race conditions with the internal object reference 
counting mechanism. Some of the external ACPICA interfaces update object 
reference counts without holding the interpreter or namespace lock. This 
change adds a spinlock to protect reference count updates on the internal 
ACPICA objects. Reported by and with assistance from Andriy Gapon 
(avg@FreeBSD.org).

FADT support: Removed an extraneous warning for very large GPE register 
sets. This change removes a size mismatch warning if the legacy length 
field for a GPE register set is larger than the 64-bit GAS structure can 
accommodate. GPE register sets can be larger than the 255-bit width 
limitation of the GAS structure. Linn Crosetto (linn@hp.com).

_OSI Support: handle any errors from AcpiOsAcquireMutex. Check for error 
return from this interface. Handles a possible timeout case if 
ACPI_WAIT_FOREVER is modified by the host to be a value less than 
"forever". Jung-uk Kim.

Predefined name support: Add allowed/required argument type information 
to 
the master predefined info table. This change adds the infrastructure to 
enable typechecking on incoming arguments for all predefined 
methods/objects. It does not actually contain the code that will fully 
utilize this information, this is still under development. Also condenses 
some duplicate code for the predefined names into a new module, 
utilities/utpredef.c

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Previous Release:
    Non-Debug Version:  95.0K Code, 25.9K Data, 120.9K Total
    Debug Version:     182.9K Code, 75.6K Data, 258.5K Total
  Current Release:
    Non-Debug Version:  95.2K Code, 26.4K Data, 121.6K Total
    Debug Version:     183.0K Code, 76.0K Data, 259.0K Total


2) iASL Compiler/Disassembler and Tools:

iASL: Implemented a new option to simplify the development of ACPI-
related 
BIOS code. Adds support for a new "offset table" output file. The -so 
option will create a C table containing the AML table offsets of various 
named objects in the namespace so that BIOS code can modify them easily 
at 
boot time. This can simplify BIOS runtime code by eliminating expensive 
searches for "magic values", enhancing boot times and adding greater 
reliability. With assistance from Lee Hamel.

iASL: Allow additional predefined names to return zero-length packages. 
Now, all predefined names that are defined by the ACPI specification to 
return a "variable-length package of packages" are allowed to return a 
zero length top-level package. This allows the BIOS to tell the host that 
the requested feature is not supported, and supports existing BIOS/ASL 
code and practices.

iASL: Changed the "result not used" warning to an error. This is the case 
where an ASL operator is effectively a NOOP because the result of the 
operation is not stored anywhere. For example:
    Add (4, Local0)
There is no target (missing 3rd argument), nor is the function return 
value used. This is potentially a very serious problem -- since the code 
was probably intended to do something, but for whatever reason, the value 
was not stored. Therefore, this issue has been upgraded from a warning to 
an error.

AcpiHelp: Added allowable/required argument types to the predefined names 
info display. This feature utilizes the recent update to the predefined 
names table (above).

----------------------------------------
14 February 2013. Summary of changes for version 20130214:

1) ACPICA Kernel-resident Subsystem:

Fixed a possible regression on some hosts: Reinstated the safe return 
macros (return_ACPI_STATUS, etc.) that ensure that the argument is 
evaluated only once. Although these macros are not needed for the ACPICA 
code itself, they are often used by ACPI-related host device drivers 
where 
the safe feature may be necessary.

Fixed several issues related to the ACPI 5.0 reduced hardware support 
(SOC): Now ensure that if the platform declares itself as hardware-
reduced 
via the FADT, the following functions become NOOPs (and always return 
AE_OK) because ACPI is always enabled by definition on these machines:
  AcpiEnable
  AcpiDisable
  AcpiHwGetMode
  AcpiHwSetMode

Dynamic Object Repair: Implemented additional runtime repairs for 
predefined name return values. Both of these repairs can simplify code in 
the related device drivers that invoke these methods:
1) For the _STR and _MLS names, automatically repair/convert an ASCII 
string to a Unicode buffer. 
2) For the _CRS, _PRS, and _DMA names, return a resource descriptor with 
a 
lone end tag descriptor in the following cases: A Return(0) was executed, 
a null buffer was returned, or no object at all was returned (non-slack 
mode only). Adds a new file, nsconvert.c
ACPICA BZ 998. Bob Moore, Lv Zheng.

Resource Manager: Added additional code to prevent possible infinite 
loops 
while traversing corrupted or ill-formed resource template buffers. Check 
for zero-length resource descriptors in all code that loops through 
resource templates (the length field is used to index through the 
template). This change also hardens the external AcpiWalkResources and 
AcpiWalkResourceBuffer interfaces.

Local Cache Manager: Enhanced the main data structure to eliminate an 
unnecessary mechanism to access the next object in the list. Actually 
provides a small performance enhancement for hosts that use the local 
ACPICA cache manager. Jung-uk Kim.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Previous Release:
    Non-Debug Version:  94.5K Code, 25.4K Data, 119.9K Total
    Debug Version:     182.3K Code, 75.0K Data, 257.3K Total
  Current Release:
    Non-Debug Version:  95.0K Code, 25.9K Data, 120.9K Total
    Debug Version:     182.9K Code, 75.6K Data, 258.5K Total


2) iASL Compiler/Disassembler and Tools:

iASL/Disassembler: Fixed several issues with the definition of the ACPI 
5.0 RASF table (RAS Feature Table). This change incorporates late changes 
that were made to the ACPI 5.0 specification.

iASL/Disassembler: Added full support for the following new ACPI tables:
  1) The MTMR table (MID Timer Table)
  2) The VRTC table (Virtual Real Time Clock Table).
Includes header file, disassembler, table compiler, and template support 
for both tables.

iASL: Implemented compile-time validation of package objects returned by 
predefined names. This new feature validates static package objects 
returned by the various predefined names defined to return packages. Both 
object types and package lengths are validated, for both parent packages 
and sub-packages, if any. The code is similar in structure and behavior 
to 
the runtime repair mechanism within the AML interpreter and uses the 
existing predefined name information table. Adds a new file, aslprepkg.c. 
ACPICA BZ 938.

iASL: Implemented auto-detection of binary ACPI tables for disassembly. 
This feature detects a binary file with a valid ACPI table header and 
invokes the disassembler automatically. Eliminates the need to 
specifically invoke the disassembler with the -d option. ACPICA BZ 862.

iASL/Disassembler: Added several warnings for the case where there are 
unresolved control methods during the disassembly. This can potentially 
cause errors when the output file is compiled, because the disassembler 
assumes zero method arguments in these cases (it cannot determine the 
actual number of arguments without resolution/definition of the method).

Debugger: Added support to display all resources with a single command. 
Invocation of the resources command with no arguments will now display 
all 
resources within the current namespace.

AcpiHelp: Added descriptive text for each ACPICA exception code displayed 
via the -e option.

----------------------------------------
17 January 2013. Summary of changes for version 20130117:

1) ACPICA Kernel-resident Subsystem:

Updated the AcpiGetSleepTypeData interface: Allow the \_Sx methods to 
return either 1 or 2 integers. Although the ACPI spec defines the \_Sx 
objects to return a package containing one integer, most BIOS code 
returns 
two integers and the previous code reflects that. However, we also need 
to 
support BIOS code that actually implements to the ACPI spec, and this 
change reflects this.

Fixed two issues with the ACPI_DEBUG_PRINT macros:
1) Added the ACPI_DO_WHILE macro to the main DEBUG_PRINT helper macro for 
C compilers that require this support.
2) Renamed the internal ACPI_DEBUG macro to ACPI_DO_DEBUG_PRINT since 
ACPI_DEBUG is already used by many of the various hosts.

Updated all ACPICA copyrights and signons to 2013. Added the 2013 
copyright to all module headers and signons, including the standard Linux 
header. This affects virtually every file in the ACPICA core subsystem, 
iASL compiler, all ACPICA utilities, and the test suites.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Previous Release:
    Non-Debug Version:  94.5K Code, 25.5K Data, 120.0K Total
    Debug Version:     182.2K Code, 74.9K Data, 257.1K Total
  Current Release:
    Non-Debug Version:  94.5K Code, 25.4K Data, 119.9K Total
    Debug Version:     182.3K Code, 75.0K Data, 257.3K Total


2) iASL Compiler/Disassembler and Tools:

Generic Unix OSL: Use a buffer to eliminate multiple vfprintf()s and 
prevent a possible fault on some hosts. Some C libraries modify the arg 
pointer parameter to vfprintf making it difficult to call it twice in the 
AcpiOsVprintf function. Use a local buffer to workaround this issue. This 
does not affect the Windows OSL since the Win C library does not modify 
the arg pointer. Chao Guan, Bob Moore.

iASL: Fixed a possible infinite loop when the maximum error count is 
reached. If an output file other than the .AML file is specified (such as 
a listing file), and the maximum number of errors is reached, do not 
attempt to flush data to the output file(s) as the compiler is aborting. 
This can cause an infinite loop as the max error count code essentially 
keeps calling itself.

iASL/Disassembler: Added an option (-in) to ignore NOOP 
opcodes/operators. 
Implemented for both the compiler and the disassembler. Often, the NOOP 
opcode is used as padding for packages that are changed dynamically by 
the 
BIOS. When disassembled and recompiled, these NOOPs will cause syntax 
errors. This option causes the disassembler to ignore all NOOP opcodes 
(0xA3), and it also causes the compiler to ignore all ASL source code 
NOOP 
statements as well.

Debugger: Enhanced the Sleep command to execute all sleep states. This 
change allows Sleep to be invoked with no arguments and causes the 
debugger to execute all of the sleep states, 0-5, automatically.

----------------------------------------
20 December 2012. Summary of changes for version 20121220:

1) ACPICA Kernel-resident Subsystem:

Implemented a new interface, AcpiWalkResourceBuffer. This interface is an 
alternate entry point for AcpiWalkResources and improves the usability of 
the resource manager by accepting as input a buffer containing the output 
of either a _CRS, _PRS, or _AEI method. The key functionality is that the 
input buffer is not deleted by this interface so that it can be used by 
the host later. See the ACPICA reference for details.

Interpreter: Add a warning if a 64-bit constant appears in a 32-bit table 
(DSDT version < 2). The constant will be truncated and this warning 
reflects that behavior.

Resource Manager: Add support for the new ACPI 5.0 wake bit in the IRQ, 
ExtendedInterrupt, and GpioInt descriptors. This change adds support to 
both get and set the new wake bit in these descriptors, separately from 
the existing share bit. Reported by Aaron Lu.

Interpreter: Fix Store() when an implicit conversion is not possible. For 
example, in the cases such as a store of a string to an existing package 
object, implement the store as a CopyObject(). This is a small departure 
from the ACPI specification which states that the control method should 
be 
aborted in this case. However, the ASLTS suite depends on this behavior.

Performance improvement for the various FUNCTION_TRACE and DEBUG_PRINT 
macros: check if debug output is currently enabled as soon as possible to 
minimize performance impact if debug is in fact not enabled.

Source code restructuring: Cleanup to improve modularity. The following 
new files have been added: dbconvert.c, evhandler.c, nsprepkg.c, 
psopinfo.c, psobject.c, rsdumpinfo.c, utstring.c, and utownerid.c. 
Associated makefiles and project files have been updated.

Changed an exception code for LoadTable operator. For the case where one 
of the input strings is too long, change the returned exception code from 
AE_BAD_PARAMETER to AE_AML_STRING_LIMIT.

Fixed a possible memory leak in dispatcher error path. On error, delete 
the mutex object created during method mutex creation. Reported by 
tim.gardner@canonical.com.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Previous Release:
    Non-Debug Version:  94.3K Code, 25.3K Data, 119.6K Total
    Debug Version:     175.5K Code, 74.5K Data, 250.0K Total
  Current Release:
    Non-Debug Version:  94.5K Code, 25.5K Data, 120.0K Total
    Debug Version:     182.2K Code, 74.9K Data, 257.1K Total


2) iASL Compiler/Disassembler and Tools:

iASL: Disallow a method call as argument to the ObjectType ASL operator. 
This change tracks an errata to the ACPI 5.0 document. The AML grammar 
will not allow the interpreter to differentiate between a method and a 
method invocation when these are used as an argument to the ObjectType 
operator. The ACPI specification change is to disallow a method 
invocation 
(UserTerm) for the ObjectType operator.

Finish support for the TPM2 and CSRT tables in the headers, table 
compiler, and disassembler.

Unix user-space OSL: Fix a problem with WaitSemaphore where the timeout 
always expires immediately if the semaphore is not available. The 
original 
code was using a relative-time timeout, but sem_timedwait requires the 
use 
of an absolute time.

iASL: Added a remark if the Timer() operator is used within a 32-bit 
table. This operator returns a 64-bit time value that will be truncated 
within a 32-bit table.

iASL Source code restructuring: Cleanup to improve modularity. The 
following new files have been added: aslhex.c, aslxref.c, aslnamesp.c, 
aslmethod.c, and aslfileio.c. Associated makefiles and project files have 
been updated.


----------------------------------------
14 November 2012. Summary of changes for version 20121114:

1) ACPICA Kernel-resident Subsystem:

Implemented a performance enhancement for ACPI/AML Package objects. This 
change greatly increases the performance of Package objects within the 
interpreter. It changes the processing of reference counts for packages 
by 
optimizing for the most common case where the package sub-objects are 
either Integers, Strings, or Buffers. Increases the overall performance 
of 
the ASLTS test suite by 1.5X (Increases the Slack Mode performance by 
2X.) 
Chao Guan. ACPICA BZ 943.

Implemented and deployed common macros to extract flag bits from resource 
descriptors. Improves readability and maintainability of the code. Fixes 
a 
problem with the UART serial bus descriptor for the number of data bits 
flags (was incorrectly 2 bits, should be 3).

Enhanced the ACPI_GETx and ACPI_SETx macros. Improved the implementation 
of the macros and changed the SETx macros to the style of (destination, 
source). Also added ACPI_CASTx companion macros. Lv Zheng.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Previous Release:
    Non-Debug Version:  93.9K Code, 25.2K Data, 119.1K Total
    Debug Version:     175.5K Code, 74.5K Data, 250.0K Total
  Current Release:
    Non-Debug Version:  94.3K Code, 25.3K Data, 119.6K Total
    Debug Version:     175.5K Code, 74.5K Data, 250.0K Total


2) iASL Compiler/Disassembler and Tools:

Disassembler: Added the new ACPI 5.0 interrupt sharing flags. This change 
adds the ShareAndWake and ExclusiveAndWake flags which were added to the 
Irq, Interrupt, and Gpio resource descriptors in ACPI 5.0. ACPICA BZ 986.

Disassembler: Fixed a problem with external declaration generation. Fixes 
a problem where an incorrect pathname could be generated for an external 
declaration if the original reference to the object includes leading 
carats (^). ACPICA BZ 984.

Debugger: Completed a major update for the Disassemble<method> command. 
This command was out-of-date and did not properly disassemble control 
methods that had any reasonable complexity. This fix brings the command 
up 
to the same level as the rest of the disassembler. Adds one new file, 
dmdeferred.c, which is existing code that is now common with the main 
disassembler and the debugger disassemble command. ACPICA MZ 978.

iASL: Moved the parser entry prototype to avoid a duplicate declaration. 
Newer versions of Bison emit this prototype, so moved the prototype out 
of 
the iASL header to where it is actually used in order to avoid a 
duplicate 
declaration.

iASL/Tools: Standardized use of the stream I/O functions:
  1) Ensure check for I/O error after every fopen/fread/fwrite
  2) Ensure proper order of size/count arguments for fread/fwrite
  3) Use test of (Actual != Requested) after all fwrite, and most fread
  4) Standardize I/O error messages
Improves reliability and maintainability of the code. Bob Moore, Lv 
Zheng. 
ACPICA BZ 981.

Disassembler: Prevent duplicate External() statements. During generation 
of external statements, detect similar pathnames that are actually 
duplicates such as these:
  External (\ABCD)
  External (ABCD)
Remove all leading '\' characters from pathnames during the external 
statement generation so that duplicates will be detected and tossed. 
ACPICA BZ 985.

Tools: Replace low-level I/O with stream I/O functions. Replace 
open/read/write/close with the stream I/O equivalents 
fopen/fread/fwrite/fclose for portability and performance. Lv Zheng, Bob 
Moore.

AcpiBin: Fix for the dump-to-hex function. Now correctly output the table 
name header so that AcpiXtract recognizes the output file/table.

iASL: Remove obsolete -2 option flag. Originally intended to force the 
compiler/disassembler into an ACPI 2.0 mode, this was never implemented 
and the entire concept is now obsolete.

----------------------------------------
18 October 2012. Summary of changes for version 20121018:


1) ACPICA Kernel-resident Subsystem:

Updated support for the ACPI 5.0 MPST table. Fixes some problems 
introduced by late changes to the table as it was added to the ACPI 5.0 
specification. Includes header, disassembler, and data table compiler 
support as well as a new version of the MPST template.

AcpiGetObjectInfo: Enhanced the device object support to include the ACPI 
5.0 _SUB method. Now calls _SUB in addition to the other PNP-related ID 
methods: _HID, _CID, and _UID.

Changed ACPI_DEVICE_ID to ACPI_PNP_DEVICE_ID. Also changed 
ACPI_DEVICE_ID_LIST to ACPI_PNP_DEVICE_ID_LIST. These changes prevent 
name collisions on hosts that reserve the *_DEVICE_ID (or *DeviceId) 
names for their various drivers. Affects the AcpiGetObjectInfo external 
interface, and other internal interfaces as well.

Added and deployed a new macro for ACPI_NAME management: ACPI_MOVE_NAME. 
This macro resolves to a simple 32-bit move of the 4-character ACPI_NAME 
on machines that support non-aligned transfers. Optimizes for this case 
rather than using a strncpy. With assistance from Zheng Lv.

Resource Manager: Small fix for buffer size calculation. Fixed a one byte 
error in the output buffer calculation. Feng Tang. ACPICA BZ 849.

Added a new debug print message for AML mutex objects that are force-
released. At control method termination, any currently acquired mutex 
objects are force-released. Adds a new debug-only message for each one 
that is released.

Audited/updated all ACPICA return macros and the function debug depth 
counter: 1) Ensure that all functions that use the various TRACE macros 
also use the appropriate ACPICA return macros. 2) Ensure that all normal 
return statements surround the return expression (value) with parens to 
ensure consistency across the ACPICA code base. Guan Chao, Tang Feng, 
Zheng Lv, Bob Moore. ACPICA Bugzilla 972.

Global source code changes/maintenance: All extra lines at the start and 
end of each source file have been removed for consistency. Also, within 
comments, all new sentences start with a single space instead of a double 
space, again for consistency across the code base.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a much larger code and data size.

  Previous Release:
    Non-Debug Version:  93.7K Code, 25.3K Data, 119.0K Total
    Debug Version:     175.0K Code, 74.4K Data, 249.4K Total
  Current Release:
    Non-Debug Version:  93.9K Code, 25.2K Data, 119.1K Total
    Debug Version:     175.5K Code, 74.5K Data, 250.0K Total


2) iASL Compiler/Disassembler and Tools:

AcpiExec: Improved the algorithm used for memory leak/corruption 
detection. Added some intelligence to the code that maintains the global 
list of allocated memory. The list is now ordered by allocated memory 
address, significantly improving performance. When running AcpiExec on 
the ASLTS test suite, speed improvements of 3X to 5X are seen, depending 
on the platform and/or the environment. Note, this performance 
enhancement affects the AcpiExec utility only, not the kernel-resident 
ACPICA code.

Enhanced error reporting for invalid AML opcodes and bad ACPI_NAMEs. For 
the disassembler, dump the 48 bytes surrounding the invalid opcode. Fix 
incorrect table offset reported for invalid opcodes. Report the original 
32-bit value for bad ACPI_NAMEs (as well as the repaired name.)

Disassembler: Enhanced the -vt option to emit the binary table data in 
hex format to assist with debugging.

Fixed a potential filename buffer overflow in osunixdir.c. Increased the 
size of file structure. Colin Ian King.

----------------------------------------
13 September 2012. Summary of changes for version 20120913:


1) ACPICA Kernel-resident Subsystem:

ACPI 5.0: Added two new notify types for the Hardware Error Notification 
Structure within the Hardware Error Source Table (HEST) table -- CMCI(5) 
and 
MCE(6).
 
Table Manager: Merged/removed duplicate code in the root table resize 
functions. One function is external, the other is internal. Lv Zheng, 
ACPICA 
BZ 846.

Makefiles: Completely removed the obsolete "Linux" makefiles under 
acpica/generate/linux. These makefiles are obsolete and have been 
replaced 
by 
the generic unix makefiles under acpica/generate/unix.

Makefiles: Ensure that binary files always copied properly. Minor rule 
change 
to ensure that the final binary output files are always copied up to the 
appropriate binary directory (bin32 or bin64.)

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug 
version of the code includes the debug output trace mechanism and has a 
much 
larger code and data size.

  Previous Release:
    Non-Debug Version:  93.8K Code, 25.3K Data, 119.1K Total
    Debug Version:     175.7K Code, 74.8K Data, 250.5K Total
  Current Release:
    Non-Debug Version:  93.7K Code, 25.3K Data, 119.0K Total
    Debug Version:     175.0K Code, 74.4K Data, 249.4K Total


2) iASL Compiler/Disassembler and Tools:

Disassembler: Fixed a possible fault during the disassembly of resource 
descriptors when a second parse is required because of the invocation of 
external control methods within the table. With assistance from 
adq@lidskialf.net. ACPICA BZ 976.

iASL: Fixed a namepath optimization problem. An error can occur if the 
parse 
node that contains the namepath to be optimized does not have a parent 
node 
that is a named object. This change fixes the problem.

iASL: Fixed a regression where the AML file is not deleted on errors. The 
AML 
output file should be deleted if there are any errors during the 
compiler. 
The 
only exception is if the -f (force output) option is used. ACPICA BZ 974.

iASL: Added a feature to automatically increase internal line buffer 
sizes. 
Via realloc(), automatically increase the internal line buffer sizes as 
necessary to support very long source code lines. The current version of 
the 
preprocessor requires a buffer long enough to contain full source code 
lines. 
This change increases the line buffer(s) if the input lines go beyond the 
current buffer size. This eliminates errors that occurred when a source 
code 
line was longer than the buffer.

iASL: Fixed a problem with constant folding in method declarations. The 
SyncLevel term is a ByteConstExpr, and incorrect code would be generated 
if a 
Type3 opcode was used.

Debugger: Improved command help support. For incorrect argument count, 
display 
full help for the command. For help command itself, allow an argument to 
specify a command.

Test Suites: Several bug fixes for the ASLTS suite reduces the number of 
errors during execution of the suite. Guan Chao.

----------------------------------------
16 August 2012. Summary of changes for version 20120816:


1) ACPICA Kernel-resident Subsystem:

Removed all use of the deprecated _GTS and _BFS predefined methods. The 
_GTS 
(Going To Sleep) and _BFS (Back From Sleep) methods are essentially 
deprecated and will probably be removed from the ACPI specification. 
Windows 
does not invoke them, and reportedly never will. The final nail in the 
coffin 
is that the ACPI specification states that these methods must be run with 
interrupts off, which is not going to happen in a kernel interpreter. 
Note: 
Linux has removed all use of the methods also. It was discovered that 
invoking these functions caused failures on some machines, probably 
because 
they were never tested since Windows does not call them. Affects two 
external 
interfaces, AcpiEnterSleepState and AcpiLeaveSleepStatePrep. Tang Feng. 
ACPICA BZ 969.

Implemented support for complex bit-packed buffers returned from the _PLD 
(Physical Location of Device) predefined method. Adds a new external 
interface, AcpiDecodePldBuffer that parses the buffer into a more usable 
C 
structure. Note: C Bitfields cannot be used for this type of predefined 
structure since the memory layout of individual bitfields is not defined 
by 
the C language. In addition, there are endian concerns where a compiler 
will 
change the bitfield ordering based on the machine type. The new ACPICA 
interface eliminates these issues, and should be called after _PLD is 
executed. ACPICA BZ 954.

Implemented a change to allow a scope change to root (via "Scope (\)") 
during 
execution of module-level ASL code (code that is executed at table load 
time.) Lin Ming.

Added the Windows8/Server2012 string for the _OSI method. This change 
adds 
a 
new _OSI string, "Windows 2012" for both Windows 8 and Windows Server 
2012.

Added header support for the new ACPI tables DBG2 (Debug Port Table Type 
2) 
and CSRT (Core System Resource Table).

Added struct header support for the _FDE, _GRT, _GTM, and _SRT predefined 
names. This simplifies access to the buffers returned by these predefined 
names. Adds a new file, include/acbuffer.h. ACPICA BZ 956.

GPE support: Removed an extraneous parameter from the various low-level 
internal GPE functions. Tang Feng.

Removed the linux makefiles from the unix packages. The generate/linux 
makefiles are obsolete and have been removed from the unix tarball 
release 
packages. The replacement makefiles are under generate/unix, and there is 
a 
top-level makefile under the main acpica directory. ACPICA BZ 967, 912.

Updates for Unix makefiles:
1) Add -D_FORTIFY_SOURCE=2 for gcc generation. Arjan van de Ven.
2) Update linker flags (move to end of command line) for AcpiExec 
utility. 
Guan Chao.

Split ACPICA initialization functions to new file, utxfinit.c. Split from 
utxface.c to improve modularity and reduce file size.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  93.5K Code, 25.3K Data, 118.8K Total
    Debug Version:     173.7K Code, 74.0K Data, 247.7K Total
  Current Release:
    Non-Debug Version:  93.8K Code, 25.3K Data, 119.1K Total
    Debug Version:     175.7K Code, 74.8K Data, 250.5K Total


2) iASL Compiler/Disassembler and Tools:

iASL: Fixed a problem with constant folding for fixed-length constant 
expressions. The constant-folding code was not being invoked for constant 
expressions that allow the use of type 3/4/5 opcodes to generate 
constants 
for expressions such as ByteConstExpr, WordConstExpr, etc. This could 
result 
in the generation of invalid AML bytecode. ACPICA BZ 970.

iASL: Fixed a generation issue on newer versions of Bison. Newer versions 
apparently automatically emit some of the necessary externals. This 
change 
handles these versions in order to eliminate generation warnings.

Disassembler: Added support to decode the DBG2 and CSRT ACPI tables.

Disassembler: Add support to decode _PLD buffers. The decoded buffer 
appears 
within comments in the output file.

Debugger: Fixed a regression with the "Threads" command where 
AE_BAD_PARAMETER was always returned.

----------------------------------------
11 July 2012. Summary of changes for version 20120711:

1) ACPICA Kernel-resident Subsystem:

Fixed a possible fault in the return package object repair code. Fixes a 
problem that can occur when a lone package object is wrapped with an 
outer 
package object in order to force conformance to the ACPI specification. 
Can 
affect these predefined names: _ALR, _MLS, _PSS, _TRT, _TSS, _PRT, _HPX, 
_DLM, 
_CSD, _PSD, _TSD.

Removed code to disable/enable bus master arbitration (ARB_DIS bit in the 
PM2_CNT register) in the ACPICA sleep/wake interfaces. Management of the 
ARB_DIS bit must be implemented in the host-dependent C3 processor power 
state 
support. Note, ARB_DIS is obsolete and only applies to older chipsets, 
both 
Intel and other vendors. (for Intel: ICH4-M and earlier)

This change removes the code to disable/enable bus master arbitration 
during 
suspend/resume. Use of the ARB_DIS bit in the optional PM2_CNT register 
causes 
resume problems on some machines. The change has been in use for over 
seven 
years within Linux.

Implemented two new external interfaces to support host-directed dynamic 
ACPI 
table load and unload. They are intended to simplify the host 
implementation 
of hot-plug support:
  AcpiLoadTable: Load an SSDT from a buffer into the namespace.
  AcpiUnloadParentTable: Unload an SSDT via a named object owned by the 
table.
See the ACPICA reference for additional details. Adds one new file, 
components/tables/tbxfload.c

Implemented and deployed two new interfaces for errors and warnings that 
are 
known to be caused by BIOS/firmware issues:
  AcpiBiosError: Prints "ACPI Firmware Error" message.
  AcpiBiosWarning: Prints "ACPI Firmware Warning" message.
Deployed these new interfaces in the ACPICA Table Manager code for ACPI 
table 
and FADT errors. Additional deployment to be completed as appropriate in 
the 
future. The associated conditional macros are ACPI_BIOS_ERROR and 
ACPI_BIOS_WARNING. See the ACPICA reference for additional details. 
ACPICA 
BZ 
843.

Implicit notify support: ensure that no memory allocation occurs within a 
critical region. This fix moves a memory allocation outside of the time 
that a 
spinlock is held. Fixes issues on systems that do not allow this 
behavior. 
Jung-uk Kim.

Split exception code utilities and tables into a new file, 
utilities/utexcep.c

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug 
version of the code includes the debug output trace mechanism and has a 
much 
larger code and data size.

  Previous Release:
    Non-Debug Version:  93.1K Code, 25.1K Data, 118.2K Total
    Debug Version:     172.9K Code, 73.6K Data, 246.5K Total
  Current Release:
    Non-Debug Version:  93.5K Code, 25.3K Data, 118.8K Total
    Debug Version:     173.7K Code, 74.0K Data, 247.7K Total


2) iASL Compiler/Disassembler and Tools:

iASL: Fixed a parser problem for hosts where EOF is defined as -1 instead 
of 
0. Jung-uk Kim.

Debugger: Enhanced the "tables" command to emit additional information 
about 
the current set of ACPI tables, including the owner ID and flags decode.

Debugger: Reimplemented the "unload" command to use the new 
AcpiUnloadParentTable external interface. This command was disable 
previously 
due to need for an unload interface.

AcpiHelp: Added a new option to decode ACPICA exception codes. The -e 
option 
will decode 16-bit hex status codes (ACPI_STATUS) to name strings.

----------------------------------------
20 June 2012. Summary of changes for version 20120620:


1) ACPICA Kernel-resident Subsystem:

Implemented support to expand the "implicit notify" feature to allow 
multiple 
devices to be notified by a single GPE. This feature automatically 
generates a 
runtime device notification in the absence of a BIOS-provided GPE control 
method (_Lxx/_Exx) or a host-installed handler for the GPE. Implicit 
notify is 
provided by ACPICA for Windows compatibility, and is a workaround for 
BIOS 
AML 
code errors. See the description of the AcpiSetupGpeForWake interface in 
the 
APCICA reference. Bob Moore, Rafael Wysocki. ACPICA BZ 918.

Changed some comments and internal function names to simplify and ensure 
correctness of the Linux code translation. No functional changes.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug 
version of the code includes the debug output trace mechanism and has a 
much 
larger code and data size.

  Previous Release:
    Non-Debug Version:  93.0K Code, 25.1K Data, 118.1K Total
    Debug Version:     172.7K Code, 73.6K Data, 246.3K Total
  Current Release:
    Non-Debug Version:  93.1K Code, 25.1K Data, 118.2K Total
    Debug Version:     172.9K Code, 73.6K Data, 246.5K Total


2) iASL Compiler/Disassembler and Tools:

Disassembler: Added support to emit short, commented descriptions for the 
ACPI 
predefined names in order to improve the readability of the disassembled 
output. ACPICA BZ 959. Changes include:
  1) Emit descriptions for all standard predefined names (_INI, _STA, 
_PRW, 
etc.)
  2) Emit generic descriptions for the special names (_Exx, _Qxx, etc.)
  3) Emit descriptions for the resource descriptor names (_MIN, _LEN, 
etc.)

AcpiSrc: Fixed several long-standing Linux code translation issues. 
Argument 
descriptions in function headers are now translated properly to lower 
case 
and 
underscores. ACPICA BZ 961. Also fixes translation problems such as 
these: 
(old -> new)
  i_aSL -> iASL
  00-7_f -> 00-7F
  16_k -> 16K
  local_fADT -> local_FADT
  execute_oSI -> execute_OSI

iASL: Fixed a problem where null bytes were inadvertently emitted into 
some 
listing files.

iASL: Added the existing debug options to the standard help screen. There 
are 
no longer two different help screens. ACPICA BZ 957.

AcpiHelp: Fixed some typos in the various predefined name descriptions. 
Also 
expand some of the descriptions where appropriate.

iASL: Fixed the -ot option (display compile times/statistics). Was not 
working 
properly for standard output; only worked for the debug file case.

----------------------------------------
18 May 2012. Summary of changes for version 20120518:


1) ACPICA Core Subsystem:

Added a new OSL interface, AcpiOsWaitEventsComplete. This interface is 
defined 
to block until asynchronous events such as notifies and GPEs have 
completed. 
Within ACPICA, it is only called before a notify or GPE handler is 
removed/uninstalled. It also may be useful for the host OS within related 
drivers such as the Embedded Controller driver. See the ACPICA reference 
for 
additional information. ACPICA BZ 868.

ACPI Tables: Added a new error message for a possible overflow failure 
during 
the conversion of FADT 32-bit legacy register addresses to internal 
common 
64-
bit GAS structure representation. The GAS has a one-byte "bit length" 
field, 
thus limiting the register length to 255 bits. ACPICA BZ 953.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug 
version of the code includes the debug output trace mechanism and has a 
much 
larger code and data size.

  Previous Release:
    Non-Debug Version:  92.9K Code, 25.0K Data, 117.9K Total
    Debug Version:     172.6K Code, 73.4K Data, 246.0K Total
  Current Release:
    Non-Debug Version:  93.0K Code, 25.1K Data, 118.1K Total
    Debug Version:     172.7K Code, 73.6K Data, 246.3K Total


2) iASL Compiler/Disassembler and Tools:

iASL: Added the ACPI 5.0 "PCC" keyword for use in the Register() ASL 
macro. 
This keyword was added late in the ACPI 5.0 release cycle and was not 
implemented until now.

Disassembler: Added support for Operation Region externals. Adds missing 
support for operation regions that are defined in another table, and 
referenced locally via a Field or BankField ASL operator. Now generates 
the 
correct External statement.

Disassembler: Several additional fixes for the External() statement 
generation 
related to some ASL operators. Also, order the External() statements 
alphabetically in the disassembler output. Fixes the External() 
generation 
for 
the Create* field, Alias, and Scope operators:
 1) Create* buffer field operators - fix type mismatch warning on 
disassembly
 2) Alias - implement missing External support
 3) Scope - fix to make sure all necessary externals are emitted.

iASL: Improved pathname support. For include files, merge the prefix 
pathname 
with the file pathname and eliminate unnecessary components. Convert 
backslashes in all pathnames to forward slashes, for readability. Include 
file 
pathname changes affect both #include and Include() type operators.

iASL/DTC/Preprocessor: Gracefully handle early EOF. Handle an EOF at the 
end 
of a valid line by inserting a newline and then returning the EOF during 
the 
next call to GetNextLine. Prevents the line from being ignored due to EOF 
condition.

iASL: Implemented some changes to enhance the IDE support (-vi option.) 
Error 
and Warning messages are now correctly recognized for both the source 
code 
browser and the global error and warning counts.

----------------------------------------
20 April 2012. Summary of changes for version 20120420:


1) ACPICA Core Subsystem:

Implemented support for multiple notify handlers. This change adds 
support 
to 
allow multiple system and device notify handlers on Device, Thermal Zone, 
and 
Processor objects. This can simplify the host OS notification 
implementation. 
Also re-worked and restructured the entire notify support code to 
simplify 
handler installation, handler removal, notify event queuing, and notify 
dispatch to handler(s). Note: there can still only be two global notify 
handlers - one for system notifies and one for device notifies. There are 
no 
changes to the existing handler install/remove interfaces. Lin Ming, Bob 
Moore, Rafael Wysocki.

Fixed a regression in the package repair code where the object reference 
count was calculated incorrectly. Regression was introduced in the commit 
"Support to add Package wrappers".

Fixed a couple possible memory leaks in the AML parser, in the error 
recovery 
path. Jesper Juhl, Lin Ming.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  92.9K Code, 25.0K Data, 117.9K Total
    Debug Version:     172.5K Code, 73.2K Data, 245.7K Total
  Current Release:
    Non-Debug Version:  92.9K Code, 25.0K Data, 117.9K Total
    Debug Version:     172.6K Code, 73.4K Data, 246.0K Total


2) iASL Compiler/Disassembler and Tools:

iASL: Fixed a problem with the resource descriptor support where the 
length 
of the StartDependentFn and StartDependentFnNoPrio descriptors were not 
included in cumulative descriptor offset, resulting in incorrect values 
for 
resource tags within resource descriptors appearing after a 
StartDependent* 
descriptor. Reported by Petr Vandrovec. ACPICA BZ 949.

iASL and Preprocessor: Implemented full support for the #line directive 
to 
correctly track original source file line numbers through the .i 
preprocessor 
output file - for error and warning messages.

iASL: Expand the allowable byte constants for address space IDs. 
Previously, 
the allowable range was 0x80-0xFF (user-defined spaces), now the range is 
0x0A-0xFF to allow for custom and new IDs without changing the compiler.

iASL: Add option to treat all warnings as errors (-we). ACPICA BZ 948.

iASL: Add option to completely disable the preprocessor (-Pn).

iASL: Now emit all error/warning messages to standard error (stderr) by 
default (instead of the previous stdout).

ASL Test Suite (ASLTS): Reduce iASL warnings due to use of Switch(). 
Update 
for resource descriptor offset fix above. Update/cleanup error output 
routines. Enable and send iASL errors/warnings to an error logfile 
(error.txt). Send all other iASL output to a logfile (compiler.txt). 
Fixed 
several extraneous "unrecognized operator" messages.

----------------------------------------
20 March 2012. Summary of changes for version 20120320:


1) ACPICA Core Subsystem:

Enhanced the sleep/wake interfaces to optionally execute the _GTS method 
(Going To Sleep) and the _BFS method (Back From Sleep). Windows 
apparently 
does not execute these methods, and therefore these methods are often 
untested. It has been seen on some systems where the execution of these 
methods causes errors and also prevents the machine from entering S5. It 
is 
therefore suggested that host operating systems do not execute these 
methods 
by default. In the future, perhaps these methods can be optionally 
executed 
based on the age of the system and/or what is the newest version of 
Windows 
that the BIOS asks for via _OSI. Changed interfaces: AcpiEnterSleepState 
and 
AcpileaveSleepStatePrep. See the ACPICA reference and Linux BZ 13041. Lin 
Ming.

Fixed a problem where the length of the local/common FADT was set too 
early. 
The local FADT table length cannot be set to the common length until the 
original length has been examined. There is code that checks the table 
length 
and sets various fields appropriately. This can affect older machines 
with 
early FADT versions. For example, this can cause inadvertent writes to 
the 
CST_CNT register. Julian Anastasov.

Fixed a mapping issue related to a physical table override. Use the 
deferred 
mapping mechanism for tables loaded via the physical override OSL 
interface. 
This allows for early mapping before the virtual memory manager is 
available. 
Thomas Renninger, Bob Moore.

Enhanced the automatic return-object repair code: Repair a common problem 
with 
predefined methods that are defined to return a variable-length Package 
of 
sub-objects. If there is only one sub-object, some BIOS ASL code 
mistakenly 
simply returns the single object instead of a Package with one sub-
object. 
This new support will repair this error by wrapping a Package object 
around 
the original object, creating the correct and expected Package with one 
sub-
object. Names that can be repaired in this manner include: _ALR, _CSD, 
_HPX, 
_MLS, _PLD, _PRT, _PSS, _TRT, _TSS, _BCL, _DOD, _FIX, and _Sx. ACPICA BZ 
939.

Changed the exception code returned for invalid ACPI paths passed as 
parameters to external interfaces such as AcpiEvaluateObject. Was 
AE_BAD_PARAMETER, now is the more sensible AE_BAD_PATHNAME.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug 
version of the code includes the debug output trace mechanism and has a 
much 
larger code and data size.

  Previous Release:
    Non-Debug Version:  93.0K Code, 25.0K Data, 118.0K Total
    Debug Version:     172.5K Code, 73.2K Data, 245.7K Total
  Current Release:
    Non-Debug Version:  92.9K Code, 25.0K Data, 117.9K Total
    Debug Version:     172.5K Code, 73.2K Data, 245.7K Total


2) iASL Compiler/Disassembler and Tools:

iASL: Added the infrastructure and initial implementation of a integrated 
C-
like preprocessor. This will simplify BIOS development process by 
eliminating 
the need for a separate preprocessing step during builds. On Windows, it 
also 
eliminates the need to install a separate C compiler. ACPICA BZ 761. Some 
features including full #define() macro support are still under 
development. 
These preprocessor directives are supported:
    #define
    #elif
    #else
    #endif
    #error
    #if
    #ifdef
    #ifndef
    #include
    #pragma message
    #undef
    #warning
In addition, these new command line options are supported:
    -D <symbol> Define symbol for preprocessor use
    -li         Create preprocessed output file (*.i)
    -P          Preprocess only and create preprocessor output file (*.i)

Table Compiler: Fixed a problem where the equals operator within an 
expression 
did not work properly.

Updated iASL to use the current versions of Bison/Flex. Updated the 
Windows 
project file to invoke these tools from the standard location. ACPICA BZ 
904. 
Versions supported:
    Flex for Windows:  V2.5.4
    Bison for Windows: V2.4.1

----------------------------------------
15 February 2012. Summary of changes for version 20120215:


1) ACPICA Core Subsystem:

There have been some major changes to the sleep/wake support code, as 
described below (a - e).

a) The AcpiLeaveSleepState has been split into two interfaces, similar to 
AcpiEnterSleepStatePrep and AcpiEnterSleepState. The new interface is 
AcpiLeaveSleepStatePrep. This allows the host to perform actions between 
the 
time the _BFS method is called and the _WAK method is called. NOTE: all 
hosts 
must update their wake/resume code or else sleep/wake will not work 
properly. 
Rafael Wysocki.

b) In AcpiLeaveSleepState, now enable all runtime GPEs before calling the 
_WAK 
method. Some machines require that the GPEs are enabled before the _WAK 
method 
is executed. Thomas Renninger.

c) In AcpiLeaveSleepState, now always clear the WAK_STS (wake status) 
bit. 
Some BIOS code assumes that WAK_STS will be cleared on resume and use it 
to 
determine whether the system is rebooting or resuming. Matthew Garrett.

d) Move the invocations of _GTS (Going To Sleep) and _BFS (Back From 
Sleep) to 
match the ACPI specification requirement. Rafael Wysocki.

e) Implemented full support for the ACPI 5.0 SleepStatus and SleepControl 
registers within the V5 FADT. This support adds two new files: 
hardware/hwesleep.c implements the support for the new registers. Moved 
all 
sleep/wake external interfaces to hardware/hwxfsleep.c.


Added a new OSL interface for ACPI table overrides, 
AcpiOsPhysicalTableOverride. This interface allows the host to override a 
table via a physical address, instead of the logical address required by 
AcpiOsTableOverride. This simplifies the host implementation. Initial 
implementation by Thomas Renninger. The ACPICA implementation creates a 
single 
shared function for table overrides that attempts both a logical and a 
physical override.

Expanded the OSL memory read/write interfaces to 64-bit data 
(AcpiOsReadMemory, AcpiOsWriteMemory.) This enables full 64-bit memory 
transfer support for GAS register structures passed to AcpiRead and 
AcpiWrite.

Implemented the ACPI_REDUCED_HARDWARE option to allow the creation of a 
custom 
build of ACPICA that supports only the ACPI 5.0 reduced hardware (SoC) 
model. 
See the ACPICA reference for details. ACPICA BZ 942. This option removes 
about 
10% of the code and 5% of the static data, and the following hardware 
ACPI 
features become unavailable:
    PM Event and Control registers
    SCI interrupt (and handler)
    Fixed Events
    General Purpose Events (GPEs)
    Global Lock
    ACPI PM timer
    FACS table (Waking vectors and Global Lock)

Updated the unix tarball directory structure to match the ACPICA git 
source 
tree. This ensures that the generic unix makefiles work properly (in 
generate/unix).  Also updated the Linux makefiles to match. ACPICA BZ 
867.

Updated the return value of the _REV predefined method to integer value 5 
to 
reflect ACPI 5.0 support.

Moved the external ACPI PM timer interface prototypes to the public 
acpixf.h 
file where they belong.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug 
version of the code includes the debug output trace mechanism and has a 
much 
larger code and data size.

  Previous Release:
    Non-Debug Version:  92.8K Code, 24.9K Data, 117.7K Total
    Debug Version:     171.7K Code, 72.9K Data, 244.5K Total
  Current Release:
    Non-Debug Version:  93.0K Code, 25.0K Data, 118.0K Total
    Debug Version:     172.5K Code, 73.2K Data, 245.7K Total


2) iASL Compiler/Disassembler and Tools:

Disassembler: Fixed a problem with the new ACPI 5.0 serial resource 
descriptors (I2C, SPI, UART) where the resource produce/consumer bit was 
incorrectly displayed.

AcpiHelp: Add display of ACPI/PNP device IDs that are defined in the ACPI 
specification.

----------------------------------------
11 January 2012. Summary of changes for version 20120111:


1) ACPICA Core Subsystem:

Implemented a new mechanism to allow host device drivers to check for 
address 
range conflicts with ACPI Operation Regions. Both SystemMemory and 
SystemIO 
address spaces are supported. A new external interface, 
AcpiCheckAddressRange, 
allows drivers to check an address range against the ACPI namespace. See 
the 
ACPICA reference for additional details. Adds one new file, 
utilities/utaddress.c. Lin Ming, Bob Moore.

Fixed several issues with the ACPI 5.0 FADT support: Add the sleep 
Control 
and 
Status registers, update the ACPI 5.0 flags, and update internal data 
structures to handle an FADT larger than 256 bytes. The size of the ACPI 
5.0 
FADT is 268 bytes.

Updated all ACPICA copyrights and signons to 2012. Added the 2012 
copyright to 
all module headers and signons, including the standard Linux header. This 
affects virtually every file in the ACPICA core subsystem, iASL compiler, 
and 
all ACPICA utilities.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug 
version of the code includes the debug output trace mechanism and has a 
much 
larger code and data size.

  Previous Release:
    Non-Debug Version:  92.3K Code, 24.9K Data, 117.2K Total
    Debug Version:     170.8K Code, 72.6K Data, 243.4K Total
  Current Release:
    Non-Debug Version:  92.8K Code, 24.9K Data, 117.7K Total
    Debug Version:     171.7K Code, 72.9K Data, 244.5K Total


2) iASL Compiler/Disassembler and Tools:

Disassembler: fixed a problem with the automatic resource tag generation 
support. Fixes a problem where the resource tags are inadvertently not 
constructed if the table being disassembled contains external references 
to 
control methods. Moved the actual construction of the tags to after the 
final 
namespace is constructed (after 2nd parse is invoked due to external 
control 
method references.) ACPICA BZ 941.

Table Compiler: Make all "generic" operators caseless. These are the 
operators 
like UINT8, String, etc. Making these caseless improves ease-of-use. 
ACPICA BZ 
934.

----------------------------------------
23 November 2011. Summary of changes for version 20111123:

0) ACPI 5.0 Support:

This release contains full support for the ACPI 5.0 specification, as 
summarized below.

Reduced Hardware Support:
-------------------------

This support allows for ACPI systems without the usual ACPI hardware. 
This 
support is enabled by a flag in the revision 5 FADT. If it is set, ACPICA 
will 
not attempt to initialize or use any of the usual ACPI hardware. Note, 
when 
this flag is set, all of the following ACPI hardware is assumed to be not 
present and is not initialized or accessed:

    General Purpose Events (GPEs)
    Fixed Events (PM1a/PM1b and PM Control)
    Power Management Timer and Console Buttons (power/sleep)
    Real-time Clock Alarm
    Global Lock
    System Control Interrupt (SCI)
    The FACS is assumed to be non-existent

ACPI Tables:
------------

All new tables and updates to existing tables are fully supported in the 
ACPICA headers (for use by device drivers), the disassembler, and the 
iASL 
Data Table Compiler. ACPI 5.0 defines these new tables:

    BGRT        /* Boot Graphics Resource Table */
    DRTM        /* Dynamic Root of Trust for Measurement table */
    FPDT        /* Firmware Performance Data Table */
    GTDT        /* Generic Timer Description Table */
    MPST        /* Memory Power State Table */
    PCCT        /* Platform Communications Channel Table */
    PMTT        /* Platform Memory Topology Table */
    RASF        /* RAS Feature table */

Operation Regions/SpaceIDs:
---------------------------

All new operation regions are fully supported by the iASL compiler, the 
disassembler, and the ACPICA runtime code (for dispatch to region 
handlers.) 
The new operation region Space IDs are:

    GeneralPurposeIo
    GenericSerialBus

Resource Descriptors:
---------------------

All new ASL resource descriptors are fully supported by the iASL 
compiler, 
the 
ASL/AML disassembler, and the ACPICA runtime Resource Manager code 
(including 
all new predefined resource tags). New descriptors are:

    FixedDma
    GpioIo
    GpioInt
    I2cSerialBus
    SpiSerialBus
    UartSerialBus

ASL/AML Operators, New and Modified:
------------------------------------

One new operator is added, the Connection operator, which is used to 
associate 
a GeneralPurposeIo or GenericSerialBus resource descriptor with 
individual 
field objects within an operation region. Several new protocols are 
associated 
with the AccessAs operator. All are fully supported by the iASL compiler, 
disassembler, and runtime ACPICA AML interpreter:

    Connection                      // Declare Field Connection 
attributes
    AccessAs: AttribBytes (n)           // Read/Write N-Bytes Protocol
    AccessAs: AttribRawBytes (n)        // Raw Read/Write N-Bytes 
Protocol
    AccessAs: AttribRawProcessBytes (n) // Raw Process Call Protocol
    RawDataBuffer                       // Data type for Vendor Data 
fields

Predefined ASL/AML Objects:
---------------------------

All new predefined objects/control-methods are supported by the iASL 
compiler 
and the ACPICA runtime validation/repair (arguments and return values.) 
New 
predefined names include the following:

Standard Predefined Names (Objects or Control Methods):
    _AEI, _CLS, _CPC, _CWS, _DEP,
    _DLM, _EVT, _GCP, _CRT, _GWS,
    _HRV, _PRE, _PSE, _SRT, _SUB.

Resource Tags (Names used to access individual fields within resource 
descriptors):
    _DBT, _DPL, _DRS, _END, _FLC,
    _IOR, _LIN, _MOD, _PAR, _PHA,
    _PIN, _PPI, _POL, _RXL, _SLV,
    _SPE, _STB, _TXL, _VEN.

ACPICA External Interfaces:
---------------------------

Several new interfaces have been defined for use by ACPI-related device 
drivers and other host OS services:

AcpiAcquireMutex and AcpiReleaseMutex: These interfaces allow the host OS 
to 
acquire and release AML mutexes that are defined in the DSDT/SSDT tables 
provided by the BIOS. They are intended to be used in conjunction with 
the 
ACPI 5.0 _DLM (Device Lock Method) in order to provide transaction-level 
mutual exclusion with the AML code/interpreter.

AcpiGetEventResources: Returns the (formatted) resource descriptors as 
defined 
by the ACPI 5.0 _AEI object (ACPI Event Information).  This object 
provides 
resource descriptors associated with hardware-reduced platform events, 
similar 
to the AcpiGetCurrentResources interface.

Operation Region Handlers: For General Purpose IO and Generic Serial Bus 
operation regions, information about the Connection() object and any 
optional 
length information is passed to the region handler within the Context 
parameter.

AcpiBufferToResource: This interface converts a raw AML buffer containing 
a 
resource template or resource descriptor to the ACPI_RESOURCE internal 
format 
suitable for use by device drivers. Can be used by an operation region 
handler 
to convert the Connection() buffer object into a ACPI_RESOURCE.

Miscellaneous/Tools/TestSuites: 
-------------------------------

Support for extended _HID names (Four alpha characters instead of three).
Support for ACPI 5.0 features in the AcpiExec and AcpiHelp utilities.
Support for ACPI 5.0 features in the ASLTS test suite.
Fully updated documentation (ACPICA and iASL reference documents.)

ACPI Table Definition Language:
-------------------------------

Support for this language was implemented and released as a subsystem of 
the 
iASL compiler in 2010. (See the iASL compiler User Guide.)


Non-ACPI 5.0 changes for this release:
--------------------------------------

1) ACPICA Core Subsystem:

Fix a problem with operation region declarations where a failure can 
occur 
if 
the region name and an argument that evaluates to an object (such as the 
region address) are in different namespace scopes. Lin Ming, ACPICA BZ 
937.

Do not abort an ACPI table load if an invalid space ID is found within. 
This 
will be caught later if the offending method is executed. ACPICA BZ 925.

Fixed an issue with the FFixedHW space ID where the ID was not always 
recognized properly (Both ACPICA and iASL). ACPICA BZ 926.

Fixed a problem with the 32-bit generation of the unix-specific OSL 
(osunixxf.c). Lin Ming, ACPICA BZ 936.

Several changes made to enable generation with the GCC 4.6 compiler. 
ACPICA BZ 
935.

New error messages: Unsupported I/O requests (not 8/16/32 bit), and 
Index/Bank 
field registers out-of-range.

2) iASL Compiler/Disassembler and Tools:

iASL: Implemented the __PATH__ operator, which returns the full pathname 
of 
the current source file.

AcpiHelp: Automatically display expanded keyword information for all ASL 
operators.

Debugger: Add "Template" command to disassemble/dump resource template 
buffers.

Added a new master script to generate and execute the ASLTS test suite. 
Automatically handles 32- and 64-bit generation. See tests/aslts.sh

iASL: Fix problem with listing generation during processing of the 
Switch() 
operator where AML listing was disabled until the entire Switch block was 
completed.

iASL: Improve support for semicolon statement terminators. Fix "invalid 
character" message for some cases when the semicolon is used. Semicolons 
are 
now allowed after every <Term> grammar element. ACPICA BZ 927.

iASL: Fixed some possible aliasing warnings during generation. ACPICA BZ 
923.

Disassembler: Fix problem with disassembly of the DataTableRegion 
operator 
where an inadvertent "Unhandled deferred opcode" message could be 
generated.

3) Example Code and Data Size

These are the sizes for the OS-independent acpica.lib produced by the 
Microsoft Visual C++ 9.0 32-bit compiler. The debug version of the code 
includes the debug output trace mechanism and has a much larger code and 
data 
size.

  Previous Release:
    Non-Debug Version:  90.2K Code, 23.9K Data, 114.1K Total
    Debug Version:     165.6K Code, 68.4K Data, 234.0K Total
  Current Release:
    Non-Debug Version:  92.3K Code, 24.9K Data, 117.2K Total
    Debug Version:     170.8K Code, 72.6K Data, 243.4K Total

----------------------------------------
22 September 2011. Summary of changes for version 20110922:

0) ACPI 5.0 News:

Support for ACPI 5.0 in ACPICA has been underway for several months and 
will 
be released at the same time that ACPI 5.0 is officially released.

The ACPI 5.0 specification is on track for release in the next few 
months.
 
1) ACPICA Core Subsystem:

Fixed a problem where the maximum sleep time for the Sleep() operator was 
intended to be limited to two seconds, but was inadvertently limited to 
20 
seconds instead.

Linux and Unix makefiles: Added header file dependencies to ensure 
correct 
generation of ACPICA core code and utilities. Also simplified the 
makefiles 
considerably through the use of the vpath variable to specify search 
paths. 
ACPICA BZ 924.

2) iASL Compiler/Disassembler and Tools:

iASL: Implemented support to check the access length for all fields 
created to 
access named Resource Descriptor fields. For example, if a resource field 
is 
defined to be two bits, a warning is issued if a CreateXxxxField() is 
used 
with an incorrect bit length. This is implemented for all current 
resource 
descriptor names. ACPICA BZ 930.
  
Disassembler: Fixed a byte ordering problem with the output of 24-bit and 
56-
bit integers.

iASL: Fixed a couple of issues associated with variable-length package 
objects. 1) properly handle constants like One, Ones, Zero -- do not make 
a 
VAR_PACKAGE when these are used as a package length. 2) Allow the 
VAR_PACKAGE 
opcode (in addition to PACKAGE) when validating object types for 
predefined 
names.

iASL: Emit statistics for all output files (instead of just the ASL input 
and 
AML output). Includes listings, hex files, etc.

iASL: Added -G option to the table compiler to allow the compilation of 
custom 
ACPI tables. The only part of a table that is required is the standard 
36-
byte 
ACPI header.

AcpiXtract: Ported to the standard ACPICA environment (with ACPICA 
headers), 
which also adds correct 64-bit support. Also, now all output filenames 
are 
completely lower case.

AcpiExec: Ignore any non-AML tables (tables other than DSDT or SSDT) when 
loading table files. A warning is issued for any such tables. The only 
exception is an FADT. This also fixes a possible fault when attempting to 
load 
non-AML tables. ACPICA BZ 932.

AcpiHelp: Added the AccessAs and Offset operators. Fixed a problem where 
a 
missing table terminator could cause a fault when using the -p option.

AcpiSrc: Fixed a possible divide-by-zero fault when generating file 
statistics.

3) Example Code and Data Size

These are the sizes for the OS-independent acpica.lib produced by the 
Microsoft Visual C++ 9.0 32-bit compiler. The debug version of the code 
includes the debug output trace mechanism and has a much larger code and 
data 
size.

  Previous Release (VC 9.0):
    Non-Debug Version:  90.2K Code, 23.9K Data, 114.1K Total
    Debug Version:     165.6K Code, 68.4K Data, 234.0K Total
  Current Release (VC 9.0):
    Non-Debug Version:  90.2K Code, 23.9K Data, 114.1K Total
    Debug Version:     165.6K Code, 68.4K Data, 234.0K Total


----------------------------------------
23 June 2011. Summary of changes for version 20110623:

1) ACPI CA Core Subsystem:

Updated the predefined name repair mechanism to not attempt repair of a 
_TSS 
return object if a _PSS object is present. We can only sort the _TSS 
return 
package if there is no _PSS within the same scope. This is because if 
_PSS 
is 
present, the ACPI specification dictates that the _TSS Power Dissipation 
field 
is to be ignored, and therefore some BIOSs leave garbage values in the 
_TSS 
Power field(s). In this case, it is best to just return the _TSS package 
as-
is. Reported by, and fixed with assistance from Fenghua Yu.

Added an option to globally disable the control method return value 
validation 
and repair. This runtime option can be used to disable return value 
repair 
if 
this is causing a problem on a particular machine. Also added an option 
to 
AcpiExec (-dr) to set this disable flag.

All makefiles and project files: Major changes to improve generation of 
ACPICA 
tools. ACPICA BZ 912:
    Reduce default optimization levels to improve compatibility
    For Linux, add strict-aliasing=0 for gcc 4
    Cleanup and simplify use of command line defines
    Cleanup multithread library support
    Improve usage messages

Linux-specific header: update handling of THREAD_ID and pthread. For the 
32-
bit case, improve casting to eliminate possible warnings, especially with 
the 
acpica tools.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug 
version of the code includes the debug output trace mechanism and has a 
much 
larger code and data size.

  Previous Release (VC 9.0):
    Non-Debug Version:  90.1K Code, 23.9K Data, 114.0K Total
    Debug Version:     165.6K Code, 68.4K Data, 234.0K Total
  Current Release (VC 9.0):
    Non-Debug Version:  90.2K Code, 23.9K Data, 114.1K Total
    Debug Version:     165.6K Code, 68.4K Data, 234.0K Total

2) iASL Compiler/Disassembler and Tools:

With this release, a new utility named "acpihelp" has been added to the 
ACPICA 
package. This utility summarizes the ACPI specification chapters for the 
ASL 
and AML languages. It generates under Linux/Unix as well as Windows, and 
provides the following functionality:
    Find/display ASL operator(s) -- with description and syntax.
    Find/display ASL keyword(s) -- with exact spelling and descriptions.
    Find/display ACPI predefined name(s) -- with description, number
        of arguments, and the return value data type.
    Find/display AML opcode name(s) -- with opcode, arguments, and 
grammar.
    Decode/display AML opcode -- with opcode name, arguments, and 
grammar.

Service Layers: Make multi-thread support configurable. Conditionally 
compile 
the multi-thread support so that threading libraries will not be linked 
if 
not 
necessary. The only tool that requires multi-thread support is AcpiExec.

iASL: Update yyerrror/AslCompilerError for "const" errors. Newer versions 
of 
Bison appear to want the interface to yyerror to be a const char * (or at 
least this is a problem when generating iASL on some systems.) ACPICA BZ 
923 
Pierre Lejeune.

Tools: Fix for systems where O_BINARY is not defined. Only used for 
Windows 
versions of the tools.

----------------------------------------
27 May 2011. Summary of changes for version 20110527:

1) ACPI CA Core Subsystem:

ASL Load() operator: Reinstate most restrictions on the incoming ACPI 
table 
signature. Now, only allow SSDT, OEMx, and a null signature. History:
    1) Originally, we checked the table signature for "SSDT" or "PSDT".
       (PSDT is now obsolete.)
    2) We added support for OEMx tables, signature "OEM" plus a fourth
       "don't care" character.
    3) Valid tables were encountered with a null signature, so we just
       gave up on validating the signature, (05/2008).
    4) We encountered non-AML tables such as the MADT, which caused
       interpreter errors and kernel faults. So now, we once again allow
       only SSDT, OEMx, and now, also a null signature. (05/2011).

Added the missing _TDL predefined name to the global name list in order 
to 
enable validation. Affects both the core ACPICA code and the iASL 
compiler.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug 
version of the code includes the debug output trace mechanism and has a 
much 
larger code and data size.

  Previous Release (VC 9.0):
    Non-Debug Version:  90.0K Code, 23.8K Data, 113.8K Total
    Debug Version:     164.5K Code, 68.0K Data, 232.5K Total
  Current Release (VC 9.0):
    Non-Debug Version:  90.1K Code, 23.9K Data, 114.0K Total
    Debug Version:     165.6K Code, 68.4K Data, 234.0K Total

2) iASL Compiler/Disassembler and Tools:

Debugger/AcpiExec: Implemented support for "complex" method arguments on 
the 
debugger command line. This adds support beyond simple integers -- 
including 
Strings, Buffers, and Packages. Includes support for nested packages. 
Increased the default command line buffer size to accommodate these 
arguments. 
See the ACPICA reference for details and syntax. ACPICA BZ 917.
 
Debugger/AcpiExec: Implemented support for "default" method arguments for 
the 
Execute/Debug command. Now, the debugger will always invoke a control 
method 
with the required number of arguments -- even if the command line 
specifies 
none or insufficient arguments. It uses default integer values for any 
missing 
arguments. Also fixes a bug where only six method arguments maximum were 
supported instead of the required seven.

Debugger/AcpiExec: Add a maximum buffer length parameter to AcpiOsGetLine 
and 
also return status in order to prevent buffer overruns. See the ACPICA 
reference for details and syntax. ACPICA BZ 921

iASL: Cleaned up support for Berkeley yacc. A general cleanup of code and 
makefiles to simplify support for the two different but similar parser 
generators, bison and yacc.

Updated the generic unix makefile for gcc 4. The default gcc version is 
now 
expected to be 4 or greater, since options specific to gcc 4 are used.

----------------------------------------
13 April 2011. Summary of changes for version 20110413:

1) ACPI CA Core Subsystem:

Implemented support to execute a so-called "orphan" _REG method under the 
EC 
device. This change will force the execution of a _REG method underneath 
the 
EC 
device even if there is no corresponding operation region of type 
EmbeddedControl. Fixes a problem seen on some machines and apparently is 
compatible with Windows behavior. ACPICA BZ 875.

Added more predefined methods that are eligible for automatic NULL 
package 
element removal. This change adds another group of predefined names to 
the 
list 
of names that can be repaired by having NULL package elements dynamically 
removed. This group are those methods that return a single variable-
length 
package containing simple data types such as integers, buffers, strings. 
This 
includes: _ALx, _BCL, _CID,_ DOD, _EDL, _FIX, _PCL, _PLD, _PMD, _PRx, 
_PSL, 
_Sx, 
and _TZD. ACPICA BZ 914.

Split and segregated all internal global lock functions to a new file, 
evglock.c.

Updated internal address SpaceID for DataTable regions. Moved this 
internal 
space 
id in preparation for ACPI 5.0 changes that will include some new space 
IDs. 
This 
change should not affect user/host code.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib 
produced by the Microsoft Visual C++ 9.0 32-bit compiler. The debug 
version of 
the code includes the debug output trace mechanism and has a much larger 
code 
and 
data size.

  Previous Release (VC 9.0):
    Non-Debug Version:  89.8K Code, 23.8K Data, 113.6K Total
    Debug Version:     164.2K Code, 67.9K Data, 232.1K Total
  Current Release (VC 9.0):
    Non-Debug Version:  90.0K Code, 23.8K Data, 113.8K Total
    Debug Version:     164.5K Code, 68.0K Data, 232.5K Total

2) iASL Compiler/Disassembler and Tools:

iASL/DTC: Major update for new grammar features. Allow generic data types 
in 
custom ACPI tables. Field names are now optional. Any line can be split 
to 
multiple lines using the continuation char (\). Large buffers now use 
line-
continuation character(s) and no colon on the continuation lines. See the 
grammar 
update in the iASL compiler reference. ACPI BZ 910,911. Lin Ming, Bob 
Moore.

iASL: Mark ASL "Return()" and the simple "Return" as "Null" return 
statements. 
Since the parser stuffs a "zero" as the return value for these statements 
(due 
to 
the underlying AML grammar), they were seen as "return with value" by the 
iASL 
semantic checking. They are now seen correctly as "null" return 
statements.

iASL: Check if a_REG declaration has a corresponding Operation Region. 
Adds a 
check for each _REG to ensure that there is in fact a corresponding 
operation 
region declaration in the same scope. If not, the _REG method is not very 
useful 
since it probably won't be executed. ACPICA BZ 915.

iASL/DTC: Finish support for expression evaluation. Added a new 
expression 
parser 
that implements c-style operator precedence and parenthesization. ACPICA 
bugzilla 
908.

Disassembler/DTC: Remove support for () and <> style comments in data 
tables. 
Now 
that DTC has full expression support, we don't want to have comment 
strings 
that 
start with a parentheses or a less-than symbol. Now, only the standard /* 
and 
// 
comments are supported, as well as the bracket [] comments.

AcpiXtract: Fix for RSDP and dynamic SSDT extraction. These tables have 
"unusual" 
headers in the acpidump file. Update the header validation to support 
these 
tables. Problem introduced in previous AcpiXtract version in the change 
to 
support "wrong checksum" error messages emitted by acpidump utility.

iASL: Add a * option to generate all template files (as a synonym for 
ALL) 
as 
in 
"iasl -T *" or "iasl -T ALL".

iASL/DTC: Do not abort compiler on fatal errors. We do not want to 
completely 
abort the compiler on "fatal" errors, simply should abort the current 
compile. 
This allows multiple compiles with a single (possibly wildcard) compiler 
invocation.

----------------------------------------
16 March 2011. Summary of changes for version 20110316:

1) ACPI CA Core Subsystem:

Fixed a problem caused by a _PRW method appearing at the namespace root 
scope 
during the setup of wake GPEs. A fault could occur if a _PRW directly 
under 
the 
root object was passed to the AcpiSetupGpeForWake interface. Lin Ming.

Implemented support for "spurious" Global Lock interrupts. On some 
systems, a 
global lock interrupt can occur without the pending flag being set. Upon 
a 
GL 
interrupt, we now ensure that a thread is actually waiting for the lock 
before 
signaling GL availability. Rafael Wysocki, Bob Moore.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib 
produced by the Microsoft Visual C++ 9.0 32-bit compiler. The debug 
version of 
the code includes the debug output trace mechanism and has a much larger 
code 
and 
data size.

  Previous Release (VC 9.0):
    Non-Debug Version:  89.7K Code, 23.7K Data, 113.4K Total
    Debug Version:     163.9K Code, 67.5K Data, 231.4K Total
  Current Release (VC 9.0):
    Non-Debug Version:  89.8K Code, 23.8K Data, 113.6K Total
    Debug Version:     164.2K Code, 67.9K Data, 232.1K Total

2) iASL Compiler/Disassembler and Tools:

Implemented full support for the "SLIC" ACPI table. Includes support in 
the 
header files, disassembler, table compiler, and template generator. Bob 
Moore, 
Lin Ming.

AcpiXtract: Correctly handle embedded comments and messages from 
AcpiDump. 
Apparently some or all versions of acpidump will occasionally emit a 
comment 
like 
"Wrong checksum", etc., into the dump file. This was causing problems for 
AcpiXtract. ACPICA BZ 905.

iASL: Fix the Linux makefile by removing an inadvertent double file 
inclusion. 
ACPICA BZ 913.

AcpiExec: Update installation of operation region handlers. Install one 
handler 
for a user-defined address space. This is used by the ASL test suite 
(ASLTS).

----------------------------------------
11 February 2011. Summary of changes for version 20110211:

1) ACPI CA Core Subsystem:

Added a mechanism to defer _REG methods for some early-installed 
handlers. 
Most user handlers should be installed before call to 
AcpiEnableSubsystem. 
However, Event handlers and region handlers should be installed after 
AcpiInitializeObjects. Override handlers for the "default" regions should 
be 
installed early, however. This change executes all _REG methods for the 
default regions (Memory/IO/PCI/DataTable) simultaneously to prevent any 
chicken/egg issues between them. ACPICA BZ 848.

Implemented an optimization for GPE detection. This optimization will 
simply 
ignore GPE registers that contain no enabled GPEs -- there is no need to 
read the register since this information is available internally. This 
becomes more important on machines with a large GPE space. ACPICA 
bugzilla 
884. Lin Ming. Suggestion from Joe Liu.

Removed all use of the highly unreliable FADT revision field. The 
revision 
number in the FADT has been found to be completely unreliable and cannot 
be 
trusted. Only the actual table length can be used to infer the version. 
This 
change updates the ACPICA core and the disassembler so that both no 
longer 
even look at the FADT version and instead depend solely upon the FADT 
length.

Fix an unresolved name issue for the no-debug and no-error-message source 
generation cases. The _AcpiModuleName was left undefined in these cases, 
but 
it is actually needed as a parameter to some interfaces. Define 
_AcpiModuleName as a null string in these cases. ACPICA Bugzilla 888.

Split several large files (makefiles and project files updated)
  utglobal.c   -> utdecode.c
  dbcomds.c    -> dbmethod.c dbnames.c
  dsopcode.c   -> dsargs.c dscontrol.c
  dsload.c     -> dsload2.c
  aslanalyze.c -> aslbtypes.c aslwalks.c

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release (VC 9.0):
    Non-Debug Version:  89.7K Code, 23.7K Data, 113.4K Total
    Debug Version:     163.9K Code, 67.5K Data, 231.4K Total
  Current Release (VC 9.0):
    Non-Debug Version:  89.7K Code, 23.7K Data, 113.4K Total
    Debug Version:     163.9K Code, 67.5K Data, 231.4K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Implemented the predefined macros __LINE__, __FILE__, and __DATE__. 
These are useful C-style macros with the standard definitions. ACPICA 
bugzilla 898.

iASL/DTC: Added support for integer expressions and labels. Support for 
full 
expressions for all integer fields in all ACPI tables. Support for labels 
in 
"generic" portions of tables such as UEFI. See the iASL reference manual.

Debugger: Added a command to display the status of global handlers. The 
"handlers" command will display op region, fixed event, and miscellaneous 
global handlers. installation status -- and for op regions, whether 
default 
or user-installed handler will be used.

iASL: Warn if reserved method incorrectly returns a value. Many 
predefined 
names are defined such that they do not return a value. If implemented as 
a 
method, issue a warning if such a name explicitly returns a value. ACPICA 
Bugzilla 855.

iASL: Added detection of GPE method name conflicts. Detects a conflict 
where 
there are two GPE methods of the form _Lxy and _Exy in the same scope. 
(For 
example, _L1D and _E1D in the same scope.) ACPICA bugzilla 848.

iASL/DTC: Fixed a couple input scanner issues with comments and line 
numbers. Comment remover could get confused and miss a comment ending. 
Fixed 
a problem with line counter maintenance.

iASL/DTC: Reduced the severity of some errors from fatal to error. There 
is 
no need to abort on simple errors within a field definition.

Debugger: Simplified the output of the help command. All help output now 
in 
a single screen, instead of help subcommands. ACPICA Bugzilla 897.

----------------------------------------
12 January 2011. Summary of changes for version 20110112:

1) ACPI CA Core Subsystem:

Fixed a race condition between method execution and namespace walks that 
can 
possibly cause a fault. The problem was apparently introduced in version 
20100528 as a result of a performance optimization that reduces the 
number 
of 
namespace walks upon method exit by using the delete_namespace_subtree 
function instead of the delete_namespace_by_owner function used 
previously. 
Bug is a missing namespace lock in the delete_namespace_subtree function. 
dana.myers@oracle.com

Fixed several issues and a possible fault with the automatic "serialized" 
method support. History: This support changes a method to "serialized" on 
the 
fly if the method generates an AE_ALREADY_EXISTS error, indicating the 
possibility that it cannot handle reentrancy. This fix repairs a couple 
of 
issues seen in the field, especially on machines with many cores:

    1) Delete method children only upon the exit of the last thread,
       so as to not delete objects out from under other running threads
      (and possibly causing a fault.)
    2) Set the "serialized" bit for the method only upon the exit of the
       Last thread, so as to not cause deadlock when running threads
       attempt to exit.
    3) Cleanup the use of the AML "MethodFlags" and internal method flags
       so that there is no longer any confusion between the two.

    Lin Ming, Bob Moore. Reported by dana.myers@oracle.com.

Debugger: Now lock the namespace for duration of a namespace dump. 
Prevents 
issues if the namespace is changing dynamically underneath the debugger. 
Especially affects temporary namespace nodes, since the debugger displays 
these also.

Updated the ordering of include files. The ACPICA headers should appear 
before any compiler-specific headers (stdio.h, etc.) so that acenv.h can 
set 
any necessary compiler-specific defines, etc. Affects the ACPI-related 
tools 
and utilities.

Updated all ACPICA copyrights and signons to 2011. Added the 2011 
copyright 
to all module headers and signons, including the Linux header. This 
affects 
virtually every file in the ACPICA core subsystem, iASL compiler, and all 
utilities.

Added project files for MS Visual Studio 2008 (VC++ 9.0). The original 
project files for VC++ 6.0 are now obsolete. New project files can be 
found 
under acpica/generate/msvc9. See acpica/generate/msvc9/readme.txt for 
details.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release (VC 6.0):
    Non-Debug Version:  89.8K Code, 18.9K Data, 108.7K Total
    Debug Version:     166.6K Code, 52.1K Data, 218.7K Total
  Current Release (VC 9.0):
    Non-Debug Version:  89.7K Code, 23.7K Data, 113.4K Total
    Debug Version:     163.9K Code, 67.5K Data, 231.4K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Added generic data types to the Data Table compiler. Add "generic" 
data 
types such as UINT32, String, Unicode, etc., to simplify the generation 
of 
platform-defined tables such as UEFI. Lin Ming.

iASL: Added listing support for the Data Table Compiler. Adds listing 
support 
(-l) to display actual binary output for each line of input code.

----------------------------------------
09 December 2010. Summary of changes for version 20101209:

1) ACPI CA Core Subsystem:

Completed the major overhaul of the GPE support code that was begun in 
July 
2010. Major features include: removal of _PRW execution in ACPICA (host 
executes _PRWs anyway), cleanup of "wake" GPE interfaces and processing, 
changes to existing interfaces, simplification of GPE handler operation, 
and 
a handful of new interfaces:

    AcpiUpdateAllGpes
    AcpiFinishGpe
    AcpiSetupGpeForWake
    AcpiSetGpeWakeMask
    One new file, evxfgpe.c to consolidate all external GPE interfaces.

See the ACPICA Programmer Reference for full details and programming 
information. See the new section 4.4 "General Purpose Event (GPE) 
Support" 
for a full overview, and section 8.7 "ACPI General Purpose Event 
Management" 
for programming details. ACPICA BZ 858,870,877. Matthew Garrett, Lin 
Ming, 
Bob Moore, Rafael Wysocki.

Implemented a new GPE feature for Windows compatibility, the "Implicit 
Wake 
GPE Notify". This feature will automatically issue a Notify(2) on a 
device 
when a Wake GPE is received if there is no corresponding GPE method or 
handler. ACPICA BZ 870.

Fixed a problem with the Scope() operator during table parse and load 
phase. 
During load phase (table load or method execution), the scope operator 
should 
not enter the target into the namespace. Instead, it should open a new 
scope 
at the target location. Linux BZ 19462, ACPICA BZ 882.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  89.8K Code, 18.9K Data, 108.7K Total
    Debug Version:     166.6K Code, 52.1K Data, 218.7K Total
  Current Release:
    Non-Debug Version:  89.9K Code, 19.0K Data, 108.9K Total
    Debug Version:     166.3K Code, 52.1K Data, 218.4K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Relax the alphanumeric restriction on _CID strings. These strings 
are 
"bus-specific" per the ACPI specification, and therefore any characters 
are 
acceptable. The only checks that can be performed are for a null string 
and 
perhaps for a leading asterisk. ACPICA BZ 886.

iASL: Fixed a problem where a syntax error that caused a premature EOF 
condition on the source file emitted a very confusing error message. The 
premature EOF is now detected correctly. ACPICA BZ 891.

Disassembler: Decode the AccessSize within a Generic Address Structure 
(byte 
access, word access, etc.) Note, this field does not allow arbitrary bit 
access, the size is encoded as 1=byte, 2=word, 3=dword, and 4=qword.

New: AcpiNames utility - Example namespace dump utility. Shows an example 
of 
ACPICA configuration for a minimal namespace dump utility. Uses table and 
namespace managers, but no AML interpreter. Does not add any 
functionality 
over AcpiExec, it is a subset of AcpiExec. The purpose is to show how to 
partition and configure ACPICA. ACPICA BZ 883.

AML Debugger: Increased the debugger buffer size for method return 
objects. 
Was 4K, increased to 16K. Also enhanced error messages for debugger 
method 
execution, including the buffer overflow case.

----------------------------------------
13 October 2010. Summary of changes for version 20101013:

1) ACPI CA Core Subsystem:

Added support to clear the PCIEXP_WAKE event. When clearing ACPI events, 
now 
clear the PCIEXP_WAKE_STS bit in the ACPI PM1 Status Register, via 
HwClearAcpiStatus. Original change from Colin King. ACPICA BZ 880.

Changed the type of the predefined namespace object _TZ from ThermalZone 
to 
Device. This was found to be confusing to the host software that 
processes 
the various thermal zones, since _TZ is not really a ThermalZone. 
However, 
a 
Notify() can still be performed on it. ACPICA BZ 876. Suggestion from Rui 
Zhang.

Added Windows Vista SP2 to the list of supported _OSI strings. The actual 
string is "Windows 2006 SP2".

Eliminated duplicate code in AcpiUtExecute* functions. Now that the 
nsrepair 
code automatically repairs _HID-related strings, this type of code is no 
longer needed in Execute_HID, Execute_CID, and Execute_UID. ACPICA BZ 
878.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  89.9K Code, 19.0K Data, 108.9K Total
    Debug Version:     166.3K Code, 52.1K Data, 218.4K Total
  Current Release:
    Non-Debug Version:  89.9K Code, 19.0K Data, 108.9K Total
    Debug Version:     166.3K Code, 52.1K Data, 218.4K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Implemented additional compile-time validation for _HID strings. 
The 
non-hex prefix (such as "PNP" or "ACPI") must be uppercase, and the 
length 
of 
the string must be exactly seven or eight characters. For both _HID and 
_CID 
strings, all characters must be alphanumeric. ACPICA BZ 874.

iASL: Allow certain "null" resource descriptors. Some BIOS code creates 
descriptors that are mostly or all zeros, with the expectation that they 
will 
be filled in at runtime. iASL now allows this as long as there is a 
"resource 
tag" (name) associated with the descriptor, which gives the ASL a handle 
needed to modify the descriptor. ACPICA BZ 873.

Added single-thread support to the generic Unix application OSL. 
Primarily 
for iASL support, this change removes the use of semaphores in the 
single-
threaded ACPICA tools/applications - increasing performance. The 
_MULTI_THREADED option was replaced by the (reverse) ACPI_SINGLE_THREADED 
option. ACPICA BZ 879.

AcpiExec: several fixes for the 64-bit version. Adds XSDT support and 
support 
for 64-bit DSDT/FACS addresses in the FADT. Lin Ming.

iASL: Moved all compiler messages to a new file, aslmessages.h.

----------------------------------------
15 September 2010. Summary of changes for version 20100915:

1) ACPI CA Core Subsystem:

Removed the AcpiOsDerivePciId OSL interface. The various host 
implementations 
of this function were not OS-dependent and are now obsolete and can be 
removed from all host OSLs. This function has been replaced by 
AcpiHwDerivePciId, which is now part of the ACPICA core code. 
AcpiHwDerivePciId has been implemented without recursion. Adds one new 
module, hwpci.c. ACPICA BZ 857.

Implemented a dynamic repair for _HID and _CID strings. The following 
problems are now repaired at runtime: 1) Remove a leading asterisk in the 
string, and 2) the entire string is uppercased. Both repairs are in 
accordance with the ACPI specification and will simplify host driver 
code. 
ACPICA BZ 871.

The ACPI_THREAD_ID type is no longer configurable, internally it is now 
always UINT64. This simplifies the ACPICA code, especially any printf 
output. 
UINT64 is the only common data type for all thread_id types across all 
operating systems. It is now up to the host OSL to cast the native 
thread_id 
type to UINT64 before returning the value to ACPICA (via 
AcpiOsGetThreadId). 
Lin Ming, Bob Moore.

Added the ACPI_INLINE type to enhance the ACPICA configuration. The 
"inline" 
keyword is not standard across compilers, and this type allows inline to 
be 
configured on a per-compiler basis. Lin Ming.

Made the system global AcpiGbl_SystemAwakeAndRunning publically 
available. 
Added an extern for this boolean in acpixf.h. Some hosts utilize this 
value 
during suspend/restore operations. ACPICA BZ 869.

All code that implements error/warning messages with the "ACPI:" prefix 
has 
been moved to a new module, utxferror.c.

The UINT64_OVERLAY was moved to utmath.c, which is the only module where 
it 
is used. ACPICA BZ 829. Lin Ming, Bob Moore.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  89.1K Code, 19.0K Data, 108.1K Total
    Debug Version:     165.1K Code, 51.9K Data, 217.0K Total
  Current Release:
    Non-Debug Version:  89.9K Code, 19.0K Data, 108.9K Total
    Debug Version:     166.3K Code, 52.1K Data, 218.4K Total

2) iASL Compiler/Disassembler and Tools:

iASL/Disassembler: Write ACPI errors to stderr instead of the output 
file. 
This keeps the output files free of random error messages that may 
originate 
from within the namespace/interpreter code. Used this opportunity to 
merge 
all ACPI:-style messages into a single new module, utxferror.c. ACPICA BZ 
866. Lin Ming, Bob Moore.

Tools: update some printfs for ansi warnings on size_t. Handle width 
change 
of size_t on 32-bit versus 64-bit generations. Lin Ming.

----------------------------------------
06 August 2010. Summary of changes for version 20100806:

1) ACPI CA Core Subsystem:

Designed and implemented a new host interface to the _OSI support code. 
This 
will allow the host to dynamically add or remove multiple _OSI strings, 
as 
well as install an optional handler that is called for each _OSI 
invocation. 
Also added a new AML debugger command, 'osi' to display and modify the 
global 
_OSI string table, and test support in the AcpiExec utility. See the 
ACPICA 
reference manual for full details. Lin Ming, Bob Moore. ACPICA BZ 836.
New Functions:
    AcpiInstallInterface - Add an _OSI string.
    AcpiRemoveInterface - Delete an _OSI string.
    AcpiInstallInterfaceHandler - Install optional _OSI handler.
Obsolete Functions:
    AcpiOsValidateInterface - no longer used.
New Files:
    source/components/utilities/utosi.c

Re-introduced the support to enable multi-byte transfers for Embedded 
Controller (EC) operation regions. A reported problem was found to be a 
bug 
in the host OS, not in the multi-byte support. Previously, the maximum 
data 
size passed to the EC operation region handler was a single byte. There 
are 
often EC Fields larger than one byte that need to be transferred, and it 
is 
useful for the EC driver to lock these as a single transaction. This 
change 
enables single transfers larger than 8 bits. This effectively changes the 
access to the EC space from ByteAcc to AnyAcc, and will probably require 
changes to the host OS Embedded Controller driver to enable 16/32/64/256-
bit 
transfers in addition to 8-bit transfers. Alexey Starikovskiy, Lin Ming.

Fixed a problem with the prototype for AcpiOsReadPciConfiguration. The 
prototype in acpiosxf.h had the output value pointer as a (void *).
It should be a (UINT64 *). This may affect some host OSL code.

Fixed a couple problems with the recently modified Linux makefiles for 
iASL 
and AcpiExec. These new makefiles place the generated object files in the 
local directory so that there can be no collisions between the files that 
are 
shared between them that are compiled with different options.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  88.3K Code, 18.8K Data, 107.1K Total
    Debug Version:     164.0K Code, 51.5K Data, 215.5K Total
  Current Release:
    Non-Debug Version:  89.1K Code, 19.0K Data, 108.1K Total
    Debug Version:     165.1K Code, 51.9K Data, 217.0K Total

2) iASL Compiler/Disassembler and Tools:

iASL/Disassembler: Added a new option (-da, "disassemble all") to load 
the 
namespace from and disassemble an entire group of AML files. Useful for 
loading all of the AML tables for a given machine (DSDT, SSDT1...SSDTn) 
and 
disassembling with one simple command. ACPICA BZ 865. Lin Ming.

iASL: Allow multiple invocations of -e option. This change allows 
multiple 
uses of -e on the command line: "-e ssdt1.dat -e ssdt2.dat". ACPICA BZ 
834. 
Lin Ming.

----------------------------------------
02 July 2010. Summary of changes for version 20100702:

1) ACPI CA Core Subsystem:

Implemented several updates to the recently added GPE reference count 
support. The model for "wake" GPEs is changing to give the host OS 
complete 
control of these GPEs. Eventually, the ACPICA core will not execute any 
_PRW 
methods, since the host already must execute them. Also, additional 
changes 
were made to help ensure that the reference counts are kept in proper 
synchronization with reality. Rafael J. Wysocki.

1) Ensure that GPEs are not enabled twice during initialization.
2) Ensure that GPE enable masks stay in sync with the reference count.
3) Do not inadvertently enable GPEs when writing GPE registers.
4) Remove the internal wake reference counter and add new AcpiGpeWakeup 
interface. This interface will set or clear individual GPEs for wakeup.
5) Remove GpeType argument from AcpiEnable and AcpiDisable. These 
interfaces 
are now used for "runtime" GPEs only.

Changed the behavior of the GPE install/remove handler interfaces. The 
GPE 
is 
no longer disabled during this process, as it was found to cause problems 
on 
some machines. Rafael J. Wysocki.

Reverted a change introduced in version 20100528 to enable Embedded 
Controller multi-byte transfers. This change was found to cause problems 
with 
Index Fields and possibly Bank Fields. It will be reintroduced when these 
problems have been resolved.

Fixed a problem with references to Alias objects within Package Objects. 
A 
reference to an Alias within the definition of a Package was not always 
resolved properly. Aliases to objects like Processors, Thermal zones, 
etc. 
were resolved to the actual object instead of a reference to the object 
as 
it 
should be. Package objects are only allowed to contain integer, string, 
buffer, package, and reference objects. Redhat bugzilla 608648.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  88.3K Code, 18.8K Data, 107.1K Total
    Debug Version:     164.1K Code, 51.5K Data, 215.6K Total
  Current Release:
    Non-Debug Version:  88.3K Code, 18.8K Data, 107.1K Total
    Debug Version:     164.0K Code, 51.5K Data, 215.5K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Implemented a new compiler subsystem to allow definition and 
compilation of the non-AML ACPI tables such as FADT, MADT, SRAT, etc. 
These 
are called "ACPI Data Tables", and the new compiler is the "Data Table 
Compiler". This compiler is intended to simplify the existing error-prone 
process of creating these tables for the BIOS, as well as allowing the 
disassembly, modification, recompilation, and override of existing ACPI 
data 
tables. See the iASL User Guide for detailed information.

iASL: Implemented a new Template Generator option in support of the new 
Data 
Table Compiler. This option will create examples of all known ACPI tables 
that can be used as the basis for table development. See the iASL 
documentation and the -T option.

Disassembler and headers: Added support for the WDDT ACPI table (Watchdog 
Descriptor Table).

Updated the Linux makefiles for iASL and AcpiExec to place the generated 
object files in the local directory so that there can be no collisions 
between the shared files between them that are generated with different 
options.

Added support for Mac OS X in the Unix OSL used for iASL and AcpiExec. 
Use 
the #define __APPLE__ to enable this support.

----------------------------------------
28 May 2010. Summary of changes for version 20100528:

Note: The ACPI 4.0a specification was released on April 5, 2010 and is 
available at www.acpi.info. This is primarily an errata release.

1) ACPI CA Core Subsystem:

Undefined ACPI tables: We are looking for the definitions for the 
following 
ACPI tables that have been seen in the field: ATKG, IEIT, GSCI.

Implemented support to enable multi-byte transfers for Embedded 
Controller 
(EC) operation regions. Previously, the maximum data size passed to the 
EC 
operation region handler was a single byte. There are often EC Fields 
larger 
than one byte that need to be transferred, and it is useful for the EC 
driver 
to lock these as a single transaction. This change enables single 
transfers 
larger than 8 bits. This effectively changes the access to the EC space 
from 
ByteAcc to AnyAcc, and will probably require changes to the host OS 
Embedded 
Controller driver to enable 16/32/64/256-bit transfers in addition to 8-
bit 
transfers. Alexey Starikovskiy, Lin Ming

Implemented a performance enhancement for namespace search and access. 
This 
change enhances the performance of namespace searches and walks by adding 
a 
backpointer to the parent in each namespace node. On large namespaces, 
this 
change can improve overall ACPI performance by up to 9X. Adding a pointer 
to 
each namespace node increases the overall size of the internal namespace 
by 
about 5%, since each namespace entry usually consists of both a namespace 
node and an ACPI operand object. However, this is the first growth of the 
namespace in ten years. ACPICA bugzilla 817. Alexey Starikovskiy.

Implemented a performance optimization that reduces the number of 
namespace 
walks. On control method exit, only walk the namespace if the method is 
known 
to have created namespace objects outside of its local scope. Previously, 
the 
entire namespace was traversed on each control method exit. This change 
can 
improve overall ACPI performance by up to 3X. Alexey Starikovskiy, Bob 
Moore.

Added support to truncate I/O addresses to 16 bits for Windows 
compatibility. 
Some ASL code has been seen in the field that inadvertently has bits set 
above bit 15. This feature is optional and is enabled if the BIOS 
requests 
any Windows OSI strings. It can also be enabled by the host OS. Matthew 
Garrett, Bob Moore.

Added support to limit the maximum time for the ASL Sleep() operator. To 
prevent accidental deep sleeps, limit the maximum time that Sleep() will 
actually sleep. Configurable, the default maximum is two seconds. ACPICA 
bugzilla 854.

Added run-time validation support for the _WDG and_WED Microsoft 
predefined 
methods. These objects are defined by "Windows Instrumentation", and are 
not 
part of the ACPI spec. ACPICA BZ 860.

Expanded all statistic counters used during namespace and device 
initialization from 16 to 32 bits in order to support very large 
namespaces.

Replaced all instances of %d in printf format specifiers with %u since 
nearly 
all integers in ACPICA are unsigned.

Fixed the exception namestring for AE_WAKE_ONLY_GPE. Was incorrectly 
returned 
as AE_NO_HANDLER.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  88.4K Code, 18.8K Data, 107.2K Total
    Debug Version:     164.2K Code, 51.5K Data, 215.7K Total
  Current Release:
    Non-Debug Version:  88.3K Code, 18.8K Data, 107.1K Total
    Debug Version:     164.1K Code, 51.5K Data, 215.6K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Added compiler support for the _WDG and_WED Microsoft predefined 
methods. These objects are defined by "Windows Instrumentation", and are 
not 
part of the ACPI spec. ACPICA BZ 860.

AcpiExec: added option to disable the memory tracking mechanism. The -dt 
option will disable the tracking mechanism, which improves performance 
considerably.

AcpiExec: Restructured the command line options into -d (disable) and -e 
(enable) options.

----------------------------------------
28 April 2010. Summary of changes for version 20100428:

1) ACPI CA Core Subsystem:

Implemented GPE support for dynamically loaded ACPI tables. For all GPEs, 
including FADT-based and GPE Block Devices, execute any _PRW methods in 
the 
new table, and process any _Lxx/_Exx GPE methods in the new table. Any 
runtime GPE that is referenced by an _Lxx/_Exx method in the new table is 
immediately enabled. Handles the FADT-defined GPEs as well as GPE Block 
Devices. Provides compatibility with other ACPI implementations. Two new 
files added, evgpeinit.c and evgpeutil.c. ACPICA BZ 833. Lin Ming, Bob 
Moore.

Fixed a regression introduced in version 20100331 within the table 
manager 
where initial table loading could fail. This was introduced in the fix 
for 
AcpiReallocateRootTable. Also, renamed some of fields in the table 
manager 
data structures to clarify their meaning and use.

Fixed a possible allocation overrun during internal object copy in 
AcpiUtCopySimpleObject. The original code did not correctly handle the 
case 
where the object to be copied was a namespace node. Lin Ming. ACPICA BZ 
847.

Updated the allocation dump routine, AcpiUtDumpAllocation and fixed a 
possible access beyond end-of-allocation. Also, now fully validate 
descriptor 
(size and type) before output. Lin Ming, Bob Moore. ACPICA BZ 847

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  87.9K Code, 18.6K Data, 106.5K Total
    Debug Version:     163.5K Code, 51.3K Data, 214.8K Total
  Current Release:
    Non-Debug Version:  88.4K Code, 18.8K Data, 107.2K Total
    Debug Version:     164.2K Code, 51.5K Data, 215.7K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Implemented Min/Max/Len/Gran validation for address resource 
descriptors. This change implements validation for the address fields 
that 
are common to all address-type resource descriptors. These checks are 
implemented: Checks for valid Min/Max, length within the Min/Max window, 
valid granularity, Min/Max a multiple of granularity, and _MIF/_MAF as 
per 
table 6-40 in the ACPI 4.0a specification. Also split the large 
aslrestype1.c 
and aslrestype2.c files into five new files. ACPICA BZ 840.

iASL: Added support for the _Wxx predefined names. This support was 
missing 
and these names were not recognized by the compiler as valid predefined 
names. ACPICA BZ 851.

iASL: Added an error for all predefined names that are defined to return 
no 
value and thus must be implemented as Control Methods. These include all 
of 
the _Lxx, _Exx, _Wxx, and _Qxx names, as well as some other miscellaneous 
names such as _DIS, _INI, _IRC, _OFF, _ON, and _PSx. ACPICA BZ 850, 856.

iASL: Implemented the -ts option to emit hex AML data in ASL format, as 
an 
ASL Buffer. Allows ACPI tables to be easily included within ASL files, to 
be 
dynamically loaded via the Load() operator. Also cleaned up output for 
the 
-
ta and -tc options. ACPICA BZ 853.

Tests: Added a new file with examples of extended iASL error checking. 
Demonstrates the advanced error checking ability of the iASL compiler. 
Available at tests/misc/badcode.asl.

----------------------------------------
31 March 2010. Summary of changes for version 20100331:

1) ACPI CA Core Subsystem:

Completed a major update for the GPE support in order to improve support 
for 
shared GPEs and to simplify both host OS and ACPICA code. Added a 
reference 
count mechanism to support shared GPEs that require multiple device 
drivers. 
Several external interfaces have changed. One external interface has been 
removed. One new external interface was added. Most of the GPE external 
interfaces now use the GPE spinlock instead of the events mutex (and the 
Flags parameter for many GPE interfaces has been removed.) See the 
updated 
ACPICA Programmer Reference for details. Matthew Garrett, Bob Moore, 
Rafael 
Wysocki. ACPICA BZ 831.

Changed:
    AcpiEnableGpe, AcpiDisableGpe, AcpiClearGpe, AcpiGetGpeStatus
Removed:
    AcpiSetGpeType
New:
    AcpiSetGpe

Implemented write support for DataTable operation regions. These regions 
are 
defined via the DataTableRegion() operator. Previously, only read support 
was 
implemented. The ACPI specification allows DataTableRegions to be 
read/write, 
however.

Implemented a new subsystem option to force a copy of the DSDT to local 
memory. Optionally copy the entire DSDT to local memory (instead of 
simply 
mapping it.) There are some (albeit very rare) BIOSs that corrupt or 
replace 
the original DSDT, creating the need for this option. Default is FALSE, 
do 
not copy the DSDT.

Implemented detection of a corrupted or replaced DSDT. This change adds 
support to detect a DSDT that has been corrupted and/or replaced from 
outside 
the OS (by firmware). This is typically catastrophic for the system, but 
has 
been seen on some machines. Once this problem has been detected, the DSDT 
copy option can be enabled via system configuration. Lin Ming, Bob Moore.

Fixed two problems with AcpiReallocateRootTable during the root table 
copy. 
When copying the root table to the new allocation, the length used was 
incorrect. The new size was used instead of the current table size, 
meaning 
too much data was copied. Also, the count of available slots for ACPI 
tables 
was not set correctly. Alexey Starikovskiy, Bob Moore.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  87.5K Code, 18.4K Data, 105.9K Total
    Debug Version:     163.4K Code, 51.1K Data, 214.5K Total
  Current Release:
    Non-Debug Version:  87.9K Code, 18.6K Data, 106.5K Total
    Debug Version:     163.5K Code, 51.3K Data, 214.8K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Implement limited typechecking for values returned from predefined 
control methods. The type of any returned static (unnamed) object is now 
validated. For example, Return(1). ACPICA BZ 786.

iASL: Fixed a predefined name object verification regression. Fixes a 
problem 
introduced in version 20100304. An error is incorrectly generated if a 
predefined name is declared as a static named object with a value defined 
using the keywords "Zero", "One", or "Ones". Lin Ming.

iASL: Added Windows 7 support for the -g option (get local ACPI tables) 
by 
reducing the requested registry access rights. ACPICA BZ 842.

Disassembler: fixed a possible fault when generating External() 
statements. 
Introduced in commit ae7d6fd: Properly handle externals with parent-
prefix 
(carat). Fixes a string length allocation calculation. Lin Ming.

----------------------------------------
04 March 2010. Summary of changes for version 20100304:

1) ACPI CA Core Subsystem:

Fixed a possible problem with the AML Mutex handling function 
AcpiExReleaseMutex where the function could fault under the very rare 
condition when the interpreter has blocked, the interpreter lock is 
released, 
the interpreter is then reentered via the same thread, and attempts to 
acquire an AML mutex that was previously acquired. FreeBSD report 140979. 
Lin 
Ming.

Implemented additional configuration support for the AML "Debug Object". 
Output from the debug object can now be enabled via a global variable, 
AcpiGbl_EnableAmlDebugObject. This will assist with remote machine 
debugging. 
This debug output is now available in the release version of ACPICA 
instead 
of just the debug version. Also, the entire debug output module can now 
be 
configured out of the ACPICA build if desired. One new file added, 
executer/exdebug.c. Lin Ming, Bob Moore.

Added header support for the ACPI MCHI table (Management Controller Host 
Interface Table). This table was added in ACPI 4.0, but the defining 
document 
has only recently become available.

Standardized output of integer values for ACPICA warnings/errors. Always 
use 
0x prefix for hex output, always use %u for unsigned integer decimal 
output. 
Affects ACPI_INFO, ACPI_ERROR, ACPI_EXCEPTION, and ACPI_WARNING (about 
400 
invocations.) These invocations were converted from the original 
ACPI_DEBUG_PRINT invocations and were not consistent. ACPICA BZ 835.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  87.1K Code, 18.0K Data, 105.1K Total
    Debug Version:     163.5K Code, 50.9K Data, 214.4K Total
  Current Release:
    Non-Debug Version:  87.5K Code, 18.4K Data, 105.9K Total
    Debug Version:     163.4K Code, 51.1K Data, 214.5K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Implemented typechecking support for static (non-control method) 
predefined named objects that are declared with the Name() operator. For 
example, the type of this object is now validated to be of type Integer: 
Name(_BBN, 1). This change migrates the compiler to using the core 
predefined 
name table instead of maintaining a local version. Added a new file, 
aslpredef.c. ACPICA BZ 832.

Disassembler: Added support for the ACPI 4.0 MCHI table.

----------------------------------------
21 January 2010. Summary of changes for version 20100121:

1) ACPI CA Core Subsystem:

Added the 2010 copyright to all module headers and signons. This affects 
virtually every file in the ACPICA core subsystem, the iASL compiler, the 
tools/utilities, and the test suites.

Implemented a change to the AcpiGetDevices interface to eliminate 
unnecessary 
invocations of the _STA method. In the case where a specific _HID is 
requested, do not run _STA until a _HID match is found. This eliminates 
potentially dozens of _STA calls during a search for a particular 
device/HID, 
which in turn can improve boot times. ACPICA BZ 828. Lin Ming.

Implemented an additional repair for predefined method return values. 
Attempt 
to repair unexpected NULL elements within returned Package objects. 
Create 
an 
Integer of value zero, a NULL String, or a zero-length Buffer as 
appropriate. 
ACPICA BZ 818. Lin Ming, Bob Moore.

Removed the obsolete ACPI_INTEGER data type. This type was introduced as 
the 
code was migrated from ACPI 1.0 (with 32-bit AML integers) to ACPI 2.0 
(with 
64-bit AML integers). It is now obsolete and this change removes it from 
the 
ACPICA code base, replaced by UINT64. The original typedef has been 
retained 
for now for compatibility with existing device driver code. ACPICA BZ 
824.

Removed the unused UINT32_STRUCT type, and the obsolete Integer64 field 
in 
the parse tree object.

Added additional warning options for the gcc-4 generation. Updated the 
source 
accordingly. This includes some code restructuring to eliminate 
unreachable 
code, elimination of some gotos, elimination of unused return values, 
some 
additional casting, and removal of redundant declarations.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  87.0K Code, 18.0K Data, 105.0K Total
    Debug Version:     163.4K Code, 50.8K Data, 214.2K Total
  Current Release:
    Non-Debug Version:  87.1K Code, 18.0K Data, 105.1K Total
    Debug Version:     163.5K Code, 50.9K Data, 214.4K Total

2) iASL Compiler/Disassembler and Tools:

No functional changes for this release.

----------------------------------------
14 December 2009. Summary of changes for version 20091214:

1) ACPI CA Core Subsystem:

Enhanced automatic data type conversions for predefined name repairs. 
This 
change expands the automatic repairs/conversions for predefined name 
return 
values to make Integers, Strings, and Buffers fully interchangeable. 
Also, 
a 
Buffer can be converted to a Package of Integers if necessary. The 
nsrepair.c 
module was completely restructured. Lin Ming, Bob Moore.

Implemented automatic removal of null package elements during predefined 
name 
repairs. This change will automatically remove embedded and trailing NULL 
package elements from returned package objects that are defined to 
contain 
a 
variable number of sub-packages. The driver is then presented with a 
package 
with no null elements to deal with. ACPICA BZ 819.

Implemented a repair for the predefined _FDE and _GTM names. The expected 
return value for both names is a Buffer of 5 DWORDs. This repair fixes 
two 
possible problems (both seen in the field), where a package of integers 
is 
returned, or a buffer of BYTEs is returned. With assistance from Jung-uk 
Kim.

Implemented additional module-level code support. This change will 
properly 
execute module-level code that is not at the root of the namespace (under 
a 
Device object, etc.). Now executes the code within the current scope 
instead 
of the root. ACPICA BZ 762. Lin Ming.

Fixed possible mutex acquisition errors when running _REG methods. Fixes 
a 
problem where mutex errors can occur when running a _REG method that is 
in 
the same scope as a method-defined operation region or an operation 
region 
under a module-level IF block. This type of code is rare, so the problem 
has 
not been seen before. ACPICA BZ 826. Lin Ming, Bob Moore.

Fixed a possible memory leak during module-level code execution. An 
object 
could be leaked for each block of executed module-level code if the 
interpreter slack mode is enabled This change deletes any implicitly 
returned 
object from the module-level code block. Lin Ming.

Removed messages for successful predefined repair(s). The repair 
mechanism 
was considered too wordy. Now, messages are only unconditionally emitted 
if 
the return object cannot be repaired. Existing messages for successful 
repairs were converted to ACPI_DEBUG_PRINT messages for now. ACPICA BZ 
827.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  86.6K Code, 18.2K Data, 104.8K Total
    Debug Version:     162.7K Code, 50.8K Data, 213.5K Total
  Current Release:
    Non-Debug Version:  87.0K Code, 18.0K Data, 105.0K Total
    Debug Version:     163.4K Code, 50.8K Data, 214.2K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Fixed a regression introduced in 20091112 where intermediate .SRC 
files 
were no longer automatically removed at the termination of the compile.

acpiexec: Implemented the -f option to specify default region fill value. 
This option specifies the value used to initialize buffers that simulate 
operation regions. Default value is zero. Useful for debugging problems 
that 
depend on a specific initial value for a region or field.

----------------------------------------
12 November 2009. Summary of changes for version 20091112:

1) ACPI CA Core Subsystem:

Implemented a post-order callback to AcpiWalkNamespace. The existing 
interface only has a pre-order callback. This change adds an additional 
parameter for a post-order callback which will be more useful for bus 
scans. 
ACPICA BZ 779. Lin Ming. Updated the ACPICA Programmer Reference.

Modified the behavior of the operation region memory mapping cache for 
SystemMemory. Ensure that the memory mappings created for operation 
regions 
do not cross 4K page boundaries. Crossing a page boundary while mapping 
regions can cause kernel warnings on some hosts if the pages have 
different 
attributes. Such regions are probably BIOS bugs, and this is the 
workaround. 
Linux BZ 14445. Lin Ming.

Implemented an automatic repair for predefined methods that must return 
sorted lists. This change will repair (by sorting) packages returned by 
_ALR, 
_PSS, and _TSS. Drivers can now assume that the packages are correctly 
sorted 
and do not contain NULL package elements. Adds one new file, 
namespace/nsrepair2.c. ACPICA BZ 784. Lin Ming, Bob Moore.

Fixed a possible fault during predefined name validation if a return 
Package 
object contains NULL elements. Also adds a warning if a NULL element is 
followed by any non-null elements. ACPICA BZ 813, 814. Future enhancement 
may 
include repair or removal of all such NULL elements where possible.

Implemented additional module-level executable AML code support. This 
change 
will execute module-level code that is not at the root of the namespace 
(under a Device object, etc.) at table load time. Module-level executable 
AML 
code has been illegal since ACPI 2.0. ACPICA BZ 762. Lin Ming.

Implemented a new internal function to create Integer objects. This 
function 
simplifies miscellaneous object creation code. ACPICA BZ 823.

Reduced the severity of predefined repair messages, Warning to Info. 
Since 
the object was successfully repaired, a warning is too severe. Reduced to 
an 
info message for now. These messages may eventually be changed to debug-
only. 
ACPICA BZ 812.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  85.8K Code, 18.0K Data, 103.8K Total
    Debug Version:     161.8K Code, 50.6K Data, 212.4K Total
  Current Release:
    Non-Debug Version:  86.6K Code, 18.2K Data, 104.8K Total
    Debug Version:     162.7K Code, 50.8K Data, 213.5K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Implemented Switch() with While(1) so that Break works correctly. 
This 
change correctly implements the Switch operator with a surrounding 
While(1) 
so that the Break operator works as expected. ACPICA BZ 461. Lin Ming.

iASL: Added a message if a package initializer list is shorter than 
package 
length. Adds a new remark for a Package() declaration if an initializer 
list 
exists, but is shorter than the declared length of the package. Although 
technically legal, this is probably a coding error and it is seen in the 
field. ACPICA BZ 815. Lin Ming, Bob Moore.

iASL: Fixed a problem where the compiler could fault after the maximum 
number 
of errors was reached (200).

acpixtract: Fixed a possible warning for pointer cast if the compiler 
warning 
level set very high.

----------------------------------------
13 October 2009. Summary of changes for version 20091013:

1) ACPI CA Core Subsystem:

Fixed a problem where an Operation Region _REG method could be executed 
more 
than once. If a custom address space handler is installed by the host 
before 
the "initialize operation regions" phase of the ACPICA initialization, 
any 
_REG methods for that address space could be executed twice. This change 
fixes the problem. ACPICA BZ 427. Lin Ming.

Fixed a possible memory leak for the Scope() ASL operator. When the exact 
invocation of "Scope(\)" is executed (change scope to root), one internal 
operand object was leaked. Lin Ming.

Implemented a run-time repair for the _MAT predefined method. If the _MAT 
return value is defined as a Field object in the AML, and the field
size is less than or equal to the default width of an integer (32 or 
64),_MAT 
can incorrectly return an Integer instead of a Buffer. ACPICA now 
automatically repairs this problem. ACPICA BZ 810.

Implemented a run-time repair for the _BIF and _BIX predefined methods. 
The 
"OEM Information" field is often incorrectly returned as an Integer with 
value zero if the field is not supported by the platform. This is due to 
an 
ambiguity in the ACPI specification. The field should always be a string. 
ACPICA now automatically repairs this problem by returning a NULL string 
within the returned Package. ACPICA BZ 807.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  85.6K Code, 18.0K Data, 103.6K Total
    Debug Version:     161.7K Code, 50.9K Data, 212.6K Total
  Current Release:
    Non-Debug Version:  85.8K Code, 18.0K Data, 103.8K Total
    Debug Version:     161.8K Code, 50.6K Data, 212.4K Total

2) iASL Compiler/Disassembler and Tools:

Disassembler: Fixed a problem where references to external symbols that 
contained one or more parent-prefixes (carats) were not handled 
correctly, 
possibly causing a fault. ACPICA BZ 806. Lin Ming.

Disassembler: Restructured the code so that all functions that handle 
external symbols are in a single module. One new file is added, 
common/dmextern.c.

AML Debugger: Added a max count argument for the Batch command (which 
executes multiple predefined methods within the namespace.)

iASL: Updated the compiler documentation (User Reference.) Available at 
http://www.acpica.org/documentation/. ACPICA BZ 750.

AcpiXtract: Updated for Lint and other formatting changes. Close all open 
files.

----------------------------------------
03 September 2009. Summary of changes for version 20090903:

1) ACPI CA Core Subsystem:

For Windows Vista compatibility, added the automatic execution of an _INI 
method located at the namespace root (\_INI). This method is executed at 
table load time. This support is in addition to the automatic execution 
of 
\_SB._INI. Lin Ming.

Fixed a possible memory leak in the interpreter for AML package objects 
if 
the package initializer list is longer than the defined size of the 
package. 
This apparently can only happen if the BIOS changes the package size on 
the 
fly (seen in a _PSS object), as ASL compilers do not allow this. The 
interpreter will truncate the package to the defined size (and issue an 
error 
message), but previously could leave the extra objects undeleted if they 
were 
pre-created during the argument processing (such is the case if the 
package 
consists of a number of sub-packages as in the _PSS.) ACPICA BZ 805.

Fixed a problem seen when a Buffer or String is stored to itself via ASL. 
This has been reported in the field. Previously, ACPICA would zero out 
the 
buffer/string. Now, the operation is treated as a noop. Provides Windows 
compatibility. ACPICA BZ 803. Lin Ming.

Removed an extraneous error message for ASL constructs of the form 
Store(LocalX,LocalX) when LocalX is uninitialized. These curious 
statements 
are seen in many BIOSs and are once again treated as NOOPs and no error 
is 
emitted when they are encountered. ACPICA BZ 785.

Fixed an extraneous warning message if a _DSM reserved method returns a 
Package object. _DSM can return any type of object, so validation on the 
return type cannot be performed. ACPICA BZ 802.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  85.5K Code, 18.0K Data, 103.5K Total
    Debug Version:     161.6K Code, 50.9K Data, 212.5K Total
  Current Release:
    Non-Debug Version:  85.6K Code, 18.0K Data, 103.6K Total
    Debug Version:     161.7K Code, 50.9K Data, 212.6K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Fixed a problem with the use of the Alias operator and Resource 
Templates. The correct alias is now constructed and no error is emitted. 
ACPICA BZ 738.

iASL: Implemented the -I option to specify additional search directories 
for 
include files. Allows multiple additional search paths for include files. 
Directories are searched in the order specified on the command line 
(after 
the local directory is searched.) ACPICA BZ 800.

iASL: Fixed a problem where the full pathname for include files was not 
emitted for warnings/errors. This caused the IDE support to not work 
properly. ACPICA BZ 765.

iASL: Implemented the -@ option to specify a Windows-style response file 
containing additional command line options. ACPICA BZ 801.

AcpiExec: Added support to load multiple AML files simultaneously (such 
as 
a 
DSDT and multiple SSDTs). Also added support for wildcards within the AML 
pathname. These features allow all machine tables to be easily loaded and 
debugged together. ACPICA BZ 804.

Disassembler: Added missing support for disassembly of HEST table Error 
Bank 
subtables. 

----------------------------------------
30 July 2009. Summary of changes for version 20090730:

The ACPI 4.0 implementation for ACPICA is complete with this release.

1) ACPI CA Core Subsystem:

ACPI 4.0: Added header file support for all new and changed ACPI tables. 
Completely new tables are: IBFT, IVRS, MSCT, and WAET. Tables that are 
new 
for ACPI 4.0, but have previously been supported in ACPICA are: CPEP, 
BERT, 
EINJ, ERST, and HEST. Other newly supported tables are: UEFI and WDAT. 
There 
have been some ACPI 4.0 changes to other existing tables. Split the large 
actbl1.h header into the existing actbl2.h header. ACPICA BZ 774.

ACPI 4.0: Implemented predefined name validation for all new names. There 
are 
31 new names in ACPI 4.0. The predefined validation module was split into 
two 
files. The new file is namespace/nsrepair.c. ACPICA BZ 770.

Implemented support for so-called "module-level executable code". This is 
executable AML code that exists outside of any control method and is 
intended 
to be executed at table load time. Although illegal since ACPI 2.0, this 
type 
of code still exists and is apparently still being created. Blocks of 
this 
code are now detected and executed as intended. Currently, the code 
blocks 
must exist under either an If, Else, or While construct; these are the 
typical cases seen in the field. ACPICA BZ 762. Lin Ming.

Implemented an automatic dynamic repair for predefined names that return 
nested Package objects. This applies to predefined names that are defined 
to 
return a variable-length Package of sub-packages. If the number of sub-
packages is one, BIOS code is occasionally seen that creates a simple 
single 
package with no sub-packages. This code attempts to fix the problem by 
wrapping a new package object around the existing package. These methods 
can 
be repaired: _ALR, _CSD, _HPX, _MLS, _PRT, _PSS, _TRT, and _TSS. ACPICA 
BZ 
790.

Fixed a regression introduced in 20090625 for the AcpiGetDevices 
interface. 
The _HID/_CID matching was broken and no longer matched IDs correctly. 
ACPICA 
BZ 793.

Fixed a problem with AcpiReset where the reset would silently fail if the 
register was one of the protected I/O ports. AcpiReset now bypasses the 
port 
validation mechanism. This may eventually be driven into the 
AcpiRead/Write 
interfaces.

Fixed a regression related to the recent update of the AcpiRead/Write 
interfaces. A sleep/suspend could fail if the optional PM2 Control 
register 
does not exist during an attempt to write the Bus Master Arbitration bit. 
(However, some hosts already delete the code that writes this bit, and 
the 
code may in fact be obsolete at this date.) ACPICA BZ 799.

Fixed a problem where AcpiTerminate could fault if inadvertently called 
twice 
in succession. ACPICA BZ 795.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  84.7K Code, 17.8K Data, 102.5K Total
    Debug Version:     160.5K Code, 50.6K Data, 211.1K Total
  Current Release:
    Non-Debug Version:  85.5K Code, 18.0K Data, 103.5K Total
    Debug Version:     161.6K Code, 50.9K Data, 212.5K Total

2) iASL Compiler/Disassembler and Tools:

ACPI 4.0: Implemented disassembler support for all new ACPI tables and 
changes to existing tables. ACPICA BZ 775.

----------------------------------------
25 June 2009. Summary of changes for version 20090625:

The ACPI 4.0 Specification was released on June 16 and is available at 
www.acpi.info. ACPICA implementation of ACPI 4.0 is underway and will 
continue for the next few releases.

1) ACPI CA Core Subsystem:

ACPI 4.0: Implemented interpreter support for the IPMI operation region 
address space. Includes support for bi-directional data buffers and an 
IPMI 
address space handler (to be installed by an IPMI device driver.) ACPICA 
BZ 
773. Lin Ming.

ACPI 4.0: Added changes for existing ACPI tables - FACS and SRAT. 
Includes 
support in both the header files and the disassembler.

Completed a major update for the AcpiGetObjectInfo external interface. 
Changes include:
 - Support for variable, unlimited length HID, UID, and CID strings.
 - Support Processor objects the same as Devices (HID,UID,CID,ADR,STA, 
etc.)
 - Call the _SxW power methods on behalf of a device object.
 - Determine if a device is a PCI root bridge.
 - Change the ACPI_BUFFER parameter to ACPI_DEVICE_INFO.
These changes will require an update to all callers of this interface. 
See 
the updated ACPICA Programmer Reference for details. One new source file 
has 
been added - utilities/utids.c. ACPICA BZ 368, 780.

Updated the AcpiRead and AcpiWrite external interfaces to support 64-bit 
transfers. The Value parameter has been extended from 32 bits to 64 bits 
in 
order to support new ACPI 4.0 tables. These changes will require an 
update 
to 
all callers of these interfaces. See the ACPICA Programmer Reference for 
details. ACPICA BZ 768.

Fixed several problems with AcpiAttachData. The handler was not invoked 
when 
the host node was deleted. The data sub-object was not automatically 
deleted 
when the host node was deleted. The interface to the handler had an 
unused 
parameter, this was removed. ACPICA BZ 778.

Enhanced the function that dumps ACPI table headers. All non-printable 
characters in the string fields are now replaced with '?' (Signature, 
OemId, 
OemTableId, and CompilerId.) ACPI tables with non-printable characters in 
these fields are occasionally seen in the field. ACPICA BZ 788.

Fixed a problem with predefined method repair code where the code that 
attempts to repair/convert an object of incorrect type is only executed 
on 
the first time the predefined method is called. The mechanism that 
disables 
warnings on subsequent calls was interfering with the repair mechanism. 
ACPICA BZ 781.

Fixed a possible memory leak in the predefined validation/repair code 
when 
a 
buffer is automatically converted to an expected string object.

Removed obsolete 16-bit files from the distribution and from the current 
git 
tree head. ACPICA BZ 776.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  83.4K Code, 17.5K Data, 100.9K Total
    Debug Version:     158.9K Code, 50.0K Data, 208.9K Total
  Current Release:
    Non-Debug Version:  84.7K Code, 17.8K Data, 102.5K Total
    Debug Version:     160.5K Code, 50.6K Data, 211.1K Total

2) iASL Compiler/Disassembler and Tools:

ACPI 4.0: iASL and Disassembler - implemented support for the new IPMI 
operation region keyword. ACPICA BZ 771, 772. Lin Ming.

ACPI 4.0: iASL - implemented compile-time validation support for all new 
predefined names and control methods (31 total). ACPICA BZ 769.

----------------------------------------
21 May 2009. Summary of changes for version 20090521:

1) ACPI CA Core Subsystem:

Disabled the preservation of the SCI enable bit in the PM1 control 
register. 
The SCI enable bit (bit 0, SCI_EN) is defined by the ACPI specification 
to 
be 
a "preserved" bit - "OSPM always preserves this bit position", section 
4.7.3.2.1. However, some machines fail if this bit is in fact preserved 
because the bit needs to be explicitly set by the OS as a workaround. No 
machines fail if the bit is not preserved. Therefore, ACPICA no longer 
attempts to preserve this bit.

Fixed a problem in AcpiRsGetPciRoutingTableLength where an invalid or 
incorrectly formed _PRT package could cause a fault. Added validation to 
ensure that each package element is actually a sub-package.

Implemented a new interface to install or override a single control 
method, 
AcpiInstallMethod. This interface is useful when debugging in order to 
repair 
an existing method or to install a missing method without having to 
override 
the entire ACPI table. See the ACPICA Programmer Reference for use and 
examples. Lin Ming, Bob Moore.

Fixed several reference count issues with the DdbHandle object that is 
created from a Load or LoadTable operator. Prevent premature deletion of 
the 
object. Also, mark the object as invalid once the table has been 
unloaded. 
This is needed because the handle itself may not be deleted after the 
table 
unload, depending on whether it has been stored in a named object by the 
caller. Lin Ming.

Fixed a problem with Mutex Sync Levels. Fixed a problem where if multiple 
mutexes of the same sync level are acquired but then not released in 
strict 
opposite order, the internally maintained Current Sync Level becomes 
confused 
and can cause subsequent execution errors. ACPICA BZ 471.

Changed the allowable release order for ASL mutex objects. The ACPI 4.0 
specification has been changed to make the SyncLevel for mutex objects 
more 
useful. When releasing a mutex, the SyncLevel of the mutex must now be 
the 
same as the current sync level. This makes more sense than the previous 
rule 
(SyncLevel less than or equal). This change updates the code to match the 
specification.

Fixed a problem with the local version of the AcpiOsPurgeCache function. 
The 
(local) cache must be locked during all cache object deletions. Andrew 
Baumann.

Updated the Load operator to use operation region interfaces. This 
replaces 
direct memory mapping with region access calls. Now, all region accesses 
go 
through the installed region handler as they should.

Simplified and optimized the NsGetNextNode function. Reduced parameter 
count 
and reduced code for this frequently used function.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  82.8K Code, 17.5K Data, 100.3K Total
    Debug Version:     158.0K Code, 49.9K Data, 207.9K Total
  Current Release:
    Non-Debug Version:  83.4K Code, 17.5K Data, 100.9K Total
    Debug Version:     158.9K Code, 50.0K Data, 208.9K Total

2) iASL Compiler/Disassembler and Tools:

Disassembler: Fixed some issues with DMAR, HEST, MADT tables. Some 
problems 
with sub-table disassembly and handling invalid sub-tables. Attempt 
recovery 
after an invalid sub-table ID.

----------------------------------------
22 April 2009. Summary of changes for version 20090422:

1) ACPI CA Core Subsystem:

Fixed a compatibility issue with the recently released I/O port 
protection 
mechanism. For windows compatibility, 1) On a port protection violation, 
simply ignore the request and do not return an exception (allow the 
control 
method to continue execution.) 2) If only part of the request overlaps a 
protected port, read/write the individual ports that are not protected. 
Linux 
BZ 13036. Lin Ming

Enhanced the execution of the ASL/AML BreakPoint operator so that it 
actually 
breaks into the AML debugger if the debugger is present. This matches the 
ACPI-defined behavior.

Fixed several possible warnings related to the use of the configurable 
ACPI_THREAD_ID. This type can now be configured as either an integer or a 
pointer with no warnings. Also fixes several warnings in printf-like 
statements for the 64-bit build when the type is configured as a pointer. 
ACPICA BZ 766, 767.

Fixed a number of possible warnings when compiling with gcc 4+ (depending 
on 
warning options.) Examples include printf formats, aliasing, unused 
globals, 
missing prototypes, missing switch default statements, use of non-ANSI 
library functions, use of non-ANSI constructs. See generate/unix/Makefile 
for 
a list of warning options used with gcc 3 and 4. ACPICA BZ 735.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  82.6K Code, 17.6K Data, 100.2K Total
    Debug Version:     157.7K Code, 49.9K Data, 207.6K Total
  Current Release:
    Non-Debug Version:  82.8K Code, 17.5K Data, 100.3K Total
    Debug Version:     158.0K Code, 49.9K Data, 207.9K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Fixed a generation warning from Bison 2.3 and fixed several 
warnings 
on 
the 64-bit build.

iASL: Fixed a problem where the Unix/Linux versions of the compiler could 
not 
correctly digest Windows/DOS formatted files (with CR/LF).

iASL: Added a new option for "quiet mode" (-va) that produces only the 
compilation summary, not individual errors and warnings. Useful for large 
batch compilations.

AcpiExec: Implemented a new option (-z) to enable a forced 
semaphore/mutex 
timeout that can be used to detect hang conditions during execution of 
AML 
code (includes both internal semaphores and AML-defined mutexes and 
events.)

Added new makefiles for the generation of acpica in a generic unix-like 
environment. These makefiles are intended to generate the acpica tools 
and 
utilities from the original acpica git source tree structure.

Test Suites: Updated and cleaned up the documentation files. Updated the 
copyrights to 2009, affecting all source files. Use the new version of 
iASL 
with quiet mode. Increased the number of available semaphores in the 
Windows 
OSL, allowing the aslts to execute fully on Windows. For the Unix OSL, 
added 
an alternate implementation of the semaphore timeout to allow aslts to 
execute fully on Cygwin.

----------------------------------------
20 March 2009. Summary of changes for version 20090320:

1) ACPI CA Core Subsystem:

Fixed a possible race condition between AcpiWalkNamespace and dynamic 
table 
unloads. Added a reader/writer locking mechanism to allow multiple 
concurrent 
namespace walks (readers), but block a dynamic table unload until it can 
gain 
exclusive write access to the namespace. This fixes a problem where a 
table 
unload could (possibly catastrophically) delete the portion of the 
namespace 
that is currently being examined by a walk. Adds a new file, utlock.c, 
that 
implements the reader/writer lock mechanism. ACPICA BZ 749.

Fixed a regression introduced in version 20090220 where a change to the 
FADT 
handling could cause the ACPICA subsystem to access non-existent I/O 
ports.

Modified the handling of FADT register and table (FACS/DSDT) addresses. 
The 
FADT can contain both 32-bit and 64-bit versions of these addresses. 
Previously, the 64-bit versions were favored, meaning that if both 32 and 
64 
versions were valid, but not equal, the 64-bit version was used. This was 
found to cause some machines to fail. Now, in this case, the 32-bit 
version 
is used instead. This now matches the Windows behavior.

Implemented a new mechanism to protect certain I/O ports. Provides 
Microsoft 
compatibility and protects the standard PC I/O ports from access via AML 
code. Adds a new file, hwvalid.c

Fixed a possible extraneous warning message from the FADT support. The 
message warns of a 32/64 length mismatch between the legacy and GAS 
definitions for a register.

Removed the obsolete AcpiOsValidateAddress OSL interface. This interface 
is 
made obsolete by the port protection mechanism above. It was previously 
used 
to validate the entire address range of an operation region, which could 
be 
incorrect if the range included illegal ports, but fields within the 
operation region did not actually access those ports. Validation is now 
performed on a per-field basis instead of the entire region.

Modified the handling of the PM1 Status Register ignored bit (bit 11.) 
Ignored bits must be "preserved" according to the ACPI spec. Usually, 
this 
means a read/modify/write when writing to the register. However, for 
status 
registers, writing a one means clear the event. Writing a zero means 
preserve 
the event (do not clear.) This behavior is clarified in the ACPI 4.0 
spec, 
and the ACPICA code now simply always writes a zero to the ignored bit.

Modified the handling of ignored bits for the PM1 A/B Control Registers. 
As 
per the ACPI specification, for the control registers, preserve 
(read/modify/write) all bits that are defined as either reserved or 
ignored.

Updated the handling of write-only bits in the PM1 A/B Control Registers. 
When reading the register, zero the write-only bits as per the ACPI spec. 
ACPICA BZ 443. Lin Ming.

Removed "Linux" from the list of supported _OSI strings. Linux no longer 
wants to reply true to this request. The Windows strings are the only 
paths 
through the AML that are tested and known to work properly.

  Previous Release:
    Non-Debug Version:  82.0K Code, 17.5K Data,  99.5K Total
    Debug Version:     156.9K Code, 49.8K Data, 206.7K Total
  Current Release:
    Non-Debug Version:  82.6K Code, 17.6K Data, 100.2K Total
    Debug Version:     157.7K Code, 49.9K Data, 207.6K Total

2) iASL Compiler/Disassembler and Tools:

Acpiexec: Split the large aeexec.c file into two new files, aehandlers.c 
and 
aetables.c

----------------------------------------
20 February 2009. Summary of changes for version 20090220:

1) ACPI CA Core Subsystem:

Optimized the ACPI register locking. Removed locking for reads from the 
ACPI 
bit registers in PM1 Status, Enable, Control, and PM2 Control. The lock 
is 
not required when reading the single-bit registers. The 
AcpiGetRegisterUnlocked function is no longer needed and has been 
removed. 
This will improve performance for reads on these registers. ACPICA BZ 
760.

Fixed the parameter validation for AcpiRead/Write. Now return 
AE_BAD_PARAMETER if the input register pointer is null, and 
AE_BAD_ADDRESS 
if 
the register has an address of zero. Previously, these cases simply 
returned 
AE_OK. For optional registers such as PM1B status/enable/control, the 
caller 
should check for a valid register address before calling. ACPICA BZ 748.

Renamed the external ACPI bit register access functions. Renamed 
AcpiGetRegister and AcpiSetRegister to clarify the purpose of these 
functions. The new names are AcpiReadBitRegister and 
AcpiWriteBitRegister. 
Also, restructured the code for these functions by simplifying the code 
path 
and condensing duplicate code to reduce code size.

Added new functions to transparently handle the possibly split PM1 A/B 
registers. AcpiHwReadMultiple and AcpiHwWriteMultiple. These two 
functions 
now handle the split registers for PM1 Status, Enable, and Control. 
ACPICA 
BZ 
746.

Added a function to handle the PM1 control registers, 
AcpiHwWritePm1Control. 
This function writes both of the PM1 control registers (A/B). These 
registers 
are different than the PM1 A/B status and enable registers in that 
different 
values can be written to the A/B registers. Most notably, the SLP_TYP 
bits 
can be different, as per the values returned from the _Sx predefined 
methods.

Removed an extra register write within AcpiHwClearAcpiStatus. This 
function 
was writing an optional PM1B status register twice. The existing call to 
the 
low-level AcpiHwRegisterWrite automatically handles a possibly split PM1 
A/B 
register. ACPICA BZ 751.

Split out the PM1 Status registers from the FADT. Added new globals for 
these 
registers (A/B), similar to the way the PM1 Enable registers are handled. 
Instead of overloading the FADT Event Register blocks. This makes the 
code 
clearer and less prone to error.

Fixed the warning message for when the platform contains too many ACPI 
tables 
for the default size of the global root table data structure. The 
calculation 
for the truncation value was incorrect.

Removed the ACPI_GET_OBJECT_TYPE macro. Removed all instances of this 
obsolete macro, since it is now a simple reference to ->common.type. 
There 
were about 150 invocations of the macro across 41 files. ACPICA BZ 755.

Removed the redundant ACPI_BITREG_SLEEP_TYPE_B. This type is the same as 
TYPE_A. Removed this and all related instances. Renamed SLEEP_TYPE_A to 
simply SLEEP_TYPE. ACPICA BZ 754.

Conditionally compile the AcpiSetFirmwareWakingVector64 function. This 
function is only needed on 64-bit host operating systems and is thus not 
included for 32-bit hosts.

Debug output: print the input and result for invocations of the _OSI 
reserved 
control method via the ACPI_LV_INFO debug level. Also, reduced some of 
the 
verbosity of this debug level. Len Brown.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  82.3K Code, 17.5K Data,  99.8K Total
    Debug Version:     157.3K Code, 49.8K Data, 207.1K Total
  Current Release:
    Non-Debug Version:  82.0K Code, 17.5K Data,  99.5K Total
    Debug Version:     156.9K Code, 49.8K Data, 206.7K Total

2) iASL Compiler/Disassembler and Tools:

Disassembler: Decode the FADT PM_Profile field. Emit ascii names for the 
various legal performance profiles.

----------------------------------------
23 January 2009. Summary of changes for version 20090123:

1) ACPI CA Core Subsystem:

Added the 2009 copyright to all module headers and signons. This affects 
virtually every file in the ACPICA core subsystem, the iASL compiler, and 
the tools/utilities.

Implemented a change to allow the host to override any ACPI table, 
including 
dynamically loaded tables. Previously, only the DSDT could be replaced by 
the 
host. With this change, the AcpiOsTableOverride interface is called for 
each 
table found in the RSDT/XSDT during ACPICA initialization, and also 
whenever 
a table is dynamically loaded via the AML Load operator.

Updated FADT flag definitions, especially the Boot Architecture flags.

Debugger: For the Find command, automatically pad the input ACPI name 
with 
underscores if the name is shorter than 4 characters. This enables a 
match 
with the actual namespace entry which is itself padded with underscores.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  82.3K Code, 17.4K Data,  99.7K Total
    Debug Version:     157.1K Code, 49.7K Data, 206.8K Total
  Current Release:
    Non-Debug Version:  82.3K Code, 17.5K Data,  99.8K Total
    Debug Version:     157.3K Code, 49.8K Data, 207.1K Total

2) iASL Compiler/Disassembler and Tools:

Fix build error under Bison-2.4.

Dissasembler: Enhanced FADT support. Added decoding of the Boot 
Architecture 
flags. Now decode all flags, regardless of the FADT version. Flag output 
includes the FADT version which first defined each flag.

The iASL -g option now dumps the RSDT to a file (in addition to the FADT 
and 
DSDT). Windows only.

----------------------------------------
04 December 2008. Summary of changes for version 20081204:

1) ACPI CA Core Subsystem:

The ACPICA Programmer Reference has been completely updated and revamped 
for 
this release. This includes updates to the external interfaces, OSL 
interfaces, the overview sections, and the debugger reference.

Several new ACPICA interfaces have been implemented and documented in the 
programmer reference:
AcpiReset - Writes the reset value to the FADT-defined reset register.
AcpiDisableAllGpes - Disable all available GPEs.
AcpiEnableAllRuntimeGpes - Enable all available runtime GPEs.
AcpiGetGpeDevice - Get the GPE block device associated with a GPE.
AcpiGbl_CurrentGpeCount - Tracks the current number of available GPEs.
AcpiRead - Low-level read ACPI register (was HwLowLevelRead.)
AcpiWrite - Low-level write ACPI register (was HwLowLevelWrite.)

Most of the public ACPI hardware-related interfaces have been moved to a 
new 
file, components/hardware/hwxface.c

Enhanced the FADT parsing and low-level ACPI register access: The ACPI 
register lengths within the FADT are now used, and the low level ACPI 
register access no longer hardcodes the ACPI register lengths. Given that 
there may be some risk in actually trusting the FADT register lengths, a 
run-
time option was added to fall back to the default hardcoded lengths if 
the 
FADT proves to contain incorrect values - UseDefaultRegisterWidths. This 
option is set to true for now, and a warning is issued if a suspicious 
FADT 
register length is overridden with the default value.

Fixed a reference count issue in NsRepairObject. This problem was 
introduced 
in version 20081031 as part of a fix to repair Buffer objects within 
Packages. Lin Ming.

Added semaphore support to the Linux/Unix application OS-services layer 
(OSL). ACPICA BZ 448. Lin Ming.

Added the ACPI_MUTEX_TYPE configuration option to select whether mutexes 
will 
be implemented in the OSL, or will binary semaphores be used instead.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  81.7K Code, 17.3K Data,  99.0K Total
    Debug Version:     156.4K Code, 49.4K Data, 205.8K Total
  Current Release:
    Non-Debug Version:  82.3K Code, 17.4K Data,  99.7K Total
    Debug Version:     157.1K Code, 49.7K Data, 206.8K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Completed the '-e' option to include additional ACPI tables in 
order 
to 
aid with disassembly and External statement generation. ACPICA BZ 742. 
Lin 
Ming.

iASL: Removed the "named object in while loop" error. The compiler cannot 
determine how many times a loop will execute. ACPICA BZ 730.

Disassembler: Implemented support for FADT revision 2 (MS extension). 
ACPICA 
BZ 743.

Disassembler: Updates for several ACPI data tables (HEST, EINJ, and 
MCFG).

----------------------------------------
31 October 2008. Summary of changes for version 20081031:

1) ACPI CA Core Subsystem:

Restructured the ACPICA header files into public/private. acpi.h now 
includes 
only the "public" acpica headers. All other acpica headers are "private" 
and 
should not be included by acpica users. One new file, accommon.h is used 
to 
include the commonly used private headers for acpica code generation. 
Future 
plans include moving all private headers to a new subdirectory.

Implemented an automatic Buffer->String return value conversion for 
predefined ACPI methods. For these methods (such as _BIF), added 
automatic 
conversion for return objects that are required to be a String, but a 
Buffer 
was found instead. This can happen when reading string battery data from 
an 
operation region, because it used to be difficult to convert the data 
from 
buffer to string from within the ASL. Ensures that the host OS is 
provided 
with a valid null-terminated string. Linux BZ 11822.

Updated the FACS waking vector interfaces. Split 
AcpiSetFirmwareWakingVector 
into two: one for the 32-bit vector, another for the 64-bit vector. This 
is 
required because the host OS must setup the wake much differently for 
each 
vector (real vs. protected mode, etc.) and the interface itself should 
not 
be 
deciding which vector to use. Also, eliminated the 
GetFirmwareWakingVector 
interface, as it served no purpose (only the firmware reads the vector, 
OS 
only writes the vector.) ACPICA BZ 731.

Implemented a mechanism to escape infinite AML While() loops. Added a 
loop 
counter to force exit from AML While loops if the count becomes too 
large. 
This can occur in poorly written AML when the hardware does not respond 
within a while loop and the loop does not implement a timeout. The 
maximum 
loop count is configurable. A new exception code is returned when a loop 
is 
broken, AE_AML_INFINITE_LOOP. Alexey Starikovskiy, Bob Moore.

Optimized the execution of AML While loops. Previously, a control state 
object was allocated and freed for each execution of the loop. The 
optimization is to simply reuse the control state for each iteration. 
This 
speeds up the raw loop execution time by about 5%.

Enhanced the implicit return mechanism. For Windows compatibility, return 
an 
implicit integer of value zero for methods that contain no executable 
code. 
Such methods are seen in the field as stubs (presumably), and can cause 
drivers to fail if they expect a return value. Lin Ming.

Allow multiple backslashes as root prefixes in namepaths. In a fully 
qualified namepath, allow multiple backslash prefixes. This can happen 
(and 
is seen in the field) because of the use of a double-backslash in strings 
(since backslash is the escape character) causing confusion. ACPICA BZ 
739 
Lin Ming.

Emit a warning if two different FACS or DSDT tables are discovered in the 
FADT. Checks if there are two valid but different addresses for the FACS 
and 
DSDT within the FADT (mismatch between the 32-bit and 64-bit fields.)

Consolidated the method argument count validation code. Merged the code 
that 
validates control method argument counts into the predefined validation 
module. Eliminates possible multiple warnings for incorrect argument 
counts.

Implemented ACPICA example code. Includes code for ACPICA initialization, 
handler installation, and calling a control method. Available at 
source/tools/examples.

Added a global pointer for FACS table to simplify internal FACS access. 
Use 
the global pointer instead of using AcpiGetTableByIndex for each FACS 
access. 
This simplifies the code for the Global Lock and the Firmware Waking 
Vector(s).

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  81.2K Code, 17.0K Data,  98.2K Total
    Debug Version:     155.8K Code, 49.1K Data, 204.9K Total
  Current Release:
    Non-Debug Version:  81.7K Code, 17.3K Data,  99.0K Total
    Debug Version:     156.4K Code, 49.4K Data, 205.8K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Improved disassembly of external method calls. Added the -e option 
to 
allow the inclusion of additional ACPI tables to help with the 
disassembly 
of 
method invocations and the generation of external declarations during the 
disassembly. Certain external method invocations cannot be disassembled 
properly without the actual declaration of the method. Use the -e option 
to 
include the table where the external method(s) are actually declared. 
Most 
useful for disassembling SSDTs that make method calls back to the master 
DSDT. Lin Ming. Example: To disassemble an SSDT with calls to DSDT:  iasl 
-d 
-e dsdt.aml ssdt1.aml

iASL: Fix to allow references to aliases within ASL namepaths. Fixes a 
problem where the use of an alias within a namepath would result in a not 
found error or cause the compiler to fault. Also now allows forward 
references from the Alias operator itself. ACPICA BZ 738.

----------------------------------------
26 September 2008. Summary of changes for version 20080926:

1) ACPI CA Core Subsystem:

Designed and implemented a mechanism to validate predefined ACPI methods 
and 
objects. This code validates the predefined ACPI objects (objects whose 
names 
start with underscore) that appear in the namespace, at the time they are 
evaluated. The argument count and the type of the returned object are 
validated against the ACPI specification. The purpose of this validation 
is 
to detect problems with the BIOS-implemented predefined ACPI objects 
before 
the results are returned to the ACPI-related drivers. Future enhancements 
may 
include actual repair of incorrect return objects where possible. Two new 
files are nspredef.c and acpredef.h.

Fixed a fault in the AML parser if a memory allocation fails during the 
Op 
completion routine AcpiPsCompleteThisOp. Lin Ming. ACPICA BZ 492.

Fixed an issue with implicit return compatibility. This change improves 
the 
implicit return mechanism to be more compatible with the MS interpreter. 
Lin 
Ming, ACPICA BZ 349.

Implemented support for zero-length buffer-to-string conversions. Allow 
zero 
length strings during interpreter buffer-to-string conversions. For 
example, 
during the ToDecimalString and ToHexString operators, as well as implicit 
conversions. Fiodor Suietov, ACPICA BZ 585.

Fixed two possible memory leaks in the error exit paths of 
AcpiUtUpdateObjectReference and AcpiUtWalkPackageTree. These functions 
are 
similar in that they use a stack of state objects in order to eliminate 
recursion. The stack must be fully unwound and deallocated if an error 
occurs. Lin Ming. ACPICA BZ 383.

Removed the unused ACPI_BITREG_WAKE_ENABLE definition and entry in the 
global 
ACPI register table. This bit does not exist and is unused. Lin Ming, Bob 
Moore ACPICA BZ 442.

Removed the obsolete version number in module headers. Removed the 
"$Revision" number that appeared in each module header. This version 
number 
was useful under SourceSafe and CVS, but has no meaning under git. It is 
not 
only incorrect, it could also be misleading.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  79.7K Code, 16.4K Data,  96.1K Total
    Debug Version:     153.7K Code, 48.2K Data, 201.9K Total
  Current Release:
    Non-Debug Version:  81.2K Code, 17.0K Data,  98.2K Total
    Debug Version:     155.8K Code, 49.1K Data, 204.9K Total

----------------------------------------
29 August 2008. Summary of changes for version 20080829:

1) ACPI CA Core Subsystem:

Completed a major cleanup of the internal ACPI_OPERAND_OBJECT of type 
Reference. Changes include the elimination of cheating on the Object 
field 
for the DdbHandle subtype, addition of a reference class field to 
differentiate the various reference types (instead of an AML opcode), and 
the 
cleanup of debug output for this object. Lin Ming, Bob Moore. BZ 723

Reduce an error to a warning for an incorrect method argument count. 
Previously aborted with an error if too few arguments were passed to a 
control method via the external ACPICA interface. Now issue a warning 
instead 
and continue. Handles the case where the method inadvertently declares 
too 
many arguments, but does not actually use the extra ones. Applies mainly 
to 
the predefined methods. Lin Ming. Linux BZ 11032.

Disallow the evaluation of named object types with no intrinsic value. 
Return 
AE_TYPE for objects that have no value and therefore evaluation is 
undefined: 
Device, Event, Mutex, Region, Thermal, and Scope. Previously, evaluation 
of 
these types were allowed, but an exception would be generated at some 
point 
during the evaluation. Now, the error is generated up front.

Fixed a possible memory leak in the AcpiNsGetExternalPathname function 
(nsnames.c). Fixes a leak in the error exit path.

Removed the obsolete debug levels ACPI_DB_WARN and ACPI_DB_ERROR. These 
debug 
levels were made obsolete by the ACPI_WARNING, ACPI_ERROR, and 
ACPI_EXCEPTION 
interfaces. Also added ACPI_DB_EVENTS to correspond with the existing 
ACPI_LV_EVENTS.

Removed obsolete and/or unused exception codes from the acexcep.h header. 
There is the possibility that certain device drivers may be affected if 
they 
use any of these exceptions.

The ACPICA documentation has been added to the public git source tree, 
under 
acpica/documents. Included are the ACPICA programmer reference, the iASL 
compiler reference, and the changes.txt release logfile.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  79.7K Code, 16.4K Data,  96.1K Total
    Debug Version:     153.9K Code, 48.4K Data, 202.3K Total
  Current Release:
    Non-Debug Version:  79.7K Code, 16.4K Data,  96.1K Total
    Debug Version:     153.7K Code, 48.2K Data, 201.9K Total

2) iASL Compiler/Disassembler and Tools:

Allow multiple argument counts for the predefined _SCP method. ACPI 3.0 
defines _SCP with 3 arguments. Previous versions defined it with only 1 
argument. iASL now allows both definitions.

iASL/disassembler: avoid infinite loop on bad ACPI tables. Check for 
zero-
length subtables when disassembling ACPI tables. Also fixed a couple of 
errors where a full 16-bit table type field was not extracted from the 
input 
properly.

acpisrc: Improve comment counting mechanism for generating source code 
statistics. Count first and last lines of multi-line comments as 
whitespace, 
not comment lines. Handle Linux legal header in addition to standard 
acpica 
header.

----------------------------------------

29 July 2008. Summary of changes for version 20080729:

1) ACPI CA Core Subsystem:

Fix a possible deadlock in the GPE dispatch. Remove call to 
AcpiHwDisableAllGpes during wake in AcpiEvGpeDispatch. This call will 
attempt 
to acquire the GPE lock but can deadlock since the GPE lock is already 
held 
at dispatch time. This code was introduced in version 20060831 as a 
response 
to Linux BZ 6881 and has since been removed from Linux.

Add a function to dereference returned reference objects. Examines the 
return 
object from a call to AcpiEvaluateObject. Any Index or RefOf references 
are 
automatically dereferenced in an attempt to return something useful 
(these 
reference types cannot be converted into an external ACPI_OBJECT.) 
Provides 
MS compatibility. Lin Ming, Bob Moore. Linux BZ 11105

x2APIC support: changes for MADT and SRAT ACPI tables. There are 2 new 
subtables for the MADT and one new subtable for the SRAT. Includes 
disassembler and AcpiSrc support. Data from the Intel 64 Architecture 
x2APIC 
Specification, June 2008.

Additional error checking for pathname utilities. Add error check after 
all 
calls to AcpiNsGetPathnameLength. Add status return from 
AcpiNsBuildExternalPath and check after all calls. Add parameter 
validation 
to AcpiUtInitializeBuffer. Reported by and initial patch by Ingo Molnar.

Return status from the global init function AcpiUtGlobalInitialize. This 
is 
used by both the kernel subsystem and the utilities such as iASL 
compiler. 
The function could possibly fail when the caches are initialized. Yang 
Yi.

Add a function to decode reference object types to strings. Created for 
improved error messages. 

Improve object conversion error messages. Better error messages during 
object 
conversion from internal to the external ACPI_OBJECT. Used for external 
calls 
to AcpiEvaluateObject.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  79.6K Code, 16.2K Data,  95.8K Total
    Debug Version:     153.5K Code, 48.2K Data, 201.7K Total
  Current Release:
    Non-Debug Version:  79.7K Code, 16.4K Data,  96.1K Total
    Debug Version:     153.9K Code, 48.4K Data, 202.3K Total

2) iASL Compiler/Disassembler and Tools:

Debugger: fix a possible hang when evaluating non-methods. Fixes a 
problem 
introduced in version 20080701. If the object being evaluated (via 
execute 
command) is not a method, the debugger can hang while trying to obtain 
non-
existent parameters.

iASL: relax error for using reserved "_T_x" identifiers. These names can 
appear in a disassembled ASL file if they were emitted by the original 
compiler. Instead of issuing an error or warning and forcing the user to 
manually change these names, issue a remark instead.

iASL: error if named object created in while loop. Emit an error if any 
named 
object is created within a While loop. If allowed, this code will 
generate 
a 
run-time error on the second iteration of the loop when an attempt is 
made 
to 
create the same named object twice. ACPICA bugzilla 730.

iASL: Support absolute pathnames for include files. Add support for 
absolute 
pathnames within the Include operator. previously, only relative 
pathnames 
were supported.

iASL: Enforce minimum 1 interrupt in interrupt macro and Resource 
Descriptor. 
The ACPI spec requires one interrupt minimum. BZ 423

iASL: Handle a missing ResourceSource arg, with a present SourceIndex. 
Handles the case for the Interrupt Resource Descriptor where
the ResourceSource argument is omitted but ResourceSourceIndex
is present. Now leave room for the Index. BZ 426

iASL: Prevent error message if CondRefOf target does not exist. Fixes 
cases 
where an error message is emitted if the target does not exist. BZ 516

iASL: Fix broken -g option (get Windows ACPI tables). Fixes the -g option 
(get ACPI tables on Windows). This was apparently broken in version 
20070919.

AcpiXtract: Handle EOF while extracting data. Correctly handle the case 
where 
the EOF happens immediately after the last table in the input file. Print 
completion message. Previously, no message was displayed in this case.

----------------------------------------
01 July 2008. Summary of changes for version 20080701:

0) Git source tree / acpica.org

Fixed a problem where a git-clone from http would not transfer the entire 
source tree.

1) ACPI CA Core Subsystem:

Implemented a "careful" GPE disable in AcpiEvDisableGpe, only modify one 
enable bit. Now performs a read-change-write of the enable register 
instead 
of simply writing out the cached enable mask. This will prevent 
inadvertent 
enabling of GPEs if a rogue GPE is received during initialization (before 
GPE 
handlers are installed.)

Implemented a copy for dynamically loaded tables. Previously, dynamically 
loaded tables were simply mapped - but on some machines this memory is 
corrupted after suspend. Now copy the table to a local buffer. For the 
OpRegion case, added checksum verify. Use the table length from the table 
header, not the region length. For the Buffer case, use the table length 
also. Dennis Noordsij, Bob Moore. BZ 10734

Fixed a problem where the same ACPI table could not be dynamically loaded 
and 
unloaded more than once. Without this change, a table cannot be loaded 
again 
once it has been loaded/unloaded one time. The current mechanism does not 
unregister a table upon an unload. During a load, if the same table is 
found, 
this no longer returns an exception. BZ 722

Fixed a problem where the wrong descriptor length was calculated for the 
EndTag descriptor in 64-bit mode. The "minimal" descriptors such as 
EndTag 
are calculated as 12 bytes long, but the actual length in the internal 
descriptor is 16 because of the round-up to 8 on the 64-bit build. 
Reported 
by Linn Crosetto. BZ 728

Fixed a possible memory leak in the Unload operator. The DdbHandle 
returned 
by Load() did not have its reference count decremented during unload, 
leading 
to a memory leak. Lin Ming. BZ 727

Fixed a possible memory leak when deleting thermal/processor objects. Any 
associated notify handlers (and objects) were not being deleted. Fiodor 
Suietov. BZ 506

Fixed the ordering of the ASCII names in the global mutex table to match 
the 
actual mutex IDs. Used by AcpiUtGetMutexName, a function used for debug 
only. 
Vegard Nossum. BZ 726

Enhanced the AcpiGetObjectInfo interface to return the number of required 
arguments if the object is a control method. Added this call to the 
debugger 
so the proper number of default arguments are passed to a method. This 
prevents a warning when executing methods from AcpiExec.

Added a check for an invalid handle in AcpiGetObjectInfo. Return 
AE_BAD_PARAMETER if input handle is invalid. BZ 474

Fixed an extraneous warning from exconfig.c on the 64-bit build.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  79.3K Code, 16.2K Data,  95.5K Total
    Debug Version:     153.0K Code, 48.2K Data, 201.2K Total
  Current Release:
    Non-Debug Version:  79.6K Code, 16.2K Data,  95.8K Total
    Debug Version:     153.5K Code, 48.2K Data, 201.7K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Added two missing ACPI reserved names. Added _MTP and _ASZ, both 
resource descriptor names.

iASL: Detect invalid ASCII characters in input (windows version). Removed 
the 
"-CF" flag from the flex compile, enables correct detection of non-ASCII 
characters in the input. BZ 441

iASL: Eliminate warning when result of LoadTable is not used. Eliminate 
the 
"result of operation not used" warning when the DDB handle returned from 
LoadTable is not used. The warning is not needed. BZ 590

AcpiExec: Add support for dynamic table load/unload. Now calls _CFG 
method 
to 
pass address of table to the AML. Added option to disable OpRegion 
simulation 
to allow creation of an OpRegion with a real address that was passed to 
_CFG. 
All of this allows testing of the Load and Unload operators from 
AcpiExec.

Debugger: update tables command for unloaded tables. Handle unloaded 
tables 
and use the standard table header output routine.

----------------------------------------
09 June 2008. Summary of changes for version 20080609:

1) ACPI CA Core Subsystem:

Implemented a workaround for reversed _PRT entries. A significant number 
of 
BIOSs erroneously reverse the _PRT SourceName and the SourceIndex. This 
change dynamically detects and repairs this problem. Provides 
compatibility 
with MS ACPI. BZ 6859

Simplified the internal ACPI hardware interfaces to eliminate the locking 
flag parameter from Register Read/Write. Added a new external interface, 
AcpiGetRegisterUnlocked.

Fixed a problem where the invocation of a GPE control method could hang. 
This 
was a regression introduced in 20080514. The new method argument count 
validation mechanism can enter an infinite loop when a GPE method is 
dispatched. Problem fixed by removing the obsolete code that passed GPE 
block 
information to the notify handler via the control method parameter 
pointer.

Fixed a problem where the _SST execution status was incorrectly returned 
to 
the caller of AcpiEnterSleepStatePrep. This was a regression introduced 
in 
20080514. _SST is optional and a NOT_FOUND exception should never be 
returned. BZ 716

Fixed a problem where a deleted object could be accessed from within the 
AML 
parser. This was a regression introduced in version 20080123 as a fix for 
the 
Unload operator. Lin Ming. BZ 10669

Cleaned up the debug operand dump mechanism. Eliminated unnecessary 
operands 
and eliminated the use of a negative index in a loop. Operands are now 
displayed in the correct order, not backwards. This also fixes a 
regression 
introduced in 20080514 on 64-bit systems where the elimination of 
ACPI_NATIVE_UINT caused the negative index to go large and positive. BZ 
715

Fixed a possible memory leak in EvPciConfigRegionSetup where the error 
exit 
path did not delete a locally allocated structure.

Updated definitions for the DMAR and SRAT tables to synchronize with the 
current specifications. Includes disassembler support.

Fixed a problem in the mutex debug code (in utmutex.c) where an incorrect 
loop termination value was used. Loop terminated on iteration early, 
missing 
one mutex. Linn Crosetto

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  79.5K Code, 16.2K Data,  95.7K Total
    Debug Version:     153.3K Code, 48.3K Data, 201.6K Total
  Current Release:
    Non-Debug Version:  79.3K Code, 16.2K Data,  95.5K Total
    Debug Version:     153.0K Code, 48.2K Data, 201.2K Total

2) iASL Compiler/Disassembler and Tools:

Disassembler: Implemented support for EisaId() within _CID objects. Now 
disassemble integer _CID objects back to EisaId invocations, including 
multiple integers within _CID packages. Includes single-step support for 
debugger also.

Disassembler: Added support for DMAR and SRAT table definition changes.

----------------------------------------
14 May 2008. Summary of changes for version 20080514:

1) ACPI CA Core Subsystem:

Fixed a problem where GPEs were enabled too early during the ACPICA 
initialization. This could lead to "handler not installed" errors on some 
machines. Moved GPE enable until after _REG/_STA/_INI methods are run. 
This 
ensures that all operation regions and devices throughout the namespace 
have 
been initialized before GPEs are enabled. Alexey Starikovskiy, BZ 9916.

Implemented a change to the enter sleep code. Moved execution of the _GTS 
method to just before setting sleep enable bit. The execution was moved 
from 
AcpiEnterSleepStatePrep to AcpiEnterSleepState. _GTS is now executed 
immediately before the SLP_EN bit is set, as per the ACPI specification. 
Luming Yu, BZ 1653.

Implemented a fix to disable unknown GPEs (2nd version). Now always 
disable 
the GPE, even if ACPICA thinks that that it is already disabled. It is 
possible that the AML or some other code has enabled the GPE unbeknownst 
to 
the ACPICA code.

Fixed a problem with the Field operator where zero-length fields would 
return 
an AE_AML_NO_OPERAND exception during table load. Fix enables zero-length 
ASL 
field declarations in Field(), BankField(), and IndexField(). BZ 10606.

Implemented a fix for the Load operator, now load the table at the 
namespace 
root. This reverts a change introduced in version 20071019. The table is 
now 
loaded at the namespace root even though this goes against the ACPI 
specification. This provides compatibility with other ACPI 
implementations. 
The ACPI specification will be updated to reflect this in ACPI 4.0. Lin 
Ming.

Fixed a problem where ACPICA would not Load() tables with unusual 
signatures. 
Now ignore ACPI table signature for Load() operator. Only "SSDT" is 
acceptable to the ACPI spec, but tables are seen with OEMx and null sigs. 
Therefore, signature validation is worthless. Apparently MS ACPI accepts 
such 
signatures, ACPICA must be compatible. BZ 10454.

Fixed a possible negative array index in AcpiUtValidateException. Added 
NULL 
fields to the exception string arrays to eliminate a -1 subtraction on 
the 
SubStatus field.

Updated the debug tracking macros to reduce overall code and data size. 
Changed ACPI_MODULE_NAME and ACPI_FUNCTION_NAME to use arrays of strings 
instead of pointers to static strings. Jan Beulich and Bob Moore.

Implemented argument count checking in control method invocation via 
AcpiEvaluateObject. Now emit an error if too few arguments, warning if 
too 
many. This applies only to extern programmatic control method execution, 
not 
method-to-method calls within the AML. Lin Ming.

Eliminated the ACPI_NATIVE_UINT type across all ACPICA code. This type is 
no 
longer needed, especially with the removal of 16-bit support. It was 
replaced 
mostly with UINT32, but also ACPI_SIZE where a type that changes 32/64 
bit 
on 
32/64-bit platforms is required.

Added the C const qualifier for appropriate string constants -- mostly 
MODULE_NAME and printf format strings. Jan Beulich.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  80.0K Code, 17.4K Data,  97.4K Total
    Debug Version:     159.4K Code, 64.4K Data, 223.8K Total
  Current Release:
    Non-Debug Version:  79.5K Code, 16.2K Data,  95.7K Total
    Debug Version:     153.3K Code, 48.3K Data, 201.6K Total

2) iASL Compiler/Disassembler and Tools:

Implemented ACPI table revision ID validation in the disassembler. Zero 
is 
always invalid. For DSDTs, the ID controls the interpreter integer width. 
1 
means 32-bit and this is unusual. 2 or greater is 64-bit.

----------------------------------------
21 March 2008. Summary of changes for version 20080321:

1) ACPI CA Core Subsystem:

Implemented an additional change to the GPE support in order to suppress 
spurious or stray GPEs. The AcpiEvDisableGpe function will now 
permanently 
disable incoming GPEs that are neither enabled nor disabled -- meaning 
that 
the GPE is unknown to the system. This should prevent future interrupt 
floods 
from that GPE. BZ 6217 (Zhang Rui)

Fixed a problem where NULL package elements were not returned to the 
AcpiEvaluateObject interface correctly. The element was simply ignored 
instead of returning a NULL ACPI_OBJECT package element, potentially 
causing 
a buffer overflow and/or confusing the caller who expected a fixed number 
of 
elements. BZ 10132 (Lin Ming, Bob Moore)

Fixed a problem with the CreateField, CreateXXXField (Bit, Byte, Word, 
Dword, 
Qword), Field, BankField, and IndexField operators when invoked from 
inside 
an executing control method. In this case, these operators created 
namespace 
nodes that were incorrectly left marked as permanent nodes instead of 
temporary nodes. This could cause a problem if there is race condition 
between an exiting control method and a running namespace walk. (Reported 
by 
Linn Crosetto)

Fixed a problem where the CreateField and CreateXXXField operators would 
incorrectly allow duplicate names (the name of the field) with no 
exception 
generated.

Implemented several changes for Notify handling. Added support for new 
Notify 
values (ACPI 2.0+) and improved the Notify debug output. Notify on 
PowerResource objects is no longer allowed, as per the ACPI 
specification. 
(Bob Moore, Zhang Rui)

All Reference Objects returned via the AcpiEvaluateObject interface are 
now 
marked as type "REFERENCE" instead of "ANY". The type ANY is now reserved 
for 
NULL objects - either NULL package elements or unresolved named 
references.

Fixed a problem where an extraneous debug message was produced for 
package 
objects (when debugging enabled). The message "Package List length larger 
than NumElements count" is now produced in the correct case, and is now 
an 
error message rather than a debug message. Added a debug message for the 
opposite case, where NumElements is larger than the Package List (the 
package 
will be padded out with NULL elements as per the ACPI spec.)

Implemented several improvements for the output of the ASL "Debug" object 
to 
clarify and keep all data for a given object on one output line.

Fixed two size calculation issues with the variable-length Start 
Dependent 
resource descriptor.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  79.7K Code, 17.3K Data,  97.0K Total
    Debug Version:     158.9K Code, 64.0K Data, 222.9K Total
  Current Release:
    Non-Debug Version:  80.0K Code, 17.4K Data,  97.4K Total
    Debug Version:     159.4K Code, 64.4K Data, 223.8K Total

2) iASL Compiler/Disassembler and Tools:

Fixed a problem with the use of the Switch operator where execution of 
the 
containing method by multiple concurrent threads could cause an 
AE_ALREADY_EXISTS exception. This is caused by the fact that there is no 
actual Switch opcode, it must be simulated with local named temporary 
variables and if/else pairs. The solution chosen was to mark any method 
that 
uses Switch as Serialized, thus preventing multiple thread entries. BZ 
469.

----------------------------------------
13 February 2008. Summary of changes for version 20080213:

1) ACPI CA Core Subsystem:

Implemented another MS compatibility design change for GPE/Notify 
handling. 
GPEs are now cleared/enabled asynchronously to allow all pending notifies 
to 
complete first. It is expected that the OSL will queue the enable request 
behind all pending notify requests (may require changes to the local host 
OSL 
in AcpiOsExecute). Alexey Starikovskiy.

Fixed a problem where buffer and package objects passed as arguments to a 
control method via the external AcpiEvaluateObject interface could cause 
an 
AE_AML_INTERNAL exception depending on the order and type of operators 
executed by the target control method.

Fixed a problem where resource descriptor size optimization could cause a 
problem when a _CRS resource template is passed to a _SRS method. The 
_SRS 
resource template must use the same descriptors (with the same size) as 
returned from _CRS. This change affects the following resource 
descriptors: 
IRQ / IRQNoFlags and StartDependendentFn / StartDependentFnNoPri. (BZ 
9487)

Fixed a problem where a CopyObject to RegionField, BankField, and 
IndexField 
objects did not perform an implicit conversion as it should. These types 
must 
retain their initial type permanently as per the ACPI specification. 
However, 
a CopyObject to all other object types should not perform an implicit 
conversion, as per the ACPI specification. (Lin Ming, Bob Moore) BZ 388

Fixed a problem with the AcpiGetDevices interface where the mechanism to 
match device CIDs did not examine the entire list of available CIDs, but 
instead aborted on the first non-matching CID. Andrew Patterson.

Fixed a regression introduced in version 20071114. The ACPI_HIDWORD macro 
was 
inadvertently changed to return a 16-bit value instead of a 32-bit value, 
truncating the upper dword of a 64-bit value. This macro is only used to 
display debug output, so no incorrect calculations were made. Also, 
reimplemented the macro so that a 64-bit shift is not performed by 
inefficient compilers.

Added missing va_end statements that should correspond with each va_start 
statement.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  79.5K Code, 17.2K Data,  96.7K Total
    Debug Version:     159.0K Code, 63.8K Data, 222.8K Total
  Current Release:
    Non-Debug Version:  79.7K Code, 17.3K Data,  97.0K Total
    Debug Version:     158.9K Code, 64.0K Data, 222.9K Total

2) iASL Compiler/Disassembler and Tools:

Implemented full disassembler support for the following new ACPI tables: 
BERT, EINJ, and ERST. Implemented partial disassembler support for the 
complicated HEST table. These tables support the Windows Hardware Error 
Architecture (WHEA).

----------------------------------------
23 January 2008. Summary of changes for version 20080123:

1) ACPI CA Core Subsystem:

Added the 2008 copyright to all module headers and signons. This affects 
virtually every file in the ACPICA core subsystem, the iASL compiler, and 
the tools/utilities.

Fixed a problem with the SizeOf operator when used with Package and 
Buffer 
objects. These objects have deferred execution for some arguments, and 
the 
execution is now completed before the SizeOf is executed. This problem 
caused 
unexpected AE_PACKAGE_LIMIT errors on some systems (Lin Ming, Bob Moore) 
BZ 
9558

Implemented an enhancement to the interpreter "slack mode". In the 
absence 
of 
an explicit return or an implicitly returned object from the last 
executed 
opcode, a control method will now implicitly return an integer of value 0 
for 
Microsoft compatibility. (Lin Ming) BZ 392

Fixed a problem with the Load operator where an exception was not 
returned 
in 
the case where the table is already loaded. (Lin Ming) BZ 463

Implemented support for the use of DDBHandles as an Indexed Reference, as 
per 
the ACPI spec. (Lin Ming) BZ 486

Implemented support for UserTerm (Method invocation) for the Unload 
operator 
as per the ACPI spec. (Lin Ming) BZ 580

Fixed a problem with the LoadTable operator where the OemId and 
OemTableId 
input strings could cause unexpected failures if they were shorter than 
the 
maximum lengths allowed. (Lin Ming, Bob Moore) BZ 576

Implemented support for UserTerm (Method invocation) for the Unload 
operator 
as per the ACPI spec. (Lin Ming) BZ 580

Implemented header file support for new ACPI tables - BERT, ERST, EINJ, 
HEST, 
IBFT, UEFI, WDAT. Disassembler support is forthcoming.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  79.3K Code, 17.2K Data,  96.5K Total
    Debug Version:     158.6K Code, 63.8K Data, 222.4K Total
  Current Release:
    Non-Debug Version:  79.5K Code, 17.2K Data,  96.7K Total
    Debug Version:     159.0K Code, 63.8K Data, 222.8K Total

2) iASL Compiler/Disassembler and Tools:

Implemented support in the disassembler for checksum validation on 
incoming 
binary DSDTs and SSDTs. If incorrect, a message is displayed within the 
table 
header dump at the start of the disassembly.

Implemented additional debugging information in the namespace listing 
file 
created during compilation. In addition to the namespace hierarchy, the 
full 
pathname to each namespace object is displayed.

Fixed a problem with the disassembler where invalid ACPI tables could 
cause 
faults or infinite loops.

Fixed an unexpected parse error when using the optional "parameter types" 
list in a control method declaration. (Lin Ming) BZ 397

Fixed a problem where two External declarations with the same name did 
not 
cause an error (Lin Ming) BZ 509

Implemented support for full TermArgs (adding Argx, Localx and method 
invocation) for the ParameterData parameter to the LoadTable operator. 
(Lin 
Ming) BZ 583,587

----------------------------------------
19 December 2007. Summary of changes for version 20071219:

1) ACPI CA Core Subsystem:

Implemented full support for deferred execution for the TermArg string 
arguments for DataTableRegion. This enables forward references and full 
operand resolution for the three string arguments. Similar to 
OperationRegion 
deferred argument execution.) Lin Ming. BZ 430

Implemented full argument resolution support for the BankValue argument 
to 
BankField. Previously, only constants were supported, now any TermArg may 
be 
used. Lin Ming BZ 387, 393

Fixed a problem with AcpiGetDevices where the search of a branch of the 
device tree could be terminated prematurely. In accordance with the ACPI 
specification, the search down the current branch is terminated if a 
device 
is both not present and not functional (instead of just not present.) 
Yakui 
Zhao.

Fixed a problem where "unknown" GPEs could be allowed to fire repeatedly 
if 
the underlying AML code changed the GPE enable registers. Now, any 
unknown 
incoming GPE (no _Lxx/_Exx method and not the EC GPE) is immediately 
disabled 
instead of simply ignored. Rui Zhang.

Fixed a problem with Index Fields where the Index register was 
incorrectly 
limited to a maximum of 32 bits. Now any size may be used.

Fixed a couple memory leaks associated with "implicit return" objects 
when 
the AML Interpreter slack mode is enabled. Lin Ming BZ 349

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  79.0K Code, 17.2K Data,  96.2K Total
    Debug Version:     157.9K Code, 63.6K Data, 221.5K Total
  Current Release:
    Non-Debug Version:  79.3K Code, 17.2K Data,  96.5K Total
    Debug Version:     158.6K Code, 63.8K Data, 222.4K Total

----------------------------------------
14 November 2007. Summary of changes for version 20071114:

1) ACPI CA Core Subsystem:

Implemented event counters for each of the Fixed Events, the ACPI SCI 
(interrupt) itself, and control methods executed. Named 
AcpiFixedEventCount[], AcpiSciCount, and AcpiMethodCount respectively. 
These 
should be useful for debugging and statistics.

Implemented a new external interface, AcpiGetStatistics, to retrieve the 
contents of the various event counters. Returns the current values for 
AcpiSciCount, AcpiGpeCount, the AcpiFixedEventCount array, and 
AcpiMethodCount. The interface can be expanded in the future if new 
counters 
are added. Device drivers should use this interface rather than access 
the 
counters directly.

Fixed a problem with the FromBCD and ToBCD operators. With some 
compilers, 
the ShortDivide function worked incorrectly, causing problems with the 
BCD 
functions with large input values. A truncation from 64-bit to 32-bit 
inadvertently occurred. Internal BZ 435. Lin Ming

Fixed a problem with Index references passed as method arguments. 
References 
passed as arguments to control methods were dereferenced immediately 
(before 
control was passed to the called method). The references are now 
correctly 
passed directly to the called method. BZ 5389. Lin Ming

Fixed a problem with CopyObject used in conjunction with the Index 
operator. 
The reference was incorrectly dereferenced before the copy. The reference 
is 
now correctly copied. BZ 5391. Lin Ming

Fixed a problem with Control Method references within Package objects. 
These 
references are now correctly generated. This completes the package 
construction overhaul that began in version 20071019.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  78.8K Code, 17.2K Data,  96.0K Total
    Debug Version:     157.2K Code, 63.4K Data, 220.6K Total
  Current Release:
    Non-Debug Version:  79.0K Code, 17.2K Data,  96.2K Total
    Debug Version:     157.9K Code, 63.6K Data, 221.5K Total


2) iASL Compiler/Disassembler and Tools:

The AcpiExec utility now installs handlers for all of the predefined 
Operation Region types. New types supported are: PCI_Config, CMOS, and 
PCIBARTarget.

Fixed a problem with the 64-bit version of AcpiExec where the extended 
(64-
bit) address fields for the DSDT and FACS within the FADT were not being 
used, causing truncation of the upper 32-bits of these addresses. Lin 
Ming 
and Bob Moore

----------------------------------------
19 October 2007. Summary of changes for version 20071019:

1) ACPI CA Core Subsystem:

Fixed a problem with the Alias operator when the target of the alias is a 
named ASL operator that opens a new scope -- Scope, Device, 
PowerResource, 
Processor, and ThermalZone. In these cases, any children of the original 
operator could not be accessed via the alias, potentially causing 
unexpected 
AE_NOT_FOUND exceptions. (BZ 9067)

Fixed a problem with the Package operator where all named references were 
created as object references and left otherwise unresolved. According to 
the 
ACPI specification, a Package can only contain Data Objects or references 
to 
control methods. The implication is that named references to Data Objects 
(Integer, Buffer, String, Package, BufferField, Field) should be resolved 
immediately upon package creation. This is the approach taken with this 
change. References to all other named objects (Methods, Devices, Scopes, 
etc.) are all now properly created as reference objects. (BZ 5328)

Reverted a change to Notify handling that was introduced in version 
20070508. This version changed the Notify handling from asynchronous to 
fully synchronous (Device driver Notify handling with respect to the 
Notify 
ASL operator). It was found that this change caused more problems than it 
solved and was removed by most users.

Fixed a problem with the Increment and Decrement operators where the type 
of 
the target object could be unexpectedly and incorrectly changed. (BZ 353) 
Lin Ming.

Fixed a problem with the Load and LoadTable operators where the table 
location within the namespace was ignored. Instead, the table was always 
loaded into the root or current scope. Lin Ming.

Fixed a problem with the Load operator when loading a table from a buffer 
object. The input buffer was prematurely zeroed and/or deleted. (BZ 577)

Fixed a problem with the Debug object where a store of a DdbHandle 
reference 
object to the Debug object could cause a fault.

Added a table checksum verification for the Load operator, in the case 
where 
the load is from a buffer. (BZ 578).

Implemented additional parameter validation for the LoadTable operator. 
The 
length of the input strings SignatureString, OemIdString, and OemTableId 
are 
now checked for maximum lengths. (BZ 582) Lin Ming.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  78.5K Code, 17.1K Data,  95.6K Total
    Debug Version:     156.7K Code, 63.2K Data, 219.9K Total
  Current Release:
    Non-Debug Version:  78.8K Code, 17.2K Data,  96.0K Total
    Debug Version:     157.2K Code, 63.4K Data, 220.6K Total


2) iASL Compiler/Disassembler:

Fixed a problem where if a single file was specified and the file did not 
exist, no error message was emitted. (Introduced with wildcard support in 
version 20070917.)

----------------------------------------
19 September 2007. Summary of changes for version 20070919:

1) ACPI CA Core Subsystem:

Designed and implemented new external interfaces to install and remove 
handlers for ACPI table-related events. Current events that are defined 
are 
LOAD and UNLOAD. These interfaces allow the host to track ACPI tables as 
they are dynamically loaded and unloaded. See AcpiInstallTableHandler and 
AcpiRemoveTableHandler. (Lin Ming and Bob Moore)

Fixed a problem where the use of the AcpiGbl_AllMethodsSerialized flag 
(acpi_serialized option on Linux) could cause some systems to hang during 
initialization. (Bob Moore) BZ 8171

Fixed a problem where objects of certain types (Device, ThermalZone, 
Processor, PowerResource) can be not found if they are declared and 
referenced from within the same control method (Lin Ming) BZ 341

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  78.3K Code, 17.0K Data,  95.3K Total
    Debug Version:     156.3K Code, 63.1K Data, 219.4K Total
  Current Release:
    Non-Debug Version:  78.5K Code, 17.1K Data,  95.6K Total
    Debug Version:     156.7K Code, 63.2K Data, 219.9K Total


2) iASL Compiler/Disassembler:

Implemented support to allow multiple files to be compiled/disassembled 
in 
a 
single invocation. This includes command line wildcard support for both 
the 
Windows and Unix versions of the compiler. This feature simplifies the 
disassembly and compilation of multiple ACPI tables in a single 
directory.

----------------------------------------
08 May 2007. Summary of changes for version 20070508:

1) ACPI CA Core Subsystem:

Implemented a Microsoft compatibility design change for the handling of 
the 
Notify AML operator. Previously, notify handlers were dispatched and 
executed completely asynchronously in a deferred thread. The new design 
still executes the notify handlers in a different thread, but the 
original 
thread that executed the Notify() now waits at a synchronization point 
for 
the notify handler to complete. Some machines depend on a synchronous 
Notify 
operator in order to operate correctly.

Implemented support to allow Package objects to be passed as method 
arguments to the external AcpiEvaluateObject interface. Previously, this 
would return the AE_NOT_IMPLEMENTED exception. This feature had not been 
implemented since there were no reserved control methods that required it 
until recently.

Fixed a problem with the internal FADT conversion where ACPI 1.0 FADTs 
that 
contained invalid non-zero values in reserved fields could cause later 
failures because these fields have meaning in later revisions of the 
FADT. 
For incoming ACPI 1.0 FADTs, these fields are now always zeroed. (The 
fields 
are: Preferred_PM_Profile, PSTATE_CNT, CST_CNT, and IAPC_BOOT_FLAGS.)

Fixed a problem where the Global Lock handle was not properly updated if 
a 
thread that acquired the Global Lock via executing AML code then 
attempted 
to acquire the lock via the AcpiAcquireGlobalLock interface. Reported by 
Joe 
Liu.

Fixed a problem in AcpiEvDeleteGpeXrupt where the global interrupt list 
could be corrupted if the interrupt being removed was at the head of the 
list. Reported by Linn Crosetto.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  78.0K Code, 17.1K Data,  95.1K Total
    Debug Version:     155.9K Code, 63.1K Data, 219.0K Total
  Current Release:
    Non-Debug Version:  78.3K Code, 17.0K Data,  95.3K Total
    Debug Version:     156.3K Code, 63.1K Data, 219.4K Total

----------------------------------------
20 March 2007. Summary of changes for version 20070320:

1) ACPI CA Core Subsystem:

Implemented a change to the order of interpretation and evaluation of AML 
operand objects within the AML interpreter. The interpreter now evaluates 
operands in the order that they appear in the AML stream (and the 
corresponding ASL code), instead of in the reverse order (after the 
entire 
operand list has been parsed). The previous behavior caused several 
subtle 
incompatibilities with the Microsoft AML interpreter as well as being 
somewhat non-intuitive. BZ 7871, local BZ 263. Valery Podrezov.

Implemented a change to the ACPI Global Lock support. All interfaces to 
the 
global lock now allow the same thread to acquire the lock multiple times. 
This affects the AcpiAcquireGlobalLock external interface to the global 
lock 
as well as the internal use of the global lock to support AML fields -- a 
control method that is holding the global lock can now simultaneously 
access 
AML fields that require global lock protection. Previously, in both 
cases, 
this would have resulted in an AE_ALREADY_ACQUIRED exception. The change 
to 
AcpiAcquireGlobalLock is of special interest to drivers for the Embedded 
Controller. There is no change to the behavior of the AML Acquire 
operator, 
as this can already be used to acquire a mutex multiple times by the same 
thread. BZ 8066. With assistance from Alexey Starikovskiy.

Fixed a problem where invalid objects could be referenced in the AML 
Interpreter after error conditions. During operand evaluation, ensure 
that 
the internal "Return Object" field is cleared on error and only valid 
pointers are stored there. Caused occasional access to deleted objects 
that 
resulted in "large reference count" warning messages. Valery Podrezov.

Fixed a problem where an AE_STACK_OVERFLOW internal exception could occur 
on 
deeply nested control method invocations. BZ 7873, local BZ 487. Valery 
Podrezov.

Fixed an internal problem with the handling of result objects on the 
interpreter result stack. BZ 7872. Valery Podrezov.

Removed obsolete code that handled the case where AML_NAME_OP is the 
target 
of a reference (Reference.Opcode). This code was no longer necessary. BZ 
7874. Valery Podrezov.

Removed obsolete ACPI_NO_INTEGER64_SUPPORT from two header files. This 
was 
a 
remnant from the previously discontinued 16-bit support.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  78.0K Code, 17.1K Data,  95.1K Total
    Debug Version:     155.8K Code, 63.3K Data, 219.1K Total
  Current Release:
    Non-Debug Version:  78.0K Code, 17.1K Data,  95.1K Total
    Debug Version:     155.9K Code, 63.1K Data, 219.0K Total

----------------------------------------
26 January 2007. Summary of changes for version 20070126:

1) ACPI CA Core Subsystem:

Added the 2007 copyright to all module headers and signons. This affects 
virtually every file in the ACPICA core subsystem, the iASL compiler, and 
the utilities.

Implemented a fix for an incorrect parameter passed to AcpiTbDeleteTable 
during a table load. A bad pointer was passed in the case where the DSDT 
is 
overridden, causing a fault in this case.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  78.0K Code, 17.1K Data,  95.1K Total
    Debug Version:     155.8K Code, 63.3K Data, 219.1K Total
  Current Release:
    Non-Debug Version:  78.0K Code, 17.1K Data,  95.1K Total
    Debug Version:     155.8K Code, 63.3K Data, 219.1K Total

----------------------------------------
15 December 2006. Summary of changes for version 20061215:

1) ACPI CA Core Subsystem:

Support for 16-bit ACPICA has been completely removed since it is no 
longer 
necessary and it clutters the code. All 16-bit macros, types, and 
conditional compiles have been removed, cleaning up and simplifying the 
code 
across the entire subsystem. DOS support is no longer needed since the 
bootable Linux firmware kit is now available.

The handler for the Global Lock is now removed during AcpiTerminate to 
enable a clean subsystem restart, via the implementation of the 
AcpiEvRemoveGlobalLockHandler function. (With assistance from Joel Bretz, 
HP)

Implemented enhancements to the multithreading support within the 
debugger 
to enable improved multithreading debugging and evaluation of the 
subsystem. 
(Valery Podrezov)

Debugger: Enhanced the Statistics/Memory command to emit the total 
(maximum) 
memory used during the execution, as well as the maximum memory consumed 
by 
each of the various object types. (Valery Podrezov)

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  77.9K Code, 17.0K Data,  94.9K Total
    Debug Version:     155.2K Code, 63.1K Data, 218.3K Total
  Current Release:
    Non-Debug Version:  78.0K Code, 17.1K Data,  95.1K Total
    Debug Version:     155.8K Code, 63.3K Data, 219.1K Total


2) iASL Compiler/Disassembler and Tools:

AcpiExec: Implemented a new option (-m) to display full memory use 
statistics upon subsystem/program termination. (Valery Podrezov)

----------------------------------------
09 November 2006. Summary of changes for version 20061109:

1) ACPI CA Core Subsystem:

Optimized the Load ASL operator in the case where the source operand is 
an 
operation region. Simply map the operation region memory, instead of 
performing a bytewise read. (Region must be of type SystemMemory, see 
below.)

Fixed the Load ASL operator for the case where the source operand is a 
region field. A buffer object is also allowed as the source operand. BZ 
480

Fixed a problem where the Load ASL operator allowed the source operand to 
be 
an operation region of any type. It is now restricted to regions of type 
SystemMemory, as per the ACPI specification. BZ 481

Additional cleanup and optimizations for the new Table Manager code.

AcpiEnable will now fail if all of the required ACPI tables are not 
loaded 
(FADT, FACS, DSDT). BZ 477

Added #pragma pack(8/4) to acobject.h to ensure that the structures in 
this 
header are always compiled as aligned. The ACPI_OPERAND_OBJECT has been 
manually optimized to be aligned and will not work if it is byte-packed. 

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  78.1K Code, 17.1K Data,  95.2K Total
    Debug Version:     155.4K Code, 63.1K Data, 218.5K Total
  Current Release:
    Non-Debug Version:  77.9K Code, 17.0K Data,  94.9K Total
    Debug Version:     155.2K Code, 63.1K Data, 218.3K Total


2) iASL Compiler/Disassembler and Tools:

Fixed a problem where the presence of the _OSI predefined control method 
within complex expressions could cause an internal compiler error.

AcpiExec: Implemented full region support for multiple address spaces. 
SpaceId is now part of the REGION object. BZ 429

----------------------------------------
11 October 2006. Summary of changes for version 20061011:

1) ACPI CA Core Subsystem:

Completed an AML interpreter performance enhancement for control method 
execution. Previously a 2-pass parse/execution, control methods are now 
completely parsed and executed in a single pass. This improves overall 
interpreter performance by ~25%, reduces code size, and reduces CPU stack 
use. (Valery Podrezov + interpreter changes in version 20051202 that 
eliminated namespace loading during the pass one parse.)

Implemented _CID support for PCI Root Bridge detection. If the _HID does 
not 
match the predefined PCI Root Bridge IDs, the _CID list (if present) is 
now 
obtained and also checked for an ID match.

Implemented additional support for the PCI _ADR execution: upsearch until 
a 
device scope is found before executing _ADR. This allows PCI_Config 
operation regions to be declared locally within control methods 
underneath 
PCI device objects.

Fixed a problem with a possible race condition between threads executing 
AcpiWalkNamespace and the AML interpreter. This condition was removed by 
modifying AcpiWalkNamespace to (by default) ignore all temporary 
namespace 
entries created during any concurrent control method execution. An 
additional namespace race condition is known to exist between 
AcpiWalkNamespace and the Load/Unload ASL operators and is still under 
investigation.

Restructured the AML ParseLoop function, breaking it into several 
subfunctions in order to reduce CPU stack use and improve 
maintainability. 
(Mikhail Kouzmich)

AcpiGetHandle: Fix for parameter validation to detect invalid 
combinations 
of prefix handle and pathname. BZ 478

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  77.9K Code, 17.1K Data,  95.0K Total
    Debug Version:     154.6K Code, 63.0K Data, 217.6K Total
  Current Release:
    Non-Debug Version:  78.1K Code, 17.1K Data,  95.2K Total
    Debug Version:     155.4K Code, 63.1K Data, 218.5K Total

2) iASL Compiler/Disassembler and Tools:

Ported the -g option (get local ACPI tables) to the new ACPICA Table 
Manager 
to restore original behavior.

----------------------------------------
27 September 2006. Summary of changes for version 20060927:

1) ACPI CA Core Subsystem:

Removed the "Flags" parameter from AcpiGetRegister and AcpiSetRegister. 
These functions now use a spinlock for mutual exclusion and the interrupt 
level indication flag is not needed.

Fixed a problem with the Global Lock where the lock could appear to be 
obtained before it is actually obtained. The global lock semaphore was 
inadvertently created with one unit instead of zero units. (BZ 464) 
Fiodor 
Suietov.

Fixed a possible memory leak and fault in AcpiExResolveObjectToValue 
during 
a read from a buffer or region field. (BZ 458) Fiodor Suietov.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  77.9K Code, 17.1K Data,  95.0K Total
    Debug Version:     154.7K Code, 63.0K Data, 217.7K Total
  Current Release:
    Non-Debug Version:  77.9K Code, 17.1K Data,  95.0K Total
    Debug Version:     154.6K Code, 63.0K Data, 217.6K Total


2) iASL Compiler/Disassembler and Tools:

Fixed a compilation problem with the pre-defined Resource Descriptor 
field 
names where an "object does not exist" error could be incorrectly 
generated 
if the parent ResourceTemplate pathname places the template within a 
different namespace scope than the current scope. (BZ 7212)

Fixed a problem where the compiler could hang after syntax errors 
detected 
in an ElseIf construct. (BZ 453)

Fixed a problem with the AmlFilename parameter to the DefinitionBlock() 
operator. An incorrect output filename was produced when this parameter 
was 
a null string (""). Now, the original input filename is used as the AML 
output filename, with an ".aml" extension.

Implemented a generic batch command mode for the AcpiExec utility 
(execute 
any AML debugger command) (Valery Podrezov).

----------------------------------------
12 September 2006. Summary of changes for version 20060912:

1) ACPI CA Core Subsystem:

Enhanced the implementation of the "serialized mode" of the interpreter 
(enabled via the AcpiGbl_AllMethodsSerialized flag.) When this mode is 
specified, instead of creating a serialization semaphore per control 
method, 
the interpreter lock is simply no longer released before a blocking 
operation during control method execution. This effectively makes the AML 
Interpreter single-threaded. The overhead of a semaphore per-method is 
eliminated.

Fixed a regression where an error was no longer emitted if a control 
method 
attempts to create 2 objects of the same name. This once again returns 
AE_ALREADY_EXISTS. When this exception occurs, it invokes the mechanism 
that 
will dynamically serialize the control method to possible prevent future 
errors. (BZ 440)

Integrated a fix for a problem with PCI Express HID detection in the PCI 
Config Space setup procedure. (BZ 7145)

Moved all FADT-related functions to a new file, tbfadt.c. Eliminated the 
AcpiHwInitialize function - the FADT registers are now validated when the 
table is loaded.

Added two new warnings during FADT verification - 1) if the FADT is 
larger 
than the largest known FADT version, and 2) if there is a mismatch 
between 
a 
32-bit block address and the 64-bit X counterpart (when both are non-
zero.)

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  77.9K Code, 16.7K Data,  94.6K Total
    Debug Version:     154.9K Code, 62.6K Data, 217.5K Total
  Current Release:
    Non-Debug Version:  77.9K Code, 17.1K Data,  95.0K Total
    Debug Version:     154.7K Code, 63.0K Data, 217.7K Total


2) iASL Compiler/Disassembler and Tools:

Fixed a problem with the implementation of the Switch() operator where 
the 
temporary variable was declared too close to the actual Switch, instead 
of 
at method level. This could cause a problem if the Switch() operator is 
within a while loop, causing an error on the second iteration. (BZ 460)

Disassembler - fix for error emitted for unknown type for target of scope 
operator. Now, ignore it and continue.

Disassembly of an FADT now verifies the input FADT and reports any errors 
found. Fix for proper disassembly of full-sized (ACPI 2.0) FADTs.

Disassembly of raw data buffers with byte initialization data now 
prefixes 
each output line with the current buffer offset.

Disassembly of ASF! table now includes all variable-length data fields at 
the end of some of the subtables.

The disassembler now emits a comment if a buffer appears to be a 
ResourceTemplate, but cannot be disassembled as such because the EndTag 
does 
not appear at the very end of the buffer.

AcpiExec - Added the "-t" command line option to enable the serialized 
mode 
of the AML interpreter.

----------------------------------------
31 August 2006. Summary of changes for version 20060831:

1) ACPI CA Core Subsystem:

Miscellaneous fixes for the Table Manager:
- Correctly initialize internal common FADT for all 64-bit "X" fields
- Fixed a couple table mapping issues during table load
- Fixed a couple alignment issues for IA64
- Initialize input array to zero in AcpiInitializeTables
- Additional parameter validation for AcpiGetTable, AcpiGetTableHeader, 
AcpiGetTableByIndex

Change for GPE support: when a "wake" GPE is received, all wake GPEs are 
now 
immediately disabled to prevent the waking GPE from firing again and to 
prevent other wake GPEs from interrupting the wake process.

Added the AcpiGpeCount global that tracks the number of processed GPEs, 
to 
be used for debugging systems with a large number of ACPI interrupts.

Implemented support for the "DMAR" ACPI table (DMA Redirection Table) in 
both the ACPICA headers and the disassembler.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  77.8K Code, 16.5K Data,  94.3K Total
    Debug Version:     154.6K Code, 62.3K Data, 216.9K Total
  Current Release:
    Non-Debug Version:  77.9K Code, 16.7K Data,  94.6K Total
    Debug Version:     154.9K Code, 62.6K Data, 217.5K Total


2) iASL Compiler/Disassembler and Tools:

Disassembler support for the DMAR ACPI table.

----------------------------------------
23 August 2006. Summary of changes for version 20060823:

1) ACPI CA Core Subsystem:

The Table Manager component has been completely redesigned and 
reimplemented. The new design is much simpler, and reduces the overall 
code 
and data size of the kernel-resident ACPICA by approximately 5%. Also, it 
is 
now possible to obtain the ACPI tables very early during kernel 
initialization, even before dynamic memory management is initialized. 
(Alexey Starikovskiy, Fiodor Suietov, Bob Moore)

Obsolete ACPICA interfaces:

- AcpiGetFirmwareTable: Use AcpiGetTable instead (works at early kernel 
init 
time).
- AcpiLoadTable: Not needed.
- AcpiUnloadTable: Not needed.

New ACPICA interfaces:

- AcpiInitializeTables: Must be called before the table manager can be 
used.
- AcpiReallocateRootTable: Used to transfer the root table to dynamically 
allocated memory after it becomes available.
- AcpiGetTableByIndex: Allows the host to easily enumerate all ACPI 
tables 
in the RSDT/XSDT.

Other ACPICA changes:

- AcpiGetTableHeader returns the actual mapped table header, not a copy. 
Use 
AcpiOsUnmapMemory to free this mapping.
- AcpiGetTable returns the actual mapped table. The mapping is managed 
internally and must not be deleted by the caller. Use of this interface 
causes no additional dynamic memory allocation.
- AcpiFindRootPointer: Support for physical addressing has been 
eliminated, 
it appeared to be unused.
- The interface to AcpiOsMapMemory has changed to be consistent with the 
other allocation interfaces.
- The interface to AcpiOsGetRootPointer has changed to eliminate 
unnecessary 
parameters.
- ACPI_PHYSICAL_ADDRESS is now 32 bits on 32-bit platforms, 64 bits on 
64-
bit platforms. Was previously 64 bits on all platforms.
- The interface to the ACPI Global Lock acquire/release macros have 
changed 
slightly since ACPICA no longer keeps a local copy of the FACS with a 
constructed pointer to the actual global lock.

Porting to the new table manager:

- AcpiInitializeTables: Must be called once, and can be called anytime 
during the OS initialization process. It allows the host to specify an 
area 
of memory to be used to store the internal version of the RSDT/XSDT (root 
table). This allows the host to access ACPI tables before memory 
management 
is initialized and running.
- AcpiReallocateRootTable: Can be called after memory management is 
running 
to copy the root table to a dynamically allocated array, freeing up the 
scratch memory specified in the call to AcpiInitializeTables.
- AcpiSubsystemInitialize: This existing interface is independent of the 
Table Manager, and does not have to be called before the Table Manager 
can 
be used, it only must be called before the rest of ACPICA can be used.
- ACPI Tables: Some changes have been made to the names and structure of 
the 
actbl.h and actbl1.h header files and may require changes to existing 
code. 
For example, bitfields have been completely removed because of their lack 
of 
portability across C compilers.
- Update interfaces to the Global Lock acquire/release macros if local 
versions are used. (see acwin.h)

Obsolete files: tbconvrt.c, tbget.c, tbgetall.c, tbrsdt.c

New files: tbfind.c

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  80.7K Code, 17.9K Data,  98.6K Total
    Debug Version:     161.0K Code, 65.1K Data, 226.1K Total
  Current Release:
    Non-Debug Version:  77.8K Code, 16.5K Data,  94.3K Total
    Debug Version:     154.6K Code, 62.3K Data, 216.9K Total


2) iASL Compiler/Disassembler and Tools:

No changes for this release.

----------------------------------------
21 July 2006. Summary of changes for version 20060721:

1) ACPI CA Core Subsystem:

The full source code for the ASL test suite used to validate the iASL 
compiler and the ACPICA core subsystem is being released with the ACPICA 
source for the first time. The source is contained in a separate package 
and 
consists of over 1100 files that exercise all ASL/AML operators. The 
package 
should appear on the Intel/ACPI web site shortly. (Valery Podrezov, 
Fiodor 
Suietov)

Completed a new design and implementation for support of the ACPI Global 
Lock. On the OS side, the global lock is now treated as a standard AML 
mutex. Previously, multiple OS threads could "acquire" the global lock 
simultaneously. However, this could cause the BIOS to be starved out of 
the 
lock - especially in cases such as the Embedded Controller driver where 
there is a tight coupling between the OS and the BIOS.

Implemented an optimization for the ACPI Global Lock interrupt mechanism. 
The Global Lock interrupt handler no longer queues the execution of a 
separate thread to signal the global lock semaphore. Instead, the 
semaphore 
is signaled directly from the interrupt handler.

Implemented support within the AML interpreter for package objects that 
contain a larger AML length (package list length) than the package 
element 
count. In this case, the length of the package is truncated to match the 
package element count. Some BIOS code apparently modifies the package 
length 
on the fly, and this change supports this behavior. Provides 
compatibility 
with the MS AML interpreter. (With assistance from Fiodor Suietov)

Implemented a temporary fix for the BankValue parameter of a Bank Field 
to 
support all constant values, now including the Zero and One opcodes. 
Evaluation of this parameter must eventually be converted to a full 
TermArg 
evaluation. A not-implemented error is now returned (temporarily) for 
non-
constant values for this parameter.

Fixed problem reports (Fiodor Suietov) integrated:
- Fix for premature object deletion after CopyObject on Operation Region 
(BZ 
350)

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  80.7K Code, 18.0K Data,  98.7K Total
    Debug Version:     160.9K Code, 65.1K Data, 226.0K Total
  Current Release:
    Non-Debug Version:  80.7K Code, 17.9K Data,  98.6K Total
    Debug Version:     161.0K Code, 65.1K Data, 226.1K Total


2) iASL Compiler/Disassembler and Tools:

No changes for this release.

----------------------------------------
07 July 2006. Summary of changes for version 20060707:

1) ACPI CA Core Subsystem:

Added the ACPI_PACKED_POINTERS_NOT_SUPPORTED macro to support C compilers 
that do not allow the initialization of address pointers within packed 
structures - even though the hardware itself may support misaligned 
transfers. Some of the debug data structures are packed by default to 
minimize size.

Added an error message for the case where AcpiOsGetThreadId() returns 
zero. 
A non-zero value is required by the core ACPICA code to ensure the proper 
operation of AML mutexes and recursive control methods.

The DSDT is now the only ACPI table that determines whether the AML 
interpreter is in 32-bit or 64-bit mode. Not really a functional change, 
but 
the hooks for per-table 32/64 switching have been removed from the code. 
A 
clarification to the ACPI specification is forthcoming in ACPI 3.0B.

Fixed a possible leak of an OwnerID in the error path of 
AcpiTbInitTableDescriptor (tbinstal.c), and migrated all table OwnerID 
deletion to a single place in AcpiTbUninstallTable to correct possible 
leaks 
when using the AcpiTbDeleteTablesByType interface (with assistance from 
Lance Ortiz.)

Fixed a problem with Serialized control methods where the semaphore 
associated with the method could be over-signaled after multiple method 
invocations.

Fixed two issues with the locking of the internal namespace data 
structure. 
Both the Unload() operator and AcpiUnloadTable interface now lock the 
namespace during the namespace deletion associated with the table unload 
(with assistance from Linn Crosetto.)

Fixed problem reports (Valery Podrezov) integrated:
- Eliminate unnecessary memory allocation for CreateXxxxField (BZ 5426)

Fixed problem reports (Fiodor Suietov) integrated:
- Incomplete cleanup branches in AcpiTbGetTableRsdt (BZ 369)
- On Address Space handler deletion, needless deactivation call (BZ 374)
- AcpiRemoveAddressSpaceHandler: validate Device handle parameter (BZ 
375)
- Possible memory leak, Notify sub-objects of Processor, Power, 
ThermalZone 
(BZ 376)
- AcpiRemoveAddressSpaceHandler: validate Handler parameter (BZ 378)
- Minimum Length of RSDT should be validated (BZ 379)
- AcpiRemoveNotifyHandler: return AE_NOT_EXIST if Processor Obj has no 
Handler (BZ (380)
- AcpiUnloadTable: return AE_NOT_EXIST if no table of specified type 
loaded 
(BZ 381)

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  80.5K Code, 17.8K Data,  98.3K Total
    Debug Version:     160.8K Code, 64.8K Data, 225.6K Total
  Current Release:
    Non-Debug Version:  80.7K Code, 17.9K Data,  98.6K Total
    Debug Version:     161.0K Code, 65.1K Data, 226.1K Total


2) iASL Compiler/Disassembler and Tools:

Fixed problem reports:
Compiler segfault when ASL contains a long (>1024) String declaration (BZ 
436)

----------------------------------------
23 June 2006. Summary of changes for version 20060623:

1) ACPI CA Core Subsystem:

Implemented a new ACPI_SPINLOCK type for the OSL lock interfaces. This 
allows the type to be customized to the host OS for improved efficiency 
(since a spinlock is usually a very small object.)

Implemented support for "ignored" bits in the ACPI registers. According 
to 
the ACPI specification, these bits should be preserved when writing the 
registers via a read/modify/write cycle. There are 3 bits preserved in 
this 
manner: PM1_CONTROL[0] (SCI_EN), PM1_CONTROL[9], and PM1_STATUS[11].

Implemented the initial deployment of new OSL mutex interfaces. Since 
some 
host operating systems have separate mutex and semaphore objects, this 
feature was requested. The base code now uses mutexes (and the new mutex 
interfaces) wherever a binary semaphore was used previously. However, for 
the current release, the mutex interfaces are defined as macros to map 
them 
to the existing semaphore interfaces. Therefore, no OSL changes are 
required 
at this time. (See acpiosxf.h)

Fixed several problems with the support for the control method SyncLevel 
parameter. The SyncLevel now works according to the ACPI specification 
and 
in concert with the Mutex SyncLevel parameter, since the current 
SyncLevel 
is a property of the executing thread. Mutual exclusion for control 
methods 
is now implemented with a mutex instead of a semaphore.

Fixed three instances of the use of the C shift operator in the bitfield 
support code (exfldio.c) to avoid the use of a shift value larger than 
the 
target data width. The behavior of C compilers is undefined in this case 
and 
can cause unpredictable results, and therefore the case must be detected 
and 
avoided. (Fiodor Suietov)

Added an info message whenever an SSDT or OEM table is loaded dynamically 
via the Load() or LoadTable() ASL operators. This should improve 
debugging 
capability since it will show exactly what tables have been loaded 
(beyond 
the tables present in the RSDT/XSDT.)

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  80.0K Code, 17.6K Data,  97.6K Total
    Debug Version:     160.2K Code, 64.7K Data, 224.9K Total
  Current Release:
    Non-Debug Version:  80.5K Code, 17.8K Data,  98.3K Total
    Debug Version:     160.8K Code, 64.8K Data, 225.6K Total


2) iASL Compiler/Disassembler and Tools:

No changes for this release.

----------------------------------------
08 June 2006. Summary of changes for version 20060608:

1) ACPI CA Core Subsystem:

Converted the locking mutex used for the ACPI hardware to a spinlock. 
This 
change should eliminate all problems caused by attempting to acquire a 
semaphore at interrupt level, and it means that all ACPICA external 
interfaces that directly access the ACPI hardware can be safely called 
from 
interrupt level. OSL code that implements the semaphore interfaces should 
be 
able to eliminate any workarounds for being called at interrupt level.

Fixed a regression introduced in 20060526 where the ACPI device 
initialization could be prematurely aborted with an AE_NOT_FOUND if a 
device 
did not have an optional _INI method.

Fixed an IndexField issue where a write to the Data Register should be 
limited in size to the AccessSize (width) of the IndexField itself. (BZ 
433, 
Fiodor Suietov)

Fixed problem reports (Valery Podrezov) integrated:
- Allow store of ThermalZone objects to Debug object (BZ 5369/5370)

Fixed problem reports (Fiodor Suietov) integrated:
- AcpiGetTableHeader doesn't handle multiple instances correctly (BZ 364)

Removed four global mutexes that were obsolete and were no longer being 
used.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  80.0K Code, 17.7K Data,  97.7K Total
    Debug Version:     160.3K Code, 64.9K Data, 225.2K Total
  Current Release:
    Non-Debug Version:  80.0K Code, 17.6K Data,  97.6K Total
    Debug Version:     160.2K Code, 64.7K Data, 224.9K Total


2) iASL Compiler/Disassembler and Tools:

Fixed a fault when using -g option (get tables from registry) on Windows 
machines.

Fixed problem reports integrated:
- Generate error if CreateField NumBits parameter is zero. (BZ 405)
- Fault if Offset/Length in Field unit is very large (BZ 432, Fiodor 
Suietov)
- Global table revision override (-r) is ignored (BZ 413)

----------------------------------------
26 May 2006. Summary of changes for version 20060526:

1) ACPI CA Core Subsystem:

Restructured, flattened, and simplified the internal interfaces for 
namespace object evaluation - resulting in smaller code, less CPU stack 
use, 
and fewer interfaces. (With assistance from Mikhail Kouzmich)

Fixed a problem with the CopyObject operator where the first parameter 
was 
not typed correctly for the parser, interpreter, compiler, and 
disassembler. 
Caused various errors and unexpected behavior.

Fixed a problem where a ShiftLeft or ShiftRight of more than 64 bits 
produced incorrect results with some C compilers. Since the behavior of C 
compilers when the shift value is larger than the datatype width is 
apparently not well defined, the interpreter now detects this condition 
and 
simply returns zero as expected in all such cases. (BZ 395)

Fixed problem reports (Valery Podrezov) integrated:
- Update String-to-Integer conversion to match ACPI 3.0A spec (BZ 5329)
- Allow interpreter to handle nested method declarations (BZ 5361)

Fixed problem reports (Fiodor Suietov) integrated:
- AcpiTerminate doesn't free debug memory allocation list objects (BZ 
355)
- After Core Subsystem shutdown, AcpiSubsystemStatus returns AE_OK (BZ 
356)
- AcpiOsUnmapMemory for RSDP can be invoked inconsistently (BZ 357)
- Resource Manager should return AE_TYPE for non-device objects (BZ 358)
- Incomplete cleanup branch in AcpiNsEvaluateRelative (BZ 359)
- Use AcpiOsFree instead of ACPI_FREE in AcpiRsSetSrsMethodData (BZ 360)
- Incomplete cleanup branch in AcpiPsParseAml (BZ 361)
- Incomplete cleanup branch in AcpiDsDeleteWalkState (BZ 362)
- AcpiGetTableHeader returns AE_NO_ACPI_TABLES until DSDT is loaded (BZ 
365)
- Status of the Global Initialization Handler call not used (BZ 366)
- Incorrect object parameter to Global Initialization Handler (BZ 367)

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  79.8K Code, 17.7K Data,  97.5K Total
    Debug Version:     160.5K Code, 65.1K Data, 225.6K Total
  Current Release:
    Non-Debug Version:  80.0K Code, 17.7K Data,  97.7K Total
    Debug Version:     160.3K Code, 64.9K Data, 225.2K Total


2) iASL Compiler/Disassembler and Tools:

Modified the parser to allow the names IO, DMA, and IRQ to be used as 
namespace identifiers with no collision with existing resource descriptor 
macro names. This provides compatibility with other ASL compilers and is 
most useful for disassembly/recompilation of existing tables without 
parse 
errors. (With assistance from Thomas Renninger)

Disassembler: fixed an incorrect disassembly problem with the 
DataTableRegion and CopyObject operators. Fixed a possible fault during 
disassembly of some Alias operators.

----------------------------------------
12 May 2006. Summary of changes for version 20060512:

1) ACPI CA Core Subsystem:

Replaced the AcpiOsQueueForExecution interface with a new interface named 
AcpiOsExecute. The major difference is that the new interface does not 
have 
a Priority parameter, this appeared to be useless and has been replaced 
by 
a 
Type parameter. The Type tells the host what type of execution is being 
requested, such as global lock handler, notify handler, GPE handler, etc. 
This allows the host to queue and execute the request as appropriate for 
the 
request type, possibly using different work queues and different 
priorities 
for the various request types. This enables fixes for multithreading 
deadlock problems such as BZ #5534, and will require changes to all 
existing 
OS interface layers. (Alexey Starikovskiy and Bob Moore)

Fixed a possible memory leak associated with the support for the so-
called 
"implicit return" ACPI extension. Reported by FreeBSD, BZ #6514. (Fiodor 
Suietov)

Fixed a problem with the Load() operator where a table load from an 
operation region could overwrite an internal table buffer by up to 7 
bytes 
and cause alignment faults on IPF systems. (With assistance from Luming 
Yu)

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  79.7K Code, 17.7K Data,  97.4K Total
    Debug Version:     160.1K Code, 65.2K Data, 225.3K Total
  Current Release:
    Non-Debug Version:  79.8K Code, 17.7K Data,  97.5K Total
    Debug Version:     160.5K Code, 65.1K Data, 225.6K Total



2) iASL Compiler/Disassembler and Tools:

Disassembler: Implemented support to cross reference the internal 
namespace 
and automatically generate ASL External() statements for symbols not 
defined 
within the current table being disassembled. This will simplify the 
disassembly and recompilation of interdependent tables such as SSDTs 
since 
these statements will no longer have to be added manually.

Disassembler: Implemented experimental support to automatically detect 
invocations of external control methods and generate appropriate 
External() 
statements. This is problematic because the AML cannot be correctly 
parsed 
until the number of arguments for each control method is known. 
Currently, 
standalone method invocations and invocations as the source operand of a 
Store() statement are supported.

Disassembler: Implemented support for the ASL pseudo-operators LNotEqual, 
LLessEqual, and LGreaterEqual. Previously disassembled as LNot(LEqual()), 
LNot(LGreater()), and LNot(LLess()), this makes the disassembled ASL code 
more readable and likely closer to the original ASL source.

----------------------------------------
21 April 2006. Summary of changes for version 20060421:

1) ACPI CA Core Subsystem:

Removed a device initialization optimization introduced in 20051216 where 
the _STA method was not run unless an _INI was also present for the same 
device. This optimization could cause problems because it could allow 
_INI 
methods to be run within a not-present device subtree. (If a not-present 
device had no _INI, _STA would not be run, the not-present status would 
not 
be discovered, and the children of the device would be incorrectly 
traversed.)

Implemented a new _STA optimization where namespace subtrees that do not 
contain _INI are identified and ignored during device initialization. 
Selectively running _STA can significantly improve boot time on large 
machines (with assistance from Len Brown.)

Implemented support for the device initialization case where the returned 
_STA flags indicate a device not-present but functioning. In this case, 
_INI 
is not run, but the device children are examined for presence, as per the 
ACPI specification.

Implemented an additional change to the IndexField support in order to 
conform to MS behavior. The value written to the Index Register is not 
simply a byte offset, it is a byte offset in units of the access width of 
the parent Index Field. (Fiodor Suietov)

Defined and deployed a new OSL interface, AcpiOsValidateAddress. This 
interface is called during the creation of all AML operation regions, and 
allows the host OS to exert control over what addresses it will allow the 
AML code to access. Operation Regions whose addresses are disallowed will 
cause a runtime exception when they are actually accessed (will not 
affect 
or abort table loading.) See oswinxf or osunixxf for an example 
implementation.

Defined and deployed a new OSL interface, AcpiOsValidateInterface. This 
interface allows the host OS to match the various "optional" 
interface/behavior strings for the _OSI predefined control method as 
appropriate (with assistance from Bjorn Helgaas.) See oswinxf or osunixxf 
for an example implementation.

Restructured and corrected various problems in the exception handling 
code 
paths within DsCallControlMethod and DsTerminateControlMethod in dsmethod 
(with assistance from Takayoshi Kochi.)

Modified the Linux source converter to ignore quoted string literals 
while 
converting identifiers from mixed to lower case. This will correct 
problems 
with the disassembler and other areas where such strings must not be 
modified.

The ACPI_FUNCTION_* macros no longer require quotes around the function 
name. This allows the Linux source converter to convert the names, now 
that 
the converter ignores quoted strings.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:

    Non-Debug Version:  81.1K Code, 17.7K Data,  98.8K Total
    Debug Version:     158.9K Code, 64.9K Data, 223.8K Total
  Current Release:
    Non-Debug Version:  79.7K Code, 17.7K Data,  97.4K Total
    Debug Version:     160.1K Code, 65.2K Data, 225.3K Total


2) iASL Compiler/Disassembler and Tools:

Implemented 3 new warnings for iASL, and implemented multiple warning 
levels 
(w2 flag).

1) Ignored timeouts: If the TimeoutValue parameter to Wait or Acquire is 
not 
WAIT_FOREVER (0xFFFF) and the code does not examine the return value to 
check for the possible timeout, a warning is issued.

2) Useless operators: If an ASL operator does not specify an optional 
target 
operand and it also does not use the function return value from the 
operator, a warning is issued since the operator effectively does 
nothing.

3) Unreferenced objects: If a namespace object is created, but never 
referenced, a warning is issued. This is a warning level 2 since there 
are 
cases where this is ok, such as when a secondary table is loaded that 
uses 
the unreferenced objects. Even so, care is taken to only flag objects 
that 
don't look like they will ever be used. For example, the reserved methods 
(starting with an underscore) are usually not referenced because it is 
expected that the OS will invoke them.

----------------------------------------
31 March 2006. Summary of changes for version 20060331:

1) ACPI CA Core Subsystem:

Implemented header file support for the following additional ACPI tables: 
ASF!, BOOT, CPEP, DBGP, MCFG, SPCR, SPMI, TCPA, and WDRT. With this 
support, 
all current and known ACPI tables are now defined in the ACPICA headers 
and 
are available for use by device drivers and other software.

Implemented support to allow tables that contain ACPI names with invalid 
characters to be loaded. Previously, this would cause the table load to 
fail, but since there are several known cases of such tables on existing 
machines, this change was made to enable ACPI support for them. Also, 
this 
matches the behavior of the Microsoft ACPI implementation.

Fixed a couple regressions introduced during the memory optimization in 
the 
20060317 release. The namespace node definition required additional 
reorganization and an internal datatype that had been changed to 8-bit 
was 
restored to 32-bit. (Valery Podrezov)

Fixed a problem where a null pointer passed to AcpiUtDeleteGenericState 
could be passed through to AcpiOsReleaseObject which is unexpected. Such 
null pointers are now trapped and ignored, matching the behavior of the 
previous implementation before the deployment of AcpiOsReleaseObject.
(Valery Podrezov, Fiodor Suietov)

Fixed a memory mapping leak during the deletion of a SystemMemory 
operation 
region where a cached memory mapping was not deleted. This became a 
noticeable problem for operation regions that are defined within 
frequently 
used control methods. (Dana Meyers)

Reorganized the ACPI table header files into two main files: one for the 
ACPI tables consumed by the ACPICA core, and another for the 
miscellaneous 
ACPI tables that are consumed by the drivers and other software. The 
various 
FADT definitions were merged into one common section and three different 
tables (ACPI 1.0, 1.0+, and 2.0)

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  80.9K Code, 17.7K Data,  98.6K Total
    Debug Version:     158.7K Code, 64.8K Data, 223.5K Total
  Current Release:
    Non-Debug Version:  81.1K Code, 17.7K Data,  98.8K Total
    Debug Version:     158.9K Code, 64.9K Data, 223.8K Total


2) iASL Compiler/Disassembler and Tools:

Disassembler: Implemented support to decode and format all non-AML ACPI 
tables (tables other than DSDTs and SSDTs.) This includes the new tables 
added to the ACPICA headers, therefore all current and known ACPI tables 
are 
supported.

Disassembler: The change to allow ACPI names with invalid characters also 
enables the disassembly of such tables. Invalid characters within names 
are 
changed to '*' to make the name printable; the iASL compiler will still 
generate an error for such names, however, since this is an invalid ACPI 
character.

Implemented an option for AcpiXtract (-a) to extract all tables found in 
the 
input file. The default invocation extracts only the DSDTs and SSDTs.

Fixed a couple of gcc generation issues for iASL and AcpiExec and added a 
makefile for the AcpiXtract utility.

----------------------------------------
17 March 2006. Summary of changes for version 20060317:

1) ACPI CA Core Subsystem:

Implemented the use of a cache object for all internal namespace nodes. 
Since there are about 1000 static nodes in a typical system, this will 
decrease memory use for cache implementations that minimize per-
allocation 
overhead (such as a slab allocator.)

Removed the reference count mechanism for internal namespace nodes, since 
it 
was deemed unnecessary. This reduces the size of each namespace node by 
about 5%-10% on all platforms. Nodes are now 20 bytes for the 32-bit 
case, 
and 32 bytes for the 64-bit case.

Optimized several internal data structures to reduce object size on 64-
bit 
platforms by packing data within the 64-bit alignment. This includes the 
frequently used ACPI_OPERAND_OBJECT, of which there can be ~1000 static 
instances corresponding to the namespace objects.

Added two new strings for the predefined _OSI method: "Windows 2001.1 
SP1" 
and "Windows 2006".

Split the allocation tracking mechanism out to a separate file, from 
utalloc.c to uttrack.c. This mechanism appears to be only useful for 
application-level code. Kernels may wish to not include uttrack.c in 
distributions.

Removed all remnants of the obsolete ACPI_REPORT_* macros and the 
associated 
code. (These macros have been replaced by the ACPI_ERROR and ACPI_WARNING 
macros.)

Code and Data Size: These are the sizes for the acpica.lib produced by 
the 
Microsoft Visual C++ 6.0 32-bit compiler. The values do not include any 
ACPI 
driver or OSPM code. The debug version of the code includes the debug 
output 
trace mechanism and has a much larger code and data size. Note that these 
values will vary depending on the efficiency of the compiler and the 
compiler options used during generation.

  Previous Release:
    Non-Debug Version:  81.1K Code, 17.8K Data,  98.9K Total
    Debug Version:     161.6K Code, 65.7K Data, 227.3K Total
  Current Release:
    Non-Debug Version:  80.9K Code, 17.7K Data,  98.6K Total
    Debug Version:     158.7K Code, 64.8K Data, 223.5K Total


2) iASL Compiler/Disassembler and Tools:

Implemented an ANSI C version of the acpixtract utility. This version 
will 
automatically extract the DSDT and all SSDTs from the input acpidump text 
file and dump the binary output to separate files. It can also display a 
summary of the input file including the headers for each table found and 
will extract any single ACPI table, with any signature. (See 
source/tools/acpixtract)

----------------------------------------
10 March 2006. Summary of changes for version 20060310:

1) ACPI CA Core Subsystem:

Tagged all external interfaces to the subsystem with the new 
ACPI_EXPORT_SYMBOL macro. This macro can be defined as necessary to 
assist 
kernel integration. For Linux, the macro resolves to the EXPORT_SYMBOL 
macro. The default definition is NULL.

Added the ACPI_THREAD_ID type for the return value from 
AcpiOsGetThreadId. 
This allows the host to define this as necessary to simplify kernel 
integration. The default definition is ACPI_NATIVE_UINT.

Fixed two interpreter problems related to error processing, the deletion 
of 
objects, and placing invalid pointers onto the internal operator result 
stack. BZ 6028, 6151 (Valery Podrezov)

Increased the reference count threshold where a warning is emitted for 
large 
reference counts in order to eliminate unnecessary warnings on systems 
with 
large namespaces (especially 64-bit.) Increased the value from 0x400 to 
0x800.

Due to universal disagreement as to the meaning of the 'c' in the 
calloc() 
function, the ACPI_MEM_CALLOCATE macro has been renamed to 
ACPI_ALLOCATE_ZEROED so that the purpose of the interface is 'clear'. 
ACPI_MEM_ALLOCATE and ACPI_MEM_FREE are renamed to ACPI_ALLOCATE and 
ACPI_FREE.

Code and Data Size: These are the sizes for the acpica.lib produced by 
the 
Microsoft Visual C++ 6.0 32-bit compiler. The values do not include any 
ACPI 
driver or OSPM code. The debug version of the code includes the debug 
output 
trace mechanism and has a much larger code and data size. Note that these 
values will vary depending on the efficiency of the compiler and the 
compiler options used during generation.

  Previous Release:
    Non-Debug Version:  81.0K Code, 17.8K Data,  98.8K Total
    Debug Version:     161.4K Code, 65.7K Data, 227.1K Total
  Current Release:
    Non-Debug Version:  81.1K Code, 17.8K Data,  98.9K Total
    Debug Version:     161.6K Code, 65.7K Data, 227.3K Total


2) iASL Compiler/Disassembler:

Disassembler: implemented support for symbolic resource descriptor 
references. If a CreateXxxxField operator references a fixed offset 
within 
a 
resource descriptor, a name is assigned to the descriptor and the offset 
is 
translated to the appropriate resource tag and pathname. The addition of 
this support brings the disassembled code very close to the original ASL 
source code and helps eliminate run-time errors when the disassembled 
code 
is modified (and recompiled) in such a way as to invalidate the original 
fixed offsets.

Implemented support for a Descriptor Name as the last parameter to the 
ASL 
Register() macro. This parameter was inadvertently left out of the ACPI 
specification, and will be added for ACPI 3.0b.

Fixed a problem where the use of the "_OSI" string (versus the full path 
"\_OSI") caused an internal compiler error. ("No back ptr to op")

Fixed a problem with the error message that occurs when an invalid string 
is 
used for a _HID object (such as one with an embedded asterisk: 
"*PNP010A".) 
The correct message is now displayed.

----------------------------------------
17 February 2006. Summary of changes for version 20060217:

1) ACPI CA Core Subsystem:

Implemented a change to the IndexField support to match the behavior of 
the 
Microsoft AML interpreter. The value written to the Index register is now 
a 
byte offset, no longer an index based upon the width of the Data 
register. 
This should fix IndexField problems seen on some machines where the Data 
register is not exactly one byte wide. The ACPI specification will be 
clarified on this point.

Fixed a problem where several resource descriptor types could overrun the 
internal descriptor buffer due to size miscalculation: VendorShort, 
VendorLong, and Interrupt. This was noticed on IA64 machines, but could 
affect all platforms.

Fixed a problem where individual resource descriptors were misaligned 
within 
the internal buffer, causing alignment faults on IA64 platforms.

Code and Data Size: These are the sizes for the acpica.lib produced by 
the 
Microsoft Visual C++ 6.0 32-bit compiler. The values do not include any 
ACPI 
driver or OSPM code. The debug version of the code includes the debug 
output 
trace mechanism and has a much larger code and data size. Note that these 
values will vary depending on the efficiency of the compiler and the 
compiler options used during generation.

  Previous Release:
    Non-Debug Version:  81.1K Code, 17.8K Data,  98.9K Total
    Debug Version:     161.3K Code, 65.6K Data, 226.9K Total
  Current Release:
    Non-Debug Version:  81.0K Code, 17.8K Data,  98.8K Total
    Debug Version:     161.4K Code, 65.7K Data, 227.1K Total


2) iASL Compiler/Disassembler:

Implemented support for new reserved names: _WDG and _WED are Microsoft 
extensions for Windows Instrumentation Management, _TDL is a new ACPI-
defined method (Throttling Depth Limit.)

Fixed a problem where a zero-length VendorShort or VendorLong resource 
descriptor was incorrectly emitted as a descriptor of length one.

----------------------------------------
10 February 2006. Summary of changes for version 20060210:

1) ACPI CA Core Subsystem:

Removed a couple of extraneous ACPI_ERROR messages that appeared during 
normal execution. These became apparent after the conversion from 
ACPI_DEBUG_PRINT.

Fixed a problem where the CreateField operator could hang if the BitIndex 
or 
NumBits parameter referred to a named object. (Valery Podrezov, BZ 5359)

Fixed a problem where a DeRefOf operation on a buffer object incorrectly 
failed with an exception. This also fixes a couple of related RefOf and 
DeRefOf issues. (Valery Podrezov, BZ 5360/5392/5387)

Fixed a problem where the AE_BUFFER_LIMIT exception was returned instead 
of 
AE_STRING_LIMIT on an out-of-bounds Index() operation. (Valery Podrezov, 
BZ 
5480)

Implemented a memory cleanup at the end of the execution of each 
iteration 
of an AML While() loop, preventing the accumulation of outstanding 
objects. 
(Valery Podrezov, BZ 5427)

Eliminated a chunk of duplicate code in the object resolution code. 
(Valery 
Podrezov, BZ 5336)

Fixed several warnings during the 64-bit code generation.

The AcpiSrc source code conversion tool now inserts one line of 
whitespace 
after an if() statement that is followed immediately by a comment, 
improving 
readability of the Linux code.

Code and Data Size: The current and previous library sizes for the core 
subsystem are shown below. These are the code and data sizes for the 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 
These 
values do not include any ACPI driver or OSPM code. The debug version of 
the 
code includes the debug output trace mechanism and has a much larger code 
and data size. Note that these values will vary depending on the 
efficiency 
of the compiler and the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  81.0K Code, 17.9K Data,  98.9K Total
    Debug Version:     161.3K Code, 65.7K Data, 227.0K Total
  Current Release:
    Non-Debug Version:  81.1K Code, 17.8K Data,  98.9K Total
    Debug Version:     161.3K Code, 65.6K Data, 226.9K Total


2) iASL Compiler/Disassembler:

Fixed a problem with the disassembly of a BankField operator with a 
complex 
expression for the BankValue parameter.

----------------------------------------
27 January 2006. Summary of changes for version 20060127:

1) ACPI CA Core Subsystem:

Implemented support in the Resource Manager to allow unresolved 
namestring 
references within resource package objects for the _PRT method. This 
support 
is in addition to the previously implemented unresolved reference support 
within the AML parser. If the interpreter slack mode is enabled, these 
unresolved references will be passed through to the caller as a NULL 
package 
entry.

Implemented and deployed new macros and functions for error and warning 
messages across the subsystem. These macros are simpler and generate less 
code than their predecessors. The new macros ACPI_ERROR, ACPI_EXCEPTION, 
ACPI_WARNING, and ACPI_INFO replace the ACPI_REPORT_* macros. The older 
macros remain defined to allow ACPI drivers time to migrate to the new 
macros.

Implemented the ACPI_CPU_FLAGS type to simplify host OS integration of 
the 
Acquire/Release Lock OSL interfaces.

Fixed a problem where Alias ASL operators are sometimes not correctly 
resolved, in both the interpreter and the iASL compiler.

Fixed several problems with the implementation of the 
ConcatenateResTemplate 
ASL operator. As per the ACPI specification, zero length buffers are now 
treated as a single EndTag. One-length buffers always cause a fatal 
exception. Non-zero length buffers that do not end with a full 2-byte 
EndTag 
cause a fatal exception.

Fixed a possible structure overwrite in the AcpiGetObjectInfo external 
interface. (With assistance from Thomas Renninger)

Code and Data Size: The current and previous library sizes for the core 
subsystem are shown below. These are the code and data sizes for the 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 
These 
values do not include any ACPI driver or OSPM code. The debug version of 
the 
code includes the debug output trace mechanism and has a much larger code 
and data size. Note that these values will vary depending on the 
efficiency 
of the compiler and the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  83.1K Code, 18.4K Data, 101.5K Total
    Debug Version:     163.2K Code, 66.2K Data, 229.4K Total
  Current Release:
    Non-Debug Version:  81.0K Code, 17.9K Data,  98.9K Total
    Debug Version:     161.3K Code, 65.7K Data, 227.0K Total


2) iASL Compiler/Disassembler:

Fixed an internal error that was generated for any forward references to 
ASL 
Alias objects.

----------------------------------------
13 January 2006. Summary of changes for version 20060113:

1) ACPI CA Core Subsystem:

Added 2006 copyright to all module headers and signons. This affects 
virtually every file in the ACPICA core subsystem, iASL compiler, and the 
utilities.
 
Enhanced the ACPICA error reporting in order to simplify user migration 
to 
the non-debug version of ACPICA. Replaced all instances of the 
ACPI_DEBUG_PRINT macro invoked at the ACPI_DB_ERROR and ACPI_DB_WARN 
debug 
levels with the ACPI_REPORT_ERROR and ACPI_REPORT_WARNING macros, 
respectively. This preserves all error and warning messages in the non-
debug 
version of the ACPICA code (this has been referred to as the "debug lite" 
option.) Over 200 cases were converted to create a total of over 380 
error/warning messages across the ACPICA code. This increases the code 
and 
data size of the default non-debug version of the code somewhat (about 
13K), 
but all error/warning reporting may be disabled if desired (and code 
eliminated) by specifying the ACPI_NO_ERROR_MESSAGES compile-time 
configuration option. The size of the debug version of ACPICA remains 
about 
the same.

Fixed a memory leak within the AML Debugger "Set" command. One object was 
not properly deleted for every successful invocation of the command.

Code and Data Size: The current and previous library sizes for the core 
subsystem are shown below. These are the code and data sizes for the 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 
These 
values do not include any ACPI driver or OSPM code. The debug version of 
the 
code includes the debug output trace mechanism and has a much larger code 
and data size. Note that these values will vary depending on the 
efficiency 
of the compiler and the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  76.6K Code, 12.3K Data,  88.9K Total
    Debug Version:     163.7K Code, 67.5K Data, 231.2K Total
  Current Release:
    Non-Debug Version:  83.1K Code, 18.4K Data, 101.5K Total
    Debug Version:     163.2K Code, 66.2K Data, 229.4K Total


2) iASL Compiler/Disassembler:

The compiler now officially supports the ACPI 3.0a specification that was 
released on December 30, 2005. (Specification is available at 
www.acpi.info)

----------------------------------------
16 December 2005. Summary of changes for version 20051216:

1) ACPI CA Core Subsystem:

Implemented optional support to allow unresolved names within ASL Package 
objects. A null object is inserted in the package when a named reference 
cannot be located in the current namespace. Enabled via the interpreter 
slack flag, this should eliminate AE_NOT_FOUND exceptions seen on 
machines 
that contain such code.

Implemented an optimization to the initialization sequence that can 
improve 
boot time. During ACPI device initialization, the _STA method is now run 
if 
and only if the _INI method exists. The _STA method is used to determine 
if 
the device is present; An _INI can only be run if _STA returns present, 
but 
it is a waste of time to run the _STA method if the _INI does not exist. 
(Prototype and assistance from Dong Wei)

Implemented use of the C99 uintptr_t for the pointer casting macros if it 
is 
available in the current compiler. Otherwise, the default (void *) cast 
is 
used as before.

Fixed some possible memory leaks found within the execution path of the 
Break, Continue, If, and CreateField operators. (Valery Podrezov)

Fixed a problem introduced in the 20051202 release where an exception is 
generated during method execution if a control method attempts to declare 
another method.

Moved resource descriptor string constants that are used by both the AML 
disassembler and AML debugger to the common utilities directory so that 
these components are independent.

Implemented support in the AcpiExec utility (-e switch) to globally 
ignore 
exceptions during control method execution (method is not aborted.)

Added the rsinfo.c source file to the AcpiExec makefile for Linux/Unix 
generation.

Code and Data Size: The current and previous library sizes for the core 
subsystem are shown below. These are the code and data sizes for the 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 
These 
values do not include any ACPI driver or OSPM code. The debug version of 
the 
code includes the debug output trace mechanism and has a much larger code 
and data size. Note that these values will vary depending on the 
efficiency 
of the compiler and the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  76.3K Code, 12.3K Data,  88.6K Total
    Debug Version:     163.2K Code, 67.4K Data, 230.6K Total
  Current Release:
    Non-Debug Version:  76.6K Code, 12.3K Data,  88.9K Total
    Debug Version:     163.7K Code, 67.5K Data, 231.2K Total


2) iASL Compiler/Disassembler:

Fixed a problem where a CPU stack overflow fault could occur if a 
recursive 
method call was made from within a Return statement.

----------------------------------------
02 December 2005. Summary of changes for version 20051202:

1) ACPI CA Core Subsystem:

Modified the parsing of control methods to no longer create namespace 
objects during the first pass of the parse. Objects are now created only 
during the execute phase, at the moment the namespace creation operator 
is 
encountered in the AML (Name, OperationRegion, CreateByteField, etc.) 
This 
should eliminate ALREADY_EXISTS exceptions seen on some machines where 
reentrant control methods are protected by an AML mutex. The mutex will 
now 
correctly block multiple threads from attempting to create the same 
object 
more than once.

Increased the number of available Owner Ids for namespace object tracking 
from 32 to 255. This should eliminate the OWNER_ID_LIMIT exceptions seen 
on 
some machines with a large number of ACPI tables (either static or 
dynamic).

Fixed a problem with the AcpiExec utility where a fault could occur when 
the 
-b switch (batch mode) is used.

Enhanced the namespace dump routine to output the owner ID for each 
namespace object.

Code and Data Size: The current and previous library sizes for the core 
subsystem are shown below. These are the code and data sizes for the 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 
These 
values do not include any ACPI driver or OSPM code. The debug version of 
the 
code includes the debug output trace mechanism and has a much larger code 
and data size. Note that these values will vary depending on the 
efficiency 
of the compiler and the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  76.3K Code, 12.3K Data,  88.6K Total
    Debug Version:     163.0K Code, 67.4K Data, 230.4K Total
  Current Release:
    Non-Debug Version:  76.3K Code, 12.3K Data,  88.6K Total
    Debug Version:     163.2K Code, 67.4K Data, 230.6K Total


2) iASL Compiler/Disassembler:

Fixed a parse error during compilation of certain Switch/Case constructs. 
To 
simplify the parse, the grammar now allows for multiple Default 
statements 
and this error is now detected and flagged during the analysis phase.

Disassembler: The disassembly now includes the contents of the original 
table header within a comment at the start of the file. This includes the 
name and version of the original ASL compiler.

----------------------------------------
17 November 2005. Summary of changes for version 20051117:

1) ACPI CA Core Subsystem:

Fixed a problem in the AML parser where the method thread count could be 
decremented below zero if any errors occurred during the method parse 
phase. 
This should eliminate AE_AML_METHOD_LIMIT exceptions seen on some 
machines. 
This also fixed a related regression with the mechanism that detects and 
corrects methods that cannot properly handle reentrancy (related to the 
deployment of the new OwnerId mechanism.)

Eliminated the pre-parsing of control methods (to detect errors) during 
table load. Related to the problem above, this was causing unwind issues 
if 
any errors occurred during the parse, and it seemed to be overkill. A 
table 
load should not be aborted if there are problems with any single control 
method, thus rendering this feature rather pointless.

Fixed a problem with the new table-driven resource manager where an 
internal 
buffer overflow could occur for small resource templates.

Implemented a new external interface, AcpiGetVendorResource. This 
interface 
will find and return a vendor-defined resource descriptor within a _CRS 
or 
_PRS method via an ACPI 3.0 UUID match. With assistance from Bjorn 
Helgaas.

Removed the length limit (200) on string objects as per the upcoming ACPI 
3.0A specification. This affects the following areas of the interpreter: 
1) 
any implicit conversion of a Buffer to a String, 2) a String object 
result 
of the ASL Concatentate operator, 3) the String object result of the ASL 
ToString operator.

Fixed a problem in the Windows OS interface layer (OSL) where a 
WAIT_FOREVER 
on a semaphore object would incorrectly timeout. This allows the 
multithreading features of the AcpiExec utility to work properly under 
Windows.

Updated the Linux makefiles for the iASL compiler and AcpiExec to include 
the recently added file named "utresrc.c".

Code and Data Size: The current and previous library sizes for the core 
subsystem are shown below. These are the code and data sizes for the 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 
These 
values do not include any ACPI driver or OSPM code. The debug version of 
the 
code includes the debug output trace mechanism and has a much larger code 
and data size. Note that these values will vary depending on the 
efficiency 
of the compiler and the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  76.2K Code, 12.3K Data,  88.5K Total
    Debug Version:     163.0K Code, 67.4K Data, 230.4K Total
  Current Release:
    Non-Debug Version:  76.3K Code, 12.3K Data,  88.6K Total
    Debug Version:     163.0K Code, 67.4K Data, 230.4K Total


2) iASL Compiler/Disassembler:

Removed the limit (200) on string objects as per the upcoming ACPI 3.0A 
specification. For the iASL compiler, this means that string literals 
within 
the source ASL can be of any length. 

Enhanced the listing output to dump the AML code for resource descriptors 
immediately after the ASL code for each descriptor, instead of in a block 
at 
the end of the entire resource template.

Enhanced the compiler debug output to dump the entire original parse tree 
constructed during the parse phase, before any transforms are applied to 
the 
tree. The transformed tree is dumped also.

----------------------------------------
02 November 2005. Summary of changes for version 20051102:

1) ACPI CA Core Subsystem:

Modified the subsystem initialization sequence to improve GPE support. 
The 
GPE initialization has been split into two parts in order to defer 
execution 
of the _PRW methods (Power Resources for Wake) until after the hardware 
is 
fully initialized and the SCI handler is installed. This allows the _PRW 
methods to access fields protected by the Global Lock. This will fix 
systems 
where a NO_GLOBAL_LOCK exception has been seen during initialization.

Converted the ACPI internal object disassemble and display code within 
the 
AML debugger to fully table-driven operation, reducing code size and 
increasing maintainability.

Fixed a regression with the ConcatenateResTemplate() ASL operator 
introduced 
in the 20051021 release.

Implemented support for "local" internal ACPI object types within the 
debugger "Object" command and the AcpiWalkNamespace external interfaces. 
These local types include RegionFields, BankFields, IndexFields, Alias, 
and 
reference objects.

Moved common AML resource handling code into a new file, "utresrc.c". 
This 
code is shared by both the Resource Manager and the AML Debugger.

Code and Data Size: The current and previous library sizes for the core 
subsystem are shown below. These are the code and data sizes for the 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 
These 
values do not include any ACPI driver or OSPM code. The debug version of 
the 
code includes the debug output trace mechanism and has a much larger code 
and data size. Note that these values will vary depending on the 
efficiency 
of the compiler and the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  76.1K Code, 12.2K Data,  88.3K Total
    Debug Version:     163.5K Code, 67.0K Data, 230.5K Total
  Current Release:
    Non-Debug Version:  76.2K Code, 12.3K Data,  88.5K Total
    Debug Version:     163.0K Code, 67.4K Data, 230.4K Total


2) iASL Compiler/Disassembler:

Fixed a problem with very large initializer lists (more than 4000 
elements) 
for both Buffer and Package objects where the parse stack could overflow.

Enhanced the pre-compile source code scan for non-ASCII characters to 
ignore 
characters within comment fields. The scan is now always performed and is 
no 
longer optional, detecting invalid characters within a source file 
immediately rather than during the parse phase or later.

Enhanced the ASL grammar definition to force early reductions on all 
list-
style grammar elements so that the overall parse stack usage is greatly 
reduced. This should improve performance and reduce the possibility of 
parse 
stack overflow.

Eliminated all reduce/reduce conflicts in the iASL parser generation. 
Also, 
with the addition of a %expected statement, the compiler generates from 
source with no warnings.

Fixed a possible segment fault in the disassembler if the input filename 
does not contain a "dot" extension (Thomas Renninger).

----------------------------------------
21 October 2005. Summary of changes for version 20051021:

1) ACPI CA Core Subsystem:

Implemented support for the EM64T and other x86-64 processors. This 
essentially entails recognizing that these processors support non-aligned 
memory transfers. Previously, all 64-bit processors were assumed to lack 
hardware support for non-aligned transfers.

Completed conversion of the Resource Manager to nearly full table-driven 
operation. Specifically, the resource conversion code (convert AML to 
internal format and the reverse) and the debug code to dump internal 
resource descriptors are fully table-driven, reducing code and data size 
and 
improving maintainability.

The OSL interfaces for Acquire and Release Lock now use a 64-bit flag 
word 
on 64-bit processors instead of a fixed 32-bit word. (With assistance 
from 
Alexey Starikovskiy)

Implemented support within the resource conversion code for the Type-
Specific byte within the various ACPI 3.0 *WordSpace macros.

Fixed some issues within the resource conversion code for the type-
specific 
flags for both Memory and I/O address resource descriptors. For Memory, 
implemented support for the MTP and TTP flags. For I/O, split the TRS and 
TTP flags into two separate fields.

Code and Data Size: The current and previous library sizes for the core 
subsystem are shown below. These are the code and data sizes for the 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 
These 
values do not include any ACPI driver or OSPM code. The debug version of 
the 
code includes the debug output trace mechanism and has a much larger code 
and data size. Note that these values will vary depending on the 
efficiency 
of the compiler and the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  77.1K Code, 12.1K Data,  89.2K Total
    Debug Version:     168.0K Code, 68.3K Data, 236.3K Total
  Current Release:
    Non-Debug Version:  76.1K Code, 12.2K Data,  88.3K Total
    Debug Version:     163.5K Code, 67.0K Data, 230.5K Total



2) iASL Compiler/Disassembler:

Relaxed a compiler restriction that disallowed a ResourceIndex byte if 
the 
corresponding ResourceSource string was not also present in a resource 
descriptor declaration. This restriction caused problems with existing 
AML/ASL code that includes the Index byte without the string. When such 
AML 
was disassembled, it could not be compiled without modification. Further, 
the modified code created a resource template with a different size than 
the 
original, breaking code that used fixed offsets into the resource 
template 
buffer.

Removed a recent feature of the disassembler to ignore a lone 
ResourceIndex 
byte. This byte is now emitted if present so that the exact AML can be 
reproduced when the disassembled code is recompiled.

Improved comments and text alignment for the resource descriptor code 
emitted by the disassembler.

Implemented disassembler support for the ACPI 3.0 AccessSize field within 
a 
Register() resource descriptor.

----------------------------------------
30 September 2005. Summary of changes for version 20050930:

1) ACPI CA Core Subsystem:

Completed a major overhaul of the Resource Manager code - specifically, 
optimizations in the area of the AML/internal resource conversion code. 
The 
code has been optimized to simplify and eliminate duplicated code, CPU 
stack 
use has been decreased by optimizing function parameters and local 
variables, and naming conventions across the manager have been 
standardized 
for clarity and ease of maintenance (this includes function, parameter, 
variable, and struct/typedef names.) The update may force changes in some 
driver code, depending on how resources are handled by the host OS.

All Resource Manager dispatch and information tables have been moved to a 
single location for clarity and ease of maintenance. One new file was 
created, named "rsinfo.c".

The ACPI return macros (return_ACPI_STATUS, etc.) have been modified to 
guarantee that the argument is not evaluated twice, making them less 
prone 
to macro side-effects. However, since there exists the possibility of 
additional stack use if a particular compiler cannot optimize them (such 
as 
in the debug generation case), the original macros are optionally 
available.  
Note that some invocations of the return_VALUE macro may now cause size 
mismatch warnings; the return_UINT8 and return_UINT32 macros are provided 
to 
eliminate these. (From Randy Dunlap)

Implemented a new mechanism to enable debug tracing for individual 
control 
methods. A new external interface, AcpiDebugTrace, is provided to enable 
this mechanism. The intent is to allow the host OS to easily enable and 
disable tracing for problematic control methods. This interface can be 
easily exposed to a user or debugger interface if desired. See the file 
psxface.c for details.

AcpiUtCallocate will now return a valid pointer if a length of zero is 
specified - a length of one is used and a warning is issued. This matches 
the behavior of AcpiUtAllocate.

Code and Data Size: The current and previous library sizes for the core 
subsystem are shown below. These are the code and data sizes for the 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 
These 
values do not include any ACPI driver or OSPM code. The debug version of 
the 
code includes the debug output trace mechanism and has a much larger code 
and data size. Note that these values will vary depending on the 
efficiency 
of the compiler and the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  77.5K Code, 12.0K Data,  89.5K Total
    Debug Version:     168.1K Code, 68.4K Data, 236.5K Total
  Current Release:
    Non-Debug Version:  77.1K Code, 12.1K Data,  89.2K Total
    Debug Version:     168.0K Code, 68.3K Data, 236.3K Total


2) iASL Compiler/Disassembler:

A remark is issued if the effective compile-time length of a package or 
buffer is zero. Previously, this was a warning.

----------------------------------------
16 September 2005. Summary of changes for version 20050916:

1) ACPI CA Core Subsystem:

Fixed a problem within the Resource Manager where support for the Generic 
Register descriptor was not fully implemented. This descriptor is now 
fully 
recognized, parsed, disassembled, and displayed.

Completely restructured the Resource Manager code to utilize table-driven 
dispatch and lookup, eliminating many of the large switch() statements. 
This 
reduces overall subsystem code size and code complexity. Affects the 
resource parsing and construction, disassembly, and debug dump output.

Cleaned up and restructured the debug dump output for all resource 
descriptors. Improved readability of the output and reduced code size.

Fixed a problem where changes to internal data structures caused the 
optional ACPI_MUTEX_DEBUG code to fail compilation if specified.

Code and Data Size: The current and previous library sizes for the core 
subsystem are shown below. These are the code and data sizes for the 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 
These 
values do not include any ACPI driver or OSPM code. The debug version of 
the 
code includes the debug output trace mechanism and has a much larger code 
and data size. Note that these values will vary depending on the 
efficiency 
of the compiler and the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.4K Code, 11.8K Data,  90.2K Total
    Debug Version:     169.6K Code, 69.9K Data, 239.5K Total
  Current Release:
    Non-Debug Version:  77.5K Code, 12.0K Data,  89.5K Total
    Debug Version:     168.1K Code, 68.4K Data, 236.5K Total


2) iASL Compiler/Disassembler:

Updated the disassembler to automatically insert an EndDependentFn() 
macro 
into the ASL stream if this macro is missing in the original AML code, 
simplifying compilation of the resulting ASL module.

Fixed a problem in the disassembler where a disassembled ResourceSource 
string (within a large resource descriptor) was not surrounded by quotes 
and 
not followed by a comma, causing errors when the resulting ASL module was 
compiled. Also, escape sequences within a ResourceSource string are now 
handled correctly (especially "\\")

----------------------------------------
02 September 2005. Summary of changes for version 20050902:

1) ACPI CA Core Subsystem:

Fixed a problem with the internal Owner ID allocation and deallocation 
mechanisms for control method execution and recursive method invocation. 
This should eliminate the OWNER_ID_LIMIT exceptions and "Invalid OwnerId" 
messages seen on some systems. Recursive method invocation depth is 
currently limited to 255. (Alexey Starikovskiy)

Completely eliminated all vestiges of support for the "module-level 
executable code" until this support is fully implemented and debugged. 
This 
should eliminate the NO_RETURN_VALUE exceptions seen during table load on 
some systems that invoke this support.

Fixed a problem within the resource manager code where the transaction 
flags 
for a 64-bit address descriptor were handled incorrectly in the type-
specific flag byte.

Consolidated duplicate code within the address descriptor resource 
manager 
code, reducing overall subsystem code size.

Fixed a fault when using the AML debugger "disassemble" command to 
disassemble individual control methods.

Removed references to the "release_current" directory within the Unix 
release package.

Code and Data Size: The current and previous core subsystem library sizes 
are shown below. These are the code and data sizes for the acpica.lib 
produced by the Microsoft Visual C++ 6.0 compiler. These values do not 
include any ACPI driver or OSPM code. The debug version of the code 
includes 
the debug output trace mechanism and has a much larger code and data 
size. 
Note that these values will vary depending on the efficiency of the 
compiler 
and the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.6K Code, 11.7K Data,  90.3K Total
    Debug Version:     170.0K Code, 69.9K Data, 239.9K Total
  Current Release:
    Non-Debug Version:  78.4K Code, 11.8K Data,  90.2K Total
    Debug Version:     169.6K Code, 69.9K Data, 239.5K Total


2) iASL Compiler/Disassembler:

Implemented an error check for illegal duplicate values in the interrupt 
and 
dma lists for the following ASL macros: Dma(), Irq(), IrqNoFlags(), and 
Interrupt().

Implemented error checking for the Irq() and IrqNoFlags() macros to 
detect 
too many values in the interrupt list (16 max) and invalid values in the 
list (range 0 - 15)

The maximum length string literal within an ASL file is now restricted to 
200 characters as per the ACPI specification.

Fixed a fault when using the -ln option (generate namespace listing).

Implemented an error check to determine if a DescriptorName within a 
resource descriptor has already been used within the current scope.

----------------------------------------
15 August 2005.  Summary of changes for version 20050815:
 
1) ACPI CA Core Subsystem:
 
Implemented a full bytewise compare to determine if a table load request 
is 
attempting to load a duplicate table. The compare is performed if the 
table 
signatures and table lengths match. This will allow different tables with 
the same OEM Table ID and revision to be loaded - probably against the 
ACPI 
specification, but discovered in the field nonetheless.
 
Added the changes.txt logfile to each of the zipped release packages.
 
Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.
 
  Previous Release:
    Non-Debug Version:  78.6K Code, 11.7K Data,  90.3K Total
    Debug Version:     167.0K Code, 69.9K Data, 236.9K Total
  Current Release:
    Non-Debug Version:  78.6K Code, 11.7K Data,  90.3K Total
    Debug Version:     170.0K Code, 69.9K Data, 239.9K Total
 
 
2) iASL Compiler/Disassembler:
 
Fixed a problem where incorrect AML code could be generated for Package 
objects if optimization is disabled (via the -oa switch).
 
Fixed a problem with where incorrect AML code is generated for variable-
length packages when the package length is not specified and the number 
of 
initializer values is greater than 255.
 

----------------------------------------
29 July 2005.  Summary of changes for version 20050729:

1) ACPI CA Core Subsystem:

Implemented support to ignore an attempt to install/load a particular 
ACPI 
table more than once. Apparently there exists BIOS code that repeatedly 
attempts to load the same SSDT upon certain events. With assistance from 
Venkatesh Pallipadi.

Restructured the main interface to the AML parser in order to correctly 
handle all exceptional conditions. This will prevent leakage of the 
OwnerId 
resource and should eliminate the AE_OWNER_ID_LIMIT exceptions seen on 
some 
machines. With assistance from Alexey Starikovskiy.

Support for "module level code" has been disabled in this version due to 
a 
number of issues that have appeared on various machines. The support can 
be 
enabled by defining ACPI_ENABLE_MODULE_LEVEL_CODE during subsystem 
compilation. When the issues are fully resolved, the code will be enabled 
by 
default again.

Modified the internal functions for debug print support to define the 
FunctionName parameter as a (const char *) for compatibility with 
compiler 
built-in macros such as __FUNCTION__, etc.

Linted the entire ACPICA source tree for both 32-bit and 64-bit.

Implemented support to display an object count summary for the AML 
Debugger 
commands Object and Methods.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.6K Code, 11.6K Data,  90.2K Total
    Debug Version:     170.0K Code, 69.7K Data, 239.7K Total
  Current Release:
    Non-Debug Version:  78.6K Code, 11.7K Data,  90.3K Total
    Debug Version:     167.0K Code, 69.9K Data, 236.9K Total


2) iASL Compiler/Disassembler:

Fixed a regression that appeared in the 20050708 version of the compiler 
where an error message was inadvertently emitted for invocations of the 
_OSI 
reserved control method.

----------------------------------------
08 July 2005.  Summary of changes for version 20050708:

1) ACPI CA Core Subsystem:

The use of the CPU stack in the debug version of the subsystem has been 
considerably reduced. Previously, a debug structure was declared in every 
function that used the debug macros. This structure has been removed in 
favor of declaring the individual elements as parameters to the debug 
functions. This reduces the cumulative stack use during nested execution 
of 
ACPI function calls at the cost of a small increase in the code size of 
the 
debug version of the subsystem. With assistance from Alexey Starikovskiy 
and 
Len Brown.

Added the ACPI_GET_FUNCTION_NAME macro to enable the compiler-dependent 
headers to define a macro that will return the current function name at 
runtime (such as __FUNCTION__ or _func_, etc.) The function name is used 
by 
the debug trace output. If ACPI_GET_FUNCTION_NAME is not defined in the 
compiler-dependent header, the function name is saved on the CPU stack 
(one 
pointer per function.) This mechanism is used because apparently there 
exists no standard ANSI-C defined macro that that returns the function 
name.

Redesigned and reimplemented the "Owner ID" mechanism used to track 
namespace objects created/deleted by ACPI tables and control method 
execution. A bitmap is now used to allocate and free the IDs, thus 
solving 
the wraparound problem present in the previous implementation. The size 
of 
the namespace node descriptor was reduced by 2 bytes as a result (Alexey 
Starikovskiy).

Removed the UINT32_BIT and UINT16_BIT types that were used for the 
bitfield 
flag definitions within the headers for the predefined ACPI tables. These 
have been replaced by UINT8_BIT in order to increase the code portability 
of 
the subsystem. If the use of UINT8 remains a problem, we may be forced to 
eliminate bitfields entirely because of a lack of portability.

Enhanced the performance of the AcpiUtUpdateObjectReference procedure. 
This 
is a frequently used function and this improvement increases the 
performance 
of the entire subsystem (Alexey Starikovskiy).

Fixed several possible memory leaks and the inverse - premature object 
deletion (Alexey Starikovskiy).

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.6K Code, 11.5K Data,  90.1K Total
    Debug Version:     165.2K Code, 69.6K Data, 234.8K Total
  Current Release:
    Non-Debug Version:  78.6K Code, 11.6K Data,  90.2K Total
    Debug Version:     170.0K Code, 69.7K Data, 239.7K Total

----------------------------------------
24 June 2005.  Summary of changes for version 20050624:

1) ACPI CA Core Subsystem:

Modified the new OSL cache interfaces to use ACPI_CACHE_T as the type for 
the host-defined cache object. This allows the OSL implementation to 
define 
and type this object in any manner desired, simplifying the OSL 
implementation. For example, ACPI_CACHE_T is defined as kmem_cache_t for 
Linux, and should be defined in the OS-specific header file for other 
operating systems as required.

Changed the interface to AcpiOsAcquireObject to directly return the 
requested object as the function return (instead of ACPI_STATUS.) This 
change was made for performance reasons, since this is the purpose of the 
interface in the first place. AcpiOsAcquireObject is now similar to the 
AcpiOsAllocate interface.

Implemented a new AML debugger command named Businfo. This command 
displays 
information about all devices that have an associate _PRT object. The 
_ADR, 
_HID, _UID, and _CID are displayed for these devices.

Modified the initialization sequence in AcpiInitializeSubsystem to call 
the 
OSL interface AcpiOslInitialize first, before any local initialization. 
This 
change was required because the global initialization now calls OSL 
interfaces.

Enhanced the Dump command to display the entire contents of Package 
objects 
(including all sub-objects and their values.) 

Restructured the code base to split some files because of size and/or 
because the code logically belonged in a separate file. New files are 
listed 
below. All makefiles and project files included in the ACPI CA release 
have 
been updated.
    utilities/utcache.c           /* Local cache interfaces */
    utilities/utmutex.c           /* Local mutex support */
    utilities/utstate.c           /* State object support */
    interpreter/parser/psloop.c   /* Main AML parse loop */

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.3K Code, 11.6K Data,  89.9K Total
    Debug Version:     164.0K Code, 69.1K Data, 233.1K Total
  Current Release:
    Non-Debug Version:  78.6K Code, 11.5K Data,  90.1K Total
    Debug Version:     165.2K Code, 69.6K Data, 234.8K Total


2) iASL Compiler/Disassembler:

Fixed a regression introduced in version 20050513 where the use of a 
Package 
object within a Case() statement caused a compile time exception. The 
original behavior has been restored (a Match() operator is emitted.)

----------------------------------------
17 June 2005.  Summary of changes for version 20050617:

1) ACPI CA Core Subsystem:

Moved the object cache operations into the OS interface layer (OSL) to 
allow 
the host OS to handle these operations if desired (for example, the Linux 
OSL will invoke the slab allocator). This support is optional; the 
compile 
time define ACPI_USE_LOCAL_CACHE may be used to utilize the original 
cache 
code in the ACPI CA core. The new OSL interfaces are shown below. See 
utalloc.c for an example implementation, and acpiosxf.h for the exact 
interface definitions. With assistance from Alexey Starikovskiy.
    AcpiOsCreateCache
    AcpiOsDeleteCache
    AcpiOsPurgeCache
    AcpiOsAcquireObject
    AcpiOsReleaseObject

Modified the interfaces to AcpiOsAcquireLock and AcpiOsReleaseLock to 
return 
and restore a flags parameter. This fits better with many OS lock models. 
Note: the current execution state (interrupt handler or not) is no longer 
passed to these interfaces. If necessary, the OSL must determine this 
state 
by itself, a simple and fast operation. With assistance from Alexey 
Starikovskiy.

Fixed a problem in the ACPI table handling where a valid XSDT was assumed 
present if the revision of the RSDP was 2 or greater. According to the 
ACPI 
specification, the XSDT is optional in all cases, and the table manager 
therefore now checks for both an RSDP >=2 and a valid XSDT pointer. 
Otherwise, the RSDT pointer is used. Some ACPI 2.0 compliant BIOSs 
contain 
only the RSDT.

Fixed an interpreter problem with the Mid() operator in the case of an 
input 
string where the resulting output string is of zero length. It now 
correctly 
returns a valid, null terminated string object instead of a string object 
with a null pointer.

Fixed a problem with the control method argument handling to allow a 
store 
to an Arg object that already contains an object of type Device. The 
Device 
object is now correctly overwritten. Previously, an error was returned.


Enhanced the debugger Find command to emit object values in addition to 
the 
found object pathnames. The output format is the same as the dump 
namespace 
command.

Enhanced the debugger Set command. It now has the ability to set the 
value 
of any Named integer object in the namespace (Previously, only method 
locals 
and args could be set.)

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.1K Code, 11.6K Data,  89.7K Total
    Debug Version:     164.0K Code, 69.3K Data, 233.3K Total
  Current Release:
    Non-Debug Version:  78.3K Code, 11.6K Data,  89.9K Total
    Debug Version:     164.0K Code, 69.1K Data, 233.1K Total


2) iASL Compiler/Disassembler:

Fixed a regression in the disassembler where if/else/while constructs 
were 
output incorrectly. This problem was introduced in the previous release 
(20050526). This problem also affected the single-step disassembly in the 
debugger.

Fixed a problem where compiling the reserved _OSI method would randomly 
(but 
rarely) produce compile errors.

Enhanced the disassembler to emit compilable code in the face of 
incorrect 
AML resource descriptors. If the optional ResourceSourceIndex is present, 
but the ResourceSource is not, do not emit the ResourceSourceIndex in the 
disassembly. Otherwise, the resulting code cannot be compiled without 
errors.

----------------------------------------
26 May 2005.  Summary of changes for version 20050526:

1) ACPI CA Core Subsystem:

Implemented support to execute Type 1 and Type 2 AML opcodes appearing at 
the module level (not within a control method.) These opcodes are 
executed 
exactly once at the time the table is loaded. This type of code was legal 
up 
until the release of ACPI 2.0B (2002) and is now supported within ACPI CA 
in 
order to provide backwards compatibility with earlier BIOS 
implementations. 
This eliminates the "Encountered executable code at module level" warning 
that was previously generated upon detection of such code.

Fixed a problem in the interpreter where an AE_NOT_FOUND exception could 
inadvertently be generated during the lookup of namespace objects in the 
second pass parse of ACPI tables and control methods. It appears that 
this 
problem could occur during the resolution of forward references to 
namespace 
objects.

Added the ACPI_MUTEX_DEBUG #ifdef to the AcpiUtReleaseMutex function, 
corresponding to the same #ifdef in the AcpiUtAcquireMutex function. This 
allows the deadlock detection debug code to be compiled out in the normal 
case, improving mutex performance (and overall subsystem performance) 
considerably.

Implemented a handful of miscellaneous fixes for possible memory leaks on 
error conditions and error handling control paths. These fixes were 
suggested by FreeBSD and the Coverity Prevent source code analysis tool.

Added a check for a null RSDT pointer in AcpiGetFirmwareTable 
(tbxfroot.c) 
to prevent a fault in this error case.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.2K Code, 11.6K Data,  89.8K Total
    Debug Version:     163.7K Code, 69.3K Data, 233.0K Total
  Current Release:
    Non-Debug Version:  78.1K Code, 11.6K Data,  89.7K Total
    Debug Version:     164.0K Code, 69.3K Data, 233.3K Total


2) iASL Compiler/Disassembler:

Implemented support to allow Type 1 and Type 2 ASL operators to appear at 
the module level (not within a control method.) These operators will be 
executed once at the time the table is loaded. This type of code was 
legal 
up until the release of ACPI 2.0B (2002) and is now supported by the iASL 
compiler in order to provide backwards compatibility with earlier BIOS 
ASL 
code.

The ACPI integer width (specified via the table revision ID or the -r 
override, 32 or 64 bits) is now used internally during compile-time 
constant 
folding to ensure that constants are truncated to 32 bits if necessary. 
Previously, the revision ID value was only emitted in the AML table 
header.

An error message is now generated for the Mutex and Method operators if 
the 
SyncLevel parameter is outside the legal range of 0 through 15.

Fixed a problem with the Method operator ParameterTypes list handling 
(ACPI 
3.0). Previously, more than 2 types or 2 arguments generated a syntax 
error.  
The actual underlying implementation of method argument typechecking is 
still under development, however.

----------------------------------------
13 May 2005.  Summary of changes for version 20050513:

1) ACPI CA Core Subsystem:

Implemented support for PCI Express root bridges -- added support for 
device 
PNP0A08 in the root bridge search within AcpiEvPciConfigRegionSetup.

The interpreter now automatically truncates incoming 64-bit constants to 
32 
bits if currently executing out of a 32-bit ACPI table (Revision < 2). 
This 
also affects the iASL compiler constant folding. (Note: as per below, the 
iASL compiler no longer allows 64-bit constants within 32-bit tables.)

Fixed a problem where string and buffer objects with "static" pointers 
(pointers to initialization data within an ACPI table) were not handled 
consistently. The internal object copy operation now always copies the 
data 
to a newly allocated buffer, regardless of whether the source object is 
static or not.

Fixed a problem with the FromBCD operator where an implicit result 
conversion was improperly performed while storing the result to the 
target 
operand. Since this is an "explicit conversion" operator, the implicit 
conversion should never be performed on the output.

Fixed a problem with the CopyObject operator where a copy to an existing 
named object did not always completely overwrite the existing object 
stored 
at name. Specifically, a buffer-to-buffer copy did not delete the 
existing 
buffer.

Replaced "InterruptLevel" with "InterruptNumber" in all GPE interfaces 
and 
structs for consistency.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.2K Code, 11.6K Data,  89.8K Total
    Debug Version:     163.7K Code, 69.3K Data, 233.0K Total
  Current Release: (Same sizes)
    Non-Debug Version:  78.2K Code, 11.6K Data,  89.8K Total
    Debug Version:     163.7K Code, 69.3K Data, 233.0K Total


2) iASL Compiler/Disassembler:

The compiler now emits a warning if an attempt is made to generate a 64-
bit 
integer constant from within a 32-bit ACPI table (Revision < 2). The 
integer 
is truncated to 32 bits.

Fixed a problem with large package objects: if the static length of the 
package is greater than 255, the "variable length package" opcode is 
emitted. Previously, this caused an error. This requires an update to the 
ACPI spec, since it currently (incorrectly) states that packages larger 
than 
255 elements are not allowed.

The disassembler now correctly handles variable length packages and 
packages 
larger than 255 elements.

----------------------------------------
08 April 2005.  Summary of changes for version 20050408:

1) ACPI CA Core Subsystem:

Fixed three cases in the interpreter where an "index" argument to an ASL 
function was still (internally) 32 bits instead of the required 64 bits. 
This was the Index argument to the Index, Mid, and Match operators.

The "strupr" function is now permanently local (AcpiUtStrupr), since this 
is 
not a POSIX-defined function and not present in most kernel-level C 
libraries. All references to the C library strupr function have been 
removed 
from the headers.

Completed the deployment of static functions/prototypes. All prototypes 
with 
the static attribute have been moved from the headers to the owning C 
file.

Implemented an extract option (-e) for the AcpiBin utility (AML binary 
utility). This option allows the utility to extract individual ACPI 
tables 
from the output of AcpiDmp. It provides the same functionality of the 
acpixtract.pl perl script without the worry of setting the correct perl 
options. AcpiBin runs on Windows and has not yet been generated/validated 
in 
the Linux/Unix environment (but should be soon).
 
Updated and fixed the table dump option for AcpiBin (-d). This option 
converts a single ACPI table to a hex/ascii file, similar to the output 
of 
AcpiDmp.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.0K Code, 11.6K Data,  89.6K Total
    Debug Version:     163.5K Code, 69.3K Data, 232.8K Total
  Current Release:
    Non-Debug Version:  78.2K Code, 11.6K Data,  89.8K Total
    Debug Version:     163.7K Code, 69.3K Data, 233.0K Total


2) iASL Compiler/Disassembler:

Disassembler fix: Added a check to ensure that the table length found in 
the 
ACPI table header within the input file is not longer than the actual 
input 
file size. This indicates some kind of file or table corruption.

----------------------------------------
29 March 2005.  Summary of changes for version 20050329:

1) ACPI CA Core Subsystem:

An error is now generated if an attempt is made to create a Buffer Field 
of 
length zero (A CreateField with a length operand of zero.)

The interpreter now issues a warning whenever executable code at the 
module 
level is detected during ACPI table load. This will give some idea of the 
prevalence of this type of code.

Implemented support for references to named objects (other than control 
methods) within package objects.

Enhanced package object output for the debug object. Package objects are 
now 
completely dumped, showing all elements.

Enhanced miscellaneous object output for the debug object. Any object can 
now be written to the debug object (for example, a device object can be 
written, and the type of the object will be displayed.)

The "static" qualifier has been added to all local functions across both 
the 
core subsystem and the iASL compiler.

The number of "long" lines (> 80 chars) within the source has been 
significantly reduced, by about 1/3.

Cleaned up all header files to ensure that all CA/iASL functions are 
prototyped (even static functions) and the formatting is consistent.

Two new header files have been added, acopcode.h and acnames.h.

Removed several obsolete functions that were no longer used.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.3K Code, 11.5K Data,  89.8K Total
    Debug Version:     165.4K Code, 69.7K Data, 236.1K Total
  Current Release:
    Non-Debug Version:  78.0K Code, 11.6K Data,  89.6K Total
    Debug Version:     163.5K Code, 69.3K Data, 232.8K Total



2) iASL Compiler/Disassembler:

Fixed a problem with the resource descriptor generation/support. For the 
ResourceSourceIndex and the ResourceSource fields, both must be present, 
or 
both must be not present - can't have one without the other.

The compiler now returns non-zero from the main procedure if any errors 
have 
occurred during the compilation.


----------------------------------------
09 March 2005.  Summary of changes for version 20050309:

1) ACPI CA Core Subsystem:

The string-to-buffer implicit conversion code has been modified again 
after 
a change to the ACPI specification.  In order to match the behavior of 
the 
other major ACPI implementation, the target buffer is no longer truncated 
if 
the source string is smaller than an existing target buffer. This change 
requires an update to the ACPI spec, and should eliminate the recent 
AE_AML_BUFFER_LIMIT issues.

The "implicit return" support was rewritten to a new algorithm that 
solves 
the general case. Rather than attempt to determine when a method is about 
to 
exit, the result of every ASL operator is saved momentarily until the 
very 
next ASL operator is executed. Therefore, no matter how the method exits, 
there will always be a saved implicit return value. This feature is only 
enabled with the AcpiGbl_EnableInterpreterSlack flag, and should 
eliminate 
AE_AML_NO_RETURN_VALUE errors when enabled.

Implemented implicit conversion support for the predicate (operand) of 
the 
If, Else, and While operators. String and Buffer arguments are 
automatically 
converted to Integers.

Changed the string-to-integer conversion behavior to match the new ACPI 
errata: "If no integer object exists, a new integer is created. The ASCII 
string is interpreted as a hexadecimal constant. Each string character is 
interpreted as a hexadecimal value ('0'-'9', 'A'-'F', 'a', 'f'), starting 
with the first character as the most significant digit, and ending with 
the 
first non-hexadecimal character or end-of-string." This means that the 
first 
non-hex character terminates the conversion and this is the code that was 
changed.

Fixed a problem where the ObjectType operator would fail (fault) when 
used 
on an Index of a Package which pointed to a null package element. The 
operator now properly returns zero (Uninitialized) in this case.

Fixed a problem where the While operator used excessive memory by not 
properly popping the result stack during execution. There was no memory 
leak 
after execution, however. (Code provided by Valery Podrezov.)

Fixed a problem where references to control methods within Package 
objects 
caused the method to be invoked, instead of producing a reference object 
pointing to the method.

Restructured and simplified the pswalk.c module (AcpiPsDeleteParseTree) 
to 
improve performance and reduce code size. (Code provided by Alexey 
Starikovskiy.)

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.3K Code, 11.5K Data,  89.8K Total
    Debug Version:     165.4K Code, 69.6K Data, 236.0K Total
  Current Release:
    Non-Debug Version:  78.3K Code, 11.5K Data,  89.8K Total
    Debug Version:     165.4K Code, 69.7K Data, 236.1K Total


2) iASL Compiler/Disassembler:

Fixed a problem with the Return operator with no arguments. Since the AML 
grammar for the byte encoding requires an operand for the Return opcode, 
the 
compiler now emits a Return(Zero) for this case.  An ACPI specification 
update has been written for this case.

For tables other than the DSDT, namepath optimization is automatically 
disabled. This is because SSDTs can be loaded anywhere in the namespace, 
the 
compiler has no knowledge of where, and thus cannot optimize namepaths.

Added "ProcessorObj" to the ObjectTypeKeyword list. This object type was 
inadvertently omitted from the ACPI specification, and will require an 
update to the spec.

The source file scan for ASCII characters is now optional (-a). This 
change 
was made because some vendors place non-ascii characters within comments. 
However, the scan is simply a brute-force byte compare to ensure all 
characters in the file are in the range 0x00 to 0x7F.

Fixed a problem with the CondRefOf operator where the compiler was 
inappropriately checking for the existence of the target. Since the point 
of 
the operator is to check for the existence of the target at run-time, the 
compiler no longer checks for the target existence.

Fixed a problem where errors generated from the internal AML interpreter 
during constant folding were not handled properly, causing a fault.

Fixed a problem with overly aggressive range checking for the Stall 
operator. The valid range (max 255) is now only checked if the operand is 
of 
type Integer. All other operand types cannot be statically checked.

Fixed a problem where control method references within the RefOf, 
DeRefOf, 
and ObjectType operators were not treated properly. They are now treated 
as 
actual references, not method invocations.

Fixed and enhanced the "list namespace" option (-ln). This option was 
broken 
a number of releases ago.

Improved error handling for the Field, IndexField, and BankField 
operators. 
The compiler now cleanly reports and recovers from errors in the field 
component (FieldUnit) list.

Fixed a disassembler problem where the optional ResourceDescriptor fields 
TRS and TTP were not always handled correctly.

Disassembler - Comments in output now use "//" instead of "/*"

----------------------------------------
28 February 2005.  Summary of changes for version 20050228:

1) ACPI CA Core Subsystem:

Fixed a problem where the result of an Index() operator (an object 
reference) must increment the reference count on the target object for 
the 
life of the object reference.

Implemented AML Interpreter and Debugger support for the new ACPI 3.0 
Extended Address (IO, Memory, Space), QwordSpace, DwordSpace, and 
WordSpace 
resource descriptors.

Implemented support in the _OSI method for the ACPI 3.0 "Extended Address 
Space Descriptor" string, indicating interpreter support for the 
descriptors 
above.

Implemented header support for the new ACPI 3.0 FADT flag bits.

Implemented header support for the new ACPI 3.0 PCI Express bits for the 
PM1 
status/enable registers.

Updated header support for the MADT processor local Apic struct and MADT 
platform interrupt source struct for new ACPI 3.0 fields.

Implemented header support for the SRAT and SLIT ACPI tables.

Implemented the -s switch in AcpiExec to enable the "InterpreterSlack" 
flag 
at runtime.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.2K Code, 11.5K Data,  89.7K Total
    Debug Version:     164.9K Code, 69.2K Data, 234.1K Total
  Current Release:
    Non-Debug Version:  78.3K Code, 11.5K Data,  89.8K Total
    Debug Version:     165.4K Code, 69.6K Data, 236.0K Total


2) iASL Compiler/Disassembler:

Fixed a problem with the internal 64-bit String-to-integer conversion 
with 
strings less than two characters long.

Fixed a problem with constant folding where the result of the Index() 
operator can not be considered a constant. This means that Index() cannot 
be 
a type3 opcode and this will require an update to the ACPI specification.

Disassembler: Implemented support for the TTP, MTP, and TRS resource 
descriptor fields. These fields were inadvertently ignored and not output 
in 
the disassembly of the resource descriptor.


 ----------------------------------------
11 February 2005.  Summary of changes for version 20050211:

1) ACPI CA Core Subsystem:

Implemented ACPI 3.0 support for implicit conversion within the Match() 
operator. MatchObjects can now be of type integer, buffer, or string 
instead 
of just type integer.  Package elements are implicitly converted to the 
type 
of the MatchObject. This change aligns the behavior of Match() with the 
behavior of the other logical operators (LLess(), etc.) It also requires 
an 
errata change to the ACPI specification as this support was intended for 
ACPI 3.0, but was inadvertently omitted.

Fixed a problem with the internal implicit "to buffer" conversion. 
Strings 
that are converted to buffers will cause buffer truncation if the string 
is 
smaller than the target buffer. Integers that are converted to buffers 
will 
not cause buffer truncation, only zero extension (both as per the ACPI 
spec.) The problem was introduced when code was added to truncate the 
buffer, but this should not be performed in all cases, only the string 
case.

Fixed a problem with the Buffer and Package operators where the 
interpreter 
would get confused if two such operators were used as operands to an ASL 
operator (such as LLess(Buffer(1){0},Buffer(1){1}). The internal result 
stack was not being popped after the execution of these operators, 
resulting 
in an AE_NO_RETURN_VALUE exception.

Fixed a problem with constructs of the form Store(Index(...),...). The 
reference object returned from Index was inadvertently resolved to an 
actual 
value. This problem was introduced in version 20050114 when the behavior 
of 
Store() was modified to restrict the object types that can be used as the 
source operand (to match the ACPI specification.)

Reduced excessive stack use within the AcpiGetObjectInfo procedure.

Added a fix to aclinux.h to allow generation of AcpiExec on Linux.

Updated the AcpiSrc utility to add the FADT_DESCRIPTOR_REV2_MINUS struct.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.1K Code, 11.5K Data,  89.6K Total
    Debug Version:     164.8K Code, 69.2K Data, 234.0K Total
  Current Release:
    Non-Debug Version:  78.2K Code, 11.5K Data,  89.7K Total
    Debug Version:     164.9K Code, 69.2K Data, 234.1K Total


2) iASL Compiler/Disassembler:

Fixed a code generation problem in the constant folding optimization code 
where incorrect code was generated if a constant was reduced to a buffer 
object (i.e., a reduced type 5 opcode.)

Fixed a typechecking problem for the ToBuffer operator. Caused by an 
incorrect return type in the internal opcode information table.

----------------------------------------
25 January 2005.  Summary of changes for version 20050125:

1) ACPI CA Core Subsystem:

Fixed a recently introduced problem with the Global Lock where the 
underlying semaphore was not created.  This problem was introduced in 
version 20050114, and caused an AE_AML_NO_OPERAND exception during an 
Acquire() operation on _GL.

The local object cache is now optional, and is disabled by default. Both 
AcpiExec and the iASL compiler enable the cache because they run in user 
mode and this enhances their performance. #define 
ACPI_ENABLE_OBJECT_CACHE 
to enable the local cache.

Fixed an issue in the internal function AcpiUtEvaluateObject concerning 
the 
optional "implicit return" support where an error was returned if no 
return 
object was expected, but one was implicitly returned. AE_OK is now 
returned 
in this case and the implicitly returned object is deleted. 
AcpiUtEvaluateObject is only occasionally used, and only to execute 
reserved 
methods such as _STA and _INI where the return type is known up front.

Fixed a few issues with the internal convert-to-integer code. It now 
returns 
an error if an attempt is made to convert a null string, a string of only 
blanks/tabs, or a zero-length buffer. This affects both implicit 
conversion 
and explicit conversion via the ToInteger() operator.

The internal debug code in AcpiUtAcquireMutex has been commented out. It 
is 
not needed for normal operation and should increase the performance of 
the 
entire subsystem. The code remains in case it is needed for debug 
purposes 
again.

The AcpiExec source and makefile are included in the Unix/Linux package 
for 
the first time.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.4K Code,  11.5K Data,   89.9K Total
    Debug Version:     165.4K Code,  69.4K Data,  234.8K Total
  Current Release:
    Non-Debug Version:  78.1K Code,  11.5K Data,   89.6K Total
    Debug Version:     164.8K Code,  69.2K Data,  234.0K Total

2) iASL Compiler/Disassembler:

Switch/Case support: A warning is now issued if the type of the Switch 
value 
cannot be determined at compile time. For example, Switch(Arg0) will 
generate the warning, and the type is assumed to be an integer. As per 
the 
ACPI spec, use a construct such as Switch(ToInteger(Arg0)) to eliminate 
the 
warning.

Switch/Case support: Implemented support for buffer and string objects as 
the switch value.  This is an ACPI 3.0 feature, now that LEqual supports 
buffers and strings.

Switch/Case support: The emitted code for the LEqual() comparisons now 
uses 
the switch value as the first operand, not the second. The case value is 
now 
the second operand, and this allows the case value to be implicitly 
converted to the type of the switch value, not the other way around.

Switch/Case support: Temporary variables are now emitted immediately 
within 
the control method, not at the global level. This means that there are 
now 
36 temps available per-method, not 36 temps per-module as was the case 
with 
the earlier implementation (_T_0 through _T_9 and _T_A through _T_Z.)

----------------------------------------
14 January 2005.  Summary of changes for version 20050114:

Added 2005 copyright to all module headers.  This affects every module in 
the core subsystem, iASL compiler, and the utilities.

1) ACPI CA Core Subsystem:

Fixed an issue with the String-to-Buffer conversion code where the string 
null terminator was not included in the buffer after conversion, but 
there 
is existing ASL that assumes the string null terminator is included. This 
is 
the root of the ACPI_AML_BUFFER_LIMIT regression. This problem was 
introduced in the previous version when the code was updated to correctly 
set the converted buffer size as per the ACPI specification. The ACPI 
spec 
is ambiguous and will be updated to specify that the null terminator must 
be 
included in the converted buffer. This also affects the ToBuffer() ASL 
operator.

Fixed a problem with the Mid() ASL/AML operator where it did not work 
correctly on Buffer objects. Newly created sub-buffers were not being 
marked 
as initialized.


Fixed a problem in AcpiTbFindTable where incorrect string compares were 
performed on the OemId and OemTableId table header fields.  These fields 
are 
not null terminated, so strncmp is now used instead of strcmp.

Implemented a restriction on the Store() ASL/AML operator to align the 
behavior with the ACPI specification.  Previously, any object could be 
used 
as the source operand.  Now, the only objects that may be used are 
Integers, 
Buffers, Strings, Packages, Object References, and DDB Handles.  If 
necessary, the original behavior can be restored by enabling the 
EnableInterpreterSlack flag.

Enhanced the optional "implicit return" support to allow an implicit 
return 
value from methods that are invoked externally via the AcpiEvaluateObject 
interface.  This enables implicit returns from the _STA and _INI methods, 
for example.

Changed the Revision() ASL/AML operator to return the current version of 
the 
AML interpreter, in the YYYYMMDD format. Previously, it incorrectly 
returned 
the supported ACPI version (This is the function of the _REV method).

Updated the _REV predefined method to return the currently supported 
version 
of ACPI, now 3.

Implemented batch mode option for the AcpiExec utility (-b).

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.3K Code,  11.5K Data,   89.8K Total
    Debug Version:     165.3K Code,  69.4K Data,  234.7K Total
  Current Release:
    Non-Debug Version:  78.4K Code,  11.5K Data,   89.9K Total
    Debug Version:     165.4K Code,  69.4K Data,  234.8K Total

----------------------------------------
10 December 2004.  Summary of changes for version 20041210:

ACPI 3.0 support is nearing completion in both the iASL compiler and the 
ACPI CA core subsystem.

1) ACPI CA Core Subsystem:

Fixed a problem in the ToDecimalString operator where the resulting 
string 
length was incorrectly calculated. The length is now calculated exactly, 
eliminating incorrect AE_STRING_LIMIT exceptions.

Fixed a problem in the ToHexString operator to allow a maximum 200 
character 
string to be produced.

Fixed a problem in the internal string-to-buffer and buffer-to-buffer 
copy 
routine where the length of the resulting buffer was not truncated to the 
new size (if the target buffer already existed).

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.3K Code,  11.5K Data,   89.8K Total
    Debug Version:     164.7K Code,  68.5K Data,  233.2K Total
  Current Release:
    Non-Debug Version:  78.3K Code,  11.5K Data,   89.8K Total
    Debug Version:     165.3K Code,  69.4K Data,  234.7K Total


2) iASL Compiler/Disassembler:

Implemented the new ACPI 3.0 resource template macros - DWordSpace, 
ExtendedIO, ExtendedMemory, ExtendedSpace, QWordSpace, and WordSpace. 
Includes support in the disassembler.

Implemented support for the new (ACPI 3.0) parameter to the Register 
macro, 
AccessSize.

Fixed a problem where the _HE resource name for the Interrupt macro was 
referencing bit 0 instead of bit 1.

Implemented check for maximum 255 interrupts in the Interrupt macro.

Fixed a problem with the predefined resource descriptor names where 
incorrect AML code was generated if the offset within the resource buffer 
was 0 or 1.  The optimizer shortened the AML code to a single byte opcode 
but did not update the surrounding package lengths.

Changes to the Dma macro:  All channels within the channel list must be 
in 
the range 0-7.  Maximum 8 channels can be specified. BusMaster operand is 
optional (default is BusMaster).

Implemented check for maximum 7 data bytes for the VendorShort macro.

The ReadWrite parameter is now optional for the Memory32 and similar 
macros.

----------------------------------------
03 December 2004.  Summary of changes for version 20041203:

1) ACPI CA Core Subsystem:

The low-level field insertion/extraction code (exfldio) has been 
completely 
rewritten to eliminate unnecessary complexity, bugs, and boundary 
conditions.

Fixed a problem in the ToInteger, ToBuffer, ToHexString, and 
ToDecimalString 
operators where the input operand could be inadvertently deleted if no 
conversion was necessary (e.g., if the input to ToInteger was an Integer 
object.)

Fixed a problem with the ToDecimalString and ToHexString where an 
incorrect 
exception code was returned if the resulting string would be > 200 chars.  
AE_STRING_LIMIT is now returned.

Fixed a problem with the Concatenate operator where AE_OK was always 
returned, even if the operation failed.

Fixed a problem in oswinxf (used by AcpiExec and iASL) to allow > 128 
semaphores to be allocated.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.5K Code,  11.5K Data,   90.0K Total
    Debug Version:     165.2K Code,  68.6K Data,  233.8K Total
  Current Release:
    Non-Debug Version:  78.3K Code,  11.5K Data,   89.8K Total
    Debug Version:     164.7K Code,  68.5K Data,  233.2K Total


2) iASL Compiler/Disassembler:

Fixed typechecking for the ObjectType and SizeOf operators.  Problem was 
recently introduced in 20041119.

Fixed a problem with the ToUUID macro where the upper nybble of each 
buffer 
byte was inadvertently set to zero.

----------------------------------------
19 November 2004.  Summary of changes for version 20041119:

1) ACPI CA Core Subsystem:

Fixed a problem in the internal ConvertToInteger routine where new 
integers 
were not truncated to 32 bits for 32-bit ACPI tables. This routine 
converts 
buffers and strings to integers.

Implemented support to store a value to an Index() on a String object. 
This 
is an ACPI 2.0 feature that had not yet been implemented.

Implemented new behavior for storing objects to individual package 
elements 
(via the Index() operator). The previous behavior was to invoke the 
implicit 
conversion rules if an object was already present at the index.  The new 
behavior is to simply delete any existing object and directly store the 
new 
object. Although the ACPI specification seems unclear on this subject, 
other 
ACPI implementations behave in this manner.  (This is the root of the 
AE_BAD_HEX_CONSTANT issue.)

Modified the RSDP memory scan mechanism to support the extended checksum 
for 
ACPI 2.0 (and above) RSDPs. Note that the search continues until a valid 
RSDP signature is found with a valid checksum.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.5K Code,  11.5K Data,   90.0K Total
    Debug Version:     165.2K Code,  68.6K Data,  233.8K Total
  Current Release:
    Non-Debug Version:  78.5K Code,  11.5K Data,   90.0K Total
    Debug Version:     165.2K Code,  68.6K Data,  233.8K Total


2) iASL Compiler/Disassembler:

Fixed a missing semicolon in the aslcompiler.y file.

----------------------------------------
05 November 2004.  Summary of changes for version 20041105:

1) ACPI CA Core Subsystem:

Implemented support for FADT revision 2.  This was an interim table 
(between 
ACPI 1.0 and ACPI 2.0) that adds support for the FADT reset register.

Implemented optional support to allow uninitialized LocalX and ArgX 
variables in a control method.  The variables are initialized to an 
Integer 
object with a value of zero.  This support is enabled by setting the 
AcpiGbl_EnableInterpreterSlack flag to TRUE.

Implemented support for Integer objects for the SizeOf operator.  Either 
4 
or 8 is returned, depending on the current integer size (32-bit or 64-
bit, 
depending on the parent table revision).

Fixed a problem in the implementation of the SizeOf and ObjectType 
operators 
where the operand was resolved to a value too early, causing incorrect 
return values for some objects.

Fixed some possible memory leaks during exceptional conditions.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.0K Code,  11.5K Data,   89.5K Total
    Debug Version:     164.8K Code,  68.6K Data,  233.4K Total
  Current Release:
    Non-Debug Version:  78.5K Code,  11.5K Data,   90.0K Total
    Debug Version:     165.2K Code,  68.6K Data,  233.8K Total


2) iASL Compiler/Disassembler:

Implemented support for all ACPI 3.0 reserved names and methods.

Implemented all ACPI 3.0 grammar elements in the front-end, including 
support for semicolons.

Implemented the ACPI 3.0 Function() and ToUUID() macros

Fixed a problem in the disassembler where a Scope() operator would not be 
emitted properly if the target of the scope was in another table.

----------------------------------------
15 October 2004.  Summary of changes for version 20041015:

Note:  ACPI CA is currently undergoing an in-depth and complete formal 
evaluation to test/verify the following areas. Other suggestions are 
welcome. This will result in an increase in the frequency of releases and 
the number of bug fixes in the next few months.
  - Functional tests for all ASL/AML operators
  - All implicit/explicit type conversions
  - Bit fields and operation regions
  - 64-bit math support and 32-bit-only "truncated" math support
  - Exceptional conditions, both compiler and interpreter
  - Dynamic object deletion and memory leaks
  - ACPI 3.0 support when implemented
  - External interfaces to the ACPI subsystem


1) ACPI CA Core Subsystem:

Fixed two alignment issues on 64-bit platforms - within debug statements 
in 
AcpiEvGpeDetect and AcpiEvCreateGpeBlock. Removed references to the 
Address 
field within the non-aligned ACPI generic address structure.

Fixed a problem in the Increment and Decrement operators where incorrect 
operand resolution could result in the inadvertent modification of the 
original integer when the integer is passed into another method as an 
argument and the arg is then incremented/decremented.

Fixed a problem in the FromBCD operator where the upper 32-bits of a 64-
bit 
BCD number were truncated during conversion.

Fixed a problem in the ToDecimal operator where the length of the 
resulting 
string could be set incorrectly too long if the input operand was a 
Buffer 
object.

Fixed a problem in the Logical operators (LLess, etc.) where a NULL byte 
(0) 
within a buffer would prematurely terminate a compare between buffer 
objects.

Added a check for string overflow (>200 characters as per the ACPI 
specification) during the Concatenate operator with two string operands.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  77.8K Code,  11.5K Data,   89.3K Total
    Debug Version:     164.6K Code,  68.5K Data,  233.1K Total
  Current Release:
    Non-Debug Version:  78.0K Code,  11.5K Data,   89.5K Total
    Debug Version:     164.8K Code,  68.6K Data,  233.4K Total



2) iASL Compiler/Disassembler:

Allow the use of the ObjectType operator on uninitialized Locals and Args 
(returns 0 as per the ACPI specification).

Fixed a problem where the compiler would fault if there was a syntax 
error 
in the FieldName of all of the various CreateXXXField operators.

Disallow the use of lower case letters within the EISAID macro, as per 
the 
ACPI specification.  All EISAID strings must be of the form "UUUNNNN" 
Where 
U is an uppercase letter and N is a hex digit.


----------------------------------------
06 October 2004.  Summary of changes for version 20041006:

1) ACPI CA Core Subsystem:

Implemented support for the ACPI 3.0 Timer operator. This ASL function 
implements a 64-bit timer with 100 nanosecond granularity.

Defined a new OSL interface, AcpiOsGetTimer. This interface is used to 
implement the ACPI 3.0 Timer operator.  This allows the host OS to 
implement 
the timer with the best clock available. Also, it keeps the core 
subsystem 
out of the clock handling business, since the host OS (usually) performs 
this function.

Fixed an alignment issue on 64-bit platforms. The HwLowLevelRead(Write) 
functions use a 64-bit address which is part of the packed ACPI Generic 
Address Structure. Since the structure is non-aligned, the alignment 
macros 
are now used to extract the address to a local variable before use.

Fixed a problem where the ToInteger operator assumed all input strings 
were 
hexadecimal. The operator now handles both decimal strings and hex 
strings 
(prefixed with "0x").

Fixed a problem where the string length in the string object created as a 
result of the internal ConvertToString procedure could be incorrect. This 
potentially affected all implicit conversions and also the 
ToDecimalString 
and ToHexString operators.

Fixed two problems in the ToString operator. If the length parameter was 
zero, an incorrect string object was created and the value of the input 
length parameter was inadvertently changed from zero to Ones.

Fixed a problem where the optional ResourceSource string in the 
ExtendedIRQ 
resource macro was ignored.

Simplified the interfaces to the internal division functions, reducing 
code 
size and complexity.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  77.9K Code,  11.4K Data,   89.3K Total
    Debug Version:     164.5K Code,  68.3K Data,  232.8K Total
  Current Release:
    Non-Debug Version:  77.8K Code,  11.5K Data,   89.3K Total
    Debug Version:     164.6K Code,  68.5K Data,  233.1K Total


2) iASL Compiler/Disassembler:

Implemented support for the ACPI 3.0 Timer operator.

Fixed a problem where the Default() operator was inadvertently ignored in 
a 
Switch/Case block.  This was a problem in the translation of the Switch 
statement to If...Else pairs.

Added support to allow a standalone Return operator, with no parentheses 
(or 
operands).

Fixed a problem with code generation for the ElseIf operator where the 
translated Else...If parse tree was improperly constructed leading to the 
loss of some code.

----------------------------------------
22 September 2004.  Summary of changes for version 20040922:

1) ACPI CA Core Subsystem:

Fixed a problem with the implementation of the LNot() operator where 
"Ones" 
was not returned for the TRUE case. Changed the code to return Ones 
instead 
of (!Arg) which was usually 1. This change affects iASL constant folding 
for 
this operator also.

Fixed a problem in AcpiUtInitializeBuffer where an existing buffer was 
not 
initialized properly -- Now zero the entire buffer in this case where the 
buffer already exists.

Changed the interface to AcpiOsSleep from (UINT32 Seconds, UINT32 
Milliseconds) to simply (ACPI_INTEGER Milliseconds). This simplifies all 
related code considerably. This will require changes/updates to all OS 
interface layers (OSLs.)

Implemented a new external interface, AcpiInstallExceptionHandler, to 
allow 
a system exception handler to be installed. This handler is invoked upon 
any 
run-time exception that occurs during control method execution.

Added support for the DSDT in AcpiTbFindTable. This allows the 
DataTableRegion() operator to access the local copy of the DSDT.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  77.8K Code,  11.4K Data,   89.2K Total
    Debug Version:     164.2K Code,  68.2K Data,  232.4K Total
  Current Release:
    Non-Debug Version:  77.9K Code,  11.4K Data,   89.3K Total
    Debug Version:     164.5K Code,  68.3K Data,  232.8K Total


2) iASL Compiler/Disassembler:

Fixed a problem with constant folding and the LNot operator. LNot was 
returning 1 in the TRUE case, not Ones as per the ACPI specification. 
This 
could result in the generation of an incorrect folded/reduced constant.

End-Of-File is now allowed within a "//"-style comment.  A parse error no 
longer occurs if such a comment is at the very end of the input ASL 
source 
file.

Implemented the "-r" option to override the Revision in the table header. 
The initial use of this option will be to simplify the evaluation of the 
AML 
interpreter by allowing a single ASL source module to be compiled for 
either 
32-bit or 64-bit integers.


----------------------------------------
27 August 2004.  Summary of changes for version 20040827:

1) ACPI CA Core Subsystem:

- Implemented support for implicit object conversion in the non-numeric 
logical operators (LEqual, LGreater, LGreaterEqual, LLess, LLessEqual, 
and 
LNotEqual.)  Any combination of Integers/Strings/Buffers may now be used; 
the second operand is implicitly converted on the fly to match the type 
of 
the first operand.  For example:

    LEqual (Source1, Source2)

Source1 and Source2 must each evaluate to an integer, a string, or a 
buffer. 
The data type of Source1 dictates the required type of Source2. Source2 
is 
implicitly converted if necessary to match the type of Source1.

- Updated and corrected the behavior of the string conversion support.  
The 
rules concerning conversion of buffers to strings (according to the ACPI 
specification) are as follows:

ToDecimalString - explicit byte-wise conversion of buffer to string of 
decimal values (0-255) separated by commas. ToHexString - explicit byte-
wise 
conversion of buffer to string of hex values (0-FF) separated by commas. 
ToString - explicit byte-wise conversion of buffer to string.  Byte-by-
byte 
copy with no transform except NULL terminated. Any other implicit buffer-
to-
string conversion - byte-wise conversion of buffer to string of hex 
values 
(0-FF) separated by spaces.

- Fixed typo in definition of AcpiGbl_EnableInterpreterSlack.

- Fixed a problem in AcpiNsGetPathnameLength where the returned length 
was 
one byte too short in the case of a node in the root scope.  This could 
cause a fault during debug output.

- Code and Data Size: Current and previous core subsystem library sizes 
are 
shown below.  These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code.  The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size.  
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  77.9K Code,  11.5K Data,   89.4K Total
    Debug Version:     164.1K Code,  68.3K Data,  232.4K Total
  Current Release:
    Non-Debug Version:  77.8K Code,  11.4K Data,   89.2K Total
    Debug Version:     164.2K Code,  68.2K Data,  232.4K Total


2) iASL Compiler/Disassembler:

- Fixed a Linux generation error.


----------------------------------------
16 August 2004.  Summary of changes for version 20040816:

1) ACPI CA Core Subsystem:

Designed and implemented support within the AML interpreter for the so-
called "implicit return".  This support returns the result of the last 
ASL 
operation within a control method, in the absence of an explicit Return() 
operator.  A few machines depend on this behavior, even though it is not 
explicitly supported by the ASL language.  It is optional support that 
can 
be enabled at runtime via the AcpiGbl_EnableInterpreterSlack flag.

Removed support for the PCI_Config address space from the internal low 
level 
hardware interfaces (AcpiHwLowLevelRead and AcpiHwLowLevelWrite).  This 
support was not used internally, and would not work correctly anyway 
because 
the PCI bus number and segment number were not supported.  There are 
separate interfaces for PCI configuration space access because of the 
unique 
interface.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below.  These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code.  The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size.  
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.0K Code,  11.5K Data,   89.5K Total
    Debug Version:     164.1K Code,  68.2K Data,  232.3K Total
  Current Release:
    Non-Debug Version:  77.9K Code,  11.5K Data,   89.4K Total
    Debug Version:     164.1K Code,  68.3K Data,  232.4K Total


2) iASL Compiler/Disassembler:

Fixed a problem where constants in ASL expressions at the root level (not 
within a control method) could be inadvertently truncated during code 
generation.  This problem was introduced in the 20040715 release.


----------------------------------------
15 July 2004.  Summary of changes for version 20040715:

1) ACPI CA Core Subsystem:

Restructured the internal HW GPE interfaces to pass/track the current 
state 
of interrupts (enabled/disabled) in order to avoid possible deadlock and 
increase flexibility of the interfaces.

Implemented a "lexicographical compare" for String and Buffer objects 
within 
the logical operators -- LGreater, LLess, LGreaterEqual, and LLessEqual -
- 
as per further clarification to the ACPI specification.  Behavior is 
similar 
to C library "strcmp".

Completed a major reduction in CPU stack use for the AcpiGetFirmwareTable 
external function.  In the 32-bit non-debug case, the stack use has been 
reduced from 168 bytes to 32 bytes.

Deployed a new run-time configuration flag, 
AcpiGbl_EnableInterpreterSlack, 
whose purpose is to allow the AML interpreter to forgive certain bad AML 
constructs.  Default setting is FALSE.

Implemented the first use of AcpiGbl_EnableInterpreterSlack in the Field 
IO 
support code.  If enabled, it allows field access to go beyond the end of 
a 
region definition if the field is within the region length rounded up to 
the 
next access width boundary (a common coding error.)

Renamed OSD_HANDLER to ACPI_OSD_HANDLER, and OSD_EXECUTION_CALLBACK to 
ACPI_OSD_EXEC_CALLBACK for consistency with other ACPI symbols.  Also, 
these 
symbols are lowercased by the latest version of the AcpiSrc tool.

The prototypes for the PCI interfaces in acpiosxf.h have been updated to 
rename "Register" to simply "Reg" to prevent certain compilers from 
complaining.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below.  These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code.  The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size.  
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  77.8K Code,  11.5K Data,   89.3K Total
    Debug Version:     163.8K Code,  68.2K Data,  232.0K Total
  Current Release:
    Non-Debug Version:  78.0K Code,  11.5K Data,   89.5K Total
    Debug Version:     164.1K Code,  68.2K Data,  232.3K Total


2) iASL Compiler/Disassembler:

Implemented full support for Package objects within the Case() operator.  
Note: The Break() operator is currently not supported within Case blocks 
(TermLists) as there is some question about backward compatibility with 
ACPI 
1.0 interpreters.


Fixed a problem where complex terms were not supported properly within 
the 
Switch() operator.

Eliminated extraneous warning for compiler-emitted reserved names of the 
form "_T_x".  (Used in Switch/Case operators.)

Eliminated optimization messages for "_T_x" objects and small constants 
within the DefinitionBlock operator.


----------------------------------------
15 June 2004.  Summary of changes for version 20040615:

1) ACPI CA Core Subsystem:

Implemented support for Buffer and String objects (as per ACPI 2.0) for 
the 
following ASL operators:  LEqual, LGreater, LLess, LGreaterEqual, and 
LLessEqual.

All directory names in the entire source package are lower case, as they 
were in earlier releases.

Implemented "Disassemble" command in the AML debugger that will 
disassemble 
a single control method.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below.  These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code.  The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size.  
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  77.7K Code,  11.5K Data,   89.2K Total
    Debug Version:     163.3K Code,  67.2K Data,  230.5K Total

  Current Release:
    Non-Debug Version:  77.8K Code,  11.5K Data,   89.3K Total
    Debug Version:     163.8K Code,  68.2K Data,  232.0K Total


2) iASL Compiler/Disassembler:

Implemented support for Buffer and String objects (as per ACPI 2.0) for 
the 
following ASL operators:  LEqual, LGreater, LLess, LGreaterEqual, and 
LLessEqual.

All directory names in the entire source package are lower case, as they 
were in earlier releases.

Fixed a fault when using the -g or -d<nofilename> options if the FADT was 
not found.

Fixed an issue with the Windows version of the compiler where later 
versions 
of Windows place the FADT in the registry under the name "FADT" and not 
"FACP" as earlier versions did.  This applies when using the -g or -
d<nofilename> options.  The compiler now looks for both strings as 
necessary.

Fixed a problem with compiler namepath optimization where a namepath 
within 
the Scope() operator could not be optimized if the namepath was a subpath 
of 
the current scope path.

----------------------------------------
27 May 2004.  Summary of changes for version 20040527:

1) ACPI CA Core Subsystem:

Completed a new design and implementation for EBDA (Extended BIOS Data 
Area) 
support in the RSDP scan code.  The original code improperly scanned for 
the 
EBDA by simply scanning from memory location 0 to 0x400.  The correct 
method 
is to first obtain the EBDA pointer from within the BIOS data area, then 
scan 1K of memory starting at the EBDA pointer.  There appear to be few 
if 
any machines that place the RSDP in the EBDA, however.

Integrated a fix for a possible fault during evaluation of BufferField 
arguments.  Obsolete code that was causing the problem was removed.

Found and fixed a problem in the Field Support Code where data could be 
corrupted on a bit field read that starts on an aligned boundary but does 
not end on an aligned boundary.  Merged the read/write "datum length" 
calculation code into a common procedure.

Rolled in a couple of changes to the FreeBSD-specific header.


Code and Data Size: Current and previous core subsystem library sizes are 
shown below.  These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code.  The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size.  
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  77.6K Code,  11.5K Data,   89.1K Total
    Debug Version:     163.2K Code,  67.2K Data,  230.4K Total
  Current Release:
    Non-Debug Version:  77.7K Code,  11.5K Data,   89.2K Total
    Debug Version:     163.3K Code,  67.2K Data,  230.5K Total


2) iASL Compiler/Disassembler:

Fixed a generation warning produced by some overly-verbose compilers for 
a 
64-bit constant.

----------------------------------------
14 May 2004.  Summary of changes for version 20040514:

1) ACPI CA Core Subsystem:

Fixed a problem where hardware GPE enable bits sometimes not set properly 
during and after GPE method execution.  Result of 04/27 changes.

Removed extra "clear all GPEs" when sleeping/waking.

Removed AcpiHwEnableGpe and AcpiHwDisableGpe, replaced by the single 
AcpiHwWriteGpeEnableReg. Changed a couple of calls to the functions above 
to 
the new AcpiEv* calls as appropriate.

ACPI_OS_NAME was removed from the OS-specific headers.  The default name 
is 
now "Microsoft Windows NT" for maximum compatibility.  However this can 
be 
changed by modifying the acconfig.h file.

Allow a single invocation of AcpiInstallNotifyHandler for a handler that 
traps both types of notifies (System, Device).  Use ACPI_ALL_NOTIFY flag. 

Run _INI methods on ThermalZone objects.  This is against the ACPI 
specification, but there is apparently ASL code in the field that has 
these 
_INI methods, and apparently "other" AML interpreters execute them.

Performed a full 16/32/64 bit lint that resulted in some small changes.

Added a sleep simulation command to the AML debugger to test sleep code. 

Code and Data Size: Current and previous core subsystem library sizes are 
shown below.  These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code.  The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size.  
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  77.6K Code,  11.5K Data,   89.1K Total
    Debug Version:     162.9K Code,  67.0K Data,  229.9K Total
  Current Release:
    Non-Debug Version:  77.6K Code,  11.5K Data,   89.1K Total
    Debug Version:     163.2K Code,  67.2K Data,  230.4K Total

----------------------------------------
27 April 2004.  Summary of changes for version 20040427:

1) ACPI CA Core Subsystem:

Completed a major overhaul of the GPE handling within ACPI CA.  There are 
now three types of GPEs:  wake-only, runtime-only, and combination 
wake/run.  
The only GPEs allowed to be combination wake/run are for button-style 
devices such as a control-method power button, control-method sleep 
button, 
or a notebook lid switch.  GPEs that have an _Lxx or _Exx method and are 
not 
referenced by any _PRW methods are marked for "runtime" and hardware 
enabled.  Any GPE that is referenced by a _PRW method is marked for 
"wake" 
(and disabled at runtime).  However, at sleep time, only those GPEs that 
have been specifically enabled for wake via the AcpiEnableGpe interface 
will 
actually be hardware enabled.

A new external interface has been added, AcpiSetGpeType(), that is meant 
to 
be used by device drivers to force a GPE to a particular type.  It will 
be 
especially useful for the drivers for the button devices mentioned above.

Completed restructuring of the ACPI CA initialization sequence so that 
default operation region handlers are installed before GPEs are 
initialized 
and the _PRW methods are executed.  This will prevent errors when the 
_PRW 
methods attempt to access system memory or I/O space.

GPE enable/disable no longer reads the GPE enable register.  We now keep 
the 
enable info for runtime and wake separate and in the GPE_EVENT_INFO.  We 
thus no longer depend on the hardware to maintain these bits.

Always clear the wake status and fixed/GPE status bits before sleep, even 
for state S5.

Improved the AML debugger output for displaying the GPE blocks and their 
current status.

Added new strings for the _OSI method, of the form "Windows 2001 SPx" 
where 
x = 0,1,2,3,4.

Fixed a problem where the physical address was incorrectly calculated 
when 
the Load() operator was used to directly load from an Operation Region 
(vs. 
loading from a Field object.)  Also added check for minimum table length 
for 
this case.

Fix for multiple mutex acquisition.  Restore original thread SyncLevel on 
mutex release.

Added ACPI_VALID_SXDS flag to the AcpiGetObjectInfo interface for 
consistency with the other fields returned.

Shrunk the ACPI_GPE_EVENT_INFO structure by 40%.  There is one such 
structure for each GPE in the system, so the size of this structure is 
important.

CPU stack requirement reduction:  Cleaned up the method execution and 
object 
evaluation paths so that now a parameter structure is passed, instead of 
copying the various method parameters over and over again.

In evregion.c:  Correctly exit and reenter the interpreter region if and 
only if dispatching an operation region request to a user-installed 
handler.  
Do not exit/reenter when dispatching to a default handler (e.g., default 
system memory or I/O handlers)


Notes for updating drivers for the new GPE support.  The following 
changes 
must be made to ACPI-related device drivers that are attached to one or 
more 
GPEs: (This information will be added to the ACPI CA Programmer 
Reference.)

1) AcpiInstallGpeHandler no longer automatically enables the GPE, you 
must 
explicitly call AcpiEnableGpe.
2) There is a new interface called AcpiSetGpeType. This should be called 
before enabling the GPE.  Also, this interface will automatically disable 
the GPE if it is currently enabled.
3) AcpiEnableGpe no longer supports a GPE type flag.

Specific drivers that must be changed:
1) EC driver:
    AcpiInstallGpeHandler (NULL, GpeNum, ACPI_GPE_EDGE_TRIGGERED, 
AeGpeHandler, NULL);
    AcpiSetGpeType (NULL, GpeNum, ACPI_GPE_TYPE_RUNTIME);
    AcpiEnableGpe (NULL, GpeNum, ACPI_NOT_ISR);

2) Button Drivers (Power, Lid, Sleep):
Run _PRW method under parent device
If _PRW exists: /* This is a control-method button */
    Extract GPE number and possibly GpeDevice
    AcpiSetGpeType (GpeDevice, GpeNum, ACPI_GPE_TYPE_WAKE_RUN);
    AcpiEnableGpe (GpeDevice, GpeNum, ACPI_NOT_ISR);

For all other devices that have _PRWs, we automatically set the GPE type 
to 
ACPI_GPE_TYPE_WAKE, but the GPE is NOT automatically (wake) enabled.  
This 
must be done on a selective basis, usually requiring some kind of user 
app 
to allow the user to pick the wake devices.


Code and Data Size: Current and previous core subsystem library sizes are 
shown below.  These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code.  The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size.  
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  77.0K Code,  11.4K Data,   88.4K Total
    Debug Version:     161.0K Code,  66.3K Data,  227.3K Total
  Current Release:

    Non-Debug Version:  77.6K Code,  11.5K Data,   89.1K Total
    Debug Version:     162.9K Code,  67.0K Data,  229.9K Total



----------------------------------------
02 April 2004.  Summary of changes for version 20040402:

1) ACPI CA Core Subsystem:

Fixed an interpreter problem where an indirect store through an ArgX 
parameter was incorrectly applying the "implicit conversion rules" during 
the store.  From the ACPI specification: "If the target is a method local 
or 
argument (LocalX or ArgX), no conversion is performed and the result is 
stored directly to the target".  The new behavior is to disable implicit 
conversion during ALL stores to an ArgX.

Changed the behavior of the _PRW method scan to ignore any and all errors 
returned by a given _PRW.  This prevents the scan from aborting from the 
failure of any single _PRW.

Moved the runtime configuration parameters from the global init procedure 
to 
static variables in acglobal.h.  This will allow the host to override the 
default values easily.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below.  These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code.  The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size.  
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  76.9K Code,  11.4K Data,   88.3K Total
    Debug Version:     160.8K Code,  66.1K Data,  226.9K Total
  Current Release:
    Non-Debug Version:  77.0K Code,  11.4K Data,   88.4K Total
    Debug Version:     161.0K Code,  66.3K Data,  227.3K Total


2) iASL Compiler/Disassembler:

iASL now fully disassembles SSDTs.  However, External() statements are 
not 
generated automatically for unresolved symbols at this time.  This is a 
planned feature for future implementation.

Fixed a scoping problem in the disassembler that occurs when the type of 
the 
target of a Scope() operator is overridden.  This problem caused an 
incorrectly nested internal namespace to be constructed.

Any warnings or errors that are emitted during disassembly are now 
commented 
out automatically so that the resulting file can be recompiled without 
any 
hand editing.

----------------------------------------
26 March 2004.  Summary of changes for version 20040326:

1) ACPI CA Core Subsystem:

Implemented support for "wake" GPEs via interaction between GPEs and the 
_PRW methods.  Every GPE that is pointed to by one or more _PRWs is 
identified as a WAKE GPE and by default will no longer be enabled at 
runtime.  Previously, we were blindly enabling all GPEs with a 
corresponding 
_Lxx or _Exx method - but most of these turn out to be WAKE GPEs anyway.  
We 
believe this has been the cause of thousands of "spurious" GPEs on some 
systems.

This new GPE behavior is can be reverted to the original behavior (enable 
ALL GPEs at runtime) via a runtime flag.

Fixed a problem where aliased control methods could not access objects 
properly.  The proper scope within the namespace was not initialized 
(transferred to the target of the aliased method) before executing the 
target method.

Fixed a potential race condition on internal object deletion on the 
return 
object in AcpiEvaluateObject. 

Integrated a fix for resource descriptors where both _MEM and _MTP were 
being extracted instead of just _MEM.  (i.e. bitmask was incorrectly too 
wide, 0x0F instead of 0x03.)

Added a special case for ACPI_ROOT_OBJECT in AcpiUtGetNodeName, 
preventing 
a 
fault in some cases.

Updated Notify() values for debug statements in evmisc.c

Return proper status from AcpiUtMutexInitialize, not just simply AE_OK.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below.  These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code.  The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size.  
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:

    Non-Debug Version:  76.5K Code,  11.3K Data,   87.8K Total
    Debug Version:     160.3K Code,  66.0K Data,  226.3K Total
  Current Release:
    Non-Debug Version:  76.9K Code,  11.4K Data,   88.3K Total
    Debug Version:     160.8K Code,  66.1K Data,  226.9K Total

----------------------------------------
11 March 2004.  Summary of changes for version 20040311:

1) ACPI CA Core Subsystem:

Fixed a problem where errors occurring during the parse phase of control 
method execution did not abort cleanly.  For example, objects created and 
installed in the namespace were not deleted.  This caused all subsequent 
invocations of the method to return the AE_ALREADY_EXISTS exception.

Implemented a mechanism to force a control method to "Serialized" 
execution 
if the method attempts to create namespace objects. (The root of the 
AE_ALREADY_EXISTS problem.)

Implemented support for the predefined _OSI "internal" control method.  
Initial supported strings are "Linux", "Windows 2000", "Windows 2001", 
and 
"Windows 2001.1", and can be easily upgraded for new strings as 
necessary.  
This feature will allow "other" operating systems to execute the fully 
tested, "Windows" code path through the ASL code

Global Lock Support:  Now allows multiple acquires and releases with any 
internal thread.  Removed concept of "owning thread" for this special 
mutex.

Fixed two functions that were inappropriately declaring large objects on 
the 
CPU stack:  PsParseLoop, NsEvaluateRelative.  Reduces the stack usage 
during 
method execution considerably.

Fixed a problem in the ACPI 2.0 FACS descriptor (actbl2.h) where the 
S4Bios_f field was incorrectly defined as UINT32 instead of UINT32_BIT.

Fixed a problem where AcpiEvGpeDetect would fault if there were no GPEs 
defined on the machine.

Implemented two runtime options:  One to force all control method 
execution 
to "Serialized" to mimic Windows behavior, another to disable _OSI 
support 
if it causes problems on a given machine.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below.  These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code.  The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size.  
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  74.8K Code,  10.1K Data,   84.9K Total
    Debug Version:     158.7K Code,  65.1K Data,  223.8K Total
  Current Release:
    Non-Debug Version:  76.5K Code,  11.3K Data,   87.8K Total
    Debug Version:     160.3K Code,  66.0K Data,  226.3K Total

2) iASL Compiler/Disassembler:

Fixed an array size problem for FreeBSD that would cause the compiler to 
fault.

----------------------------------------
20 February 2004.  Summary of changes for version 20040220:


1) ACPI CA Core Subsystem:

Implemented execution of _SxD methods for Device objects in the 
GetObjectInfo interface.

Fixed calls to _SST method to pass the correct arguments.

Added a call to _SST on wake to restore to "working" state.

Check for End-Of-Buffer failure case in the WalkResources interface.

Integrated fix for 64-bit alignment issue in acglobal.h by moving two 
structures to the beginning of the file.

After wake, clear GPE status register(s) before enabling GPEs.

After wake, clear/enable power button.  (Perhaps we should clear/enable 
all 
fixed events upon wake.)

Fixed a couple of possible memory leaks in the Namespace manager.

Integrated latest acnetbsd.h file.

----------------------------------------
11 February 2004.  Summary of changes for version 20040211:


1) ACPI CA Core Subsystem:

Completed investigation and implementation of the call-by-reference 
mechanism for control method arguments.

Fixed a problem where a store of an object into an indexed package could 
fail if the store occurs within a different method than the method that 
created the package.

Fixed a problem where the ToDecimal operator could return incorrect 
results.

Fixed a problem where the CopyObject operator could fail on some of the 
more 
obscure objects (e.g., Reference objects.)

Improved the output of the Debug object to display buffer, package, and 
index objects.

Fixed a problem where constructs of the form "RefOf (ArgX)" did not 
return 
the expected result.

Added permanent ACPI_REPORT_ERROR macros for all instances of the 
ACPI_AML_INTERNAL exception.

Integrated latest version of acfreebsd.h

----------------------------------------
16 January 2004.  Summary of changes for version 20040116:

The purpose of this release is primarily to update the copyright years in 
each module, thus causing a huge number of diffs.  There are a few small 
functional changes, however.

1) ACPI CA Core Subsystem:

Improved error messages when there is a problem finding one or more of 
the 
required base ACPI tables

Reintroduced the definition of APIC_HEADER in actbl.h

Changed definition of MADT_ADDRESS_OVERRIDE to 64 bits (actbl.h)

Removed extraneous reference to NewObj in dsmthdat.c

2) iASL compiler

Fixed a problem introduced in December that disabled the correct 
disassembly 
of Resource Templates


----------------------------------------
03 December 2003.  Summary of changes for version 20031203:

1) ACPI CA Core Subsystem:

Changed the initialization of Operation Regions during subsystem
init to perform two entire walks of the ACPI namespace; The first
to initialize the regions themselves, the second to execute the
_REG methods.  This fixed some interdependencies across _REG
methods found on some machines.

Fixed a problem where a Store(Local0, Local1) could simply update
the object reference count, and not create a new copy of the
object if the Local1 is uninitialized.

Implemented support for the _SST reserved method during sleep
transitions.

Implemented support to clear the SLP_TYP and SLP_EN bits when
waking up, this is apparently required by some machines.

When sleeping, clear the wake status only if SleepState is not S5.

Fixed a problem in AcpiRsExtendedIrqResource() where an incorrect
pointer arithmetic advanced a string pointer too far.

Fixed a problem in AcpiTbGetTablePtr() where a garbage pointer
could be returned if the requested table has not been loaded.

Within the support for IRQ resources, restructured the handling of
the active and edge/level bits.

Fixed a few problems in AcpiPsxExecute() where memory could be
leaked under certain error conditions.

Improved error messages for the cases where the ACPI mode could
not be entered.

Code and Data Size: Current and previous core subsystem library
sizes are shown below.  These are the code and data sizes for the
acpica.lib produced by the Microsoft Visual C++ 6.0 compiler, and
these values do not include any ACPI driver or OSPM code.  The
debug version of the code includes the debug output trace
mechanism and has a much larger code and data size.  Note that
these values will vary depending on the efficiency of the compiler
and the compiler options used during generation.

  Previous Release (20031029):
    Non-Debug Version:  74.4K Code,  10.1K Data,   84.5K Total
    Debug Version:     158.3K Code,  65.0K Data,  223.3K Total
  Current Release:
    Non-Debug Version:  74.8K Code,  10.1K Data,   84.9K Total
    Debug Version:     158.7K Code,  65.1K Data,  223.8K Total

2) iASL Compiler/Disassembler:

Implemented a fix for the iASL disassembler where a bad index was
generated.  This was most noticeable on 64-bit platforms


----------------------------------------
29 October 2003.  Summary of changes for version 20031029:

1) ACPI CA Core Subsystem:


Fixed a problem where a level-triggered GPE with an associated
_Lxx control method was incorrectly cleared twice.

Fixed a problem with the Field support code where an access can
occur beyond the end-of-region if the field is non-aligned but
extends to the very end of the parent region (resulted in an
AE_AML_REGION_LIMIT exception.)

Fixed a problem with ACPI Fixed Events where an RT Clock handler
would not get invoked on an RTC event.  The RTC event bitmasks for
the PM1 registers were not being initialized properly.

Implemented support for executing _STA and _INI methods for
Processor objects.  Although this is currently not part of the
ACPI specification, there is existing ASL code that depends on the
init-time execution of these methods.

Implemented and deployed a GetDescriptorName function to decode
the various types of internal descriptors.  Guards against null
descriptors during debug output also.

Implemented and deployed a GetNodeName function to extract the 4-
character namespace node name.  This function simplifies the debug
and error output, as well as guarding against null pointers during
output.

Implemented and deployed the ACPI_FORMAT_UINT64 helper macro to
simplify the debug and error output of 64-bit integers.  This
macro replaces the HIDWORD and LODWORD macros for dumping these
integers.

Updated the implementation of the Stall() operator to only call
AcpiOsStall(), and also return an error if the operand is larger
than 255.  This preserves the required behavior of not
relinquishing the processor, as would happen if AcpiOsSleep() was
called for "long stalls".

Constructs of the form "Store(LocalX,LocalX)" where LocalX is not
initialized are now treated as NOOPs.

Cleaned up a handful of warnings during 64-bit generation.

Fixed a reported error where and incorrect GPE number was passed
to the GPE dispatch handler.  This value is only used for error
output, however.  Used this opportunity to clean up and streamline
the GPE dispatch code.

Code and Data Size: Current and previous core subsystem library
sizes are shown below.  These are the code and data sizes for the
acpica.lib produced by the Microsoft Visual C++ 6.0 compiler, and
these values do not include any ACPI driver or OSPM code.  The

debug version of the code includes the debug output trace
mechanism and has a much larger code and data size.  Note that
these values will vary depending on the efficiency of the compiler
and the compiler options used during generation.

  Previous Release (20031002):
    Non-Debug Version:  74.1K Code,   9.7K Data,   83.8K Total
    Debug Version:     157.9K Code,  64.8K Data,  222.7K Total
  Current Release:
    Non-Debug Version:  74.4K Code,  10.1K Data,   84.5K Total
    Debug Version:     158.3K Code,  65.0K Data,  223.3K Total


2) iASL Compiler/Disassembler:

Updated the iASL compiler to return an error if the operand to the
Stall() operator is larger than 255.


----------------------------------------
02 October 2003.  Summary of changes for version 20031002:


1) ACPI CA Core Subsystem:

Fixed a problem with Index Fields where the index was not
incremented for fields that require multiple writes to the
index/data registers (Fields that are wider than the data
register.)

Fixed a problem with all Field objects where a write could go
beyond the end-of-field if the field was larger than the access
granularity and therefore required multiple writes to complete the
request.  An extra write beyond the end of the field could happen
inadvertently.

Fixed a problem with Index Fields where a BUFFER_OVERFLOW error
would incorrectly be returned if the width of the Data Register
was larger than the specified field access width.

Completed fixes for LoadTable() and Unload() and verified their
operation.  Implemented full support for the "DdbHandle" object
throughout the ACPI CA subsystem.

Implemented full support for the MADT and ECDT tables in the ACPI
CA header files.  Even though these tables are not directly
consumed by ACPI CA, the header definitions are useful for ACPI
device drivers.

Integrated resource descriptor fixes posted to the Linux ACPI
list.  This included checks for minimum descriptor length, and
support for trailing NULL strings within descriptors that have
optional string elements.

Code and Data Size: Current and previous core subsystem library
sizes are shown below.  These are the code and data sizes for the
acpica.lib produced by the Microsoft Visual C++ 6.0 compiler, and
these values do not include any ACPI driver or OSPM code.  The
debug version of the code includes the debug output trace
mechanism and has a much larger code and data size.  Note that
these values will vary depending on the efficiency of the compiler
and the compiler options used during generation.

  Previous Release (20030918):
    Non-Debug Version:  73.9K Code,   9.7K Data,   83.6K Total
    Debug Version:     157.3K Code,  64.5K Data,  221.8K Total
  Current Release:
    Non-Debug Version:  74.1K Code,   9.7K Data,   83.8K Total
    Debug Version:     157.9K Code,  64.8K Data,  222.7K Total


2) iASL Compiler:

Implemented detection of non-ASCII characters within the input
source ASL file.  This catches attempts to compile binary (AML)
files early in the compile, with an informative error message.

Fixed a problem where the disassembler would fault if the output
filename could not be generated or if the output file could not be
opened.

----------------------------------------
18 September 2003.  Summary of changes for version 20030918:


1) ACPI CA Core Subsystem:

Found and fixed a longstanding problem with the late execution of
the various deferred AML opcodes (such as Operation Regions,
Buffer Fields, Buffers, and Packages).  If the name string
specified for the name of the new object placed the object in a
scope other than the current scope, the initialization/execution
of the opcode failed.  The solution to this problem was to
implement a mechanism where the late execution of such opcodes
does not attempt to lookup/create the name a second time in an
incorrect scope.  This fixes the "region size computed
incorrectly" problem.

Fixed a call to AcpiHwRegisterWrite in hwregs.c that was causing a
Global Lock AE_BAD_PARAMETER error.

Fixed several 64-bit issues with prototypes, casting and data
types.

Removed duplicate prototype from acdisasm.h

Fixed an issue involving EC Operation Region Detach (Shaohua Li)

Code and Data Size: Current and previous core subsystem library
sizes are shown below.  These are the code and data sizes for the
acpica.lib produced by the Microsoft Visual C++ 6.0 compiler, and
these values do not include any ACPI driver or OSPM code.  The
debug version of the code includes the debug output trace
mechanism and has a much larger code and data size.  Note that
these values will vary depending on the efficiency of the compiler
and the compiler options used during generation.

  Previous Release:

    Non-Debug Version:  73.7K Code,   9.7K Data,   83.4K Total
    Debug Version:     156.9K Code,  64.2K Data,  221.1K Total
  Current Release:
    Non-Debug Version:  73.9K Code,   9.7K Data,   83.6K Total
    Debug Version:     157.3K Code,  64.5K Data,  221.8K Total


2) Linux:

Fixed the AcpiOsSleep implementation in osunixxf.c to pass the
correct sleep time in seconds.

----------------------------------------
14 July 2003.  Summary of changes for version 20030619:

1) ACPI CA Core Subsystem:

Parse SSDTs in order discovered, as opposed to reverse order
(Hrvoje Habjanic)

Fixes from FreeBSD and NetBSD. (Frank van der Linden, Thomas
Klausner,
   Nate Lawson)


2) Linux:

Dynamically allocate SDT list (suggested by Andi Kleen)

proc function return value cleanups (Andi Kleen)

Correctly handle NMI watchdog during long stalls (Andrew Morton)

Make it so acpismp=force works (reported by Andrew Morton)


----------------------------------------
19 June 2003.  Summary of changes for version 20030619:

1) ACPI CA Core Subsystem:

Fix To/FromBCD, eliminating the need for an arch-specific #define.

Do not acquire a semaphore in the S5 shutdown path.

Fix ex_digits_needed for 0. (Takayoshi Kochi)

Fix sleep/stall code reversal. (Andi Kleen)

Revert a change having to do with control method calling
semantics.

2) Linux:

acpiphp update (Takayoshi Kochi)

Export acpi_disabled for sonypi (Stelian Pop)

Mention acpismp=force in config help

Re-add acpitable.c and acpismp=force. This improves backwards

compatibility and also cleans up the code to a significant degree.

Add ASUS Value-add driver (Karol Kozimor and Julien Lerouge)

----------------------------------------
22 May 2003.  Summary of changes for version 20030522:

1) ACPI CA Core Subsystem:

Found and fixed a reported problem where an AE_NOT_FOUND error
occurred occasionally during _BST evaluation.  This turned out to
be an Owner ID allocation issue where a called method did not get
a new ID assigned to it.  Eventually, (after 64k calls), the Owner
ID UINT16 would wraparound so that the ID would be the same as the
caller's and the called method would delete the caller's
namespace.

Implemented extended error reporting for control methods that are
aborted due to a run-time exception.  Output includes the exact
AML instruction that caused the method abort, a dump of the method
locals and arguments at the time of the abort, and a trace of all
nested control method calls.

Modified the interpreter to allow the creation of buffers of zero
length from the AML code. Implemented new code to ensure that no
attempt is made to actually allocate a memory buffer (of length
zero) - instead, a simple buffer object with a NULL buffer pointer
and length zero is created.  A warning is no longer issued when
the AML attempts to create a zero-length buffer.

Implemented a workaround for the "leading asterisk issue" in
_HIDs, _UIDs, and _CIDs in the AML interpreter.  One leading
asterisk is automatically removed if present in any HID, UID, or
CID strings.  The iASL compiler will still flag this asterisk as
an error, however.

Implemented full support for _CID methods that return a package of
multiple CIDs (Compatible IDs).  The AcpiGetObjectInfo() interface
now additionally returns a device _CID list if present.  This
required a change to the external interface in order to pass an
ACPI_BUFFER object as a parameter since the _CID list is of
variable length.

Fixed a problem with the new AE_SAME_HANDLER exception where
handler initialization code did not know about this exception.

Code and Data Size: Current and previous core subsystem library
sizes are shown below.  These are the code and data sizes for the
acpica.lib produced by the Microsoft Visual C++ 6.0 compiler, and
these values do not include any ACPI driver or OSPM code.  The
debug version of the code includes the debug output trace
mechanism and has a much larger code and data size.  Note that
these values will vary depending on the efficiency of the compiler
and the compiler options used during generation.

  Previous Release (20030509):
    Non-Debug Version:  73.4K Code,   9.7K Data,   83.1K Total
    Debug Version:     156.1K Code,  63.9K Data,  220.0K Total
  Current Release:
    Non-Debug Version:  73.7K Code,   9.7K Data,   83.4K Total
    Debug Version:     156.9K Code,  64.2K Data,  221.1K Total


2) Linux:

Fixed a bug in which we would reinitialize the ACPI interrupt
after it was already working, thus disabling all ACPI and the IRQs
for any other device sharing the interrupt. (Thanks to Stian
Jordet)

Toshiba driver update (John Belmonte)

Return only 0 or 1 for our interrupt handler status (Andrew
Morton)


3) iASL Compiler:

Fixed a reported problem where multiple (nested) ElseIf()
statements were not handled correctly by the compiler, resulting
in incorrect warnings and incorrect AML code.  This was a problem
in both the ASL parser and the code generator.


4) Documentation:

Added changes to existing interfaces, new exception codes, and new
text concerning reference count object management versus garbage
collection.

----------------------------------------
09 May 2003.  Summary of changes for version 20030509.


1) ACPI CA Core Subsystem:

Changed the subsystem initialization sequence to hold off
installation of address space handlers until the hardware has been
initialized and the system has entered ACPI mode.  This is because
the installation of space handlers can cause _REG methods to be
run.  Previously, the _REG methods could potentially be run before
ACPI mode was enabled.

Fixed some memory leak issues related to address space handler and
notify handler installation.  There were some problems with the
reference count mechanism caused by the fact that the handler
objects are shared across several namespace objects.

Fixed a reported problem where reference counts within the
namespace were not properly updated when named objects created by
method execution were deleted.

Fixed a reported problem where multiple SSDTs caused a deletion
issue during subsystem termination.  Restructured the table data
structures to simplify the linked lists and the related code.

Fixed a problem where the table ID associated with secondary
tables (SSDTs) was not being propagated into the namespace objects
created by those tables.  This would only present a problem for
tables that are unloaded at run-time, however.

Updated AcpiOsReadable and AcpiOsWritable to use the ACPI_SIZE
type as the length parameter (instead of UINT32).

Solved a long-standing problem where an ALREADY_EXISTS error
appears on various systems.  This problem could happen when there
are multiple PCI_Config operation regions under a single PCI root
bus.  This doesn't happen very frequently, but there are some
systems that do this in the ASL.

Fixed a reported problem where the internal DeleteNode function
was incorrectly handling the case where a namespace node was the
first in the parent's child list, and had additional peers (not
the only child, but first in the list of children.)

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a much larger code and data size.  Note that these values will
vary depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  73.7K Code,   9.5K Data,   83.2K Total
    Debug Version:     156.1K Code,  63.6K Data,  219.7K Total
  Current Release:
    Non-Debug Version:  73.4K Code,   9.7K Data,   83.1K Total
    Debug Version:     156.1K Code,  63.9K Data,  220.0K Total


2) Linux:

Allow ":" in OS override string (Ducrot Bruno)

Kobject fix (Greg KH)


3 iASL Compiler/Disassembler:

Fixed a problem in the generation of the C source code files (AML
is emitted in C source statements for BIOS inclusion) where the
Ascii dump that appears within a C comment at the end of each line
could cause a compile time error if the AML sequence happens to
have an open comment or close comment sequence embedded.


----------------------------------------
24 April 2003.  Summary of changes for version 20030424.


1) ACPI CA Core Subsystem:

Support for big-endian systems has been implemented.  Most of the
support has been invisibly added behind big-endian versions of the
ACPI_MOVE_* macros.

Fixed a problem in AcpiHwDisableGpeBlock() and
AcpiHwClearGpeBlock() where an incorrect offset was passed to the
low level hardware write routine.  The offset parameter was
actually eliminated from the low level read/write routines because
they had become obsolete.

Fixed a problem where a handler object was deleted twice during
the removal of a fixed event handler.


2) Linux:

A fix for SMP systems with link devices was contributed by

Compaq's Dan Zink.

(2.5) Return whether we handled the interrupt in our IRQ handler.
(Linux ISRs no longer return void, so we can propagate the handler
return value from the ACPI CA core back to the OS.)



3) Documentation:

The ACPI CA Programmer Reference has been updated to reflect new
interfaces and changes to existing interfaces.

----------------------------------------
28 March 2003.  Summary of changes for version 20030328.

1) ACPI CA Core Subsystem:

The GPE Block Device support has been completed.  New interfaces
are AcpiInstallGpeBlock and AcpiRemoveGpeBlock.  The Event
interfaces (enable, disable, clear, getstatus) have been split
into separate interfaces for Fixed Events and General Purpose
Events (GPEs) in order to support GPE Block Devices properly.

Fixed a problem where the error message "Failed to acquire
semaphore" would appear during operations on the embedded
controller (EC).

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a much larger code and data size.  Note that these values will
vary depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  72.3K Code,   9.5K Data,   81.8K Total
    Debug Version:     154.0K Code,  63.4K Data,  217.4K Total
  Current Release:
    Non-Debug Version:  73.7K Code,   9.5K Data,   83.2K Total
    Debug Version:     156.1K Code,  63.6K Data,  219.7K Total


----------------------------------------
28 February 2003.  Summary of changes for version 20030228.


1) ACPI CA Core Subsystem:

The GPE handling and dispatch code has been completely overhauled
in preparation for support of GPE Block Devices (ID ACPI0006).
This affects internal data structures and code only; there should
be no differences visible externally.  One new file has been
added, evgpeblk.c

The FADT fields GPE0_BLK_LEN and GPE1_BLK_LEN are now the only
fields that are used to determine the GPE block lengths.  The
REGISTER_BIT_WIDTH field of the X_GPEx_BLK extended address
structures are ignored.  This is per the ACPI specification but it
isn't very clear.  The full 256 Block 0/1 GPEs are now supported
(the use of REGISTER_BIT_WIDTH limited the number of GPEs to 128).

In the SCI interrupt handler, removed the read of the PM1_CONTROL
register to look at the SCI_EN bit.  On some machines, this read
causes an SMI event and greatly slows down SCI events.  (This may
in fact be the cause of slow battery status response on some
systems.)

Fixed a problem where a store of a NULL string to a package object
could cause the premature deletion of the object.  This was seen
during execution of the battery _BIF method on some systems,
resulting in no battery data being returned.

Added AcpiWalkResources interface to simplify parsing of resource
lists.

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a much larger code and data size.  Note that these values will
vary depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  72.0K Code,   9.5K Data,   81.5K Total
    Debug Version:     153.0K Code,  62.9K Data,  215.9K Total
  Current Release:
    Non-Debug Version:  72.3K Code,   9.5K Data,   81.8K Total
    Debug Version:     154.0K Code,  63.4K Data,  217.4K Total


2) Linux

S3 fixes (Ole Rohne)

Update ACPI PHP driver with to use new acpi_walk_resource API
(Bjorn Helgaas)

Add S4BIOS support (Pavel Machek)

Map in entire table before performing checksum (John Stultz)

Expand the mem= cmdline to allow the specification of reserved and
ACPI DATA blocks (Pavel Machek)

Never use ACPI on VISWS

Fix derive_pci_id (Ducrot Bruno, Alvaro Lopez)

Revert a change that allowed P_BLK lengths to be 4 or 5. This is
causing us to think that some systems support C2 when they really
don't.

Do not count processor objects for non-present CPUs (Thanks to
Dominik Brodowski)


3) iASL Compiler:

Fixed a problem where ASL include files could not be found and
opened.

Added support for the _PDC reserved name.


----------------------------------------
22 January 2003.  Summary of changes for version 20030122.


1) ACPI CA Core Subsystem:

Added a check for constructs of the form:  Store (Local0, Local0)
where Local0 is not initialized.  Apparently, some BIOS
programmers believe that this is a NOOP.  Since this store doesn't
do anything anyway, the new prototype behavior will ignore this
error.  This is a case where we can relax the strict checking in
the interpreter in the name of compatibility.


2) Linux

The AcpiSrc Source Conversion Utility has been released with the
Linux package for the first time.  This is the utility that is
used to convert the ACPI CA base source code to the Linux version.

(Both) Handle P_BLK lengths shorter than 6 more gracefully

(Both) Move more headers to include/acpi, and delete an unused
header.

(Both) Move drivers/acpi/include directory to include/acpi

(Both) Boot functions don't use cmdline, so don't pass it around

(Both) Remove include of unused header (Adrian Bunk)

(Both) acpiphp.h includes both linux/acpi.h and acpi_bus.h. Since
the
former now also includes the latter, acpiphp.h only needs the one,
now.

(2.5) Make it possible to select method of bios restoring after S3
resume. [=> no more ugly ifdefs] (Pavel Machek)

(2.5) Make proc write interfaces work (Pavel Machek)

(2.5) Properly init/clean up in cpufreq/acpi (Dominik Brodowski)

(2.5) Break out ACPI Perf code into its own module, under cpufreq
(Dominik Brodowski)

(2.4) S4BIOS support (Ducrot Bruno)

(2.4) Fix acpiphp_glue.c for latest ACPI struct changes (Sergio
Visinoni)


3) iASL Compiler:

Added support to disassemble SSDT and PSDTs.

Implemented support to obtain SSDTs from the Windows registry if
available.


----------------------------------------
09 January 2003.  Summary of changes for version 20030109.

1) ACPI CA Core Subsystem:

Changed the behavior of the internal Buffer-to-String conversion
function.  The current ACPI specification states that the contents
of the buffer are "converted to a string of two-character
hexadecimal numbers, each separated by a space".  Unfortunately,
this definition is not backwards compatible with existing ACPI 1.0
implementations (although the behavior was not defined in the ACPI
1.0 specification).  The new behavior simply copies data from the
buffer to the string until a null character is found or the end of
the buffer is reached.  The new String object is always null
terminated.  This problem was seen during the generation of _BIF
battery data where incorrect strings were returned for battery
type, etc.  This will also require an errata to the ACPI
specification.

Renamed all instances of NATIVE_UINT and NATIVE_INT to
ACPI_NATIVE_UINT and ACPI_NATIVE_INT, respectively.

Copyright in all module headers (both Linux and non-Linux) has be
updated to 2003.

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a much larger code and data size.  Note that these values will
vary depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  72.0K Code,   9.5K Data,   81.5K Total
    Debug Version:     153.0K Code,  62.9K Data,  215.9K Total
  Current Release:
    Non-Debug Version:  72.0K Code,   9.5K Data,   81.5K Total
    Debug Version:     153.0K Code,  62.9K Data,  215.9K Total


2) Linux

Fixed an oops on module insertion/removal (Matthew Tippett)

(2.4) Fix to handle dynamic size of mp_irqs (Joerg Prante)

(2.5) Replace pr_debug (Randy Dunlap)

(2.5) Remove usage of CPUFREQ_ALL_CPUS (Dominik Brodowski)

(Both) Eliminate spawning of thread from timer callback, in favor
of schedule_work()

(Both) Show Lid status in /proc (Zdenek OGAR Skalak)

(Both) Added define for Fixed Function HW region (Matthew Wilcox)

(Both) Add missing statics to button.c (Pavel Machek)

Several changes have been made to the source code translation
utility that generates the Linux Code in order to make the code
more "Linux-like":

All typedefs on structs and unions have been removed in keeping
with the Linux coding style.

Removed the non-Linux SourceSafe module revision number from each
module header.

Completed major overhaul of symbols to be lowercased for linux.
Doubled the number of symbols that are lowercased.

Fixed a problem where identifiers within procedure headers and
within quotes were not fully lower cased (they were left with a
starting capital.)

Some C macros whose only purpose is to allow the generation of 16-
bit code are now completely removed in the Linux code, increasing
readability and maintainability.

----------------------------------------

12 December 2002.  Summary of changes for version 20021212.


1) ACPI CA Core Subsystem:

Fixed a problem where the creation of a zero-length AML Buffer
would cause a fault.

Fixed a problem where a Buffer object that pointed to a static AML
buffer (in an ACPI table) could inadvertently be deleted, causing
memory corruption.

Fixed a problem where a user buffer (passed in to the external
ACPI CA interfaces) could be overwritten if the buffer was too
small to complete the operation, causing memory corruption.

Fixed a problem in the Buffer-to-String conversion code where a
string of length one was always returned, regardless of the size
of the input Buffer object.

Removed the NATIVE_CHAR data type across the entire source due to
lack of need and lack of consistent use.

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a much larger code and data size.  Note that these values will
vary depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  72.1K Code,   9.5K Data,   81.6K Total
    Debug Version:     152.7K Code,  62.7K Data,  215.4K Total
  Current Release:
    Non-Debug Version:  72.0K Code,   9.5K Data,   81.5K Total
    Debug Version:     153.0K Code,  62.9K Data,  215.9K Total


----------------------------------------
05 December 2002.  Summary of changes for version 20021205.

1) ACPI CA Core Subsystem:

Fixed a problem where a store to a String or Buffer object could
cause corruption of the DSDT if the object type being stored was
the same as the target object type and the length of the object
being stored was equal to or smaller than the original (existing)
target object.  This was seen to cause corruption of battery _BIF
buffers if the _BIF method modified the buffer on the fly.

Fixed a problem where an internal error was generated if a control
method invocation was used in an OperationRegion, Buffer, or
Package declaration.  This was caused by the deferred parsing of
the control method and thus the deferred creation of the internal
method object.  The solution to this problem was to create the
internal method object at the moment the method is encountered in
the first pass - so that subsequent references to the method will
able to obtain the required parameter count and thus properly
parse the method invocation.  This problem presented itself as an
AE_AML_INTERNAL during the pass 1 parse phase during table load.

Fixed a problem where the internal String object copy routine did
not always allocate sufficient memory for the target String object
and caused memory corruption.  This problem was seen to cause
"Allocation already present in list!" errors as memory allocation
became corrupted.

Implemented a new function for the evaluation of namespace objects
that allows the specification of the allowable return object
types.  This simplifies a lot of code that checks for a return
object of one or more specific objects returned from the
evaluation (such as _STA, etc.)  This may become and external
function if it would be useful to ACPI-related drivers.

Completed another round of prefixing #defines with "ACPI_" for
clarity.

Completed additional code restructuring to allow more modular
linking for iASL compiler and AcpiExec.  Several files were split
creating new files.  New files:  nsparse.c dsinit.c evgpe.c

Implemented an abort mechanism to terminate an executing control
method via the AML debugger.  This feature is useful for debugging
control methods that depend (wait) for specific hardware
responses.

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a much larger code and data size.  Note that these values will
vary depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  71.4K Code,   9.0K Data,   80.4K Total
    Debug Version:     152.9K Code,  63.3K Data,  216.2K Total
  Current Release:
    Non-Debug Version:  72.1K Code,   9.5K Data,   81.6K Total
    Debug Version:     152.7K Code,  62.7K Data,  215.4K Total


2) iASL Compiler/Disassembler

Fixed a compiler code generation problem for "Interrupt" Resource
Descriptors.  If specified in the ASL, the optional "Resource
Source Index" and "Resource Source" fields were not inserted into
the correct location within the AML resource descriptor, creating
an invalid descriptor.

Fixed a disassembler problem for "Interrupt" resource descriptors.
The optional "Resource Source Index" and "Resource Source" fields
were ignored.


----------------------------------------
22 November 2002.  Summary of changes for version 20021122.


1) ACPI CA Core Subsystem:

Fixed a reported problem where an object stored to a Method Local
or Arg was not copied to a new object during the store - the
object pointer was simply copied to the Local/Arg.  This caused
all subsequent operations on the Local/Arg to also affect the
original source of the store operation.

Fixed a problem where a store operation to a Method Local or Arg
was not completed properly if the Local/Arg contained a reference
(from RefOf) to a named field.  The general-purpose store-to-
namespace-node code is now used so that this case is handled
automatically.

Fixed a problem where the internal object copy routine would cause
a protection fault if the object being copied was a Package and
contained either 1) a NULL package element or 2) a nested sub-
package.

Fixed a problem with the GPE initialization that resulted from an
ambiguity in the ACPI specification.  One section of the
specification states that both the address and length of the GPE
block must be zero if the block is not supported.  Another section
implies that only the address need be zero if the block is not
supported.  The code has been changed so that both the address and
the length must be non-zero to indicate a valid GPE block (i.e.,
if either the address or the length is zero, the GPE block is
invalid.)

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a much larger code and data size.  Note that these values will
vary depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  71.3K Code,   9.0K Data,   80.3K Total
    Debug Version:     152.7K Code,  63.2K Data,  215.5K Total
  Current Release:
    Non-Debug Version:  71.4K Code,   9.0K Data,   80.4K Total
    Debug Version:     152.9K Code,  63.3K Data,  216.2K Total


2) Linux

Cleaned up EC driver. Exported an external EC read/write
interface. By going through this, other drivers (most notably
sonypi) will be able to serialize access to the EC.


3) iASL Compiler/Disassembler

Implemented support to optionally generate include files for both
ASM and C (the -i switch).  This simplifies BIOS development by
automatically creating include files that contain external
declarations for the symbols that are created within the

(optionally generated) ASM and C AML source files.


----------------------------------------
15 November 2002.  Summary of changes for version 20021115.

1) ACPI CA Core Subsystem:

Fixed a memory leak problem where an error during resolution of

method arguments during a method invocation from another method
failed to cleanup properly by deleting all successfully resolved
argument objects.

Fixed a problem where the target of the Index() operator was not
correctly constructed if the source object was a package.  This
problem has not been detected because the use of a target operand
with Index() is very rare.

Fixed a problem with the Index() operator where an attempt was
made to delete the operand objects twice.

Fixed a problem where an attempt was made to delete an operand
twice during execution of the CondRefOf() operator if the target
did not exist.

Implemented the first of perhaps several internal create object
functions that create and initialize a specific object type.  This
consolidates duplicated code wherever the object is created, thus
shrinking the size of the subsystem.

Implemented improved debug/error messages for errors that occur
during nested method invocations.  All executing method pathnames
are displayed (with the error) as the call stack is unwound - thus
simplifying debug.

Fixed a problem introduced in the 10/02 release that caused
premature deletion of a buffer object if a buffer was used as an
ASL operand where an integer operand is required (Thus causing an
implicit object conversion from Buffer to Integer.)  The change in
the 10/02 release was attempting to fix a memory leak (albeit
incorrectly.)

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a much larger code and data size.  Note that these values will
vary depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  71.9K Code,   9.1K Data,   81.0K Total
    Debug Version:     153.1K Code,  63.3K Data,  216.4K Total
  Current Release:
    Non-Debug Version:  71.3K Code,   9.0K Data,   80.3K Total
    Debug Version:     152.7K Code,  63.2K Data,  215.5K Total


2) Linux

Changed the implementation of the ACPI semaphores to use down()
instead of down_interruptable().  It is important that the
execution of ACPI control methods not be interrupted by signals.
Methods must run to completion, or the system may be left in an
unknown/unstable state.

Fixed a compilation error when CONFIG_SOFTWARE_SUSPEND is not set.
(Shawn Starr)


3) iASL Compiler/Disassembler


Changed the default location of output files.  All output files
are now placed in the current directory by default instead of in
the directory of the source file.  This change may affect some
existing makefiles, but it brings the behavior of the compiler in
line with other similar tools.  The location of the output files
can be overridden with the -p command line switch.


----------------------------------------
11 November 2002.  Summary of changes for version 20021111.


0) ACPI Specification 2.0B is released and is now available at:
http://www.acpi.info/index.html


1) ACPI CA Core Subsystem:

Implemented support for the ACPI 2.0 SMBus Operation Regions.
This includes the early detection and handoff of the request to
the SMBus region handler (avoiding all of the complex field
support code), and support for the bidirectional return packet
from an SMBus write operation.  This paves the way for the
development of SMBus drivers in each host operating system.

Fixed a problem where the semaphore WAIT_FOREVER constant was
defined as 32 bits, but must be 16 bits according to the ACPI
specification.  This had the side effect of causing ASL
Mutex/Event timeouts even though the ASL code requested a wait
forever.  Changed all internal references to the ACPI timeout
parameter to 16 bits to prevent future problems.  Changed the name
of WAIT_FOREVER to ACPI_WAIT_FOREVER.

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a much larger code and data size.  Note that these values will
vary depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  71.4K Code,   9.0K Data,   80.4K Total
    Debug Version:     152.3K Code,  63.0K Data,  215.3K Total
  Current Release:
    Non-Debug Version:  71.9K Code,   9.1K Data,   81.0K Total
    Debug Version:     153.1K Code,  63.3K Data,  216.4K Total


2) Linux

Module loading/unloading fixes (John Cagle)


3) iASL Compiler/Disassembler

Added support for the SMBBlockProcessCall keyword (ACPI 2.0)

Implemented support for the disassembly of all SMBus protocol
keywords (SMBQuick, SMBWord, etc.)

----------------------------------------
01 November 2002.  Summary of changes for version 20021101.


1) ACPI CA Core Subsystem:

Fixed a problem where platforms that have a GPE1 block but no GPE0
block were not handled correctly.  This resulted in a "GPE
overlap" error message.  GPE0 is no longer required.

Removed code added in the previous release that inserted nodes
into the namespace in alphabetical order.  This caused some side-
effects on various machines.  The root cause of the problem is
still under investigation since in theory, the internal ordering
of the namespace nodes should not matter.


Enhanced error reporting for the case where a named object is not
found during control method execution.  The full ACPI namepath
(name reference) of the object that was not found is displayed in
this case.

Note: as a result of the overhaul of the namespace object types in
the previous release, the namespace nodes for the predefined
scopes (_TZ, _PR, etc.) are now of the type ACPI_TYPE_LOCAL_SCOPE
instead of ACPI_TYPE_ANY.  This simplifies the namespace
management code but may affect code that walks the namespace tree
looking for specific object types.

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a much larger code and data size.  Note that these values will
vary depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  70.7K Code,   8.6K Data,   79.3K Total
    Debug Version:     151.7K Code,  62.4K Data,  214.1K Total
  Current Release:
    Non-Debug Version:  71.4K Code,   9.0K Data,   80.4K Total
    Debug Version:     152.3K Code,  63.0K Data,  215.3K Total


2) Linux

Fixed a problem introduced in the previous release where the
Processor and Thermal objects were not recognized and installed in
/proc.  This was related to the scope type change described above.


3) iASL Compiler/Disassembler

Implemented the -g option to get all of the required ACPI tables
from the registry and save them to files (Windows version of the
compiler only.)  The required tables are the FADT, FACS, and DSDT.

Added ACPI table checksum validation during table disassembly in
order to catch corrupted tables.


----------------------------------------
22 October 2002.  Summary of changes for version 20021022.

1) ACPI CA Core Subsystem:

Implemented a restriction on the Scope operator that the target
must already exist in the namespace at the time the operator is
encountered (during table load or method execution).  In other
words, forward references are not allowed and Scope() cannot
create a new object. This changes the previous behavior where the
interpreter would create the name if not found.  This new behavior
correctly enables the search-to-root algorithm during namespace
lookup of the target name.  Because of this upsearch, this fixes
the known Compaq _SB_.OKEC problem and makes both the AML
interpreter and iASL compiler compatible with other ACPI
implementations.

Completed a major overhaul of the internal ACPI object types for
the ACPI Namespace and the associated operand objects.  Many of
these types had become obsolete with the introduction of the two-
pass namespace load.  This cleanup simplifies the code and makes
the entire namespace load mechanism much clearer and easier to
understand.

Improved debug output for tracking scope opening/closing to help
diagnose scoping issues.  The old scope name as well as the new
scope name are displayed.  Also improved error messages for
problems with ASL Mutex objects and error messages for GPE
problems.

Cleaned up the namespace dump code, removed obsolete code.

All string output (for all namespace/object dumps) now uses the
common ACPI string output procedure which handles escapes properly
and does not emit non-printable characters.

Fixed some issues with constants in the 64-bit version of the
local C library (utclib.c)


2) Linux

EC Driver:  No longer attempts to acquire the Global Lock at
interrupt level.


3) iASL Compiler/Disassembler

Implemented ACPI 2.0B grammar change that disallows all Type 1 and
2 opcodes outside of a control method.  This means that the
"executable" operators (versus the "namespace" operators) cannot
be used at the table level; they can only be used within a control
method.

Implemented the restriction on the Scope() operator where the
target must already exist in the namespace at the time the
operator is encountered (during ASL compilation). In other words,
forward references are not allowed and Scope() cannot create a new
object.  This makes the iASL compiler compatible with other ACPI
implementations and makes the Scope() implementation adhere to the
ACPI specification.

Fixed a problem where namepath optimization for the Alias operator
was optimizing the wrong path (of the two namepaths.)  This caused
a "Missing alias link" error message.

Fixed a problem where an "unknown reserved name" warning could be
incorrectly generated for names like "_SB" when the trailing
underscore is not used in the original ASL.

Fixed a problem where the reserved name check did not handle
NamePaths with multiple NameSegs correctly.  The first nameseg of
the NamePath was examined instead of the last NameSeg.


----------------------------------------

02 October 2002.  Summary of changes for this release.


1) ACPI CA Core Subsystem version 20021002:

Fixed a problem where a store/copy of a string to an existing
string did not always set the string length properly in the String
object.

Fixed a reported problem with the ToString operator where the
behavior was identical to the ToHexString operator instead of just
simply converting a raw buffer to a string data type.

Fixed a problem where CopyObject and the other "explicit"
conversion operators were not updating the internal namespace node
type as part of the store operation.

Fixed a memory leak during implicit source operand conversion
where the original object was not deleted if it was converted to a
new object of a different type.

Enhanced error messages for all problems associated with namespace
lookups.  Common procedure generates and prints the lookup name as
well as the formatted status.

Completed implementation of a new design for the Alias support
within the namespace.  The existing design did not handle the case
where a new object was assigned to one of the two names due to the
use of an explicit conversion operator, resulting in the two names
pointing to two different objects.  The new design simply points
the Alias name to the original name node - not to the object.
This results in a level of indirection that must be handled in the
name resolution mechanism.

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a larger code and data size.  Note that these values will vary
depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  69.6K Code,   8.3K Data,   77.9K Total
    Debug Version:     150.0K Code,  61.7K Data,  211.7K Total
  Current Release:
    Non-Debug Version:  70.7K Code,   8.6K Data,   79.3K Total
    Debug Version:     151.7K Code,  62.4K Data,  214.1K Total


2) Linux

Initialize thermal driver's timer before it is used. (Knut
Neumann)

Allow handling negative celsius values. (Kochi Takayoshi)

Fix thermal management and make trip points. R/W (Pavel Machek)

Fix /proc/acpi/sleep. (P. Christeas)

IA64 fixes. (David Mosberger)

Fix reversed logic in blacklist code. (Sergio Monteiro Basto)

Replace ACPI_DEBUG define with ACPI_DEBUG_OUTPUT. (Dominik
Brodowski)


3) iASL Compiler/Disassembler

Clarified some warning/error messages.


----------------------------------------
18 September 2002.  Summary of changes for this release.


1) ACPI CA Core Subsystem version 20020918:

Fixed a reported problem with reference chaining (via the Index()
and RefOf() operators) in the ObjectType() and SizeOf() operators.
The definition of these operators includes the dereferencing of
all chained references to return information on the base object.

Fixed a problem with stores to indexed package elements - the
existing code would not complete the store if an "implicit
conversion" was not performed.  In other words, if the existing
object (package element) was to be replaced completely, the code
didn't handle this case.

Relaxed typechecking on the ASL "Scope" operator to allow the
target name to refer to an object of type Integer, String, or
Buffer, in addition to the scoping object types (Device,
predefined Scopes, Processor, PowerResource, and ThermalZone.)
This allows existing AML code that has workarounds for a bug in
Windows to function properly.  A warning is issued, however.  This
affects both the AML interpreter and the iASL compiler. Below is
an example of this type of ASL code:

      Name(DEB,0x00)
      Scope(DEB)
      {

Fixed some reported problems with 64-bit integer support in the
local implementation of C library functions (clib.c)


2) Linux

Use ACPI fix map region instead of IOAPIC region, since it is
undefined in non-SMP.

Ensure that the SCI has the proper polarity and trigger, even on
systems that do not have an interrupt override entry in the MADT.

2.5 big driver reorganization (Pat Mochel)

Use early table mapping code from acpitable.c (Andi Kleen)

New blacklist entries (Andi Kleen)

Blacklist improvements. Split blacklist code out into a separate
file. Move checking the blacklist to very early. Previously, we
would use ACPI tables, and then halfway through init, check the
blacklist -- too late. Now, it's early enough to completely fall-
back to non-ACPI.


3) iASL Compiler/Disassembler version 20020918:

Fixed a problem where the typechecking code didn't know that an
alias could point to a method.  In other words, aliases were not
being dereferenced during typechecking.


----------------------------------------
29 August 2002.  Summary of changes for this release.

1) ACPI CA Core Subsystem Version 20020829:

If the target of a Scope() operator already exists, it must be an
object type that actually opens a scope -- such as a Device,
Method, Scope, etc.  This is a fatal runtime error.  Similar error
check has been added to the iASL compiler also.

Tightened up the namespace load to disallow multiple names in the
same scope.  This previously was allowed if both objects were of
the same type.  (i.e., a lookup was the same as entering a new
name).


2) Linux

Ensure that the ACPI interrupt has the proper trigger and
polarity.

local_irq_disable is extraneous. (Matthew Wilcox)

Make "acpi=off" actually do what it says, and not use the ACPI
interpreter *or* the tables.

Added arch-neutral support for parsing SLIT and SRAT tables (Kochi
Takayoshi)


3) iASL Compiler/Disassembler  Version 20020829:

Implemented namepath optimization for name declarations.  For
example, a declaration like "Method (\_SB_.ABCD)" would get
optimized to "Method (ABCD)" if the declaration is within the
\_SB_ scope.  This optimization is in addition to the named
reference path optimization first released in the previous
version. This would seem to complete all possible optimizations
for namepaths within the ASL/AML.

If the target of a Scope() operator already exists, it must be an
object type that actually opens a scope -- such as a Device,
Method, Scope, etc.

Implemented a check and warning for unreachable code in the same
block below a Return() statement.

Fixed a problem where the listing file was not generated if the
compiler aborted if the maximum error count was exceeded (200).

Fixed a problem where the typechecking of method return values was
broken.  This includes the check for a return value when the
method is invoked as a TermArg (a return value is expected.)

Fixed a reported problem where EOF conditions during a quoted
string or comment caused a fault.


----------------------------------------
15 August 2002.  Summary of changes for this release.

1) ACPI CA Core Subsystem Version 20020815:

Fixed a reported problem where a Store to a method argument that
contains a reference did not perform the indirect store correctly.
This problem was created during the conversion to the new
reference object model - the indirect store to a method argument
code was not updated to reflect the new model.

Reworked the ACPI mode change code to better conform to ACPI 2.0,
handle corner cases, and improve code legibility (Kochi Takayoshi)

Fixed a problem with the pathname parsing for the carat (^)
prefix.  The heavy use of the carat operator by the new namepath
optimization in the iASL compiler uncovered a problem with the AML
interpreter handling of this prefix.  In the case where one or
more carats precede a single nameseg, the nameseg was treated as
standalone and the search rule (to root) was inadvertently
applied.  This could cause both the iASL compiler and the
interpreter to find the wrong object or to miss the error that
should occur if the object does not exist at that exact pathname.

Found and fixed the problem where the HP Pavilion DSDT would not
load.  This was a relatively minor tweak to the table loading code
(a problem caused by the unexpected encounter with a method
invocation not within a control method), but it does not solve the
overall issue of the execution of AML code at the table level.
This investigation is still ongoing.

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a larger code and data size.  Note that these values will vary
depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  69.1K Code,   8.2K Data,   77.3K Total
    Debug Version:     149.4K Code,  61.6K Data,  211.0K Total
  Current Release:
    Non-Debug Version:  69.6K Code,   8.3K Data,   77.9K Total
    Debug Version:     150.0K Code,  61.7K Data,  211.7K Total


2) Linux

Remove redundant slab.h include (Brad Hards)

Fix several bugs in thermal.c (Herbert Nachtnebel)

Make CONFIG_ACPI_BOOT work properly (Pavel Machek)

Change acpi_system_suspend to use updated irq functions (Pavel
Machek)

Export acpi_get_firmware_table (Matthew Wilcox)

Use proper root proc entry for ACPI (Kochi Takayoshi)

Fix early-boot table parsing (Bjorn Helgaas)


3) iASL Compiler/Disassembler

Reworked the compiler options to make them more consistent and to
use two-letter options where appropriate.  We were running out of
sensible letters.   This may break some makefiles, so check the
current options list by invoking the compiler with no parameters.

Completed the design and implementation of the ASL namepath
optimization option for the compiler.  This option optimizes all
references to named objects to the shortest possible path.  The
first attempt tries to utilize a single nameseg (4 characters) and
the "search-to-root" algorithm used by the interpreter.  If that
cannot be used (because either the name is not in the search path
or there is a conflict with another object with the same name),
the pathname is optimized using the carat prefix (usually a
shorter string than specifying the entire path from the root.)

Implemented support to obtain the DSDT from the Windows registry
(when the disassembly option is specified with no input file).
Added this code as the implementation for AcpiOsTableOverride in
the Windows OSL.  Migrated the 16-bit code (used in the AcpiDump
utility) to scan memory for the DSDT to the AcpiOsTableOverride
function in the DOS OSL to make the disassembler truly OS
independent.

Implemented a new option to disassemble and compile in one step.
When used without an input filename, this option will grab the
DSDT from the local machine, disassemble it, and compile it in one
step.

Added a warning message for invalid escapes (a backslash followed
by any character other than the allowable escapes).  This catches
the quoted string error "\_SB_" (which should be "\\_SB_" ).

Also, there are numerous instances in the ACPI specification where
this error occurs.

Added a compiler option to disable all optimizations.  This is
basically the "compatibility mode" because by using this option,
the AML code will come out exactly the same as other ASL
compilers.

Added error messages for incorrectly ordered dependent resource
functions.  This includes: missing EndDependentFn macro at end of
dependent resource list, nested dependent function macros (both
start and end), and missing StartDependentFn macro.  These are
common errors that should be caught at compile time.

Implemented _OSI support for the disassembler and compiler.  _OSI
must be included in the namespace for proper disassembly (because
the disassembler must know the number of arguments.)

Added an "optimization" message type that is optional (off by
default).  This message is used for all optimizations - including
constant folding, integer optimization, and namepath optimization.

----------------------------------------
25 July 2002.  Summary of changes for this release.


1) ACPI CA Core Subsystem Version 20020725:

The AML Disassembler has been enhanced to produce compilable ASL
code and has been integrated into the iASL compiler (see below) as
well as the single-step disassembly for the AML debugger and the
disassembler for the AcpiDump utility.  All ACPI 2.0A opcodes,
resource templates and macros are fully supported.  The
disassembler has been tested on over 30 different AML files,
producing identical AML when the resulting disassembled ASL file
is recompiled with the same ASL compiler.

Modified the Resource Manager to allow zero interrupts and zero
dma channels during the GetCurrentResources call.  This was
causing problems on some platforms.

Added the AcpiOsRedirectOutput interface to the OSL to simplify
output redirection for the AcpiOsPrintf and AcpiOsVprintf
interfaces.

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a larger code and data size.  Note that these values will vary
depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  68.7K Code,   7.4K Data,   76.1K Total
    Debug Version:     142.9K Code,  58.7K Data,  201.6K Total
  Current Release:
    Non-Debug Version:  69.1K Code,   8.2K Data,   77.3K Total
    Debug Version:     149.4K Code,  61.6K Data,  211.0K Total


2) Linux

Fixed a panic in the EC driver (Dominik Brodowski)

Implemented checksum of the R/XSDT itself during Linux table scan
(Richard Schaal)


3) iASL compiler

The AML disassembler is integrated into the compiler.  The "-d"
option invokes the disassembler  to completely disassemble an
input AML file, producing as output a text ASL file with the
extension ".dsl" (to avoid name collisions with existing .asl
source files.)  A future enhancement will allow the disassembler
to obtain the BIOS DSDT from the registry under Windows.

Fixed a problem with the VendorShort and VendorLong resource
descriptors where an invalid AML sequence was created.

Implemented a fix for BufferData term in the ASL parser.  It was
inadvertently defined twice, allowing invalid syntax to pass and
causing reduction conflicts.

Fixed a problem where the Ones opcode could get converted to a
value of zero if "Ones" was used where a byte, word or dword value
was expected.  The 64-bit value is now truncated to the correct
size with the correct value.



----------------------------------------
02 July 2002.  Summary of changes for this release.


1) ACPI CA Core Subsystem Version 20020702:

The Table Manager code has been restructured to add several new
features.  Tables that are not required by the core subsystem
(other than the FADT, DSDT, FACS, PSDTs, etc.) are no longer
validated in any way and are returned from AcpiGetFirmwareTable if
requested.  The AcpiOsTableOverride interface is now called for
each table that is loaded by the subsystem in order to allow the
host to override any table it chooses.  Previously, only the DSDT
could be overridden.  Added one new files, tbrsdt.c and
tbgetall.c.

Fixed a problem with the conversion of internal package objects to
external objects (when a package is returned from a control
method.)  The return buffer length was set to zero instead of the
proper length of the package object.

Fixed a reported problem with the use of the RefOf and DeRefOf
operators when passing reference arguments to control methods.  A
new type of Reference object is used internally for references
produced by the RefOf operator.

Added additional error messages in the Resource Manager to explain
AE_BAD_DATA errors when they occur during resource parsing.

Split the AcpiEnableSubsystem into two primitives to enable a
finer granularity initialization sequence.  These two calls should
be called in this order: AcpiEnableSubsystem (flags),
AcpiInitializeObjects (flags).  The flags parameter remains the
same.


2) Linux

Updated the ACPI utilities module to understand the new style of
fully resolved package objects that are now returned from the core
subsystem.  This eliminates errors of the form:

    ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PPB_._PRT]
    acpi_utils-0430 [145] acpi_evaluate_reference:
        Invalid element in package (not a device reference)

The method evaluation utility uses the new buffer allocation
scheme instead of calling AcpiEvaluate Object twice.

Added support for ECDT. This allows the use of the Embedded

Controller before the namespace has been fully initialized, which
is necessary for ACPI 2.0 support, and for some laptops to
initialize properly. (Laptops using ECDT are still rare, so only
limited testing was performed of the added functionality.)

Fixed memory leaks in the EC driver.

Eliminated a brittle code structure in acpi_bus_init().

Eliminated the acpi_evaluate() helper function in utils.c. It is
no longer needed since acpi_evaluate_object can optionally
allocate memory for the return object.

Implemented fix for keyboard hang when getting battery readings on
some systems (Stephen White)

PCI IRQ routing update (Dominik Brodowski)

Fix an ifdef to allow compilation on UP with LAPIC but no IOAPIC
support

----------------------------------------
11 June 2002.  Summary of changes for this release.


1) ACPI CA Core Subsystem Version 20020611:

Fixed a reported problem where constants such as Zero and One
appearing within _PRT packages were not handled correctly within
the resource manager code.  Originally reported against the ASL
compiler because the code generator now optimizes integers to
their minimal AML representation (i.e. AML constants if possible.)
The _PRT code now handles all AML constant opcodes correctly
(Zero, One, Ones, Revision).

Fixed a problem with the Concatenate operator in the AML
interpreter where a buffer result object was incorrectly marked as
not fully evaluated, causing a run-time error of AE_AML_INTERNAL.

All package sub-objects are now fully resolved before they are
returned from the external ACPI interfaces.  This means that name
strings are resolved to object handles, and constant operators
(Zero, One, Ones, Revision) are resolved to Integers.

Implemented immediate resolution of the AML Constant opcodes
(Zero, One, Ones, Revision) to Integer objects upon detection
within the AML stream. This has simplified and reduced the
generated code size of the subsystem by eliminating about 10
switch statements for these constants (which previously were
contained in Reference objects.)  The complicating issues are that
the Zero opcode is used as a "placeholder" for unspecified
optional target operands and stores to constants are defined to be
no-ops.

Code and Data Size: Current core subsystem library sizes are shown
below. These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a larger code and data size.  Note that these values will vary
depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  69.3K Code,   7.4K Data,   76.7K Total
    Debug Version:     143.8K Code,  58.8K Data,  202.6K Total
  Current Release:
    Non-Debug Version:  68.7K Code,   7.4K Data,   76.1K Total
    Debug Version:     142.9K Code,  58.7K Data,  201.6K Total


2) Linux


Added preliminary support for obtaining _TRA data for PCI root
bridges (Bjorn Helgaas).


3) iASL Compiler Version X2046:

Fixed a problem where the "_DDN" reserved name was defined to be a
control method with one argument.  There are no arguments, and
_DDN does not have to be a control method.

Fixed a problem with the Linux version of the compiler where the
source lines printed with error messages were the wrong lines.
This turned out to be the "LF versus CR/LF" difference between
Windows and Unix.  This appears to be the longstanding issue
concerning listing output and error messages.

Fixed a problem with the Linux version of compiler where opcode
names within error messages were wrong.  This was caused by a
slight difference in the output of the Flex tool on Linux versus
Windows.

Fixed a problem with the Linux compiler where the hex output files
contained some garbage data caused by an internal buffer overrun.


----------------------------------------
17 May 2002.  Summary of changes for this release.


1) ACPI CA Core Subsystem Version 20020517:

Implemented a workaround to an BIOS bug discovered on the HP
OmniBook where the FADT revision number and the table size are
inconsistent (ACPI 2.0 revision vs. ACPI 1.0 table size).  The new
behavior is to fallback to using only the ACPI 1.0 fields of the
FADT if the table is too small to be a ACPI 2.0 table as claimed
by the revision number.  Although this is a BIOS bug, this is a
case where the workaround is simple enough and with no side
effects, so it seemed prudent to add it.  A warning message is
issued, however.

Implemented minimum size checks for the fixed-length ACPI tables -
- the FADT and FACS, as well as consistency checks between the
revision number and the table size.

Fixed a reported problem in the table override support where the
new table pointer was incorrectly treated as a physical address
instead of a logical address.

Eliminated the use of the AE_AML_ERROR exception and replaced it
with more descriptive codes.

Fixed a problem where an exception would occur if an ASL Field was
defined with no named Field Units underneath it (used by some
index fields).

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a larger code and data size.  Note that these values will vary
depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  68.8K Code,   7.1K Data,   75.9K Total
    Debug Version:     142.9K Code,  58.4K Data,  201.3K Total
  Current Release:
    Non-Debug Version:  69.3K Code,   7.4K Data,   76.7K Total
    Debug Version:     143.8K Code,  58.8K Data,  202.6K Total



2) Linux

Much work done on ACPI init (MADT and PCI IRQ routing support).
(Paul D. and Dominik Brodowski)

Fix PCI IRQ-related panic on boot (Sam Revitch)

Set BM_ARB_DIS when entering a sleep state (Ducrot Bruno)

Fix "MHz" typo (Dominik Brodowski)

Fix RTC year 2000 issue (Dominik Brodowski)

Preclude multiple button proc entries (Eric Brunet)

Moved arch-specific code out of include/platform/aclinux.h

3) iASL Compiler Version X2044:

Implemented error checking for the string used in the EISAID macro
(Usually used in the definition of the _HID object.)  The code now
strictly enforces the PnP format - exactly 7 characters, 3
uppercase letters and 4 hex digits.

If a raw string is used in the definition of the _HID object
(instead of the EISAID macro), the string must contain all
alphanumeric characters (e.g., "*PNP0011" is not allowed because
of the asterisk.)

Implemented checking for invalid use of ACPI reserved names for
most of the name creation operators (Name, Device, Event, Mutex,
OperationRegion, PowerResource, Processor, and ThermalZone.)
Previously, this check was only performed for control methods.

Implemented an additional check on the Name operator to emit an
error if a reserved name that must be implemented in ASL as a
control method is used.  We know that a reserved name must be a
method if it is defined with input arguments.

The warning emitted when a namespace object reference is not found
during the cross reference phase has been changed into an error.
The "External" directive should be used for names defined in other
modules.


4) Tools and Utilities

The 16-bit tools (adump16 and aexec16) have been regenerated and
tested.

Fixed a problem with the output of both acpidump and adump16 where
the indentation of closing parentheses and brackets was not

aligned properly with the parent block.


----------------------------------------
03 May 2002.  Summary of changes for this release.


1) ACPI CA Core Subsystem Version 20020503:

Added support a new OSL interface that allows the host operating

system software to override the DSDT found in the firmware -
AcpiOsTableOverride.  With this interface, the OSL can examine the
version of the firmware DSDT and replace it with a different one
if desired.

Added new external interfaces for accessing ACPI registers from
device drivers and other system software - AcpiGetRegister and
AcpiSetRegister.  This was simply an externalization of the
existing AcpiHwBitRegister interfaces.

Fixed a regression introduced in the previous build where the
ASL/AML CreateField operator always returned an error,
"destination must be a NS Node".

Extended the maximum time (before failure) to successfully enable
ACPI mode to 3 seconds.

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a larger code and data size.  Note that these values will vary
depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  68.5K Code,   7.0K Data,   75.5K Total
    Debug Version:     142.4K Code,  58.3K Data,  200.7K Total
  Current Release:
    Non-Debug Version:  68.8K Code,   7.1K Data,   75.9K Total
    Debug Version:     142.9K Code,  58.4K Data,  201.3K Total


2) Linux

Enhanced ACPI init code for SMP. We are now fully MPS and $PIR-
free. While 3 out of 4 of our in-house systems work fine, the last
one still hangs when testing the LAPIC timer.

Renamed many files in 2.5 kernel release to omit "acpi_" from the
name.

Added warning on boot for Presario 711FR.

Sleep improvements (Pavel Machek)

ACPI can now be built without CONFIG_PCI enabled.

IA64: Fixed memory map functions (JI Lee)


3) iASL Compiler Version X2043:

Added support to allow the compiler to be integrated into the MS
VC++ development environment for one-button compilation of single
files or entire projects -- with error-to-source-line mapping.

Implemented support for compile-time constant folding for the
Type3, Type4, and Type5 opcodes first defined in the ACPI 2.0
specification.  This allows the ASL writer to use expressions
instead of Integer/Buffer/String constants in terms that must
evaluate to constants at compile time and will also simplify the
emitted AML in any such sub-expressions that can be folded
(evaluated at compile-time.)  This increases the size of the
compiler significantly because a portion of the ACPI CA AML
interpreter is included within the compiler in order to pre-
evaluate constant expressions.


Fixed a problem with the "Unicode" ASL macro that caused the
compiler to fault.  (This macro is used in conjunction with the
_STR reserved name.)

Implemented an AML opcode optimization to use the Zero, One, and
Ones opcodes where possible to further reduce the size of integer
constants and thus reduce the overall size of the generated AML
code.

Implemented error checking for new reserved terms for ACPI version
2.0A.

Implemented the -qr option to display the current list of ACPI
reserved names known to the compiler.

Implemented the -qc option to display the current list of ASL
operators that are allowed within constant expressions and can
therefore be folded at compile time if the operands are constants.


4) Documentation

Updated the Programmer's Reference for new interfaces, data types,
and memory allocation model options.

Updated the iASL Compiler User Reference to apply new format and
add information about new features and options.

----------------------------------------
19 April 2002.  Summary of changes for this release.

1) ACPI CA Core Subsystem Version 20020419:

The source code base for the Core Subsystem has been completely
cleaned with PC-lint (FlexLint) for both 32-bit and 64-bit
versions.  The Lint option files used are included in the
/acpi/generate/lint directory.

Implemented enhanced status/error checking across the entire
Hardware manager subsystem.  Any hardware errors (reported from
the OSL) are now bubbled up and will abort a running control
method.


Fixed a problem where the per-ACPI-table integer width (32 or 64)
was stored only with control method nodes, causing a fault when
non-control method code was executed during table loading.  The
solution implemented uses a global variable to indicate table
width across the entire ACPI subsystem.  Therefore, ACPI CA does
not support mixed integer widths across different ACPI tables
(DSDT, SSDT).

Fixed a problem where NULL extended fields (X fields) in an ACPI
2.0 ACPI FADT caused the table load to fail.  Although the
existing ACPI specification is a bit fuzzy on this topic, the new
behavior is to fall back on a ACPI 1.0 field if the corresponding
ACPI 2.0 X field is zero (even though the table revision indicates
a full ACPI 2.0 table.)  The ACPI specification will be updated to
clarify this issue.

Fixed a problem with the SystemMemory operation region handler
where memory was always accessed byte-wise even if the AML-
specified access width was larger than a byte.  This caused
problems on systems with memory-mapped I/O.  Memory is now
accessed with the width specified.  On systems that do not support
non-aligned transfers, a check is made to guarantee proper address
alignment before proceeding in order to avoid an AML-caused
alignment fault within the kernel.


Fixed a problem with the ExtendedIrq resource where only one byte
of the 4-byte Irq field was extracted.

Fixed the AcpiExDigitsNeeded() procedure to support _UID.  This
function was out of date and required a rewrite.

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a larger code and data size.  Note that these values will vary
depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  66.6K Code,   6.5K Data,   73.1K Total
    Debug Version:     139.8K Code,  57.4K Data,  197.2K Total
  Current Release:
    Non-Debug Version:  68.5K Code,   7.0K Data,   75.5K Total
    Debug Version:     142.4K Code,  58.3K Data,  200.7K Total


2) Linux

PCI IRQ routing fixes (Dominik Brodowski)


3) iASL Compiler Version X2042:

Implemented an additional compile-time error check for a field
unit whose size + minimum access width would cause a run-time
access beyond the end-of-region.  Previously, only the field size
itself was checked.

The Core subsystem and iASL compiler now share a common parse
object in preparation for compile-time evaluation of the type
3/4/5 ASL operators.


----------------------------------------
Summary of changes for this release: 03_29_02

1) ACPI CA Core Subsystem Version 20020329:

Implemented support for late evaluation of TermArg operands to
Buffer and Package objects.  This allows complex expressions to be
used in the declarations of these object types.

Fixed an ACPI 1.0 compatibility issue when reading Fields. In ACPI
1.0, if the field was larger than 32 bits, it was returned as a
buffer - otherwise it was returned as an integer.  In ACPI 2.0,
the field is returned as a buffer only if the field is larger than
64 bits.  The TableRevision is now considered when making this
conversion to avoid incompatibility with existing ASL code.

Implemented logical addressing for AcpiOsGetRootPointer.  This
allows an RSDP with either a logical or physical address.  With
this support, the host OS can now override all ACPI tables with
one logical RSDP.  Includes implementation of  "typed" pointer
support to allow a common data type for both physical and logical
pointers internally.  This required a change to the
AcpiOsGetRootPointer interface.

Implemented the use of ACPI 2.0 Generic Address Structures for all
GPE, Fixed Event, and PM Timer I/O.  This allows the use of memory
mapped I/O for these ACPI features.

Initialization now ignores not only non-required tables (All
tables other than the FADT, FACS, DSDT, and SSDTs), but also does
not validate the table headers of unrecognized tables.

Fixed a problem where a notify handler could only be
installed/removed on an object of type Device.  All "notify"

objects are now supported -- Devices, Processor, Power, and
Thermal.

Removed most verbosity from the ACPI_DB_INFO debug level.  Only
critical information is returned when this debug level is enabled.

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a larger code and data size.  Note that these values will vary
depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  65.4K Code,   6.2K Data,   71.6K Total
    Debug Version:     138.0K Code,  56.6K Data,  194.6K Total
  Current Release:
    Non-Debug Version:  66.6K Code,   6.5K Data,   73.1K Total
    Debug Version:     139.8K Code,  57.4K Data,  197.2K Total


2) Linux:

The processor driver (acpi_processor.c) now fully supports ACPI
2.0-based processor performance control (e.g. Intel(R)
SpeedStep(TM) technology) Note that older laptops that only have
the Intel "applet" interface are not supported through this.  The
'limit' and 'performance' interface (/proc) are fully functional.
[Note that basic policy for controlling performance state
transitions will be included in the next version of ospmd.]  The
idle handler was modified to more aggressively use C2, and PIIX4
errata handling underwent a complete overhaul (big thanks to
Dominik Brodowski).

Added support for ACPI-PCI device binding (acpi_pci_root.c). _ADR-
based devices in the ACPI namespace are now dynamically bound
(associated) with their PCI counterparts (e.g. PCI1->01:00.0).
This allows, among other things, ACPI to resolve bus numbers for
subordinate PCI bridges.

Enhanced PCI IRQ routing to get the proper bus number for _PRT
entries defined underneath PCI bridges.

Added IBM 600E to bad bios list due to invalid _ADR value for
PIIX4 PCI-ISA bridge, resulting in improper PCI IRQ routing.

In the process of adding full MADT support (e.g. IOAPIC) for IA32
(acpi.c, mpparse.c) -- stay tuned.

Added back visual differentiation between fixed-feature and
control-method buttons in dmesg.  Buttons are also subtyped (e.g.
button/power/PWRF) to simplify button identification.

We no longer use -Wno-unused when compiling debug. Please ignore
any "_THIS_MODULE defined but not used" messages.

Can now shut down the system using "magic sysrq" key.


3) iASL Compiler version 2041:

Fixed a problem where conversion errors for hex/octal/decimal
constants were not reported.

Implemented a fix for the General Register template Address field.
This field was 8 bits when it should be 64.

Fixed a problem where errors/warnings were no longer being emitted
within the listing output file.

Implemented the ACPI 2.0A restriction on ACPI Table Signatures to
exactly 4 characters, alphanumeric only.




----------------------------------------
Summary of changes for this release: 03_08_02


1) ACPI CA Core Subsystem Version 20020308:

Fixed a problem with AML Fields where the use of the "AccessAny"
keyword could cause an interpreter error due to attempting to read
or write beyond the end of the parent Operation Region.

Fixed a problem in the SystemMemory Operation Region handler where
an attempt was made to map memory beyond the end of the region.
This was the root cause of the "AE_ERROR" and "AE_NO_MEMORY"
errors on some Linux systems.

Fixed a problem where the interpreter/namespace "search to root"
algorithm was not functioning for some object types.  Relaxed the
internal restriction on the search to allow upsearches for all
external object types as well as most internal types.


2) Linux:

We now use safe_halt() macro versus individual calls to sti | hlt.

Writing to the processor limit interface should now work. "echo 1"
will increase the limit, 2 will decrease, and 0 will reset to the

default.


3) ASL compiler:

Fixed segfault on Linux version.


----------------------------------------
Summary of changes for this release: 02_25_02

1) ACPI CA Core Subsystem:


Fixed a problem where the GPE bit masks were not initialized
properly, causing erratic GPE behavior.

Implemented limited support for multiple calling conventions.  The
code can be generated with either the VPL (variable parameter
list, or "C") convention, or the FPL (fixed parameter list, or
"Pascal") convention.  The core subsystem is about 3.4% smaller
when generated with FPL.


2) Linux

Re-add some /proc/acpi/event functionality that was lost during
the rewrite

Resolved issue with /proc events for fixed-feature buttons showing
up as the system device.

Fixed checks on C2/C3 latencies to be inclusive of maximum values.

Replaced AE_ERRORs in acpi_osl.c with more specific error codes.

Changed ACPI PRT option from "pci=noacpi-routing" to "pci=noacpi"

Fixed limit interface & usage to fix bugs with passive cooling
hysterisis.

Restructured PRT support.


----------------------------------------
Summary of changes for this label: 02_14_02


1) ACPI CA Core Subsystem:

Implemented support in AcpiLoadTable to allow loading of FACS and
FADT tables.

Suport for the now-obsolete interim 0.71 64-bit ACPI tables has
been removed.  All 64-bit platforms should be migrated to the ACPI
2.0 tables.  The actbl71.h header has been removed from the source
tree.

All C macros defined within the subsystem have been prefixed with
"ACPI_" to avoid collision with other system include files.

Removed the return value for the two AcpiOsPrint interfaces, since
it is never used and causes lint warnings for ignoring the return
value.

Added error checking to all internal mutex acquire and release
calls.  Although a failure from one of these interfaces is
probably a fatal system error, these checks will cause the
immediate abort of the currently executing method or interface.

Fixed a problem where the AcpiSetCurrentResources interface could
fault.  This was a side effect of the deployment of the new memory
allocation model.

Fixed a couple of problems with the Global Lock support introduced
in the last major build.  The "common" (1.0/2.0) internal FACS was
being overwritten with the FACS signature and clobbering the
Global Lock pointer.  Also, the actual firmware FACS was being
unmapped after construction of the "common" FACS, preventing
access to the actual Global Lock field within it.  The "common"
internal FACS is no longer installed as an actual ACPI table; it
is used simply as a global.

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a larger code and data size.  Note that these values will vary
depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release (02_07_01)
    Non-Debug Version:  65.2K Code,   6.2K Data,   71.4K Total
    Debug Version:     136.9K Code,  56.4K Data,  193.3K Total
  Current Release:
    Non-Debug Version:  65.4K Code,   6.2K Data,   71.6K Total
    Debug Version:     138.0K Code,  56.6K Data,  194.6K Total


2) Linux

Updated Linux-specific code for core macro and OSL interface
changes described above.

Improved /proc/acpi/event. It now can be opened only once and has
proper poll functionality.

Fixed and restructured power management (acpi_bus).

Only create /proc "view by type" when devices of that class exist.

Fixed "charging/discharging" bug (and others) in acpi_battery.

Improved thermal zone code.


3) ASL Compiler, version X2039:


Implemented the new compiler restriction on ASL String hex/octal
escapes to non-null, ASCII values.  An error results if an invalid
value is used.  (This will require an ACPI 2.0 specification
change.)

AML object labels that are output to the optional C and ASM source
are now prefixed with both the ACPI table signature and table ID
to help guarantee uniqueness within a large BIOS project.


----------------------------------------
Summary of changes for this label: 02_01_02

1) ACPI CA Core Subsystem:

ACPI 2.0 support is complete in the entire Core Subsystem and the
ASL compiler. All new ACPI 2.0 operators are implemented and all
other changes for ACPI 2.0 support are complete.  With
simultaneous code and data optimizations throughout the subsystem,
ACPI 2.0 support has been implemented with almost no additional
cost in terms of code and data size.

Implemented a new mechanism for allocation of return buffers.  If
the buffer length is set to ACPI_ALLOCATE_BUFFER, the buffer will
be allocated on behalf of the caller.  Consolidated all return
buffer validation and allocation to a common procedure.  Return
buffers will be allocated via the primary OSL allocation interface
since it appears that a separate pool is not needed by most users.
If a separate pool is required for these buffers, the caller can
still use the original mechanism and pre-allocate the buffer(s).

Implemented support for string operands within the DerefOf
operator.

Restructured the Hardware and Event managers to be table driven,
simplifying the source code and reducing the amount of generated
code.

Split the common read/write low-level ACPI register bitfield
procedure into a separate read and write, simplifying the code
considerably.

Obsoleted the AcpiOsCallocate OSL interface.  This interface was
used only a handful of times and didn't have enough critical mass
for a separate interface.  Replaced with a common calloc procedure
in the core.

Fixed a reported problem with the GPE number mapping mechanism
that allows GPE1 numbers to be non-contiguous with GPE0.
Reorganized the GPE information and shrunk a large array that was
originally large enough to hold info for all possible GPEs (256)
to simply large enough to hold all GPEs up to the largest GPE
number on the machine.

Fixed a reported problem with resource structure alignment on 64-
bit platforms.

Changed the AcpiEnableEvent and AcpiDisableEvent external
interfaces to not require any flags for the common case of
enabling/disabling a GPE.

Implemented support to allow a "Notify" on a Processor object.

Most TBDs in comments within the source code have been resolved
and eliminated.


Fixed a problem in the interpreter where a standalone parent
prefix (^) was not handled correctly in the interpreter and
debugger.

Removed obsolete and unnecessary GPE save/restore code.

Implemented Field support in the ASL Load operator.  This allows a
table to be loaded from a named field, in addition to loading a
table directly from an Operation Region.

Implemented timeout and handle support in the external Global Lock
interfaces.

Fixed a problem in the AcpiDump utility where pathnames were no
longer being generated correctly during the dump of named objects.

Modified the AML debugger to give a full display of if/while
predicates instead of just one AML opcode at a time.  (The
predicate can have several nested ASL statements.)  The old method
was confusing during single stepping.

Code and Data Size: Current core subsystem library sizes are shown
below. These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a larger code and data size.  Note that these values will vary
depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release (12_18_01)
     Non-Debug Version:  66.1K Code,   5.5K Data,   71.6K Total
     Debug Version:     138.3K Code,  55.9K Data,  194.2K Total
   Current Release:
     Non-Debug Version:  65.2K Code,   6.2K Data,   71.4K Total
     Debug Version:     136.9K Code,  56.4K Data,  193.3K Total

2) Linux

 Implemented fix for PIIX reverse throttling errata (Processor
driver)

Added new Limit interface (Processor and Thermal drivers)

New thermal policy (Thermal driver)

Many updates to /proc

Battery "low" event support (Battery driver)

Supports ACPI PCI IRQ routing (PCI Link and PCI root drivers)

IA32 - IA64 initialization unification, no longer experimental

Menuconfig options redesigned

3) ASL Compiler, version X2037:

Implemented several new output features to simplify integration of
AML code into  firmware: 1) Output the AML in C source code with
labels for each named ASL object.  The    original ASL source code
is interleaved as C comments. 2) Output the AML in ASM source code
with labels and interleaved ASL    source. 3) Output the AML in
raw hex table form, in either C or ASM.

Implemented support for optional string parameters to the
LoadTable operator.

Completed support for embedded escape sequences within string
literals.  The compiler now supports all single character escapes
as well as the Octal and Hex escapes.  Note: the insertion of a
null byte into a string literal (via the hex/octal escape) causes
the string to be immediately terminated.  A warning is issued.

Fixed a problem where incorrect AML was generated for the case
where an ASL namepath consists of a single parent prefix (

) with no trailing name segments.

The compiler has been successfully generated with a 64-bit C
compiler.




----------------------------------------
Summary of changes for this label: 12_18_01

1) Linux

Enhanced blacklist with reason and severity fields. Any table's
signature may now be used to identify a blacklisted system.

Call _PIC control method to inform the firmware which interrupt
model the OS is using. Turn on any disabled link devices.

Cleaned up busmgr /proc error handling (Andreas Dilger)

 2) ACPI CA Core Subsystem:

Implemented ACPI 2.0 semantics for the "Break" operator (Exit from
while loop)

Completed implementation of the ACPI 2.0 "Continue",
"ConcatenateResTemplate", "DataTableRegion", and "LoadTable"
operators.  All new ACPI 2.0 operators are now implemented in both
the ASL compiler and the AML interpreter.  The only remaining ACPI
2.0 task is support for the String data type in the DerefOf
operator.  Fixed a problem with AcquireMutex where the status code
was lost if the caller had to actually wait for the mutex.

Increased the maximum ASL Field size from 64K bits to 4G bits.

Completed implementation of the external Global Lock interfaces --
AcpiAcquireGlobalLock and AcpiReleaseGlobalLock.  The Timeout and
Handler parameters were added.

Completed another pass at removing warnings and issues when
compiling with 64-bit compilers.  The code now compiles cleanly
with the Intel 64-bit C/C++ compiler.  Most notably, the pointer
add and subtract (diff) macros have changed considerably.


Created and deployed a new ACPI_SIZE type that is 64-bits wide on
64-bit platforms, 32-bits on all others.  This type is used
wherever memory allocation and/or the C sizeof() operator is used,
and affects the OSL memory allocation interfaces AcpiOsAllocate
and AcpiOsCallocate.

Implemented sticky user breakpoints in the AML debugger.

Code and Data Size: Current core subsystem library sizes are shown
below. These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a larger code and data size. Note that these values will vary
depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release (12_05_01)
     Non-Debug Version:  64.7K Code,   5.3K Data,   70.0K Total
     Debug Version:     136.2K Code,  55.6K Data,  191.8K Total
   Current Release:
     Non-Debug Version:  66.1K Code,   5.5K Data,   71.6K Total
     Debug Version:     138.3K Code,  55.9K Data,  194.2K Total

 3) ASL Compiler, version X2034:

Now checks for (and generates an error if detected) the use of a
Break or Continue statement without an enclosing While statement.


Successfully generated the compiler with the Intel 64-bit C
compiler.

 ----------------------------------------
Summary of changes for this label: 12_05_01

 1) ACPI CA Core Subsystem:

The ACPI 2.0 CopyObject operator is fully implemented.  This
operator creates a new copy of an object (and is also used to
bypass the "implicit conversion" mechanism of the Store operator.)

The ACPI 2.0 semantics for the SizeOf operator are fully
implemented.  The change is that performing a SizeOf on a
reference object causes an automatic dereference of the object to
tha actual value before the size is evaluated. This behavior was
undefined in ACPI 1.0.

The ACPI 2.0 semantics for the Extended IRQ resource descriptor
have been implemented.  The interrupt polarity and mode are now
independently set.

Fixed a problem where ASL Constants (Zero, One, Ones, Revision)
appearing in Package objects were not properly converted to
integers when the internal Package was converted to an external
object (via the AcpiEvaluateObject interface.)

Fixed a problem with the namespace object deletion mechanism for
objects created by control methods.  There were two parts to this
problem: 1) Objects created during the initialization phase method
parse were not being deleted, and 2) The object owner ID mechanism
to track objects was broken.

Fixed a problem where the use of the ASL Scope operator within a
control method would result in an invalid opcode exception.

Fixed a problem introduced in the previous label where the buffer
length required for the _PRT structure was not being returned
correctly.

Code and Data Size: Current core subsystem library sizes are shown
below. These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a larger code and data size.  Note that these values will vary
depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release (11_20_01)
     Non-Debug Version:  64.1K Code,   5.3K Data,   69.4K Total
     Debug Version:     135.1K Code,  55.4K Data,  190.5K Total

  Current Release:
     Non-Debug Version:  64.7K Code,   5.3K Data,   70.0K Total
     Debug Version:     136.2K Code,  55.6K Data,  191.8K Total

 2) Linux:

Updated all files to apply cleanly against 2.4.16.

Added basic PCI Interrupt Routing Table (PRT) support for IA32
(acpi_pci.c), and unified the PRT code for IA32 and IA64.  This
version supports both static and dyanmic PRT entries, but dynamic
entries are treated as if they were static (not yet
reconfigurable).  Architecture- specific code to use this data is
absent on IA32 but should be available shortly.

Changed the initialization sequence to start the ACPI interpreter
(acpi_init) prior to initialization of the PCI driver (pci_init)
in init/main.c.  This ordering is required to support PRT and
facilitate other (future) enhancement.  A side effect is that the
ACPI bus driver and certain device drivers can no longer be loaded
as modules.

Modified the 'make menuconfig' options to allow PCI Interrupt
Routing support to be included without the ACPI Bus and other
device drivers.

 3) ASL Compiler, version X2033:

Fixed some issues with the use of the new CopyObject and
DataTableRegion operators.  Both are fully functional.

 ----------------------------------------
Summary of changes for this label: 11_20_01

 20 November 2001.  Summary of changes for this release.

 1) ACPI CA Core Subsystem:

Updated Index support to match ACPI 2.0 semantics.  Storing a
Integer, String, or Buffer to an Index of a Buffer will store only
the least-significant byte of the source to the Indexed buffer
byte.  Multiple writes are not performed.

Fixed a problem where the access type used in an AccessAs ASL
operator was not recorded correctly into the field object.

Fixed a problem where ASL Event objects were created in a
signalled state. Events are now created in an unsignalled state.

The internal object cache is now purged after table loading and
initialization to reduce the use of dynamic kernel memory -- on
the assumption that object use is greatest during the parse phase
of the entire table (versus the run-time use of individual control
methods.)

ACPI 2.0 variable-length packages are now fully operational.

Code and Data Size: Code and Data optimizations have permitted new
feature development with an actual reduction in the library size.
Current core subsystem library sizes are shown below.  These are
the code and data sizes for the acpica.lib produced by the
Microsoft Visual C++ 6.0 compiler, and these values do not include
any ACPI driver or OSPM code.  The debug version of the code
includes the debug output trace mechanism and has a larger code
and data size.  Note that these values will vary depending on the
efficiency of the compiler and the compiler options used during
generation.

  Previous Release (11_09_01):
     Non-Debug Version:  63.7K Code,   5.2K Data,   68.9K Total
     Debug Version:     134.5K Code,  55.4K Data,  189.9K Total

  Current Release:
     Non-Debug Version:  64.1K Code,   5.3K Data,   69.4K Total
     Debug Version:     135.1K Code,  55.4K Data,  190.5K Total

 2) Linux:

Enhanced the ACPI boot-time initialization code to allow the use
of Local APIC tables for processor enumeration on IA-32, and to
pave the way for a fully MPS-free boot (on SMP systems) in the
near future.  This functionality replaces
arch/i386/kernel/acpitables.c, which was introduced in an earlier
2.4.15-preX release.  To enable this feature you must add
"acpi_boot=on" to the kernel command line -- see the help entry
for CONFIG_ACPI_BOOT for more information.  An IA-64 release is in
the works...

Restructured the configuration options to allow boot-time table
parsing support without inclusion of the ACPI Interpreter (and
other) code.

NOTE: This release does not include fixes for the reported events,
power-down, and thermal passive cooling issues (coming soon).

 3) ASL Compiler:

Added additional typechecking for Fields within restricted access
Operation Regions.  All fields within EC and CMOS regions must be
declared with ByteAcc. All fields withing SMBus regions must be
declared with the BufferAcc access type.

Fixed a problem where the listing file output of control methods
no longer interleaved the actual AML code with the ASL source
code.




----------------------------------------
Summary of changes for this label: 11_09_01

1) ACPI CA Core Subsystem:

Implemented ACPI 2.0-defined support for writes to fields with a
Buffer, String, or Integer source operand that is smaller than the
target field. In these cases, the source operand is zero-extended
to fill the target field.

Fixed a problem where a Field starting bit offset (within the
parent operation region) was calculated incorrectly if the

alignment of the field differed from the access width.  This
affected CreateWordField, CreateDwordField, CreateQwordField, and
possibly other fields that use the "AccessAny" keyword.

Fixed a problem introduced in the 11_02_01 release where indirect
stores through method arguments did not operate correctly.

2) Linux:

Implemented boot-time ACPI table parsing support
(CONFIG_ACPI_BOOT) for IA32 and IA64 UP/SMP systems.  This code
facilitates the use of ACPI tables (e.g. MADT, SRAT) rather than
legacy BIOS interfaces (e.g. MPS) for the configuration of system
processors, memory, and interrupts during setup_arch().  Note that
this patch does not include the required architecture-specific
changes required to apply this information -- subsequent patches
will be posted for both IA32 and IA64 to achieve this.

Added low-level sleep support for IA32 platforms, courtesy of Pat
Mochel. This allows IA32 systems to transition to/from various
sleeping states (e.g. S1, S3), although the lack of a centralized
driver model and power-manageable drivers will prevent its
(successful) use on most systems.

Revamped the ACPI 'menuconfig' layout: created new "ACPI Support"
submenu, unified IA32 and IA64 options, added new "Boot using ACPI
tables" option, etc.

Increased the default timeout for the EC driver from 1ms to 10ms
(1000 cycles of 10us) to try to address AE_TIME errors during EC
transactions.

 ----------------------------------------
Summary of changes for this label: 11_02_01

1) ACPI CA Core Subsystem:

ACPI 2.0 Support: Implemented ACPI 2.0 64-bit Field access
(QWordAcc keyword). All ACPI 2.0 64-bit support is now
implemented.

OSL Interfaces: Several of the OSL (AcpiOs*) interfaces required
changes to support ACPI 2.0 Qword field access.  Read/Write
PciConfiguration(), Read/Write Memory(), and Read/Write Port() now
accept an ACPI_INTEGER (64 bits) as the value parameter.  Also,
the value parameter for the address space handler interface is now
an ACPI_INTEGER.  OSL implementations of these interfaces must now
handle the case where the Width parameter is 64.

Index Fields: Fixed a problem where unaligned bit assembly and
disassembly for IndexFields was not supported correctly.

Index and Bank Fields:  Nested Index and Bank Fields are now
supported. During field access, a check is performed to ensure
that the value written to an Index or Bank register is not out of
the range of the register.  The Index (or Bank) register is
written before each access to the field data. Future support will
include allowing individual IndexFields to be wider than the
DataRegister width.

Fields: Fixed a problem where the AML interpreter was incorrectly
attempting to write beyond the end of a Field/OpRegion.  This was
a boundary case that occurred when a DWORD field was written to a
BYTE access OpRegion, forcing multiple writes and causing the
interpreter to write one datum too many.

Fields: Fixed a problem with Field/OpRegion access where the
starting bit address of a field was incorrectly calculated if the
current access type was wider than a byte (WordAcc, DwordAcc, or
QwordAcc).

Fields: Fixed a problem where forward references to individual
FieldUnits (individual Field names within a Field definition) were
not resolved during the AML table load.

Fields: Fixed a problem where forward references from a Field
definition to the parent Operation Region definition were not
resolved during the AML table load.

Fields: Duplicate FieldUnit names within a scope are now detected
during AML table load.

Acpi Interfaces: Fixed a problem where the AcpiGetName() interface
returned an incorrect name for the root node.

Code and Data Size: Code and Data optimizations have permitted new
feature development with an actual reduction in the library size.
Current core subsystem library sizes are shown below.  These are
the code and data sizes for the acpica.lib produced by the
Microsoft Visual C++ 6.0 compiler, and these values do not include
any ACPI driver or OSPM code.  The debug version of the code
includes the debug output trace mechanism and has a larger code
and data size.  Note that these values will vary depending on the
efficiency of the compiler and the compiler options used during
generation.

  Previous Release (10_18_01):
     Non-Debug Version:  63.9K Code,   5.1K Data,   69.0K Total
     Debug Version:     136.7K Code,  57.4K Data,  194.2K Total

  Current Release:
     Non-Debug Version:  63.7K Code,   5.2K Data,   68.9K Total
     Debug Version:     134.5K Code,  55.4K Data,  189.9K Total

 2) Linux:

Improved /proc processor output (Pavel Machek) Re-added
MODULE_LICENSE("GPL") to all modules.

 3) ASL Compiler version X2030:

Duplicate FieldUnit names within a scope are now detected and
flagged as errors.

 4) Documentation:

Programmer Reference updated to reflect OSL and address space
handler interface changes described above.

----------------------------------------
Summary of changes for this label: 10_18_01

ACPI CA Core Subsystem:

Fixed a problem with the internal object reference count mechanism
that occasionally caused premature object deletion. This resolves
all of the outstanding problem reports where an object is deleted
in the middle of an interpreter evaluation.  Although this problem
only showed up in rather obscure cases, the solution to the
problem involved an adjustment of all reference counts involving
objects attached to namespace nodes.

Fixed a problem with Field support in the interpreter where
writing to an aligned field whose length is an exact multiple (2
or greater) of the field access granularity would cause an attempt
to write beyond the end of the field.

The top level AML opcode execution functions within the
interpreter have been renamed with a more meaningful and
consistent naming convention.  The modules exmonad.c and
exdyadic.c were eliminated.  New modules are exoparg1.c,
exoparg2.c, exoparg3.c, and exoparg6.c.

Support for the ACPI 2.0 "Mid" ASL operator has been implemented.

Fixed a problem where the AML debugger was causing some internal
objects to not be deleted during subsystem termination.

Fixed a problem with the external AcpiEvaluateObject interface
where the subsystem would fault if the named object to be
evaluated refered to a constant such as Zero, Ones, etc.

Fixed a problem with IndexFields and BankFields where the
subsystem would fault if the index, data, or bank registers were
not defined in the same scope as the field itself.

Added printf format string checking for compilers that support
this feature.  Corrected more than 50 instances of issues with
format specifiers within invocations of ACPI_DEBUG_PRINT
throughout the core subsystem code.

The ASL "Revision" operator now returns the ACPI support level
implemented in the core - the value "2" since the ACPI 2.0 support
is more than 50% implemented.

Enhanced the output of the AML debugger "dump namespace" command
to output in a more human-readable form.

Current core subsystem library code sizes are shown below.  These

are the code and data sizes for the acpica.lib produced by the
Microsoft Visual C++ 6.0 compiler, and these values do not include
any ACPI driver or OSPM code.  The debug version of the code
includes the full debug trace mechanism -- leading to a much

larger code and data size.  Note that these values will vary
depending on the efficiency of the compiler and the compiler
options used during generation.

     Previous Label (09_20_01):
     Non-Debug Version:    65K Code,     5K Data,     70K Total
     Debug Version:       138K Code,    58K Data,    196K Total

     This Label:

     Non-Debug Version:  63.9K Code,   5.1K Data,   69.0K Total
     Debug Version:     136.7K Code,  57.4K Data,  194.2K Total

Linux:

Implemented a "Bad BIOS Blacklist" to track machines that have
known ASL/AML problems.

Enhanced the /proc interface for the thermal zone driver and added
support for _HOT (the critical suspend trip point).  The 'info'
file now includes threshold/policy information, and allows setting
of _SCP (cooling preference) and _TZP (polling frequency) values
to the 'info' file. Examples: "echo tzp=5 > info" sets the polling
frequency to 5 seconds, and "echo scp=1 > info" sets the cooling
preference to the passive/quiet mode (if supported by the ASL).

Implemented a workaround for a gcc bug that resuted in an OOPs
when loading the control method battery driver.

 ----------------------------------------
Summary of changes for this label: 09_20_01

 ACPI CA Core Subsystem:

The AcpiEnableEvent and AcpiDisableEvent interfaces have been
modified to allow individual GPE levels to be flagged as wake-
enabled (i.e., these GPEs are to remain enabled when the platform
sleeps.)

The AcpiEnterSleepState and AcpiLeaveSleepState interfaces now
support wake-enabled GPEs.  This means that upon entering the
sleep state, all GPEs that are not wake-enabled are disabled.
When leaving the sleep state, these GPEs are reenabled.

A local double-precision divide/modulo module has been added to
enhance portability to OS kernels where a 64-bit math library is
not available.  The new module is "utmath.c".

Several optimizations have been made to reduce the use of CPU
stack.  Originally over 2K, the maximum stack usage is now below
2K at 1860  bytes (1.82k)

Fixed a problem with the AcpiGetFirmwareTable interface where the
root table pointer was not mapped into a logical address properly.

Fixed a problem where a NULL pointer was being dereferenced in the
interpreter code for the ASL Notify operator.

Fixed a problem where the use of the ASL Revision operator
returned an error. This operator now returns the current version
of the ACPI CA core subsystem.

Fixed a problem where objects passed as control method parameters
to AcpiEvaluateObject were always deleted at method termination.
However, these objects may end up being stored into the namespace
by the called method.  The object reference count mechanism was
applied to these objects instead of a force delete.

Fixed a problem where static strings or buffers (contained in the
AML code) that are declared as package elements within the ASL
code could cause a fault because the interpreter would attempt to
delete them.  These objects are now marked with the "static
object" flag to prevent any attempt to delete them.

Implemented an interpreter optimization to use operands directly
from the state object instead of extracting the operands to local
variables.  This reduces stack use and code size, and improves
performance.

The module exxface.c was eliminated as it was an unnecessary extra
layer of code.

Current core subsystem library code sizes are shown below.  These
are the code and data sizes for the acpica.lib produced by the
Microsoft Visual C++ 6.0 compiler, and these values do not include
any ACPI driver or OSPM code.  The debug version of the code
includes the full debug trace mechanism -- leading to a much
larger code and data size.  Note that these values will vary
depending on the efficiency of the compiler and the compiler
options used during generation.

  Non-Debug Version:  65K Code,   5K Data,   70K Total
(Previously 69K)   Debug Version:     138K Code,  58K Data,  196K
Total  (Previously 195K)

Linux:

Support for ACPI 2.0 64-bit integers has been added.   All ACPI
Integer objects are now 64 bits wide

All Acpi data types and structures are now in lower case.  Only
Acpi macros are upper case for differentiation.

 Documentation:

Changes to the external interfaces as described above.

 ----------------------------------------
Summary of changes for this label: 08_31_01

 ACPI CA Core Subsystem:

A bug with interpreter implementation of the ASL Divide operator
was found and fixed.  The implicit function return value (not the
explicit store operands) was returning the remainder instead of
the quotient.  This was a longstanding bug and it fixes several
known outstanding issues on various platforms.

The ACPI_DEBUG_PRINT and function trace entry/exit macros have
been further optimized for size.  There are 700 invocations of the
DEBUG_PRINT macro alone, so each optimization reduces the size of
the debug version of the subsystem significantly.

A stack trace mechanism has been implemented.  The maximum stack
usage is about 2K on 32-bit platforms.  The debugger command "stat
stack" will display the current maximum stack usage.

All public symbols and global variables within the subsystem are
now prefixed with the string "Acpi".  This keeps all of the
symbols grouped together in a kernel map, and avoids conflicts
with other kernel subsystems.

Most of the internal fixed lookup tables have been moved into the
code segment via the const operator.

Several enhancements have been made to the interpreter to both
reduce the code size and improve performance.

Current core subsystem library code sizes are shown below.  These
are the code and data sizes for the acpica.lib produced by the
Microsoft Visual C++ 6.0 compiler, and these values do not include
any ACPI driver or OSPM code.  The debug version of the code
includes the full debug trace mechanism which contains over 700
invocations of the DEBUG_PRINT macro, 500 function entry macro
invocations, and over 900 function exit macro invocations --
leading to a much larger code and data size.  Note that these
values will vary depending on the efficiency of the compiler and
the compiler options used during generation.

        Non-Debug Version:  64K Code,   5K Data,   69K Total
Debug Version:     137K Code,  58K Data,  195K Total

 Linux:

Implemented wbinvd() macro, pending a kernel-wide definition.

Fixed /proc/acpi/event to handle poll() and short reads.

 ASL Compiler, version X2026:

Fixed a problem introduced in the previous label where the AML

code emitted for package objects produced packages with zero
length.

 ----------------------------------------
Summary of changes for this label: 08_16_01

ACPI CA Core Subsystem:

The following ACPI 2.0 ASL operators have been implemented in the
AML interpreter (These are already supported by the Intel ASL
compiler):  ToDecimalString, ToHexString, ToString, ToInteger, and
ToBuffer.  Support for 64-bit AML constants is implemented in the
AML parser, debugger, and disassembler.

The internal memory tracking mechanism (leak detection code) has
been upgraded to reduce the memory overhead (a separate tracking
block is no longer allocated for each memory allocation), and now
supports all of the internal object caches.

The data structures and code for the internal object caches have
been coelesced and optimized so that there is a single cache and
memory list data structure and a single group of functions that
implement generic cache management.  This has reduced the code
size in both the debug and release versions of the subsystem.

The DEBUG_PRINT macro(s) have been optimized for size and replaced
by ACPI_DEBUG_PRINT.  The syntax for this macro is slightly
different, because it generates a single call to an internal
function.  This results in a savings of about 90 bytes per
invocation, resulting in an overall code and data savings of about
16% in the debug version of the subsystem.

 Linux:

Fixed C3 disk corruption problems and re-enabled C3 on supporting
machines.

Integrated low-level sleep code by Patrick Mochel.

Further tweaked source code Linuxization.

Other minor fixes.

 ASL Compiler:

Support for ACPI 2.0 variable length packages is fixed/completed.

Fixed a problem where the optional length parameter for the ACPI
2.0 ToString operator.

Fixed multiple extraneous error messages when a syntax error is
detected within the declaration line of a control method.

 ----------------------------------------
Summary of changes for this label: 07_17_01

ACPI CA Core Subsystem:

Added a new interface named AcpiGetFirmwareTable to obtain any
ACPI table via the ACPI signature.  The interface can be called at
any time during kernel initialization, even before the kernel
virtual memory manager is initialized and paging is enabled.  This
allows kernel subsystems to obtain ACPI tables very early, even
before the ACPI CA subsystem is initialized.

Fixed a problem where Fields defined with the AnyAcc attribute
could be resolved to the incorrect address under the following
conditions: 1) the field width is larger than 8 bits and 2) the
parent operation region is not defined on a DWORD boundary.

Fixed a problem where the interpreter is not being locked during
namespace initialization (during execution of the _INI control
methods), causing an error when an attempt is made to release it
later.

ACPI 2.0 support in the AML Interpreter has begun and will be
ongoing throughout the rest of this year.  In this label, The Mod
operator is implemented.

Added a new data type to contain full PCI addresses named
ACPI_PCI_ID. This structure contains the PCI Segment, Bus, Device,
and Function values.

 Linux:

Enhanced the Linux version of the source code to change most
capitalized ACPI type names to lowercase. For example, all
instances of ACPI_STATUS are changed to acpi_status.  This will
result in a large diff, but the change is strictly cosmetic and
aligns the CA code closer to the Linux coding standard.

OSL Interfaces:

The interfaces to the PCI configuration space have been changed to
add the PCI Segment number and to split the single 32-bit combined
DeviceFunction field into two 16-bit fields.  This was
accomplished by moving the four values that define an address in
PCI configuration space (segment, bus, device, and function) to
the new ACPI_PCI_ID structure.

The changes to the PCI configuration space interfaces led to a
reexamination of the complete set of address space access
interfaces for PCI, I/O, and Memory.  The previously existing 18
interfaces have proven difficult to maintain (any small change
must be propagated across at least 6 interfaces) and do not easily
allow for future expansion to 64 bits if necessary.  Also, on some
systems, it would not be appropriate to demultiplex the access
width (8, 16, 32,or 64) before calling the OSL if the
corresponding native OS interfaces contain a similar access width
parameter.  For these reasons, the 18 address space interfaces
have been replaced by these 6 new ones:

AcpiOsReadPciConfiguration
AcpiOsWritePciConfiguration
AcpiOsReadMemory
AcpiOsWriteMemory
AcpiOsReadPort
AcpiOsWritePort

Added a new interface named AcpiOsGetRootPointer to allow the OSL
to perform the platform and/or OS-specific actions necessary to
obtain the ACPI RSDP table pointer.  On IA-32 platforms, this
interface will simply call down to the CA core to perform the low-
memory search for the table.  On IA-64, the RSDP is obtained from
EFI.  Migrating this interface to the OSL allows the CA core to

remain OS and platform independent.

Added a new interface named AcpiOsSignal to provide a generic
"function code and pointer" interface for various miscellaneous
signals and notifications that must be made to the host OS.   The
first such signals are intended to support the ASL Fatal and
Breakpoint operators.  In the latter case, the AcpiOsBreakpoint
interface has been obsoleted.

The definition of the AcpiFormatException interface has been
changed to simplify its use.  The caller no longer must supply a
buffer to the call; A pointer to a const string is now returned
directly.  This allows the call to be easily used in printf
statements, etc. since the caller does not have to manage a local
buffer.


 ASL Compiler, Version X2025:

The ACPI 2.0 Switch/Case/Default operators have been implemented
and are fully functional.  They will work with all ACPI 1.0
interpreters, since the operators are simply translated to If/Else
pairs.

The ACPI 2.0 ElseIf operator is implemented and will also work
with 1.0 interpreters, for the same reason.

Implemented support for ACPI 2.0 variable-length packages.  These
packages have a separate opcode, and their size is determined by
the interpreter at run-time.

Documentation The ACPI CA Programmer Reference has been updated to
reflect the new interfaces and changes to existing interfaces.

 ------------------------------------------
Summary of changes for this label: 06_15_01

 ACPI CA Core Subsystem:

Fixed a problem where a DWORD-accessed field within a Buffer
object would get its byte address inadvertently rounded down to
the nearest DWORD.  Buffers are always Byte-accessible.

 ASL Compiler, version X2024:

Fixed a problem where the Switch() operator would either fault or
hang the compiler.  Note however, that the AML code for this ACPI
2.0 operator is not yet implemented.

Compiler uses the new AcpiOsGetTimer interface to obtain compile
timings.

Implementation of the CreateField operator automatically converts
a reference to a named field within a resource descriptor from a
byte offset to a bit offset if required.

Added some missing named fields from the resource descriptor
support. These are the names that are automatically created by the
compiler to reference fields within a descriptor.  They are only
valid at compile time and are not passed through to the AML
interpreter.

Resource descriptor named fields are now typed as Integers and
subject to compile-time typechecking when used in expressions.

 ------------------------------------------
Summary of changes for this label: 05_18_01

 ACPI CA Core Subsystem:

Fixed a couple of problems in the Field support code where bits
from adjacent fields could be returned along with the proper field
bits. Restructured the field support code to improve performance,
readability and maintainability.

New DEBUG_PRINTP macro automatically inserts the procedure name
into the output, saving hundreds of copies of procedure name
strings within the source, shrinking the memory footprint of the
debug version of the core subsystem.

 Source Code Structure:

The source code directory tree was restructured to reflect the
current organization of the component architecture.  Some files
and directories have been moved and/or renamed.

 Linux:

Fixed leaking kacpidpc processes.

Fixed queueing event data even when /proc/acpi/event is not
opened.

 ASL Compiler, version X2020:

Memory allocation performance enhancement - over 24X compile time
improvement on large ASL files.  Parse nodes and namestring
buffers are now allocated from a large internal compiler buffer.

The temporary .SRC file is deleted unless the "-s" option is
specified

The "-d" debug output option now sends all output to the .DBG file
instead of the console.

"External" second parameter is now optional

"ElseIf" syntax now properly allows the predicate

Last operand to "Load" now recognized as a Target operand

Debug object can now be used anywhere as a normal object.

ResourceTemplate now returns an object of type BUFFER

EISAID now returns an object of type INTEGER

"Index" now works with a STRING operand

"LoadTable" now accepts optional parameters

"ToString" length parameter is now optional

"Interrupt (ResourceType," parse error fixed.

"Register" with a user-defined region space parse error fixed

Escaped backslash at the end of a string ("\\") scan/parse error
fixed

"Revision" is now an object of type INTEGER.



------------------------------------------
Summary of changes for this label: 05_02_01

Linux:

/proc/acpi/event now blocks properly.

Removed /proc/sys/acpi. You can still dump your DSDT from
/proc/acpi/dsdt.

 ACPI CA Core Subsystem:

Fixed a problem introduced in the previous label where some of the
"small" resource descriptor types were not recognized.

Improved error messages for the case where an ASL Field is outside
the range of the parent operation region.

 ASL Compiler, version X2018:


Added error detection for ASL Fields that extend beyond the length
of the parent operation region (only if the length of the region
is known at compile time.)  This includes fields that have a
minimum access width that is smaller than the parent region, and
individual field units that are partially or entirely beyond the
extent of the parent.



------------------------------------------
Summary of changes for this label: 04_27_01

 ACPI CA Core Subsystem:

Fixed a problem where the namespace mutex could be released at the
wrong time during execution of AcpiRemoveAddressSpaceHandler.

Added optional thread ID output for debug traces, to simplify
debugging of multiple threads.  Added context switch notification
when the debug code realizes that a different thread is now
executing ACPI code.

Some additional external data types have been prefixed with the
string "ACPI_" for consistency.  This may effect existing code.
The data types affected are the external callback typedefs - e.g.,

WALK_CALLBACK becomes ACPI_WALK_CALLBACK.

 Linux:

Fixed an issue with the OSL semaphore implementation where a
thread was waking up with an error from receiving a SIGCHLD
signal.

Linux version of ACPI CA now uses the system C library for string
manipulation routines instead of a local implementation.

Cleaned up comments and removed TBDs.

 ASL Compiler, version X2017:

Enhanced error detection and reporting for all file I/O
operations.

 Documentation:

Programmer Reference updated to version 1.06.



------------------------------------------
Summary of changes for this label: 04_13_01

 ACPI CA Core Subsystem:

Restructured support for BufferFields and RegionFields.
BankFields support is now fully operational.  All known 32-bit
limitations on field sizes have been removed.  Both BufferFields
and (Operation) RegionFields are now supported by the same field
management code.

Resource support now supports QWORD address and IO resources. The
16/32/64 bit address structures and the Extended IRQ structure
have been changed to properly handle Source Resource strings.

A ThreadId of -1 is now used to indicate a "mutex not acquired"
condition internally and must never be returned by AcpiOsThreadId.
This reserved value was changed from 0 since Unix systems allow a
thread ID of 0.

Linux:

Driver code reorganized to enhance portability

Added a kernel configuration option to control ACPI_DEBUG

Fixed the EC driver to honor _GLK.

ASL Compiler, version X2016:

Fixed support for the "FixedHw" keyword.  Previously, the FixedHw
address space was set to 0, not 0x7f as it should be.

 ------------------------------------------
Summary of changes for this label: 03_13_01

 ACPI CA Core Subsystem:

During ACPI initialization, the _SB_._INI method is now run if
present.

Notify handler fix - notifies are deferred until the parent method
completes execution.  This fixes the "mutex already acquired"
issue seen occasionally.

Part of the "implicit conversion" rules in ACPI 2.0 have been
found to cause compatibility problems with existing ASL/AML.  The
convert "result-to-target-type" implementation has been removed
for stores to method Args and Locals.  Source operand conversion
is still fully implemented.  Possible changes to ACPI 2.0
specification pending.

Fix to AcpiRsCalculatePciRoutingTableLength to return correct
length.

Fix for compiler warnings for 64-bit compiles.

 Linux:

/proc output aligned for easier parsing.

Release-version compile problem fixed.

New kernel configuration options documented in Configure.help.

IBM 600E - Fixed Sleep button may generate "Invalid <NULL>
context" message.

 OSPM:

Power resource driver integrated with bus manager.

Fixed kernel fault during active cooling for thermal zones.

Source Code:

The source code tree has been restructured.



------------------------------------------
Summary of changes for this label: 03_02_01

 Linux OS Services Layer (OSL):

Major revision of all Linux-specific code.

Modularized all ACPI-specific drivers.

Added new thermal zone and power resource drivers.

Revamped /proc interface (new functionality is under /proc/acpi).

New kernel configuration options.

 Linux known issues:

New kernel configuration options not documented in Configure.help
yet.


Module dependencies not currently implemented. If used, they
should be loaded in this order: busmgr, power, ec, system,
processor, battery, ac_adapter, button, thermal.

Modules will not load if CONFIG_MODVERSION is set.

IBM 600E - entering S5 may reboot instead of shutting down.

IBM 600E - Sleep button may generate "Invalid <NULL> context"
message.

Some systems may fail with "execution mutex already acquired"
message.

 ACPI CA Core Subsystem:

Added a new OSL Interface, AcpiOsGetThreadId.  This was required
for the  deadlock detection code. Defined to return a non-zero, 32-
bit thread ID for the currently executing thread.  May be a non-
zero constant integer on single-thread systems.

Implemented deadlock detection for internal subsystem mutexes.  We
may add conditional compilation for this code (debug only) later.

ASL/AML Mutex object semantics are now fully supported.  This
includes multiple acquires/releases by owner and support for the

Mutex SyncLevel parameter.

A new "Force Release" mechanism automatically frees all ASL
Mutexes that have been acquired but not released when a thread
exits the interpreter.  This forces conformance to the ACPI spec
("All mutexes must be released when an invocation exits") and
prevents deadlocked ASL threads.  This mechanism can be expanded
(later) to monitor other resource acquisitions if OEM ASL code
continues to misbehave (which it will).

Several new ACPI exception codes have been added for the Mutex
support.

Recursive method calls are now allowed and supported (the ACPI
spec does in fact allow recursive method calls.)  The number of
recursive calls is subject to the restrictions imposed by the
SERIALIZED method keyword and SyncLevel (ACPI 2.0) method
parameter.

Implemented support for the SyncLevel parameter for control
methods (ACPI 2.0 feature)

Fixed a deadlock problem when multiple threads attempted to use
the interpreter.

Fixed a problem where the string length of a String package
element was not always set in a package returned from
AcpiEvaluateObject.

Fixed a problem where the length of a String package element was
not always included in the length of the overall package returned
from AcpiEvaluateObject.

Added external interfaces (Acpi*) to the ACPI debug memory
manager.  This manager keeps a list of all outstanding
allocations, and can therefore detect memory leaks and attempts to
free memory blocks more than once. Useful for code such as the
power manager, etc.  May not be appropriate for device drivers.
Performance with the debug code enabled is slow.

The ACPI Global Lock is now an optional hardware element.

 ASL Compiler Version X2015:

Integrated changes to allow the compiler to be generated on
multiple platforms.

Linux makefile added to generate the compiler on Linux

 Source Code:

All platform-specific headers have been moved to their own
subdirectory, Include/Platform.

New source file added, Interpreter/ammutex.c

New header file, Include/acstruct.h

 Documentation:

The programmer reference has been updated for the following new
interfaces: AcpiOsGetThreadId AcpiAllocate AcpiCallocate AcpiFree

 ------------------------------------------
Summary of changes for this label: 02_08_01

Core ACPI CA Subsystem: Fixed a problem where an error was
incorrectly returned if the return resource buffer was larger than
the actual data (in the resource interfaces).

References to named objects within packages are resolved to the

full pathname string before packages are returned directly (via
the AcpiEvaluateObject interface) or indirectly via the resource
interfaces.

Linux OS Services Layer (OSL):

Improved /proc battery interface.


Added C-state debugging output and other miscellaneous fixes.

ASL Compiler Version X2014:

All defined method arguments can now be used as local variables,
including the ones that are not actually passed in as parameters.
The compiler tracks initialization of the arguments and issues an
exception if they are used without prior assignment (just like
locals).

The -o option now specifies a filename prefix that is used for all
output files, including the AML output file.  Otherwise, the
default behavior is as follows:  1) the AML goes to the file
specified in the DSDT.  2) all other output files use the input
source filename as the base.

 ------------------------------------------
Summary of changes for this label: 01_25_01

Core ACPI CA Subsystem: Restructured the implementation of object
store support within the  interpreter.  This includes support for
the Store operator as well  as any ASL operators that include a
target operand.

Partially implemented support for Implicit Result-to-Target
conversion. This is when a result object is converted on the fly
to the type of  an existing target object.  Completion of this
support is pending  further analysis of the ACPI specification
concerning this matter.

CPU-specific code has been removed from the subsystem (hardware
directory).

New Power Management Timer functions added

Linux OS Services Layer (OSL): Moved system state transition code
to the core, fixed it, and modified  Linux OSL accordingly.

Fixed C2 and C3 latency calculations.


We no longer use the compilation date for the version message on
initialization, but retrieve the version from AcpiGetSystemInfo().

Incorporated for fix Sony VAIO machines.

Documentation:  The Programmer Reference has been updated and
reformatted.


ASL Compiler:  Version X2013: Fixed a problem where the line
numbering and error reporting could get out  of sync in the
presence of multiple include files.

 ------------------------------------------
Summary of changes for this label: 01_15_01

Core ACPI CA Subsystem:

Implemented support for type conversions in the execution of the
ASL  Concatenate operator (The second operand is converted to
match the type  of the first operand before concatenation.)

Support for implicit source operand conversion is partially
implemented.   The ASL source operand types Integer, Buffer, and
String are freely  interchangeable for most ASL operators and are
converted by the interpreter  on the fly as required.  Implicit
Target operand conversion (where the  result is converted to the
target type before storing) is not yet implemented.

Support for 32-bit and 64-bit BCD integers is implemented.

Problem fixed where a field read on an aligned field could cause a
read  past the end of the field.

New exception, AE_AML_NO_RETURN_VALUE, is returned when a method
does not return a value, but the caller expects one.  (The ASL
compiler flags this as a warning.)

ASL Compiler:

Version X2011:
1. Static typechecking of all operands is implemented. This
prevents the use of invalid objects (such as using a Package where
an Integer is required) at compile time instead of at interpreter
run-time.
2. The ASL source line is printed with ALL errors and warnings.
3. Bug fix for source EOF without final linefeed.
4. Debug option is split into a parse trace and a namespace trace.
5. Namespace output option (-n) includes initial values for
integers and strings.
6. Parse-only option added for quick syntax checking.
7. Compiler checks for duplicate ACPI name declarations

Version X2012:
1. Relaxed typechecking to allow interchangeability between
strings, integers, and buffers.  These types are now converted by
the interpreter at runtime.
2. Compiler reports time taken by each internal subsystem in the
debug         output file.


 ------------------------------------------
Summary of changes for this label: 12_14_00

ASL Compiler:

This is the first official release of the compiler. Since the
compiler requires elements of the Core Subsystem, this label
synchronizes everything.

------------------------------------------
Summary of changes for this label: 12_08_00


Fixed a problem where named references within the ASL definition
of both OperationRegions and CreateXXXFields did not work
properly.  The symptom was an AE_AML_OPERAND_TYPE during
initialization of the region/field. This is similar (but not
related internally) to the problem that was fixed in the last
label.

Implemented both 32-bit and 64-bit support for the BCD ASL
functions ToBCD and FromBCD.

Updated all legal headers to include "2000" in the copyright
years.

 ------------------------------------------
Summary of changes for this label: 12_01_00

Fixed a problem where method invocations within the ASL definition
of both OperationRegions and CreateXXXFields did not work
properly.  The symptom was an AE_AML_OPERAND_TYPE during
initialization of the region/field:

  nsinit-0209: AE_AML_OPERAND_TYPE while getting region arguments
[DEBG]   ammonad-0284: Exec_monadic2_r/Not: bad operand(s)
(0x3005)

Fixed a problem where operators with more than one nested
subexpression would fail.  The symptoms were varied, by mostly
AE_AML_OPERAND_TYPE errors.  This was actually a rather serious
problem that has gone unnoticed until now.

  Subtract (Add (1,2), Multiply (3,4))

Fixed a problem where AcpiGetHandle didn't quite get fixed in the
previous build (The prefix part of a relative path was handled
incorrectly).

Fixed a problem where Operation Region initialization failed if
the operation region name was a "namepath" instead of a simple
"nameseg". Symptom was an AE_NO_OPERAND error.

Fixed a problem where an assignment to a local variable via the
indirect RefOf mechanism only worked for the first such
assignment.  Subsequent assignments were ignored.

 ------------------------------------------
Summary of changes for this label: 11_15_00

ACPI 2.0 table support with backwards support for ACPI 1.0 and the
0.71 extensions.  Note: although we can read ACPI 2.0 BIOS tables,
the AML  interpreter does NOT have support for the new 2.0 ASL
grammar terms at this time.

All ACPI hardware access is via the GAS structures in the ACPI 2.0
FADT.

All physical memory addresses across all platforms are now 64 bits
wide. Logical address width remains dependent on the platform
(i.e., "void *").

AcpiOsMapMemory interface changed to a 64-bit physical address.

The AML interpreter integer size is now 64 bits, as per the ACPI
2.0 specification.

For backwards compatibility with ACPI 1.0, ACPI tables with a
revision number less than 2 use 32-bit integers only.

Fixed a problem where the evaluation of OpRegion operands did not
always resolve them to numbers properly.

------------------------------------------
Summary of changes for this label: 10_20_00

Fix for CBN_._STA issue.  This fix will allow correct access to
CBN_ OpRegions when the _STA returns 0x8.

Support to convert ACPI constants (Ones, Zeros, One) to actual
values before a package object is returned

Fix for method call as predicate to if/while construct causing
incorrect if/while behavior

Fix for Else block package lengths sometimes calculated wrong (if
block > 63 bytes)

Fix for Processor object length field, was always zero

Table load abort if FACP sanity check fails

Fix for problem with Scope(name) if name already exists

Warning emitted if a named object referenced cannot be found
(resolved) during method execution.





------------------------------------------
Summary of changes for this label: 9_29_00

New table initialization interfaces: AcpiInitializeSubsystem no
longer has any parameters AcpiFindRootPointer - Find the RSDP (if
necessary) AcpiLoadTables (RSDP) - load all tables found at RSDP-
>RSDT Obsolete Interfaces AcpiLoadFirmwareTables - replaced by
AcpiLoadTables

Note: These interface changes require changes to all existing OSDs

The PCI_Config default address space handler is always installed
at the root namespace object.

-------------------------------------------
Summary of changes for this label: 09_15_00

The new initialization architecture is implemented.  New
interfaces are: AcpiInitializeSubsystem (replaces AcpiInitialize)
AcpiEnableSubsystem Obsolete Interfaces: AcpiLoadNamespace

(Namespace is automatically loaded when a table is loaded)

The ACPI_OPERAND_OBJECT has been optimized to shrink its size from
52 bytes to 32 bytes.  There is usually one of these for every
namespace object, so the memory savings is significant.

Implemented just-in-time evaluation of the CreateField operators.

Bug fixes for IA-64 support have been integrated.

Additional code review comments have been implemented

The so-called "third pass parse" has been replaced by a final walk
through the namespace to initialize all operation regions (address
spaces) and fields that have not yet been initialized during the
execution of the various _INI and REG methods.

New file - namespace/nsinit.c

-------------------------------------------
Summary of changes for this label: 09_01_00

Namespace manager data structures have been reworked to change the
primary  object from a table to a single object.  This has
resulted in dynamic memory  savings of 3X within the namespace and
2X overall in the ACPI CA subsystem.

Fixed problem where the call to AcpiEvFindPciRootBuses was
inadvertently left  commented out.

Reduced the warning count when generating the source with the GCC
compiler.

Revision numbers added to each module header showing the
SourceSafe version of the file.  Please refer to this version
number when giving us feedback or comments on individual modules.

The main object types within the subsystem have been renamed to
clarify their  purpose:

ACPI_INTERNAL_OBJECT -> ACPI_OPERAND_OBJECT
ACPI_GENERIC_OP -> ACPI_PARSE_OBJECT
ACPI_NAME_TABLE_ENTRY -> ACPI_NAMESPACE_NODE

NOTE: no changes to the initialization sequence are included in
this label.

-------------------------------------------
Summary of changes for this label: 08_23_00

Fixed problem where TerminateControlMethod was being called
multiple times per  method

Fixed debugger problem where single stepping caused a semaphore to
be  oversignalled

Improved performance through additional parse object caching -
added  ACPI_EXTENDED_OP type

-------------------------------------------
Summary of changes for this label: 08_10_00

Parser/Interpreter integration:  Eliminated the creation of
complete parse trees  for ACPI tables and control methods.
Instead, parse subtrees are created and  then deleted as soon as
they are processed (Either entered into the namespace or  executed
by the interpreter).  This reduces the use of dynamic kernel
memory  significantly. (about 10X)

Exception codes broken into classes and renumbered.  Be sure to
recompile all  code that includes acexcep.h.  Hopefully we won't
have to renumber the codes  again now that they are split into
classes (environment, programmer, AML code,  ACPI table, and
internal).

Fixed some additional alignment issues in the Resource Manager
subcomponent

Implemented semaphore tracking in the AcpiExec utility, and fixed
several places  where mutexes/semaphores were being unlocked
without a corresponding lock  operation.  There are no known
semaphore or mutex "leaks" at this time.

Fixed the case where an ASL Return operator is used to return an
unnamed  package.

-------------------------------------------
Summary of changes for this label: 07_28_00

Fixed a problem with the way addresses were calculated in
AcpiAmlReadFieldData()  and AcpiAmlWriteFieldData(). This problem
manifested itself when a Field was  created with WordAccess or
DwordAccess, but the field unit defined within the  Field was less

than a Word or Dword.

Fixed a problem in AmlDumpOperands() module's loop to pull
operands off of the  operand stack to display information. The
problem manifested itself as a TLB  error on 64-bit systems when
accessing an operand stack with two or more  operands.

Fixed a problem with the PCI configuration space handlers where
context was  getting confused between accesses. This required a
change to the generic address  space handler and address space
setup definitions. Handlers now get both a  global handler context
(this is the one passed in by the user when executing
AcpiInstallAddressSpaceHandler() and a specific region context
that is unique to  each region (For example, the _ADR, _SEG and
_BBN values associated with a  specific region). The generic
function definitions have changed to the  following:

typedef ACPI_STATUS (*ADDRESS_SPACE_HANDLER) ( UINT32 Function,
UINT32 Address, UINT32 BitWidth, UINT32 *Value, void
*HandlerContext, // This used to be void *Context void
*RegionContext); // This is an additional parameter

typedef ACPI_STATUS (*ADDRESS_SPACE_SETUP) ( ACPI_HANDLE
RegionHandle, UINT32 Function, void *HandlerContext,  void
**RegionContext); // This used to be **ReturnContext

-------------------------------------------
Summary of changes for this label: 07_21_00

Major file consolidation and rename.  All files within the
interpreter have been  renamed as well as most header files.  This
was done to prevent collisions with  existing files in the host
OSs -- filenames such as "config.h" and "global.h"  seem to be
quite common.  The VC project files have been updated.  All
makefiles  will require modification.

The parser/interpreter integration continues in Phase 5 with the
implementation  of a complete 2-pass parse (the AML is parsed
twice) for each table;  This  avoids the construction of a huge
parse tree and therefore reduces the amount of  dynamic memory
required by the subsystem.  Greater use of the parse object cache
means that performance is unaffected.

Many comments from the two code reviews have been rolled in.

The 64-bit alignment support is complete.

-------------------------------------------
Summary of changes for this label: 06_30_00

With a nod and a tip of the hat to the technology of yesteryear,
we've added  support in the source code for 80 column output
devices.  The code is now mostly  constrained to 80 columns or
less to support environments and editors that 1)  cannot display
or print more than 80 characters on a single line, and 2) cannot
disable line wrapping.

A major restructuring of the namespace data structure has been
completed.  The  result is 1) cleaner and more
understandable/maintainable code, and 2) a  significant reduction
in the dynamic memory requirement for each named ACPI  object
(almost half).

-------------------------------------------
Summary of changes for this label: 06_23_00

Linux support has been added.  In order to obtain approval to get
the ACPI CA  subsystem into the Linux kernel, we've had to make
quite a few changes to the  base subsystem that will affect all
users (all the changes are generic and OS- independent).  The
effects of these global changes have been somewhat far  reaching.
Files have been merged and/or renamed and interfaces have been
renamed.   The major changes are described below.

Osd* interfaces renamed to AcpiOs* to eliminate namespace
pollution/confusion  within our target kernels.  All OSD
interfaces must be modified to match the new  naming convention.

Files merged across the subsystem.  A number of the smaller source
and header  files have been merged to reduce the file count and
increase the density of the  existing files.  There are too many
to list here.  In general, makefiles that  call out individual
files will require rebuilding.

Interpreter files renamed.  All interpreter files now have the
prefix am*  instead of ie* and is*.

Header files renamed:  The acapi.h file is now acpixf.h.  The
acpiosd.h file is  now acpiosxf.h.  We are removing references to
the acronym "API" since it is  somewhat windowsy. The new name is
"external interface" or xface or xf in the  filenames.j


All manifest constants have been forced to upper case (some were
mixed case.)   Also, the string "ACPI_" has been prepended to many
(not all) of the constants,  typedefs, and structs.

The globals "DebugLevel" and "DebugLayer" have been renamed
"AcpiDbgLevel" and  "AcpiDbgLayer" respectively.

All other globals within the subsystem are now prefixed with
"AcpiGbl_" Internal procedures within the subsystem are now
prefixed with "Acpi" (with only  a few exceptions).  The original
two-letter abbreviation for the subcomponent  remains after "Acpi"
- for example, CmCallocate became AcpiCmCallocate.

Added a source code translation/conversion utility.  Used to
generate the Linux  source code, it can be modified to generate
other types of source as well. Can  also be used to cleanup
existing source by removing extraneous spaces and blank  lines.
Found in tools/acpisrc/*

OsdUnMapMemory was renamed to OsdUnmapMemory and then
AcpiOsUnmapMemory.  (UnMap  became Unmap).

A "MaxUnits" parameter has been added to AcpiOsCreateSemaphore.
When set to  one, this indicates that the caller wants to use the

semaphore as a mutex, not a  counting semaphore.  ACPI CA uses
both types.  However, implementers of this  call may want to use
different OS primitives depending on the type of semaphore
requested.  For example, some operating systems provide separate

"mutex" and  "semaphore" interfaces - where the mutex interface is
much faster because it  doesn't have all the overhead of a full
semaphore implementation.

Fixed a deadlock problem where a method that accesses the PCI
address space can  block forever if it is the first access to the
space.

-------------------------------------------
Summary of changes for this label: 06_02_00

Support for environments that cannot handle unaligned data
accesses (e.g.  firmware and OS environments devoid of alignment
handler technology namely  SAL/EFI and the IA-64 Linux kernel) has
been added (via configurable macros) in  these three areas: -
Transfer of data from the raw AML byte stream is done via byte
moves instead of    word/dword/qword moves. - External objects are
aligned within the user buffer, including package   elements (sub-
objects). - Conversion of name strings to UINT32 Acpi Names is now
done byte-wise.

The Store operator was modified to mimic Microsoft's
implementation when storing  to a Buffer Field.

Added a check of the BM_STS bit before entering C3.

The methods subdirectory has been obsoleted and removed.  A new
file, cmeval.c  subsumes the functionality.

A 16-bit (DOS) version of AcpiExec has been developed.  The
makefile is under  the acpiexec directory.
