----------------------------------------
10 January 2020. Summary of changes for version 20200110:


1) ACPICA kernel-resident subsystem:

Updated all copyrights to 2020. This affects all ACPICA source code 
modules.


2) iASL Compiler/Disassembler and ACPICA tools:

ASL test suite (ASLTS): Updated all copyrights to 2020.

Tools and utilities: Updated all signon copyrights to 2020.

iASL: fix forward reference analysis for field declarations. Fixes 
forward reference analysis for field declarations by searching the 
parent scope for the named object when the object is not present in 
the current scope.

iASL: Improved the error output for ALREADY_EXISTS errors. Now, the 
full pathname of the name that already exists is printed.

iASL: Enhance duplicate Case() detection for buffers. Add check for 
buffers with no initializer list (these buffers will be filled with 
zeros at runtime.)


----------------------------------------
13 December 2019. Summary of changes for version 20191213:


1) ACPICA kernel-resident subsystem:

Return a Buffer object for all fields created via the CreateField
operator. Previously, an Integer would be returned if the size of
the field was less than or equal to the current size of an Integer.
Although this goes against the ACPI specification, it provides
compatibility with other ACPI implementations. Also updated the
ASLTS test suite to reflect this new behavior.

2) iASL Compiler/Disassembler and ACPICA tools:

iASL: Implemented detection of (and throw an error for) duplicate
values for Case statements within a single Switch statement. Duplicate
Integers, Strings, and Buffers are supported.

iASL: Fix error logging issue during multiple file compilation --
Switch to the correct input file during error node creation.

iASL: For duplicate named object creation, now emit an error instead
of a warning - since this will cause a runtime error.

AcpiSrc: Add unix line-ending support for non-Windows builds.

iASL: Add an error condition for an attempt to create a NameString
with > 255 NameSegs (the max allowable via the AML definition).


----------------------------------------
18 October 2019. Summary of changes for version 20191018:


1) ACPICA kernel-resident subsystem:

Debugger: added a new command: ?Fields [address space ID]?. This command 
dumps the contents of all field units that are defined within the 
namespace with a particular address space ID.

Modified the external interface AcpiLoadTable() to return a table index. 
This table index can be used for unloading a table for debugging.
    ACPI_STATUS
    AcpiLoadTable (
        ACPI_TABLE_HEADER       *Table,
        UINT32                  *TableIndex))

Implemented a new external interface: AcpiUnloadTable() This new function 
takes a table index as an argument and unloads the table. Useful for 
debugging only.
    ACPI_STATUS
    AcpiUnloadTable (
        UINT32                  TableIndex))

Ported the AcpiNames utility to use the new table initialization 
sequence. The utility was broken before this change. Also, it was 
required to include most of the AML interpreter into the utility in order 
to process table initialization (module-level code execution.)

Update for results from running Clang V8.0.1. This fixes all "dead 
assignment" warnings. There are still several "Dereference of NULL 
pointer" warnings, but these have been found to be false positive 
warnings.


2) iASL Compiler/Disassembler and ACPICA tools:

iASL: numerous table compiler changes to ensure that the usage of 
yacc/bison syntax is POSIX-compliant.

iASL/disassembler: several simple bug fixes in the data table 
disassembler.

Acpiexec: expanded the initialization file (the -fi option) to initialize 
strings, buffers, packages, and field units.


----------------------------------------
16 August 2019. Summary of changes for version 20190816:

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


1) ACPICA kernel-resident subsystem:

Modified the OwnerId mechanism to allow for more Owner Ids. The previous 
limit was 256 Ids, now it is 4096 Ids. This prevents OWNER_ID_LIMIT 
exceptions on machines with a large number of initialization threads, 
many CPU cores and nested initialization control methods.

Introduced acpi_dispatch_gpe() as a wrapper around AcpiEvDetectGpe() for 
checking if the given GPE (as represented by a GPE device handle and a 
GPE number) is currently active and dispatching it (if that's the case) 
outside of interrupt context.

Table load: exit the interpreter before initializing objects within the 
new table This prevents re-acquiring the interpreter lock when loading 
tables

Added the "Windows 2019" string to the _OSI support (version 1903). Jung-
uk Kim

Macros: removed pointer math on a null pointer. Causes warnings on some 
compilers and/or tools. Changed ACPI_TO_POINTER to use ACPI_CAST_PTR 
instead of using arithmetic.

Fully deployed the ACPI_PRINTF_LIKE macro. This macro was not being used 
across all "printf-like" internal functions. Also, cleanup all calls to 
such functions (both in 32-bit mode and 64-bit mode) now that they are 
analyzed by the gcc compiler via ACPI_PRINTF_LIKE.


2) iASL Compiler/Disassembler and ACPICA tools:

iASL: implemented a new data table compiler flex/bison front-end. This 
change is internal and is not intended to result in changes to the 
compiled code. This new compiler front-end can be invoked using the -tp 
option for now, until the old mechanism is removed.

ASLTS: Implemented a new data table compiler test suite. This test suite 
generates all table templates and compile/disassemble/re-compile/binary-
compare each file. 

iASL: return -1 if AML files were not generated due to compiler errors

iASL: added a warning on use of the now-legacy ASL Processor () keyword.

iASL: added an error on _UID object declaration that returns a String 
within a Processor () declaration. A _UID for a processor must be an 
Integer.

iASL: added a null terminator to name strings that consist only of 
multiple parent prefixes (^)

iASL: added support to compile both ASL and data table files in a single 
command.

Updated the tool generation project files that were recently migrated to 
MSVC 2017 to eliminate all new warnings. The new project files appear in 
the directory \acpica\generate\msvc2017. This change effectively 
deprecates the older project files in \acpica\generate\msvc9.


----------------------------------------
03 July 2019. Summary of changes for version 20190703:


1) ACPICA kernel-resident subsystem:

Remove legacy module-level support code. There were still some remnants 
of the legacy module-level code executions. Since we no longer support 
this option, this is essentially dead code and has been removed from the 
ACPICA source.

iASL: ensure that _WAK, _PTS, _TTS, and _Sx are declared only at the root 
scope. If these named objects are declared outside the root scope, they 
will not be invoked by any host Operating System.

Clear status of GPEs on first direct enable. ACPI GPEs (other than the EC 
one) can be enabled in two situations. First, the GPEs with existing _Lxx 
and _Exx methods are enabled implicitly by ACPICA during system 
initialization.  Second, the GPEs without these methods (like GPEs listed 
by _PRW objects for wakeup devices) need to be enabled directly by the 
code that is going to use them (e.g. ACPI power management or device 
drivers).

In the former case, if the status of a given GPE is set to start with, 
its handler method (either _Lxx or _Exx) needs to be invoked to take care 
of the events (possibly) signaled before the GPE was enabled. In the 
latter case, however, the first caller of AcpiEnableGpe() for a given GPE 
should not be expected to care about any events that might be signaled 
through it earlier.  In that case, it is better to clear the status of 
the GPE before enabling it, to prevent stale events from triggering 
unwanted actions (like spurious system resume, for example).

For this reason, modify AcpiEvAddGpeReference() to take an additional 
boolean argument indicating whether or not the GPE status needs to be 
cleared when its reference counter changes from zero to one and make 
AcpiEnableGpe() pass TRUE to it through that new argument.


2) iASL Compiler/Disassembler and ACPICA tools:

The tool generation process has been migrated to MSVC 2017, and all 
project files have been upgraded. The new project files appear in the 
directory \acpica\generate\msvc2017. This change effectively deprecates 
the older project files in \acpica\generate\msvc9.

iASL: ensure that _WAK, _PTS, _TTS, and _Sx are declared only at the root 
scope. If these named objects are declared outside the root scope, they 
will not be invoked by any host Operating System

----------------------------------------
09 May 2019. Summary of changes for version 20190509:


1) ACPICA kernel-resident subsystem:

Revert commit  6c43e1a ("ACPICA: Clear status of GPEs before enabling 
them") that causes problems with Thunderbolt controllers to occur if a 
dock device is connected at init time (the xhci_hcd and thunderbolt 
modules crash which prevents peripherals connected through them from 
working). Commit 6c43e1a effectively causes commit ecc1165b8b74 ("ACPICA: 
Dispatch active GPEs at init time") to get undone, so the problem 
addressed by commit ecc1165b8b74 appears again as a result of it.


2) iASL Compiler/Disassembler and ACPICA tools:

Reverted iASL: Additional forward reference detection. This change 
reverts forward reference detection for field declarations. The feature 
unintentionally emitted AML bytecode with incorrect package lengths for 
some ASL code related to Fields and OperationRegions. This malformed AML 
can cause systems to crash
during boot. The malformed AML bytecode is emitted in iASL version 
20190329 and 20190405.

iASL: improve forward reference detection. This change improves forward 
reference detection for named objects inside of scopes. If a parse object 
has the OP_NOT_FOUND_DURING_LOAD set, it means that Op is a reference to 
a named object that is declared later in the AML bytecode. This is 
allowed if the reference is inside of a method and the declaration is 
outside of a method like so:

DefinitionBlock(...)
{
    Method (TEST)
    {
        Return (NUM0)
    }
    Name (NUM0,0)
}

However, if the declaration and reference are both in the same method or 
outside any methods, this is a forward reference and should be marked as 
an error because it would result in runtime errors.

DefinitionBlock(...)
{
    Name (BUFF, Buffer (NUM0) {}) // Forward reference
    Name (NUM0, 0x0)

    Method (TEST)
    {
        Local0 = NUM1
        Name (NUM1, 0x1) // Forward reference
        return (Local0)
    }
}

iASL: Implemented additional buffer overflow analysis for BufferField 
declarations. Check if a buffer index argument to a create buffer field 
operation is beyond the end of the target buffer.

This affects these AML operators:
 
   AML_CREATE_FIELD_OP
   AML_CREATE_BIT_FIELD_OP
   AML_CREATE_BYTE_FIELD_OP
   AML_CREATE_WORD_FIELD_OP
   AML_CREATE_DWORD_FIELD_OP
   AML_CREATE_QWORD_FIELD_OP

 There are three conditions that must be satisfied in order to allow this 
validation at compile time:
 
   1) The length of the target buffer must be an integer constant
   2) The index specified in the create* must be an integer constant
   3) For CreateField, the bit length argument must be non-zero.

Example:
    Name (BUF1, Buffer() {1,2})
    CreateField (BUF1, 7, 9, CF03)  // 3: ERR

dsdt.asl     14:     CreateField (BUF1, 7, 9, CF03)  // 3: ERR
Error    6165 -                           ^ Buffer index beyond end of 
target buffer


----------------------------------------
05 April 2019. Summary of changes for version 20190405:


1) ACPICA kernel-resident subsystem:

Event Manager: History: Commit 18996f2db918 ("ACPICA: Events: Stop 
unconditionally clearing ACPI IRQs during suspend/resume") was added 
earlier to stop clearing of event status bits unconditionally on suspend 
and resume paths. Though this change fixed an issue on suspend path, it 
introduced regressions on several resume paths. In the case of S0ix, 
events are enabled as part of device suspend path. If status bits for the 
events are set when they are enabled, it could result in premature wake 
from S0ix. If status is cleared for any event that is being enabled so 
that any stale events are cleared out. In case of S0ix, events are 
enabled as part of device suspend path. If status bits for the events are 
set when they are enabled, it could result in premature wake from S0ix.

This change ensures that status is cleared for any event that is being 
enabled so that any stale events are cleared out.


2) iASL Compiler/Disassembler and ACPICA tools:

iASL: Implemented an enhanced multiple file compilation that combines 
named objects from all input files to a single namespace. With this 
feature, any unresolved external declarations as well as duplicate named 
object declarations can be detected during compilation rather than 
generating errors much later at runtime. The following commands are 
examples that utilize this feature:
    iasl dsdt.asl ssdt.asl
    iasl dsdt.asl ssdt1.asl ssdt2.asl
    iasl dsdt.asl ssdt*.asl

----------------------------------------
29 March 2019. Summary of changes for version 20190329:


1) ACPICA kernel-resident subsystem:

Namespace support: Remove the address nodes from global list after method 
termination. The global address list contains pointers to namespace nodes 
that represent Operation Regions. This change properly removes Operation 
Region namespace nodes that are declared dynamically during method 
execution.

Linux: Use a different debug default than ACPICA. There was a divergence 
between Linux and the ACPICA codebases. In order to resolve this 
divergence, Linux now declares its own debug default in aclinux.h

Renamed some internal macros to improve code understanding and 
maintenance. The macros below all operate on single 4-character ACPI 
NameSegs, not generic strings (old -> new):
    ACPI_NAME_SIZE    -> ACPI_NAMESEG_SIZE
    ACPI_COMPARE_NAME -> ACPI_COMPARE_NAMESEG
    ACPI_MOVE_NAME    -> ACPI_COPY_NAMESEG

Fix for missing comma in array declaration for the AcpiGbl_GenericNotify 
table.

Test suite: Update makefiles, add PCC operation region support


2) iASL Compiler/Disassembler and Tools:

iASL: Implemented additional illegal forward reference detection. Now 
detect and emit an error upon detection of a forward reference from a 
Field to an Operation Region. This will fail at runtime if allowed to 
pass the compiler.

AcpiExec: Add an address list check for dynamic Operation Regions. This 
feature performs a sanity test for each node the global address list. 
This is done in order to ensure that all dynamic operation regions are 
properly removed from the global address list and no dangling pointers 
are left behind.

Disassembler: Improved generation of resource pathnames. This change 
improves the code that generates resource descriptor and resource tag 
pathnames. The original code used a bunch of str* C library functions 
that caused warnings on some compilers.

iASL: Removed some uses of strncpy and replaced with memmove. The strncpy 
function can overwrite buffers if the calling code is not very careful. 
In the case of generating a module/table header, use of memmove is a 
better implementation.


3) Status of new features that have not been completed at this time:

iASL: Implementing an enhanced multiple file compilation into a single 
namespace feature (Status): This feature will be released soon, and 
allows multiple ASL files to be compiled into the same single namespace. 
By doing so, any unresolved external declarations as well as duplicate 
named object declarations can be detected during compilation (rather than 
later during runtime). The following commands are examples that utilize 
this feature:
    iasl dsdt.asl ssdt.asl
    iasl dsdt.asl ssdt1.asl ssdt2.asl
    iasl dsdt.asl ssdt*.asl

ASL tutorial status: Feedback is being gathered internally and the 
current plan is to publish this tutorial on the ACPICA website after a 
final review by a tech writer.

----------------------------------------
15 February 2019. Summary of changes for version 20190215:


0) Support for ACPI specification version 6.3:

Add PCC operation region support for the AML interpreter. This adds PCC 
operation region support in the AML interpreter and a default handler for 
acpiexec. The change also renames the PCC region address space keyword to 
PlatformCommChannel.

Support for new predefined methods _NBS, _NCH, _NIC, _NIH, and _NIG. 
These methods provide OSPM with health information and device boot 
status.

PDTT: Add TriggerOrder to the PCC Identifier structure. The field value 
defines if the trigger needs to be invoked by OSPM before or at the end 
of kernel crash dump processing/handling operation.

SRAT: Add Generic Affinity Structure subtable. This subtable in the SRAT 
is used for describing devices such as heterogeneous processors, 
accelerators, GPUs, and IO devices with integrated compute or DMA 
engines.

MADT: Add support for statistical profiling in GICC. Statistical 
profiling extension (SPE) is an architecture-specific feature for ARM.

MADT: Add online capable flag. If this bit is set, system hardware 
supports enabling this processor during OS runtime.

New Error Disconnect Recover Notification value. There are a number of 
scenarios where system Firmware in collaboration with hardware may 
disconnect one or more devices from the rest of the system for purposes 
of error containment. Firmware can use this new notification value to 
alert OSPM of such a removal.

PPTT: New additional fields in Processor Structure Flags. These flags 
provide more information about processor topology.

NFIT/Disassembler: Change a field name from "Address Range" to "Region 
Type".

HMAT updates: make several existing fields to be reserved as well as 
rename subtable 0 to "memory proximity domain attributes".

GTDT: Add support for new GTDT Revision 3. This revision adds information 
for the EL2 timer.

iASL: Update the HMAT example template for new fields.

iASL: Add support for the new revision of the GTDT (Rev 3).


1) ACPICA kernel-resident subsystem:

AML Parser: fix the main AML parse loop to correctly skip erroneous 
extended opcodes. AML opcodes come in two lengths: 1-byte opcodes and 2-
byte extended opcodes. If an error occurs during an AML table load, the 
AML parser will continue loading the table by skipping the offending 
opcode. This implements a "load table at any cost" philosophy.


2) iASL Compiler/Disassembler and Tools:

iASL: Add checks for illegal object references, such as a reference 
outside of method to an object within a method. Such an object is only 
temporary.

iASL: Emit error for creation of a zero-length operation region. Such a 
region is rather pointless. If encountered, a runtime error is also 
implemented in the interpeter.

Debugger: Fix a possible fault with the "test objects" command.

iASL: Makefile: support parent directory filenames containing embedded 
spaces.

iASL: Update the TPM2 template to revision 4.

iASL: Add the ability to report specific warnings or remarks as errors.

Disassembler: Disassemble OEMx tables as actual AML byte code. 
Previously, these tables were treated as "unknown table".

iASL: Add definition and disassembly for TPM2 revision 3.

iASL: Add support for TPM2 rev 3 compilation.


----------------------------------------
08 January 2019. Summary of changes for version 20190108:


1) ACPICA kernel-resident subsystem:

Updated all copyrights to 2019. This affects all source code modules.


2) iASL Compiler/Disassembler and Tools:

ASL test suite (ASLTS): Updated all copyrights to 2019.

Tools: Updated all signon copyrights to 2019.

AcpiExec: Added a new option to dump extra information concerning any 
memory leaks detected by the internal object/cache tracking mechanism. -
va

iASL: Updated the table template for the TPM2 table to the newest version 
of the table (Revision 4)


----------------------------------------
13 December 2018. Summary of changes for version 20181213:


1) ACPICA Kernel-resident Subsystem:

Fixed some buffer length issues with the GenericSerialBus, related to two 
of the bidirectional protocols: AttribRawProcessBytes and AttribRawBytes, 
which are rarely seen in the field. For these, the LEN field of the ASL 
buffer is now ignored. Hans de Goede

Implemented a new object evaluation trace mechanism for control methods 
and data objects. This includes nested control methods. It is 
particularly useful for examining the ACPI execution during system 
initialization since the output is relatively terse. The flag below 
enables the output of the trace via the ACPI_DEBUG_PRINT_RAW interface:
   #define ACPI_LV_EVALUATION          0x00080000

Examples:
   Enter evaluation       :  _SB.PCI0._INI (Method)
   Exit evaluation        :  _SB.PCI0._INI
   Enter evaluation       :  _OSI (Method)
   Exit evaluation        :  _OSI
   Enter evaluation       :  _SB.PCI0.TEST (Method)
   Nested method call     :     _SB.PCI0.NST1
   Exit nested method     :     _SB.PCI0.NST1
   Exit evaluation        :  _SB.PCI0.TEST

Added two recently-defined _OSI strings. See 
https://docs.microsoft.com/en-us/windows-hardware/drivers/acpi/winacpi-
osi.
   "Windows 2018"
   "Windows 2018.2"

Update for buffer-to-string conversions via the ToHexString ASL operator. 
A "0x" is now prepended to each of the hex values in the output string. 
This provides compatibility with other ACPI implementations. The ACPI 
specification is somewhat vague on this issue.
   Example output string after conversion: 
"0x01,0x02,0x03,0x04,0x05,0x06"

Return a run-time error for TermArg expressions within individual package 
elements. Although this is technically supported by the ASL grammar, 
other ACPI implementations do not support this either. Also, this fixes a 
fault if this type of construct is ever encountered (it never has been).


2) iASL Compiler/Disassembler and Tools:

iASL: Implemented a new compile option (-ww) that will promote individual 
warnings and remarks to errors. This is intended to enhance the firmware 
build process.

AcpiExec: Implemented a new command-line option (-eo) to support the new 
object evaluation trace mechanism described above.

Disassembler: Added support to disassemble OEMx tables as AML/ASL tables 
instead of a "unknown table" message.

AcpiHelp: Improved support for the "special" predefined names such as 
_Lxx, _Exx, _EJx, _T_x, etc. For these, any legal hex value can now be 
used for "xx" and "x".

----------------------------------------
31 October 2018. Summary of changes for version 20181031:


An Operation Region regression was fixed by properly adding address 
ranges to a global list during initialization. This allows OS to 
accurately check for overlapping regions between native devices (such as 
PCI) and Operation regions as well as checking for region conflicts 
between two Operation Regions.

Added support for the 2-byte extended opcodes in the code/feature that 
attempts to continue parsing during the table load phase. Skip parsing 
Device declarations (and other extended opcodes) when an error occurs 
during parsing. Previously, only single-byte opcodes were supported.

Cleanup: Simplified the module-level code support by eliminating a 
useless global variable (AcpiGbl_GroupModuleLeveCode).


2) iASL Compiler/Disassembler and Tools:

iASL/Preprocessor: Fixed a regression where an incorrect use of ACPI_FREE 
could cause a fault in the preprocessor. This was an inadvertent side-
effect from moving more allocations/frees to the local cache/memory 
mechanism.

iASL: Enhanced error detection by validating that all NameSeg elements 
within a NamePatch actually exist. The previous behavior was spotty at 
best, and such errors could be improperly ignored at compiler time (never 
at runtime, however. There are two new error messages, as shown in the 
examples below:

dsdt.asl     33:     CreateByteField (TTTT.BXXX, 1, CBF1)
Error    6161 -                              ^ One or more objects within 
the Pathname do not exist (TTTT.BXXX)

dsdt.asl     34:     CreateByteField (BUF1, UUUU.INT1, BBBB.CBF1)
Error    6160 -        One or more prefix Scopes do not exist ^  
(BBBB.CBF1)

iASL: Disassembler/table-compiler: Added support for the static data 
table TPM2 revision 3 (an older version of TPM2). The support has been 
added for the compiler and the disassembler.

Fixed compilation of DOS format data table file on Unix/Linux systems. 
iASL now properly detects line continuations (\) for DOS format data 
table definition language files on when executing on Unix/Linux.

----------------------------------------
03 October 2018. Summary of changes for version 20181003:


2) iASL Compiler/Disassembler and Tools:

Fixed a regression introduced in version 20180927 that could cause the 
compiler to fault, especially with NamePaths containing one or more 
carats (^). Such as: ^^_SB_PCI0

Added a new remark for the Sleep() operator when the sleep time operand 
is larger than one second. This is a very long time for the ASL/BIOS code 
and may not be what was intended by the ASL writer.

----------------------------------------
27 September 2018. Summary of changes for version 20180927:


1) ACPICA kernel-resident subsystem:

Updated the GPE support to clear the status of all ACPI events when 
entering any/all sleep states in order to avoid premature wakeups. In 
theory, this may cause some wakeup events to be missed, but the 
likelihood of this is small. This change restores the original behavior 
of the ACPICA code in order to fix a regression seen from the previous 
"Stop unconditionally clearing ACPI IRQs during suspend/resume" change. 
This regression could cause some systems to incorrectly wake immediately.

Updated the execution of the _REG methods during initialization and 
namespace loading to bring the behavior into closer conformance to the 
ACPI specification and other ACPI implementations:

From the ACPI specification 6.2A, section 6.5.4 "_REG (Region):
    "Control methods must assume all operation regions are inaccessible 
until the _REG(RegionSpace, 1) method is executed"

    "The exceptions to this rule are:
1.  OSPM must guarantee that the following operation regions are always 
accessible:
    SystemIO operation regions.
    SystemMemory operation regions when accessing memory returned by the 
System Address Map reporting interfaces."

Since the state of both the SystemIO and SystemMemory address spaces are 
defined by the specification to never change, this ACPICA change ensures 
that now _REG is never called on them. This solves some problems seen in 
the field and provides compatibility with other ACPI implementations. An 
update to the upcoming new version of the ACPI specification will help 
clarify this behavior.

Updated the implementation of support for the Generic Serial Bus. For the 
"bidirectional" protocols, the internal implementation now automatically 
creates a return data buffer of the maximum size (255). This handles the 
worst-case for data that is returned from the serial bus handler, and 
fixes some problems seen in the field. This new buffer is directly 
returned to the ASL. As such, there is no true "bidirectional" buffer, 
which matches the ACPI specification. This is the reason for the "double 
store" seen in the example ASL code in the specification, shown below:

Word Process Call (AttribProcessCall):
    OperationRegion(TOP1, GenericSerialBus, 0x00, 0x100)
    Field(TOP1, BufferAcc, NoLock, Preserve)
    {
        FLD1, 8, // Virtual register at command value 1.
    }

    Name(BUFF, Buffer(20){}) // Create GenericSerialBus data buffer
                             // as BUFF
    CreateWordField(BUFF, 0x02, DATA) // DATA = Data (Word)

    Store(0x5416, DATA)               // Save 0x5416 into the data buffer
    Store(Store(BUFF, FLD1), BUFF)    // Invoke a write/read Process Call 
transaction
                           // This is the "double store". The write to
                           // FLD1 returns a new buffer, which is stored
                           // back into BUFF with the second Store.


2) iASL Compiler/Disassembler and Tools:

iASL: Implemented detection of extraneous/redundant uses of the Offset() 
operator within a Field Unit list. A remark is now issued for these. For 
example, the first two of the Offset() operators below are extraneous. 
Because both the compiler and the interpreter track the offsets 
automatically, these Offsets simply refer to the current offset and are 
unnecessary. Note, when optimization is enabled, the iASL compiler will 
in fact remove the redundant Offset operators and will not emit any AML 
code for them.

    OperationRegion (OPR1, SystemMemory, 0x100, 0x100)
    Field (OPR1)
    {
        Offset (0),     // Never needed
        FLD1, 32,
        Offset (4),     // Redundant, offset is already 4 (bytes)
        FLD2, 8,
        Offset (64),    // OK use of Offset.
        FLD3, 16,
    }
dsdt.asl     14:         Offset (0),
Remark   2158 -                 ^ Unnecessary/redundant use of Offset 
operator

dsdt.asl     16:         Offset (4),
Remark   2158 -                 ^ Unnecessary/redundant use of Offset 
operator

----------------------------------------
10 August 2018. Summary of changes for version 20180810:


1) ACPICA kernel-resident subsystem:

Initial ACPI table loading: Attempt to continue loading ACPI tables 
regardless of malformed AML. Since migrating table initialization to the 
new module-level code support, the AML interpreter rejected tables upon 
any ACPI error encountered during table load. This is a problem because 
non-serious ACPI errors during table load do not necessarily mean that 
the entire definition block (DSDT or SSDT) is invalid. This change 
improves the table loading by ignoring some types of errors that can be 
generated by incorrect AML. This can range from object type errors, scope 
errors, and index errors.

Suspend/Resume support: Update to stop unconditionally clearing ACPI IRQs 
during suspend/resume. The status of ACPI events is no longer cleared 
when entering the ACPI S5 system state (power off) which caused some 
systems to power up immediately after turning off power in certain 
situations. This was a functional regression. It was fixed by clearing 
the status of all ACPI events again when entering S5 (for system-wide 
suspend or hibernation the clearing of the status of all events is not 
desirable, as it might cause the kernel to miss wakeup events sometimes). 
Rafael Wysocki.


2) iASL Compiler/Disassembler and Tools:

AcpiExec: Enhanced the -fi option (Namespace initialization file). Field 
elements listed in the initialization file were previously initialized 
after the table load and before executing module-level code blocks. 
Recent changes in the module-level code support means that the table load 
becomes a large control method execution. If fields are used within 
module-level code and we are executing with the -fi option, the 
initialization values were used to initialize the namespace object(s) 
only after the table was finished loading. This change Provides an early 
initialization of objects specified in the initialization file so that 
field unit values are populated during the table load (not after the 
load).

AcpiExec: Fixed a small memory leak regression that could result in 
warnings during exit of the utility. These warnings were similar to 
these:
    0002D690 Length 0x0006 nsnames-0502 [Not a Descriptor - too small]
    0002CD70 Length 0x002C utcache-0453 [Operand] Integer RefCount 0x0001

----------------------------------------
29 June 2018. Summary of changes for version 20180629:


1) iASL Compiler/Disassembler and Tools:

iASL: Fixed a regression related to the use of the ASL External 
statement. Error checking for the use of the External() statement has 
been relaxed. Previously, a restriction on the use of External meant that 
the referenced named object was required to be defined in a different 
table (an SSDT). Thus it would be an error to declare an object as an 
external and then define the same named object in the same table. For 
example:
    DefinitionBlock (...)
    {
        External (DEV1)
        Device (DEV1){...} // This was an error
    }
However, this behavior has caused regressions in some existing ASL code, 
because there is code that depends on named objects and externals (with 
the same name) being declared in the same table. This change will allow 
the ASL code above to compile without errors or warnings.

iASL: Implemented ASL language extensions for four operators to make some 
of their arguments optional instead of required:
    1) Field (RegionName, AccessType, LockRule, UpdateRule)
    2) BankField (RegionName, BankName, BankValue,
                AccessType, LockRule, UpdateRule)
    3) IndexField (IndexName, DataName,
                AccessType, LockRule, UpdateRule)
For the Field operators above, the AccessType, LockRule, and UpdateRule 
are now optional arguments. The default values are:
        AccessType: AnyAcc
        LockRule:   NoLock
        UpdateRule: Preserve
    4) Mutex (MutexName, SyncLevel)
For this operator, the SyncLevel argument is now optional. This argument 
is rarely used in any meaningful way by ASL code, and thus it makes sense 
to make it optional. The default value is:
        SyncLevel:  0

iASL: Attempted use of the ASL Unload() operator now results in the 
following warning:
    "Unload is not supported by all operating systems"
This is in fact very true, and the Unload operator may be completely 
deprecated in the near future.

AcpiExec: Fixed a regression for the -fi option (Namespace initialization 
file. Recent changes in the ACPICA module-level code support altered the 
table load/initialization sequence . This means that the table load has 
become a large method execution of the table itself. If Operation Region 
Fields are used within any module-level code and the -fi option was 
specified, the initialization values were populated only after the table 
had completely finished loading (and thus the module-level code had 
already been executed). This change moves the initialization of objects 
listed in the initialization file to before the table is executed as a 
method. Field unit values are now initialized before the table execution 
is performed.

----------------------------------------
31 May 2018. Summary of changes for version 20180531:


1) ACPICA kernel-resident Subsystem:

Implemented additional support to help ensure that a DSDT or SSDT is 
fully loaded even if errors are incurred during the load. The majority of 
the problems that are seen is the failure of individual AML operators 
that occur during execution of any module-level code (MLC) existing in 
the table. This support adds a mechanism to abort the current ASL 
statement (AML opcode), emit an error message, and to simply move on to 
the next opcode -- instead of aborting the entire table load. This is 
different than the execution of a control method where the entire method 
is aborted upon any error. The goal is to perform a very "best effort" to 
load the ACPI tables. The most common MLC errors that have been seen in 
the field are direct references to unresolved ASL/AML symbols (referenced 
directly without the use of the CondRefOf operator to validate the 
symbol). This new ACPICA behavior is now compatible with other ACPI 
implementations.

Interpreter: The Unload AML operator is no longer supported for the 
reasons below. An AE_NOT_IMPLEMENTED exception is returned.
1) A correct implementation on at least some hosts may not be possible.
2) Other ACPI implementations do not correctly/fully support it.
3) It requires host device driver support which is not known to exist.
    (To properly support namespace unload out from underneath.)
4) This AML operator has never been seen in the field.

Parser: Added a debug option to dump AML parse sub-trees as they are 
being executed. Used with ACPI_DEBUG_PRINT, the enabling debug level is 
ACPI_DB_PARSE_TREES.

Debugger: Reduced the verbosity for errors incurred during table load and 
module-level code execution.

Completed an investigation into adding a namespace node "owner list" 
instead of the current "owner ID" associated with namespace nodes. This 
list would link together all nodes that are owned by an individual 
control method. The purpose would be to enhance control method execution 
by speeding up cleanup during method exit (all namespace nodes created by 
a method are deleted upon method termination.) Currently, the entire 
namespace must be searched for matching owner IDs if (and only if) the 
method creates named objects outside of the local scope. However, by far 
the most common case is that methods create objects locally, not outside 
the method scope. There is already an ACPICA optimization in place that 
only searches the entire namespace in the rare case of a method creating 
objects elsewhere in the namespace. Therefore, it is felt that the 
overhead of adding an additional pointer to each namespace node to 
implement the owner list makes this feature unnecessary.


2) iASL Compiler/Disassembler and Tools:

iASL, Disassembler, and Template generator: Implemented support for 
Revision D of the IORT table. Adds a new subtable that is used to specify 
SMMUv3 PMCGs. rmurphy-arm.

Disassembler: Restored correct table header validation for the "special" 
ACPI tables -- RSDP and FACS. These tables do not contain a standard ACPI 
table header and must be special-cased. This was a regression that has 
been present for apparently a long time.

AcpiExec: Reduced verbosity of the local exception handler implemented 
within acpiexec. This handler is invoked by ACPICA upon any exceptions 
generated during control method execution. A new option was added: -vh 
restores the original verbosity level if desired.

AcpiExec: Changed the default base from decimal to hex for the -x option 
(set debug level). This simplifies the use of this option and matches the 
behavior of the corresponding iASL -x option.

AcpiExec: Restored a force-exit on multiple control-c (sigint) 
interrupts. This allows program termination even if other issues cause 
the control-c to fail.

ASL test suite (ASLTS): Added tests for the recently implemented package 
element resolution mechanism that allows forward references to named 
objects from individual package elements (this mechanism provides 
compatibility with other ACPI implementations.)


----------------------------------------
8 May 2018. Summary of changes for version 20180508:


1) ACPICA kernel-resident subsystem:

Completed the new (recently deployed) package resolution mechanism for 
the Load and LoadTable ASL/AML operators. This fixes a regression that 
was introduced in version 20180209 that could result in an 
AE_AML_INTERNAL exception during the loading of a dynamic ACPI/AML table 
(SSDT) that contains package objects.


2) iASL Compiler/Disassembler and Tools:

AcpiDump and AcpiXtract: Implemented support for ACPI tables larger than 
1 MB. This change allows for table offsets within the acpidump file to be 
up to 8 characters. These changes are backwards compatible with existing 
acpidump files.


----------------------------------------
27 April 2018. Summary of changes for version 20180427: 


1) ACPICA kernel-resident subsystem:

Debugger: Added support for Package objects in the "Test Objects" 
command. This command walks the entire namespace and evaluates all named 
data objects (Integers, Strings, Buffers, and now Packages).

Improved error messages for the namespace root node. Originally, the root 
was referred to by the confusing string "\___". This has been replaced by 
"Namespace Root" for clarification.

Fixed a potential infinite loop in the AcpiRsDumpByteList function. Colin 
Ian King <colin.king@canonical.com>.


2) iASL Compiler/Disassembler and Tools: 

iASL: Implemented support to detect and flag illegal forward references. 
For compatibility with other ACPI implementations, these references are 
now illegal at the root level of the DSDT or SSDTs. Forward references 
have always been illegal within control methods. This change should not 
affect existing ASL/AML code because of the fact that these references 
have always been illegal in the other ACPI implementation.

iASL: Added error messages for the case where a table OEM ID and OEM 
TABLE ID strings are longer than the ACPI-defined length. Previously, 
these strings were simply silently truncated.

iASL: Enhanced the -tc option (which creates an AML hex file in C, 
suitable for import into a firmware project):
  1) Create a unique name for the table, to simplify use of multiple 
SSDTs.
  2) Add a protection #ifdef in the file, similar to a .h header file.
With assistance from Sami Mujawar, sami.mujawar@arm.com and Evan Lloyd, 
evan.lloyd@arm.com

AcpiExec: Added a new option, -df, to disable the local fault handler. 
This is useful during debugging, where it may be desired to drop into a 
debugger on a fault.

----------------------------------------
13 March 2018. Summary of changes for version 20180313:


1) ACPICA kernel-resident subsystem:

Implemented various improvements to the GPE support:

1) Dispatch all active GPEs at initialization time so that no GPEs are 
lost.
2) Enable runtime GPEs earlier. Some systems expect GPEs to be enabled 
before devices are enumerated.
3) Don't unconditionally clear ACPI IRQs during suspend/resume, so that 
IRQs are not lost.
4) Add parallel GPE handling to eliminate the possibility of dispatching 
the same GPE twice.
5) Dispatch any pending GPEs after enabling for the first time.

AcpiGetObjectInfo - removed support for the _STA method. This was causing 
problems on some platforms.

Added a new _OSI string, "Windows 2017.2".

Cleaned up and simplified the module-level code support. These changes 
are in preparation for the eventual removal of the legacy MLC support 
(deferred execution), replaced by the new MLC architecture which executes 
the MLC as a table is loaded (DSDT/SSDTs).

Changed a compile-time option to a runtime option. Changes the option to 
ignore ACPI table load-time package resolution errors into a runtime 
option. Used only for platforms that generate many AE_NOT_FOUND errors 
during boot. AcpiGbl_IgnorePackageResolutionErrors.

Fixed the ACPI_ERROR_NAMESPACE macro. This change involves putting some 
ACPI_ERROR_NAMESPACE parameters inside macros. By doing so, we avoid 
compilation errors from unused variables (seen with some compilers).


2) iASL Compiler/Disassembler and Tools:

ASLTS: parallelized execution in order to achieve an (approximately) 2X 
performance increase.

ASLTS: Updated to use the iASL __LINE__ and __METHOD__ macros. Improves 
error reporting.

----------------------------------------
09 February 2018. Summary of changes for version 20180209:


1) ACPICA kernel-resident subsystem:

Completed the final integration of the recent changes to Package Object 
handling and the module-level AML code support. This allows forward 
references from individual package elements when the package object is 
declared from within module-level code blocks. Provides compatibility 
with other ACPI implementations.

The new architecture for the AML module-level code has been completed and 
is now the default for the ACPICA code. This new architecture executes 
the module-level code in-line as the ACPI table is loaded/parsed instead 
of the previous architecture which deferred this code until after the 
table was fully loaded. This solves some ASL code ordering issues and 
provides compatibility with other ACPI implementations. At this time, 
there is an option to fallback to the earlier architecture, but this 
support is deprecated and is planned to be completely removed later this 
year.

Added a compile-time option to ignore AE_NOT_FOUND exceptions during 
resolution of named reference elements within Package objects. Although 
this is potentially a serious problem, it can generate a lot of 
noise/errors on platforms whose firmware carries around a bunch of unused 
Package objects. To disable these errors, define 
ACPI_IGNORE_PACKAGE_RESOLUTION_ERRORS in the OS-specific header. All 
errors are always reported for ACPICA applications such as AcpiExec.

Fixed a regression related to the explicit type-conversion AML operators 
(ToXXXX). The regression was introduced early in 2017 but was not seen 
until recently because these operators are not fully supported by other 
ACPI implementations and are thus rarely used by firmware developers. The 
operators are defined by the ACPI specification to not implement the 
"implicit result object conversion". The regression incorrectly 
introduced this object conversion for the following explicit conversion 
operators:
    ToInteger
    ToString
    ToBuffer
    ToDecimalString
    ToHexString
    ToBCD
    FromBCD


2) iASL Compiler/Disassembler and Tools:

iASL: Fixed a problem with the compiler constant folding feature as 
related to the ToXXXX explicit conversion operators. These operators do 
not support the "implicit result object conversion" by definition. Thus, 
ASL expressions that use these operators cannot be folded to a simple 
Store operator because Store implements the implicit conversion. This 
change uses the CopyObject operator for the ToXXXX operator folding 
instead. CopyObject is defined to not implement implicit result 
conversions and is thus appropriate for folding the ToXXXX operators.

iASL: Changed the severity of an error condition to a simple warning for 
the case where a symbol is declared both locally and as an external 
symbol. This accommodates existing ASL code.

AcpiExec: The -ep option to enable the new architecture for module-level 
code has been removed. It is replaced by the -dp option which instead has 
the opposite effect: it disables the new architecture (the default) and 
enables the legacy architecture. When the legacy code is removed in the 
future, the -dp option will be removed also.

----------------------------------------
05 January 2018. Summary of changes for version 20180105:


1) ACPICA kernel-resident subsystem:

Updated all copyrights to 2018. This affects all source code modules.

Fixed a possible build error caused by an unresolved reference to the 
AcpiUtSafeStrncpy function.

Removed NULL pointer arithmetic in the various pointer manipulation 
macros. All "(void *) NULL" constructs are converted to "(void *) 0". 
This eliminates warnings/errors in newer C compilers. Jung-uk Kim.

Added support for A32 ABI compilation, which uses the ILP32 model. Anuj 
Mittal.


2) iASL Compiler/Disassembler and Tools:

ASLTS: Updated all copyrights to 2018.

Tools: Updated all signon copyrights to 2018.

AcpiXtract: Fixed a regression related to ACPI table signatures where the 
signature was truncated to 3 characters (instead of 4).

AcpiExec: Restore the original terminal mode after the use of the -v and 
-vd options.

ASLTS: Deployed the iASL __METHOD__ macro across the test suite.

----------------------------------------
14 December 2017. Summary of changes for version 20171214:


1) ACPICA kernel-resident subsystem:

Fixed a regression in the external (public) AcpiEvaluateObjectTyped 
interface where the optional "pathname" argument had inadvertently become 
a required argument returning an error if omitted (NULL pointer 
argument).

Fixed two possible memory leaks related to the recently developed "late 
resolution" of reference objects within ASL Package Object definitions.

Added two recently defined _OSI strings: "Windows 2016" and "Windows 
2017". Mario Limonciello.

Implemented and deployed a safer version of the C library function 
strncpy:  AcpiUtSafeStrncpy. The intent is to at least prevent the 
creation of unterminated strings as a possible result of a standard 
strncpy.

Cleaned up and restructured the global variable file (acglobal.h). There 
are many changes, but no functional changes.


2) iASL Compiler/Disassembler and Tools:

iASL Table Compiler: Fixed a problem with the DBG2 ACPI table where the 
optional OemData field at the end of the table was incorrectly required 
for proper compilation. It is now correctly an optional field.

ASLTS: The entire suite was converted from standard ASL to the ASL+ 
language, using the ASL-to-ASL+ converter which is integrated into the 
iASL compiler. A binary compare of all output files has verified the 
correctness of the conversion.

iASL: Fixed the source code build for platforms where "char" is unsigned. 
This affected the iASL lexer only. Jung-uk Kim.

----------------------------------------
10 November 2017. Summary of changes for version 20171110:


1) ACPICA kernel-resident subsystem:

This release implements full support for ACPI 6.2A:
    NFIT - Added a new subtable, "Platform Capabilities Structure"
No other changes to ACPICA were required, since ACPI 6.2A is primarily an 
errata release of the specification.

Other ACPI table changes:
    IORT: Added the SMMUv3 Device ID mapping index. Hanjun Guo
    PPTT: Added cache attribute flag definitions to actbl1.h. Jeremy 
Linton

Utilities: Modified the string/integer conversion functions to use 
internal 64-bit divide support instead of a native divide. On 32-bit 
platforms, a 64-bit divide typically requires a library function which 
may not be present in the build (kernel or otherwise).

Implemented a targeted error message for timeouts returned from the 
Embedded Controller device driver. This is seen frequently enough to 
special-case an AE_TIME returned from an EC operation region access:
    "Timeout from EC hardware or EC device driver"

Changed the "ACPI Exception" message prefix to "ACPI Error" so that all 
runtime error messages have the identical prefix.


2) iASL Compiler/Disassembler and Tools:

AcpiXtract: Fixed a problem with table header detection within the 
acpidump file. Processing a table could be ended early if a 0x40 (@) 
appears in the original binary table, resulting in the @ symbol appearing 
in the decoded ASCII field at the end of the acpidump text line. The 
symbol caused acpixtract to incorrectly think it had reached the end of 
the current table and the beginning of a new table.

AcpiXtract: Added an option (-f) to ignore some errors during table 
extraction. This initial implementation ignores non-ASCII and non-
printable characters found in the acpidump text file.

TestSuite(ASLTS)/AcpiExec: Fixed and restored the memory usage statistics 
for ASLTS. This feature is used to track memory allocations from 
different memory caches within the ACPICA code. At the end of an ASLTS 
run, these memory statistics are recorded and stored in a log file.

Debugger (user-space version): Implemented a simple "Background" command. 
Creates a new thread to execute a control method in the background, while 
control returns to the debugger prompt to allow additional commands.
    Syntax: Background <Namepath> [Arguments]

----------------------------------------
29 September 2017. Summary of changes for version 20170929:


1) ACPICA kernel-resident subsystem:

Redesigned and implemented an improved ASL While() loop timeout 
mechanism. This mechanism is used to prevent infinite loops in the kernel 
AML interpreter caused by either non-responsive hardware or incorrect AML 
code. The new implementation uses AcpiOsGetTimer instead of a simple 
maximum loop count, and is thus more accurate and constant across 
different machines. The default timeout is currently 30 seconds, but this 
may be adjusted later.

Renamed the ACPI_AML_INFINITE_LOOP exception to AE_AML_LOOP_TIMEOUT to 
better reflect the new implementation of the loop timeout mechanism.

Updated the AcpiGetTimerDuration interface to cleanup the 64-bit support 
and to fix an off-by-one error. Jung-uk Kim.

Fixed an EFI build problem by updating the makefiles to for a new file 
that was added, utstrsuppt.c


2) iASL Compiler/Disassembler and Tools:

Implemented full support for the PDTT, SDEV, and TPM2 ACPI tables. This 
includes support in the table disassembler, compiler, and template 
generator.

iASL: Added an exception for an illegal type of recursive method 
invocation. If a method creates named objects, the first recursive call 
will fail at runtime. This change adds an error detection at compile time 
to catch the problem up front. Note: Marking such a method as 
"serialized" will not help with this problem, because the same thread can 
acquire the method mutex more than once. Example compiler and runtime 
output:

    Method (MTH1)
    {
        Name (INT1, 1)
        MTH1 ()
    }

    dsdt.asl     22: MTH1 ()
    Error    6152 -  ^ Illegal recursive call to method
                       that creates named objects (MTH1)

Previous runtime exception:
    ACPI Error: [INT1] Namespace lookup failure,
    AE_ALREADY_EXISTS (20170831/dswload2-465)

iASL: Updated support for External() opcodes to improve namespace 
management and error detection. These changes are related to issues seen 
with multiple-segment namespace pathnames within External declarations, 
such as below:

    External(\_SB.PCI0.GFX0, DeviceObj)
    External(\_SB.PCI0.GFX0.ALSI)

iASL: Implemented support for multi-line error/warning messages. This 
enables more detailed and helpful error messages as below, from the 
initial deployment for the duplicate names error:

    DSDT.iiii   1692:       Device(PEG2) {
    Error    6074 -                  ^ Name already exists in scope 
(PEG2)

        Original name creation/declaration below:
        DSDT.iiii     93:   External(\_SB.PCI0.PEG2, DeviceObj)

AcpiXtract: Added additional flexibility to support differing input hex 
dump formats. Specifically, hex dumps that contain partial disassembly 
and/or comments within the ACPI table data definition. There exist some 
dump utilities seen in the field that create this type of hex dump (such 
as Simics). For example:

    DSDT @ 0xdfffd0c0 (10999 bytes)
        Signature DSDT
        Length 10999
        Revision 1
        Checksum 0xf3 (Ok)
        OEM_ID BXPC
        OEM_table_id BXDSDT
        OEM_revision 1
        Creator_id 1280593481
        Creator_revision 537399345
      0000: 44 53 44 54 f7 2a 00 00 01 f3 42 58 50 43 00 00
      ...
      2af0: 5f 4c 30 46 00 a4 01

Test suite: Miscellaneous changes/fixes:
    More cleanup and simplification of makefiles
    Continue compilation of test cases after a compile failure
    Do not perform binary compare unless both files actually exist

iASL: Performed some code/module restructuring. Moved all memory 
allocation functions to new modules. Two new files, aslallocate.c and 
aslcache.c

----------------------------------------
31 August 2017. Summary of changes for version 20170831:


1) ACPICA kernel-resident subsystem:

Implemented internal support for full 64-bit addresses that appear in all 
Generic Address Structure (GAS) structures. Previously, only the lower 32 
bits were used. Affects the use of GAS structures in the FADT and other 
tables, as well as the GAS structures passed to the AcpiRead and 
AcpiWrite public external interfaces that are used by drivers. Lv Zheng.

Added header support for the PDTT ACPI table (Processor Debug Trigger 
Table). Full support in the iASL Data Table Compiler and disassembler is 
forthcoming.


2) iASL Compiler/Disassembler and Tools:

iASL/Disassembler: Fixed a problem with the PPTT ACPI table (Processor 
Properties Topology Table) where a flag bit was specified in the wrong 
bit position ("Line Size Valid", bit 6).

iASL: Implemented support for Octal integer constants as defined by the 
ASL language grammar, per the ACPI specification. Any integer constant 
that starts with a zero is an octal constant. For example,
    Store (037777, Local0) /* Octal constant */
    Store (0x3FFF, Local0) /* Hex equivalent */
    Store (16383,  Local0) /* Decimal equivalent */

iASL: Improved overflow detection for 64-bit string conversions during 
compilation of integer constants. "Overflow" in this case means a string 
that represents an integer that is too large to fit into a 64-bit value. 
Any 64-bit constants within a 32-bit DSDT or SSDT are still truncated to 
the low-order 32 bits with a warning, as previously implemented. Several 
new exceptions are defined that indicate a 64-bit overflow, as well as 
the base (radix) that was used during the attempted conversion. Examples:
    Local0 = 0xAAAABBBBCCCCDDDDEEEEFFFF        // AE_HEX_OVERFLOW
    Local0 = 01111222233334444555566667777     // AE_OCTAL_OVERFLOW
    Local0 = 11112222333344445555666677778888  // AE_DECIMAL_OVERFLOW

iASL: Added a warning for the case where a ResourceTemplate is declared 
with no ResourceDescriptor entries (coded as "ResourceTemplate(){}"). In 
this case, the resulting template is created with a single END_TAG 
descriptor, which is essentially useless.

iASL: Expanded the -vw option (ignore specific warnings/remarks) to 
include compilation error codes as well.

----------------------------------------
28 July 2017. Summary of changes for version 20170728:


1) ACPICA kernel-resident subsystem:

Fixed a regression seen with small resource descriptors that could cause 
an inadvertent AE_AML_NO_RESOURCE_END_TAG exception.

AML interpreter: Implemented a new feature that allows forward references 
from individual named references within package objects that are 
contained within blocks of "module-level code". This provides 
compatibility with other ACPI implementations and supports existing 
firmware that depends on this feature. Example:

    Name (ABCD, 1)
    If (ABCD)                       /* An If() at module-level */
    {
        Name (PKG1, Package()
        {
            INT1                    /* Forward reference to object INT1 
*/
        })
        Name (INT1, 0x1234)
    }

AML Interpreter: Fixed a problem with the Alias() operator where aliases 
to some ASL objects were not handled properly. Objects affected are: 
Mutex, Event, and OperationRegion.

AML Debugger: Enhanced to properly handle AML Alias objects. These 
objects have one level of indirection which was not fully supported by 
the debugger.

Table Manager: Added support to detect and ignore duplicate SSDTs within 
the XSDT/RSDT. This error in the XSDT has been seen in the field.

EFI and EDK2 support:
    Enabled /WX flag for MSVC builds
    Added support for AcpiOsStall, AcpiOsSleep, and AcpiOsGetTimer
    Added local support for 64-bit multiply and shift operations
    Added support to compile acpidump.efi on Windows
    Added OSL function stubs for interfaces not used under EFI

Added additional support for the _DMA predefined name. _DMA returns a 
buffer containing a resource template. This change add support within the 
resource manager (AcpiWalkResourceBuffer) to walk and parse this list of 
resource descriptors. Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>


2) iASL Compiler/Disassembler and Tools:

iASL: Fixed a problem where the internal input line buffer(s) could 
overflow if there are very long lines in the input ASL source code file. 
Implemented buffer management that automatically increases the size of 
the buffers as necessary.

iASL: Added an option (-vx) to "expect" particular remarks, warnings and 
errors. If the specified exception is not raised during compilation, the 
compiler emits an error. This is intended to support the ASL test suite, 
but may be useful in other contexts.

iASL: Implemented a new predefined macro, __METHOD__, which returns a 
string containing the name of the current control method that is being 
compiled.

iASL: Implemented debugger and table compiler support for the SDEI ACPI 
table (Software Delegated Exception Interface). James Morse 
<james.morse@arm.com>

Unix/Linux makefiles: Added an option to disable compile optimizations. 
The disable occurs when the NOOPT flag is set to TRUE. 
theracermaster@gmail.com

Acpidump: Added support for multiple DSDT and FACS tables. This can occur 
when there are different tables for 32-bit versus 64-bit.

Enhanced error reporting for the ASL test suite (ASLTS) by removing 
unnecessary/verbose text, and emit the actual line number where an error 
has occurred. These changes are intended to improve the usefulness of the 
test suite.

----------------------------------------
29 June 2017. Summary of changes for version 20170629:


1) ACPICA kernel-resident subsystem:

Tables: Implemented a deferred ACPI table verification. This is useful 
for operating systems where the tables cannot be verified in the early 
initialization stage due to early memory mapping limitations on some 
architectures. Lv Zheng.

Tables: Removed the signature validation for dynamically loaded tables. 
Provides compatibility with other ACPI implementations. Previously, only 
SSDT tables were allowed, as per the ACPI specification. Now, any table 
signature can be used via the Load() operator. Lv Zheng.

Tables: Fixed several mutex issues that could cause errors during table 
acquisition. Lv Zheng.

Tables: Fixed a problem where an ACPI warning could be generated if a 
null pointer was passed to the AcpiPutTable interface. Lv Zheng.

Tables: Added a mechanism to handle imbalances for the AcpiGetTable and 
AcpiPutTable interfaces. This applies to the "late stage" table loading 
when the use of AcpiPutTable is no longer required (since the system 
memory manager is fully running and available). Lv Zheng.

Fixed/Reverted a regression during processing of resource descriptors 
that contain only a single EndTag. Fixes an AE_AML_NO_RESOURCE_END_TAG 
exception in this case.

Headers: IORT/SMMU support: Updated the SMMU models for Revision C of the 
I/O Remapping specification. Robin Murphy <robin.murphy@arm.com>

Interpreter: Fixed a possible fault if an Alias operator with an invalid 
or duplicate target is encountered during Alias creation in 
AcpiExCreateAlias. Alex James <theracermaster@gmail.com>

Added an option to use designated initializers for function pointers. 
Kees Cook <keescook@google.com>


2) iASL Compiler/Disassembler and Tools:

iASL: Allow compilation of External declarations with target pathnames 
that refer to existing named objects within the table. Erik Schmauss.

iASL: Fixed a regression when compiling FieldUnits. Fixes an error if a 
FieldUnit name also is declared via External in the same table. Erik 
Schmauss.

iASL: Allow existing scope names within pathnames used in External 
statements. For example:
    External (ABCD.EFGH) // ABCD exists, but EFGH is truly external
    Device (ABCD)

iASL: IORT ACPI table: Implemented changes required to decode the new 
Proximity Domain for the SMMUv3 IORT. Disassembler and Data Table 
compiler. Ganapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>

Disassembler: Don't abort disassembly on errors from External() 
statements. Erik Schmauss.

Disassembler: fixed a possible fault when one of the Create*Field 
operators references a Resource Template. ACPICA Bugzilla 1396.

iASL: In the source code, resolved some naming inconsistences across the 
parsing support. Fixes confusion between "Parse Op" and "Parse Node". 
Adds a new file, aslparseop.c

----------------------------------------
31 May 2017. Summary of changes for version 20170531:


0) ACPI 6.2 support:

The ACPI specification version 6.2 has been released and is available at
http://uefi.org/specifications

This version of ACPICA fully supports the ACPI 6.2 specification. Changes 
are summarized below.

New ACPI tables (Table Compiler/Disassembler/Templates):
    HMAT (Heterogeneous Memory Attributes Table)
    WSMT (Windows SMM Security Mitigation Table)
    PPTT (Processor Properties Topology Table)

New subtables for existing ACPI tables:
    HEST (New subtable, Arch-deferred machine check)
    SRAT (New subtable, Arch-specific affinity structure)
    PCCT (New subtables, Extended PCC subspaces (types 3 and 4))

Simple updates for existing ACPI tables:
    BGRT (two new flag bits)
    HEST (New bit defined for several subtables, GHES_ASSIST)

New Resource Descriptors and Resource macros (Compiler/Disassembler):
    PinConfig()
    PinFunction()
    PinGroup()
    PinGroupConfig()
    PinGroupFunction()
    New type for hardware error notification (section 18.3.2.9)

New predefined names/methods (Compiler/Interpreter):
    _HMA (Heterogeneous Memory Attributes)
    _LSI (Label Storage Information)
    _LSR (Label Storage Read)
    _LSW (Label Storage Write)

ASL grammar/macro changes (Compiler):
    For() ASL macro, implemented with the AML while operator
    Extensions to Concatenate operator
    Support for multiple definition blocks in same ASL file
    Clarification for Buffer operator
    Allow executable AML code underneath all scopes (Devices, etc.)
    Clarification/change for the _OSI return value
    ASL grammar update for reference operators
    Allow a zero-length string for AML filename in DefinitionBlock

Miscellaneous:
    New device object notification value
    Remove a notify value (0x0C) for graceful shutdown
    New UUIDs for processor/cache properties and
        physical package property
    New _HID, ACPI0014 (Wireless Power Calibration Device)


1) ACPICA kernel-resident subsystem:

Added support to disable ACPI events on hardware-reduced platforms. 
Eliminates error messages of the form "Could not enable fixed event". Lv 
Zheng

Fixed a problem using Device/Thermal objects with the ObjectType and 
DerefOf ASL operators. This support had not been fully/properly 
implemented.

Fixed a problem where if a Buffer object containing a resource template 
was longer than the actual resource template, an error was generated -- 
even though the AML is legal. This case has been seen in the field.

Fixed a problem with the header definition of the MADT PCAT_COMPAT flag. 
The values for DUAL_PIC and MULTIPLE_APIC were reversed.

Added header file changes for the TPM2 ACPI table. Update to new version 
of the TCG specification. Adds a new TPM2 subtable for ARM SMC.

Exported the external interfaces AcpiAcquireMutex and AcpiReleaseMutex. 
These interfaces are intended to be used only in conjunction with the 
predefined _DLM method (Device Lock Method). "This object appears in a 
device scope when AML access to the device must be synchronized with the 
OS environment".

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: 143.1K Code, 60.0K Data, 203.1K Total
    Debug Version:     204.0K Code, 84.3K Data, 288.3K Total
  Previous Release:
    Non-Debug Version: 141.7K Code, 58.5K Data, 200.2K Total
    Debug Version:     207.5K Code, 82.7K Data, 290.2K Total


2) iASL Compiler/Disassembler and Tools:

iASL: Fixed a problem where an External() declaration could not refer to 
a Field Unit. Erik Schmauss.

Disassembler: Improved support for the Switch/Case operators. This 
feature will disassemble AML code back to the original Switch operators 
when possible, instead of an If..Else sequence. David Box

iASL and disassembler: Improved the handling of multiple extraneous 
parentheses for both ASL input and disassembled ASL output.

Improved the behavior of the iASL compiler and disassembler to detect 
improper use of external declarations

Disassembler: Now aborts immediately upon detection of an unknown AML 
opcode. The AML parser has no real way to recover from this, and can 
result in the creation of an ill-formed parse tree that causes errors 
later during the disassembly.

All tools: Fixed a problem where the Unix application OSL did not handle 
control-c correctly. For example, a control-c could incorrectly wake the 
debugger.

AcpiExec: Improved the Control-C handling and added a handler for 
segmentation faults (SIGSEGV). Supports both Windows and Unix-like 
environments.

Reduced the verbosity of the generic unix makefiles. Previously, each 
compilation displayed the full set of compiler options. This has been 
eliminated as the options are easily inspected within the makefiles. Each 
compilation now results in a single line of output.

----------------------------------------
03 March 2017. Summary of changes for version 20170303:


0) ACPICA licensing:

The licensing information at the start of each source code module has 
been updated. In addition to the Intel license, the dual GPLv2/BSD 
license has been added for completeness. Now, a single version of the 
source code should be suitable for all ACPICA customers. This is the 
major change for this release since it affects all source code modules.


1) ACPICA kernel-resident subsystem: 

Fixed two issues with the common asltypes.h header that could cause 
problems in some environments: (Kim Jung-uk)
    Removed typedef for YY_BUFFER_STATE ?
       Fixes an error with earlier versions of Flex.
    Removed use of FILE typedef (which is only defined in stdio.h)


2) iASL Compiler/Disassembler and Tools: 

Disassembler: fixed a regression introduced in 20170224. A fix for a 
memory leak related to resource descriptor tags (names) could fault when 
the disassembler was generated with 64-bit compilers.

The ASLTS test suite has been updated to implement a new testing 
architecture. During generation of the suite from ASL source, both the 
ASL and ASL+ compilers are now validated, as well as the disassembler 
itself (Erik Schmauss). The architecture executes as follows:

    For every ASL source module:
        Compile (legacy ASL compilation)
        Disassemble the resulting AML to ASL+ source code
        Compile the new ASL+ module
        Perform a binary compare on the legacy AML and the new ASL+ AML
    The ASLTS suite then executes normally using the AML binaries.

----------------------------------------
24 February 2017. Summary of changes for version 20170224:


1) ACPICA kernel-resident subsystem:

Interpreter: Fixed two issues with the control method return value auto-
repair feature, where an attempt to double-delete an internal object 
could result in an ACPICA warning (for _CID repair and others). No fault 
occurs, however, because the attempted deletion (actually a release to an 
internal cache) is detected and ignored via object poisoning.

Debugger: Fixed an AML interpreter mutex issue during the single stepping 
of control methods. If certain debugger commands are executed during 
stepping, a mutex acquire/release error could occur. Lv Zheng.

Fixed some issues generating ACPICA with the Intel C compiler by 
restoring the original behavior and compiler-specific include file in 
acenv.h. 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: 141.7K Code, 58.5K Data, 200.2K Total
    Debug Version:     207.5K Code, 82.7K Data, 290.2K Total
  Previous Release:
    Non-Debug Version: 137.4K Code, 52.6K Data, 190.0K Total
    Debug Version:     201.5K Code, 82.2K Data, 283.7K Total


2) iASL Compiler/Disassembler and Tools:

iASL/Disassembler: A preliminary version of a new ASL-to-ASL+ conversion 
tool has been designed, implemented, and included in this release. The 
key feature of this utility is that the original comments within the 
input ASL file are preserved during the conversion process, and included 
within the converted ASL+ file -- thus creating a transparent conversion 
of existing ASL files to ASL+ (ASL 2.0). Erik Schmauss.

    Usage: iasl -ca <ASL-filename>  // Output is a .dsl file with 
converted code

iASL/Disassembler: Improved the detection and correct disassembly of 
Switch/Case operators. This feature detects sequences of if/elseif/else 
operators that originated from ASL Switch/Case/Default operators and 
emits the original operators. David Box.

iASL: Improved the IORT ACPI table support in the following areas. Lv 
Zheng:
    Clear MappingOffset if the MappingCount is zero.
    Fix the disassembly of the SMMU GSU interrupt offset.
    Update the template file for the IORT table.

Disassembler: Enhanced the detection and disassembly of resource 
template/descriptor within a Buffer object. An EndTag descriptor is now 
required to have a zero second byte, since all known ASL compilers emit 
this. This helps eliminate incorrect decisions when a buffer is 
disassembled (false positives on resource templates).

----------------------------------------
19 January 2017. Summary of changes for version 20170119:


1) General ACPICA software:

Entire source code base: Added the 2017 copyright to all source code 
legal/licensing 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.


2) iASL Compiler/Disassembler and Tools:

iASL: Removed/fixed an inadvertent remark when a method argument 
containing a reference is used as a target operand within the method (and 
never used as a simple argument), as in the example below. Jeffrey Hugo.

    dsdt.asl   1507:    Store(0x1, Arg0)
    Remark   2146 -                ^ Method Argument is never used (Arg0)

All tools: Removed the bit width of the compiler that generated the tool 
from the common signon for all user space tools. This proved to be 
confusing and unnecessary. This includes similar removal of HARDWARE_NAME 
from the generic makefiles (Thomas Petazzoni). Example below.

    Old:
    ASL+ Optimizing Compiler version 20170119-32
    ASL+ Optimizing Compiler version 20170119-64

    New:
    ASL+ Optimizing Compiler version 20170119

----------------------------------------
22 December 2016. Summary of changes for version 20161222:


1) ACPICA kernel-resident subsystem:

AML Debugger: Implemented a new mechanism to simplify and enhance 
debugger integration into all environments, including kernel debuggers 
and user-space utilities, as well as remote debug services. This 
mechanism essentially consists of new OSL interfaces to support debugger 
initialization/termination, as well as wait/notify interfaces to perform 
the debugger handshake with the host. Lv Zheng.

    New OSL interfaces:
        AcpiOsInitializeDebugger (void)
        AcpiOsTerminateDebugger (void)
        AcpiOsWaitCommandReady (void)
        AcpiOsNotifyCommandComplete (void)

    New OS services layer:
        osgendbg.c -- Example implementation, and used for AcpiExec

Update for Generic Address Space (GAS) support: Although the AccessWidth 
and/or BitOffset fields of the GAS are not often used, this change now 
fully supports these fields. This affects the internal support for FADT 
registers, registers in other ACPI data tables, and the AcpiRead and 
AcpiWrite public interfaces. Lv Zheng.

Sleep support: In order to simplify integration of ACPI sleep for the 
various host operating systems, a new OSL interface has been introduced. 
AcpiOsEnterSleep allows the host to perform any required operations 
before the final write to the sleep control register(s) is performed by 
ACPICA. Lv Zheng.

    New OSL interface:
        AcpiOsEnterSleep(SleepState, RegisterAValue, RegisterBValue)

    Called from these internal interfaces:
        AcpiHwLegacySleep
        AcpiHwExtendedSleep

EFI support: Added a very small EFI/ACPICA example application. Provides 
a simple demo for EFI integration, as well as assisting with resolution 
of issues related to customer ACPICA/EFI integration. Lv Zheng. See:

    source/tools/efihello/efihello.c

Local C library: Implemented several new functions to enhance ACPICA 
portability, for environments where these clib functions are not 
available (such as EFI). Lv Zheng:
    putchar
    getchar
    strpbrk
    strtok
    memmove

Fixed a regression where occasionally a valid resource descriptor was 
incorrectly detected as invalid at runtime, and a 
AE_AML_NO_RESOURCE_END_TAG was returned.

Fixed a problem with the recently implemented support that enables 
control method invocations as Target operands to many ASL operators. 
Warnings of this form: "Needed type [Reference], found [Processor]" were 
seen at runtime for some method invocations.

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: 141.5K Code, 58.5K Data, 200.0K Total
    Debug Version:     201.7K Code, 82.7K Data, 284.4K Total
  Previous Release:
    Non-Debug Version: 140.5K Code, 58.5K Data, 198.9K Total
    Debug Version:     201.3K Code, 82.7K Data, 284.0K Total


2) iASL Compiler/Disassembler and Tools:

Disassembler: Enhanced output by adding the capability to detect and 
disassemble ASL Switch/Case statements back to the original ASL source 
code instead of if/else blocks. David Box.

AcpiHelp: Split a large file into separate files based upon 
functionality/purpose. New files are:
    ahaml.c
    ahasl.c

----------------------------------------
17 November 2016. Summary of changes for version 20161117:


1) ACPICA kernel-resident subsystem:

Table Manager: Fixed a regression introduced in 20160729, "FADT support 
cleanup". This was an attempt to remove all references in the source to 
the FADT version 2, which never was a legal version number. It was 
skipped because it was an early version of 64-bit support that was 
eventually abandoned for the current 64-bit support.

Interpreter: Fixed a problem where runtime implicit conversion was 
incorrectly disabled for the ASL operators below. This brings the 
behavior into compliance with the ACPI specification:
    FromBCD
    ToBCD
    ToDecimalString
    ToHexString
    ToInteger
    ToBuffer

Table Manager: Added a new public interface, AcpiPutTable, used to 
release and free an ACPI table returned by AcpiGetTable and related 
interfaces. 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: 140.5K Code, 58.5K Data, 198.9K Total
    Debug Version:     201.3K Code, 82.7K Data, 284.0K Total
  Previous Release:
    Non-Debug Version: 140.4K Code, 58.1K Data, 198.5K Total
    Debug Version:     200.7K Code, 82.1K Data, 282.8K Total


2) iASL Compiler/Disassembler and Tools:

Disassembler: Fixed a regression for disassembly of Resource Template. 
Detection of templates in the AML stream missed some types of templates.

iASL: Fixed a problem where an Access Size error was returned for the PCC 
address space when the AccessSize of the GAS register is greater than a 
DWORD. Hoan Tran.

iASL: Implemented several grammar changes for the operators below. These 
changes are slated for the next version of the ACPI specification:
    RefOf        - Disallow method invocation as an operand
    CondRefOf    - Disallow method invocation as an operand
    DerefOf      - Disallow operands that use the result from operators 
that
                   do not return a reference (Changed TermArg to 
SuperName).

iASL: Control method invocations are now allowed for Target operands, as 
per the ACPI specification. Removed error for using a control method 
invocation as a Target operand.

Disassembler: Improved detection of Resource Templates, Unicode, and 
Strings within Buffer objects. These subtypes do not contain a specific 
opcode to indicate the originating ASL code, and they must be detected by 
other means within the disassembler. 

iASL: Implemented an optimization improvement for 32-bit ACPI tables 
(DSDT/SSDT). For the 32-bit case only, compute the optimum integer opcode 
only after 64-bit to 32-bit truncation. A truncation warning message is 
still emitted, however.

AcpiXtract: Implemented handling for both types of line terminators (LF 
or CR/LF) so that it can accept AcpiDump output files from any system. 
Peter Wu.

AcpiBin: Added two new options for comparing AML files:
    -a: compare and display ALL mismatches
    -o: start compare at this offset into the second file

----------------------------------------
30 September 2016. Summary of changes for version 20160930:


1) ACPICA kernel-resident subsystem:

Fixed a regression in the internal AcpiTbFindTable function where a non 
AE_OK exception could inadvertently be returned even if the function did 
not fail. This problem affects the following operators:
    DataTableRegion
    LoadTable

Fixed a regression in the LoadTable operator where a load to any 
namespace location other than the root no longer worked properly.

Increased the maximum loop count value that will result in the 
AE_AML_INFINITE_LOOP exception. This is a mechanism that is intended to 
prevent infinite loops within the AML interpreter and thus the host OS 
kernel. The value is increased from 0xFFFF to 0xFFFFF loops (65,535 to 
1,048,575).

Moved the AcpiGbl_MaxLoopIterations configuration variable to the public 
acpixf.h file. This allows hosts to easily configure the maximum loop 
count at runtime.

Removed an illegal character in the strtoul64.c file. This character 
caused errors with some C compilers.

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: 140.4K Code, 58.1K Data, 198.5K Total
    Debug Version:     200.7K Code, 82.1K Data, 282.8K Total
  Previous Release:
    Non-Debug Version: 140.0K Code, 58.1K Data, 198.1K Total
    Debug Version:     200.3K Code, 82.1K Data, 282.4K Total


2) iASL Compiler/Disassembler and Tools:

Disassembler: Fixed a problem with the conversion of Else{If{ blocks into 
the simpler ASL ElseIf keyword. During the conversion, a trailing If 
block could be lost and missing from the disassembled output.

iASL: Fixed a missing parser rule for the ObjectType operator. For ASL+, 
the missing rule caused a parse error when using the Index operator as an 
operand to ObjectType. This construct now compiles properly. Example:
    ObjectType(PKG1[4]).

iASL: Correctly handle unresolved symbols in the hardware map file (-lm 
option). Previously, unresolved symbols could cause a protection fault. 
Such symbols are now marked as unresolved in the map file.

iASL: Implemented support to allow control method invocations as an 
operand to the ASL DeRefOf operator. Example:
    DeRefOf(MTH1(Local0))

Disassembler: Improved support for the ToPLD ASL macro. Detection of a 
possible _PLD buffer now includes examination of both the normal buffer 
length (16 or 20) as well as the surrounding AML package length.

Disassembler: Fixed a problem with the decoding of complex expressions 
within the Divide operator for ASL+. For the case where both the quotient 
and remainder targets are specified, the entire statement cannot be 
disassembled. Previously, the output incorrectly contained a mix of ASL- 
and ASL+ operators. This mixed statement causes a syntax error when 
compiled. Example:
    Divide (Add (INT1, 6), 128, RSLT, QUOT)  // was incorrectly 
disassembled to:
    Divide (INT1 + 6, 128, RSLT, QUOT)

iASL/Tools: Added support to process AML and non-AML ACPI tables 
consistently. For the disassembler and AcpiExec, allow all types of ACPI 
tables (AML and data tables). For the iASL -e option, allow only AML 
tables (DSDT/SSDT).

----------------------------------------
31 August 2016. Summary of changes for version 20160831:


1) ACPICA kernel-resident subsystem:

Improve support for the so-called "module-level code", which is defined 
to be math, logical and control AML opcodes that appear outside of any 
control method. This change improves the support by adding more opcodes 
that can be executed in the manner. Some other issues have been solved, 
and the ASL grammar changes to support such code under all scope 
operators (Device, etc.) are complete. Lv Zheng.

UEFI support: these OSL functions have been implemented. This is an 
additional step toward supporting the AcpiExec utility natively (with 
full hardware access) under UEFI. Marcelo Ferreira.
    AcpiOsReadPciConfiguration
    AcpiOsWritePciConfiguration

Fixed a possible mutex error during control method auto-serialization. Lv 
Zheng. 

Updated support for the Generic Address Structure by fully implementing 
all GAS fields when a 32-bit address is expanded to a 64-bit GAS. Lv 
Zheng.

Updated the return value for the internal _OSI method. Instead of 
0xFFFFFFFF, the "Ones" value is now returned, which is 0xFFFFFFFFFFFFFFFF 
for 64-bit ACPI tables. This fixes an incompatibility with other ACPI 
implementations, and will be reflected and clarified in the next version 
of the ACPI specification.

Implemented two new table events that can be passed to an ACPICA table 
handler. These events are used to indicate a table installation or 
uninstallation. These events are used in addition to existed table load 
and unload events. Lv Zheng.

Implemented a cleanup for all internal string-to-integer conversions. 
Consolidate multiple versions of this functionality and limit possible 
bases to either 10 or 16 to simplify the code. Adds a new file, 
utstrtoul64.

Cleanup the inclusion order of the various compiler-specific headers. 
This simplifies build configuration management. The compiler-specific 
headers are now split out from the host-specific headers. 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: 140.1K Code, 58.1K Data, 198.1K Total
    Debug Version:     200.3K Code, 82.1K Data, 282.4K Total


2) iASL Compiler/Disassembler and Tools:

iASL/AcpiExec: Added a command line option to display the build date/time 
of the tool (-vd). This can be useful to verify that the correct version 
of the tools are being used.

AML Debugger: Implemented a new subcommand ("execute predef") to execute 
all predefined control methods and names within the current namespace. 
This can be useful for debugging problems with ACPI tables and the ACPI 
namespace.

----------------------------------------
29 July 2016. Summary of changes for version 20160729:


1) ACPICA kernel-resident subsystem:

Implemented basic UEFI support for the various ACPICA tools. This 
includes:
1) An OSL to implement the various AcpiOs* interfaces on UEFI.
2) Support to obtain the ACPI tables on UEFI.
3) Local implementation of required C library functions not available on 
UEFI.
4) A front-end (main) function for the tools for UEFI-related 
initialization.

The initial deployment of this support is the AcpiDump utility executing 
as an UEFI application via EDK2 (EDKII, "UEFI Firmware Development Kit"). 
Current environments supported are Linux/Unix. MSVC generation is not 
supported at this time. See the generate/efi/README file for build 
instructions. Lv Zheng.

Future plans include porting the AcpiExec utility to execute natively on 
the platform with I/O and memory access. This will allow viewing/dump of 
the platform namespace and native execution of ACPI control methods that 
access the actual hardware. To fully implement this support, the OSL 
functions below must be implemented with UEFI interfaces. Any community 
help in the implementation of these functions would be appreciated:
    AcpiOsReadPort
    AcpiOsWritePort
    AcpiOsReadMemory
    AcpiOsWriteMemory
    AcpiOsReadPciConfiguration
    AcpiOsWritePciConfiguration

Restructured and standardized the C library configuration for ACPICA, 
resulting in the various configuration options below. This includes a 
global restructuring of the compiler-dependent and platform-dependent 
include files. These changes may affect the existing platform-dependent 
configuration files on some hosts. Lv Zheng. 

The current C library configuration options appear below. For any issues, 
it may be helpful to examine the existing compiler-dependent and 
platform-dependent files as examples. Lv Zheng. 

1) Linux kernel:
    ACPI_USE_STANDARD_HEADERS=n in order not to use system-provided C 
library.
    ACPI_USE_SYSTEM_CLIBRARY=y in order not to use ACPICA mini C library.
2) Unix/Windows/BSD applications:
    ACPI_USE_STANDARD_HEADERS=y in order to use system-provided C 
library.
    ACPI_USE_SYSTEM_CLIBRARY=y in order not to use ACPICA mini C library.
3) UEFI applications:
    ACPI_USE_STANDARD_HEADERS=n in order not to use system-provided C 
library.
    ACPI_USE_SYSTEM_CLIBRARY=n in order to use ACPICA mini C library.
4) UEFI applications (EDK2/StdLib):
    ACPI_USE_STANDARD_HEADERS=y in order to use EDK2 StdLib C library.
    ACPI_USE_SYSTEM_CLIBRARY=y in order to use EDK2 StdLib C library.


AML interpreter: "module-level code" support. Allows for execution of so-
called "executable" AML code (math/logical operations, etc.) outside of 
control methods not just at the module level (top level) but also within 
any scope declared outside of a control method - Scope{}, Device{}, 
Processor{}, PowerResource{}, and ThermalZone{}. Lv Zheng. 

Simplified the configuration of the "maximum AML loops" global option by 
adding a global public variable, "AcpiGbl_MaxLoopIterations" which can be 
modified at runtime.


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: 139.1K Code, 22.9K Data, 162.0K Total
    Debug Version:     199.0K Code, 81.8K Data, 280.8K Total


2) iASL Compiler/Disassembler and Tools:

iASL: Add full support for the RASF ACPI table (RAS Features Table). 
Includes disassembler, data table compiler, and header support.

iASL Expand "module-level code" support. Allows for 
compilation/disassembly of so-called "executable" AML code (math/logical 
operations, etc.) outside of control methods not just at the module level 
(top level) but also within any scope declared outside of a control 
method - Scope{}, Device{}, Processor{}, PowerResource{}, and 
ThermalZone{}.

AcpiDump: Added support for dumping all SSDTs on newer versions of 
Windows. These tables are now easily available -- SSDTs are not available 
through the registry on older versions.

----------------------------------------
27 May 2016. Summary of changes for version 20160527:


1) ACPICA kernel-resident subsystem:

Temporarily reverted the new arbitrary bit length/alignment support in 
AcpiHwRead/AcpiHwWrite for the Generic Address Structure. There have been 
a number of regressions with the new code that need to be fully resolved 
and tested before this support can be finally integrated into ACPICA. 
Apologies for any inconveniences these issues may have caused.

The ACPI message macros are not configurable (ACPI_MSG_ERROR, 
ACPI_MSG_EXCEPTION, ACPI_MSG_WARNING, ACPI_MSG_INFO, ACPI_MSG_BIOS_ERROR, 
and ACPI_MSG_BIOS_WARNING). Lv Zheng.

Fixed a couple of GCC warnings associated with the use of the -Wcast-qual 
option. Adds a new return macro, return_STR. Junk-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.

  Current Release:
    Non-Debug Version: 136.8K Code, 51.6K Data, 188.4K Total
    Debug Version:     201.5K Code, 82.2K Data, 283.7K Total
  Previous Release:
    Non-Debug Version: 137.4K Code, 52.6K Data, 190.0K Total
    Debug Version:     200.9K Code, 82.2K Data, 283.1K Total

----------------------------------------
22 April 2016. Summary of changes for version 20160422:

1) ACPICA kernel-resident subsystem:

Fixed a regression in the GAS (generic address structure) arbitrary bit 
support in AcpiHwRead/AcpiHwWrite. Problem could cause incorrect behavior 
and incorrect return values. Lv Zheng. ACPICA BZ 1270.

ACPI 6.0: Added support for new/renamed resource macros. One new argument 
was added to each of these macros, and the original name has been 
deprecated. The AML disassembler will always disassemble to the new 
names. Support for the new macros was added to iASL, disassembler, 
resource manager, and the acpihelp utility. ACPICA BZ 1274.

    I2cSerialBus  -> I2cSerialBusV2
    SpiSerialBus  -> SpiSerialBusV2
    UartSerialBus -> UartSerialBusV2

ACPI 6.0: Added support for a new integer field that was appended to the 
package object returned by the _BIX method. This adds iASL compile-time 
and AML runtime error checking. ACPICA BZ 1273.

ACPI 6.1: Added support for a new PCCT subtable, "HW-Reduced Comm 
Subspace Type2" (Headers, Disassembler, and data table 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.

  Current Release:
    Non-Debug Version: 137.4K Code, 52.6K Data, 190.0K Total
    Debug Version:     201.5K Code, 82.2K Data, 283.7K Total
  Previous Release:
    Non-Debug Version: 137.1K Code, 51.5K Data, 188.6K Total
    Debug Version:     201.0K Code, 82.0K Data, 283.0K Total


2) iASL Compiler/Disassembler and Tools:

iASL: Implemented an ASL grammar extension to allow/enable executable 
"module-level code" to be created and executed under the various 
operators that create new scopes. This type of AML code is already 
supported in all known AML interpreters, and the grammar change will 
appear in the next version of the ACPI specification. Simplifies the 
conditional runtime creation of named objects under these object types: 

    Device
    PowerResource
    Processor
    Scope
    ThermalZone

iASL: Implemented a new ASL extension, a "For" loop macro to add greater 
ease-of-use to the ASL language. The syntax is similar to the 
corresponding C operator, and is implemented with the existing AML While 
opcode -- thus requiring no changes to existing AML interpreters.

    For (Initialize, Predicate, Update) {TermList}

Grammar:
    ForTerm :=
        For (
            Initializer    // Nothing | TermArg => ComputationalData
            Predicate      // Nothing | TermArg => ComputationalData
            Update         // Nothing | TermArg => ComputationalData
        ) {TermList}


iASL: The _HID/_ADR detection and validation has been enhanced to search 
under conditionals in order to allow these objects to be conditionally 
created at runtime.

iASL: Fixed several issues with the constant folding feature. The 
improvement allows better detection and resolution of statements that can 
be folded at compile time. ACPICA BZ 1266. 

iASL/Disassembler: Fixed a couple issues with the Else{If{}...} 
conversion to the ASL ElseIf operator where incorrect ASL code could be 
generated.

iASL/Disassembler: Fixed a problem with the ASL+ code disassembly where 
sometimes an extra (and extraneous) set of parentheses were emitted for 
some combinations of operators. Although this did not cause any problems 
with recompilation of the disassembled code, it made the code more 
difficult to read. David Box. ACPICA BZ 1231.

iASL: Changed to ignore the unreferenced detection for predefined names 
of resource descriptor elements, when the resource descriptor is 
created/defined within a control method.

iASL: Disassembler: Fix a possible fault with externally declared Buffer 
objects.

----------------------------------------
18 March 2016. Summary of changes for version 20160318:

1) ACPICA kernel-resident subsystem:

Added support for arbitrary bit lengths and bit offsets for registers 
defined by the Generic Address Structure. Previously, only aligned bit 
lengths of 8/16/32/64 were supported. This was sufficient for many years, 
but recently some machines have been seen that require arbitrary bit-
level support. ACPICA BZ 1240. Lv Zheng.

Fixed an issue where the \_SB._INI method sometimes must be evaluated 
before any _REG methods are evaluated. Lv Zheng.

Implemented several changes related to ACPI table support 
(Headers/Disassembler/TableCompiler):
NFIT: For ACPI 6.1, updated to add some additional new fields and 
constants.
FADT: Updated a warning message and set compliance to ACPI 6.1 (Version 
6).
DMAR: Added new constants per the 10/2014 DMAR spec.
IORT: Added new subtable per the 10/2015 IORT spec.
HEST: For ACPI 6.1, added new constants and new subtable.
DBG2: Added new constants per the 12/2015 DBG2 spec.
FPDT: Fixed several incorrect fields, add the FPDT boot record structure. 
ACPICA BZ 1249.
ERST/EINJ: Updated disassembler with new "Execute Timings" actions.

Updated header support for the DMAR table to match the current version of 
the related spec.

Added extensions to the ASL Concatenate operator to allow any ACPI object 
to be passed as an operand. Any object other than Integer/String/Buffer 
simply returns a string containing the object type. This extends the 
usefulness of the Printf macros. Previously, Concatenate would abort the 
control method if a non-data object was encountered.

ACPICA source code: Deployed the C "const" keyword across the source code 
where appropriate. ACPICA BZ 732. Joerg Sonnenberger (NetBSD).

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: 137.1K Code, 51.5K Data, 188.6K Total
    Debug Version:     201.0K Code, 82.0K Data, 283.0K Total
  Previous Release:
    Non-Debug Version: 136.2K Code, 51.5K Data, 187.7K Total
    Debug Version:     200.4K Code, 82.0K Data, 282.4K Total


2) iASL Compiler/Disassembler and Tools:

iASL/Disassembler: Improved the heuristic used to determine the number of 
arguments for an externally defined control method (a method in another 
table). Although this is an improvement, there is no deterministic way to 
"guess" the number of method arguments. Only the ACPI 6.0 External opcode 
will completely solve this problem as it is deployed (automatically) in 
newer BIOS code.

iASL/Disassembler: Fixed an ordering issue for emitted External() ASL 
statements that could cause errors when the disassembled file is 
compiled. ACPICA BZ 1243. David Box.

iASL: Fixed a regression caused by the merger of the two versions of the 
local strtoul64. Because of a dependency on a global variable, strtoul64 
could return an error for integers greater than a 32-bit value. ACPICA BZ 
1260.

iASL: Fixed a regression where a fault could occur for an ASL Return 
statement if it invokes a control method that is not resolved. ACPICA BZ 
1264.

AcpiXtract: Improved input file validation: detection of binary files and 
non-acpidump text files.

----------------------------------------
12 February 2016. Summary of changes for version 20160212:

1) ACPICA kernel-resident subsystem:

Implemented full support for the ACPI 6.1 specification (released in 
January). This version of the specification is available at:  
http://www.uefi.org/specifications

Only a relatively small number of changes were required in ACPICA to 
support ACPI 6.1, in these areas:
- New predefined names
- New _HID values
- A new subtable for HEST
- A few other header changes for new values

Ensure \_SB_._INI is executed before any _REG methods are executed. There 
appears to be existing BIOS code that relies on this behavior. Lv Zheng.

Reverted a change made in version 20151218 which enabled method 
invocations to be targets of various ASL operators (SuperName and Target 
grammar elements). While the new behavior is supported by the ACPI 
specification, other AML interpreters do not support this behavior and 
never will. The ACPI specification will be updated for ACPI 6.2 to remove 
this support. Therefore, the change was reverted to the original ACPICA 
behavior.

ACPICA now supports the GCC 6 compiler.

Current Release: (Note: build changes increased sizes)
    Non-Debug Version: 136.2K Code, 51.5K Data, 187.7K Total
    Debug Version:     200.4K Code, 82.0K Data, 282.4K Total
Previous Release:
    Non-Debug Version: 102.7K Code, 28.4K Data, 131.1K Total
    Debug Version:     200.4K Code, 81.9K Data, 282.3K Total


2) iASL Compiler/Disassembler and Tools:

Completed full support for the ACPI 6.0 External() AML opcode. The 
compiler emits an external AML opcode for each ASL External statement. 
This opcode is used by the disassembler to assist with the disassembly of 
external control methods by specifying the required number of arguments 
for the method. AML interpreters do not use this opcode. To ensure that 
interpreters do not even see the opcode, a block of one or more external 
opcodes is surrounded by an "If(0)" construct. As this feature becomes 
commonly deployed in BIOS code, the ability of disassemblers to correctly 
disassemble AML code will be greatly improved. David Box.

iASL: Implemented support for an optional cross-reference output file. 
The -lx option will create a the cross-reference file with the suffix 
"xrf". Three different types of cross-reference are created in this file:
- List of object references made from within each control method
- Invocation (caller) list for each user-defined control method
- List of references to each non-method object in the namespace

iASL: Method invocations as ASL Target operands are now disallowed and 
flagged as errors in preparation for ACPI 6.2 (see the description of the 
problem above).

----------------------------------------
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 publicly
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 Concatenate 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 lowercase 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 lowercase for linux.
Doubled the number of symbols that are lowercase.

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.

Support 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 dynamic 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 within 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 referred 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 re-enabled.

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.
