----------------------------------------
31 March 2023. Summary of changes for version 20230331:

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

0) Global changes:


Update all copyright notices to the year 2023. This effects all source 
modules, as well as utility signons.
Add OS-specific support for Zephyr RTOS.
Fix miscellaneous code that accesses various objects.
Remove some dead code.
Add C ?Flexible Array? support.
Add support for 64 bit LoongArch compilation.
Add first batch of RISC-V related definitions.
Performed a global automated update to remove tabs, fix indentation 
issues, etc.

1) ACPICA kernel-resident subsystem:

hwvalid: Drop port I/O validation.

2) ACPICA tools and utilities:

iASL: Added full macro support in the preprocessor. Example:
#define ABCD(a,b,c,d) a+b+c-d

Known macro support limitations (at this time):
	No support for multi-line #define macros (backslash continuation 
lines)
	No support for the C-style ternary operator
	No support for the stringizing operator (#)
	No support for the concatenation (token pasting) operator (##)
	No support for variable number of macro arguments

Add support for AMD Secure Processor Table (ASPT) version 1.
Add support for Arm's MPAM ACPI table version 2.
ACPI 6.5: MADT: add support for trace buffer extension in GICC.
Headers: Delete bogus NodeArray array of pointers from AEST table.
PHAT table support is still ongoing.


----------------------------------------
20 October 2022. Summary of changes for version 20221020:

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

0) Global changes:

Allow disabling of -Werror. For distro maintainers having `-Werror` can 
delay update of GCC. Since every GCC release might add new warnings that 
were not yet captured, it might break the build of packages. With this 
change, distros can now build with `NOWERROR=TRUE` instead of patching 
either the errors or the makefiles. The default behavior keeps on using 
`-Werror`.

1) ACPICA kernel-resident subsystem:

Added support for FFH Operation Region special context data. FFH(Fixed 
Function Hardware) Opregion is approved to be added in ACPI 6.5 via code 
first approach[1]. It requires special context data similar to GPIO and 
Generic Serial Bus as it needs to know platform specific offset and 
length.

Reverted this commit "executer/exsystem: Warn about sleeps greater than 
10 ms." Due to user complaints about valid sleeps greater than 10ms seen 
in some existing machines -- generating lots of warnings.

Do not touch VGA memory when EBDA < 1KiB. The ACPICA code assumes that 
EBDA region must be at least 1KiB in size. Because this is not 
guaranteed, it might happen that while scanning the memory for RSDP 
pointer, the kernel touches memory above 640KiB. This is unwanted as the 
VGA memory range may not be decoded or even present when running under 
virtualization.

Check that EBDA pointer is in valid memory. If the memory at 0x40e is 
uninitialized, the retrieved physical memory address of EBDA may be 
beyond the low memory (i.e. above 640K). If so, the kernel may 
unintentionally access the VGA memory, that might not be decoded or even 
present in case of virtualization.

2) iASL Compiler/Disassembler and ACPICA tools:

Completed the existing partial support for the CDAT "table". Although 
this isn't technically an ACPI table (It doesn't go into the XSDT), it is 
possible to support this table in the Data Table compiler. Created one 
new file, "utilities/utcksum.c", used to centralize checksum 
generation/validation into one location. Includes changes to makefiles 
and MSVC project files.

Updated support for the IORT table - update to version E.e

Added CXL 3.0 structures (CXIMS & RDPAS) to the CEDT table 

iASL: Added CCEL table to both compiler/disassembler.

iASL: NHLT table: Fixed compilation of optional undocumented fields

iASL: Fix iASL compile error due to ACPI_TDEL_OFFSET. Commit # 10e4763 
("iASL: Add CCEL table to both compiler/disassembler") introduced the 
iASL build issue. The issue is due to using ACPI_TDEL_OFFSET for CCEL 
table member reference. To fix it,  change ACPI_TDEL_OFFSET with 
ACPI_CCEL_OFFSET.

----------------------------------------
31 March 2022. Summary of changes for version 20220331:

0) Global changes:

Update all copyright notices to the year 2022. This effects all source 
modules, as well as utility signons.


1) ACPICA kernel-resident subsystem:

For the ASL Sleep() operator, issue a warning if the sleep value is 
greater than 10 Milliseconds. Quick boottime is important, so warn about 
sleeps greater than 10 ms. Distribution Linux kernels reach initrd in 350 
ms, so excessive delays should be called out. 10 ms is chosen randomly, 
but three of such delays would already make up ten percent of the 
boottime.

Namespace: Avoid attempting to walk the Namespace if the Namespace does 
not exist.

AML interpreter/iASL compiler: Add new Acpi 6.4 semantics for the 
LoadTable and Load operators. DDB_HANDLE is gone, now loadtable returns a 
pass/fail integer. Now load returns a pass/fail integer, as well as 
storing the return value in an optional 2nd argument.

Headers: Use uintptr_t and offsetof() in Linux kernel builds. To avoid 
"performing pointer subtraction with a null pointer has undefined 
behavior" compiler warnings, use uintptr_t and offsetof() that are always 
available during Linux kernel builds to define ACPI_UINTPTR_T and the 
ACPI_TO_INTEGER() and ACPI_OFFSET() macros when building the ACPICA code 
in the Linux kernel.

Added support for the Windows 11 _OSI string ("Windows 2021"). Submitted 
by superm1.

executer/exsystem: Inform users about ACPI spec violation for the Stall() 
operator. Values greater than 100 microseconds violate the ACPI 
specification, so warn users about it. From the ACPI Specification 
version 6.2 Errata A, 19.6.128 *Stall (Stall for a Short Time)*:
> The implementation of Stall is OS-specific, but must not relinquish
> control of the processor. Because of this, delays longer than 100
> microseconds must use Sleep instead of Stall.


2) iASL Compiler/Disassembler and ACPICA tools:

Data Table Compiler/Disassembler: Add support for the APMT table - ARM 
Performance Monitoring Unit table. Submitted by @bwicaksononv.

Data Table Compiler/Disassembler: For MADT, add support for the OEM-
defined subtables (Types 0x80-0x7F).

Data Table Compiler: Fixed a problem with support for the SDEV table, 
where a subtable Length was not computed correctly.

Data Table Compiler/Disassembler: Add/fix the CFMWS subtable to the CEDT 
Acpi table support.

Data Table Compiler/Disassembler: Fix a compile issue with the CEDT and 
add template. Submitted by MasterDrogo.

Data Table Compiler/Disassembler: NHLT Changes provided by Piotr Maziarz:
iASL/NHLT: Rename linux specific structures to DeviceInfo to improve 
readability of the code.
iASL/NHLT: Fix parsing undocumented bytes at the end of Endpoint. 
Undocumented bytes at the end of Endpoint Descriptor can be present 
independently of Linux-specific structures. Their size can also vary.
iASL/NHLT: Treat TableTerminator as SpecificConfig. SpecificConfig has 4 
bytes of size and then an amount of bytes specified by size. All of the 
terminators that I've seen had a size equal to 4, but theoretically it 
can vary.

iASL/AcpiExec: Use _exit instead of exit in signal handers (ctrl-C).

iASL: Remove a remark due to excessive output. Removed a remark for 
duplicate Offset() operators, due to a user complaint.

----------------------------------------
17 December 2021. Summary of changes for version 20211217:

1) ACPICA kernel-resident subsystem:

Hardware: Do not flush CPU cache when entering S4 and S5. According to 
ACPI 6.4, Section 16.2, the CPU cache flushing is required on entering to 
S1, S2, and S3, but the ACPICA code flushes the CPU cache regardless of 
the sleep state. Blind cache flush on entering S5 causes problems for 
TDX.

Avoid subobject buffer overflow when validating RSDP signature. Since the 
Signature member is accessed through an ACPI_TABLE_HEADER, the pointer to 
it is only to a 4-char array, and so trying to read past the 4th 
character, as will be done when it is an RSDP, reads beyond the bounds of 
the accessed member. Contributed by jrtc27.

Add support for PCC Opregion special context data. PCC Opregion added in 
ACPIC 6.3 requires special context data similar to GPIO and Generic 
Serial Bus as it needs to know the internal PCC buffer and its length as 
well as the PCC channel index when the opregion handler is being executed 
by the OSPM. Adds support for the special context data needed by PCC 
Opregion. Submitted by Sudeep Holla <sudeep.holla@arm.com>

2) iASL Compiler/Disassembler and ACPICA tools:

iASL: Completed compiler support for the NHLT ACPI table.

iASL/NHLT table: Fixed a reported problem where a fault would occur 
during disassembly of a "Linux-Specific" section if the "Specific Data" 
part was not present.

iASL: Added full support (compiler and disassembler) for the AGDI ACPI 
table. Contributed by: Ilkka Koskinen <ilkka@os.amperecomputing.com>.

iASL: Added full support for the TDEL ACPI table.

iASL table compiler: FADT support updates:
1) Allow the 32-bit DSDT address to be zero.
2) Issue error if both the 32-bit and 64-bit DSDT addresses are zero.

iASL: Fix unaligned accesses to local cache allocations. Contributed by 
jrtc27.

iASL: Open binary input files in binary mode, not text mode Affects 
binary input AML files, as well as binary data table files, for 
disassembly.

----------------------------------------
30 September 2021. Summary of changes for version 20210930:

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

1) ACPICA kernel-resident subsystem:

Hardware: Avoid evaluating methods too early during system resume. During 
wakeup from system-wide sleep states, AcpiGetSleepTypeData() is called 
and it tries to get memory from the OS in order to evaluate a control 
method, but if KFENCE is enabled in the Linux kernel, the memory 
allocation attempt causes an IRQ work to be queued and a self-IPI to be 
sent to the CPU running the code which requires the memory controller to 
be ready, so if that happens too early in the wakeup path, it doesn't 
work.

Prevent that from taking place by calling AcpiGetSleepTypeData() for S0 
upfront, when preparing to enter a given sleep state, and saving the data 
obtained by it for later use during system wakeup.

Added a new _OSI string, "Windows 2020". Posted by superm1.

2) iASL Compiler/Disassembler and ACPICA tools:

iASL compiler: Updated the check for usage of _CRS, _DIS, _PRS, and _SRS 
objects:
New/latest rules: Under a Device Object:
         1) If _PRS is present, must have _CRS and _SRS
         2) If _SRS is present, must have _PRS (_PRS requires _CRS and 
_SRS)
         3) If _DIS is present, must have _SRS (_SRS requires _PRS, _PRS 
requires _CRS and _SRS)
         4) If _SRS is present, probably should have a _DIS (Remark only)

iASL table disassembler: Added disassembly support for the NHLT ACPI 
table. Note: support for Vendor-defined microphone arrays and SNR 
extensions are not supported at this time -- mostly due to a lack of 
example tables. Actual compiler support for NHLT is forthcoming.

Added a new subtable type for ACPI 6.4 SRAT Generic Port Affinity. It 
uses the same subtable structure as the existing Generic Initiator 
Affinity type.

Added the flag for online capable in the MADT, introduced in ACPI 6.3. 
Posted by superm1.

3) ACPICA documentation: Updated the legal info (that appears at the 
start of the Documents) to clarify distribution rights that are granted.


----------------------------------------
30 July 2021. Summary of changes for version 20210730:

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

1) ACPICA kernel-resident subsystem:

2) iASL Compiler/Disassembler and ACPICA tools:

iasl: Check usage of _CRS, _DIS, _PRS, and _SRS objects (July 2021).
  Under the Device Object:
  1) If _DIS is present, must have a _CRS and _SRS
  2) If _PRS is present, must have a _CRS, _DIS, and _SRS
  3) If _SRS is present, must have a _CRS and _DIS
A warning will be issued for each of these cases.
Note: For existing ASL/projects, these warnings may be disabled by 
specifying this on the command line:
"-vw 3141"

iASL Table Disassembler/Table compiler: Fix for WPBT table with no
command-line arguments. Handle the case where the Command-line
Arguments table field does not exist (zero).

Headers: Add new DBG2 Serial Port Subtypes
The Microsoft Debug Port Table 2 (DBG2) specification revision
September 21, 2020 comprises additional Serial Port Subtypes [1].
Reflect that in the actbl1.h header file. Submitted by:
semihalf-wojtas-marcin

iASL: Add full support for the AEST table (data compiler)
Includes support in the table compiler and the disassembler.

Add PRMT module header to facilitate parsing.
This structure is used in to parse PRMT in other Operating Systems
that relies on using subtable headers in order to parse ACPI tables.
Although the PRMT doesn't have "subtables" it has a list of module
information structures that act as subtables.

iASL: Table disassembler: Add missing strings to decode subtable types.
Includes the MADT and CEDT tables.


----------------------------------------
04 June 2021. Summary of changes for version 20210604:

1) ACPICA kernel-resident subsystem:

Cleaned up (delete) the context mutex during local address handler object 
deletion.

Fixed a memory leak caused by the _CID repair function.

Added support for PlatformRtMechanism OperationRegion handler. Adds a new 
utility function, AcpiUtConvertUuidToString. Writing a buffer to a 
PlatformRtMechanism fieldunit invokes a bidirectional transaction. The 
input buffer contains 26 bytes containing 9 bytes of status, a command 
byte and a 16-byte UUID. This change will simply pass this incoming 
buffer to a handler registered by the OS.

2) iASL Compiler/Disassembler and ACPICA tools:

Added full support for the PRMT ACPI table (Platform Runtime Mechanism 
Table). Includes support in the iASL compiler, the disassembler, and the 
template generator.

Added full support for the BDAT (BIOS Data ACPI Table) ACPI table.

Added full support for the RGRT (Regulatory Graphics Resource Table) ACPI 
table.

Added full support for the SVKL (Storage Volume Key Location Table) ACPI 
table. Header file support from Kuppuswamy Sathyanarayanan 
<sathyanarayanan.kuppuswamy@linux.intel.com>.

Completed full support for the IVRS (I/O Virtualization Reporting 
Structure) ACPI table. Added compiler support for IVRS, updated 
disassembler support. Adds a new utility, UtIsIdInteger, to determine if 
a HID/CID is an integer or a string.

Headers: Added more structs to the CEDT table: CXL fixed memory window 
structure.

ACPI 6.4: MADT: added Multiprocessor Wakeup Mailbox Structure.

----------------------------------------
31 March 2021. Summary of changes for version 20210331:

This release is available at https://acpica.org/downloads, and includes 
all ACPI 6.4 support

1) ACPICA kernel-resident subsystem:
ACPI 6.4: iASL: deprecate DDBHandleObj keyword
Always create namespace nodes using AcpiNsCreateNode(). ACPICA is 
allocating an object using kmalloc(), but then frees it
using kmem_cache_free(<"Acpi-Namespace" kmem_cache>). This is wrong.
Fixed a race condition in generic serial bus operation region handler. 
Fixed by Hans de Goede.

2) iASL Compiler/Disassembler and ACPICA tools:

ACPI 6.4: NFIT: add Location Cookie field
ACPI 6.4: HMAT: add new fields/flags
ACPI 6.4: Add new flags in SRAT
ACPI 6.4: add SDEV secure access components
ACPI 6.4: add Csi2Bus resource template
ACPI 6.4: add support for PHAT table
ACPI 6.4: add support for PMTT table
Add disassembly support for the IVRS table. Compilation of the table is 
not yet complete.
Fixed a potential infinite loop due to type mismatch. The for-loop is 
using a UINT8 counter and comparing the upper
limit against a UINT32 AslGbl_ExpectedMessagesIndex maximum. In
the case where AslGbl_ExpectedMessagesIndex is > 255 the counter i
will wrap around to zero and the loop will never exit. I suspect
the AslGbl_ExpectedMessagesIndex is never that high, but fixing
this does future proof the code and cleans up static analysis
warnings.Colin King.
iASL/TableCompiler: update it with IORT table E.b revision changes. From 
shamiali2008.
iASL/TableCompiler: Add compilation support for the VIOT table. Signed-
off-by: Jean-Philippe Brucker.
iASL/TableCompiler: Add compilation support for CEDT table. Also, update 
the CEDT template.

----------------------------------------
05 January 2021. Summary of changes for version 20210105:

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


1) ACPICA kernel-resident subsystem:

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

2) iASL Compiler/Disassembler and ACPICA tools:

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

Tools and utilities: Updated all signon copyrights to 2021.

iASL Table Compiler: Removed support for obsolete ACPI tables: VRTC, 
MTMR. Al Stone.


----------------------------------------
17 December 2020. Summary of changes for version 20201217:

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


1) ACPICA kernel-resident subsystem:

Note: The implementation of ACPI 6.4 is underway, and is expected to be 
mostly finished next month, when ACPI 6.4 is released.

From qzed:- fixed-ae-class-macros. Fix exception code class checks. Added 
several new macros, such as ACPI_CNTL_EXCEPTION(Status) in order to 
enable this.

AcpiExec/iASL/AcpiHelp: Added a few changes for support of GCC 10.2.0. 
These included a few casts, as well as a null pointer check.

Fix -Wfallthrough: GCC 7.1 gained -Wimplicit-fallthrough to warn on 
implicit fallthrough, as well as __attribute__((__fallthrough__)) and 
comments to explicitly denote that cases of fallthrough were intentional. 
Clang also supports this warning and statement attribute, but not the 
comment form. Added a new macro, ACPI_FALLTHROUGH to support this feature 
of GCC. With assistance from @nickdesaulniers. 

2) iASL Compiler/Disassembler and ACPICA tools: 

Added improvement to method call analysis by saving the return type and 
relaxing certain cases of type checking.

iASL Table Compiler: Improved info messages. Added a message to the -T 
option for when the default template (DSDT) is used.
Also added a note for when multiple SSDTs are created with a DSDT that 
the SSDTs are created in the same file as the DSDT.


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

13 November 2020. Summary of changes for version 20201113:

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


1) ACPICA kernel-resident subsystem:

Interpreter: fixed a memory leak by using use existing buffer in _HID 
repair. There was a memory leak that occurred when a _CID object is 
defined as a package containing string objects. When _CID is checked for 
any possible repairs, it calls a helper function to repair _HID (because 
_CID basically contains multiple _HID entries). The _HID repair function 
assumes that string objects are standalone objects that are not contained 
inside of any packages. The _HID repair function replaced the string 
object with a brand new object and attempted to delete the old object by 
decrementing the reference count of the old object. Strings inside of 
packages have a reference count of 2 so the _HID repair function leaves 
this object in a dangling state and causes a memory leak. Instead of 
allocating a brand new object and removing the old object, use the 
existing object when repairing the _HID object.

Added function trace macros to improve namespace debugging. The namespace 
repair mechanism does not have function tracing macros. Add several trace 
macros to improve debuggability.

Handle "orphan" _REG methods for GPIO OpRegions. Before this change 
AcpiEvExecuteRegMethods() had special handling to handle "orphan" (no 
matching OpRegion declared) _REG methods for EC nodes. On Intel Cherry 
Trail devices there are 2 possible ACPI OpRegions for accessing GPIOs. 
The standard GeneralPurposeIo OpRegion and the Cherry Trail - specific 
UserDefined 0x9X OpRegions. Having 2 different types of OpRegions leads 
to potential issues with checks for OpRegion availability, or in other 
words checks if _REG has been called for the OpRegion which the ACPI code 
wants to use. Except for the "orphan" EC handling, ACPICA core does not 
call _REG on an ACPI node which does not define an OpRegion matching the 
type being registered; and the reference design DSDT, from which most 
Cherry Trail DSDTs are derived, does not define GeneralPurposeIo, nor 
UserDefined(0x93) OpRegions for the GPO2 (UID 3) device, because no pins 
were assigned ACPI controlled functions in the reference design. Together 
this leads to the perfect storm, at least on the Cherry Trail based 
Medion Akayo E1239T. This design does use a GPO2 pin from its ACPI code 
and has added the Cherry Trail specific UserDefined(0x93) opregion to its 
GPO2 ACPI node to access this pin. But it uses a "has _REG been called" 
availability check for the standard GeneralPurposeIo OpRegion. This 
clearly is a bug in the DSDT, but this does work under Windows. This 
issue leads to the intel vbtn driver reporting the device always being in 
tablet-mode at boot, even if it is in laptop mode. Which in turn causes 
userspace to ignore touchpad events. So in other words, this issue causes 
the touchpad to not work at boot. This change fixes this by extending the 
"orphan" _REG method handling to also apply to GPIO address-space 
handlers.


2) iASL Compiler/Disassembler and ACPICA tools: 

iASL: Added more info to namespace dump file (-ln option). In a separate 
section of the dump file (after the main namespace dump), emit the full 
pathname for each namespace node, its type, and the ASL filename and line 
number where it is declared.

AcpiHelp: Added an option to display/decode iASL exceptions. Option is: -
x [Hex Value] where "Hex Value" is the iASL exception code. If Hex Value 
is omitted, all iASL exceptions are displayed.

iASL: Use StringLiteral instead of StringData for some ASL macros. The 
use of the stringData rule allows for some "string" oriented opcodes 
(Such as ToString, ToHexString, etc.) None of which make sense with the 
macros in question. This change modifies the StringData part of the rule 
for these macros to a simple string  literal - thus disallowing the use 
of ToString, ToHexString, etc.
The following ASL operators (macros) are affected:
EisaId
Fprintf
Printf
ToUuid
Unicode
Note: The MS compiler requires the use of string literals for these 
operators also.

iASL: Added a remark for an unknown UUID: ASL_MSG_UUID_NOT_FOUND. Search 
the list of "known" UUIDs for the input to the ToUUID macro.

Added 5 new UUIDs to the known UUID table. All related to NVDIMM and the 
NFIT table.


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

25 September 2020. Summary of changes for version 20200925:

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


1) ACPICA kernel-resident subsystem:

Preserve memory opregion mappings. The ACPICA's strategy with respect to 
the handling of memory mappings associated with memory operation regions 
is to avoid mapping the entire region at once which may be problematic at 
least in principle (for example, it may lead to conflicts with 
overlapping mappings having different attributes created by drivers).  It 
may also be wasteful, because memory opregions on some systems take up 
vastchunks of address space while the fields in those regions actually 
accessed by AML are sparsely distributed.

For this reason, a one-page "window" is mapped for a given opregion on 
the first memory access through it and if that "window" does not cover an 
address range accessed through that opregion subsequently, it is unmapped 
and a new "window" is mapped to replace it.  Next, if the new "window" is 
not sufficient to access memory through the opregion in question in the 
future, it will be replaced with yet another "window" and so on.  That 
may lead to a suboptimal sequence of memory mapping and unmapping 
operations, for example if two fields in one opregion separated from each 
other by a sufficiently wide chunk of unused address space are accessed 
in an alternating pattern.

Added support for 64 bit risc-v compilation.  Useful for acpica tools and 
incorporating ACPICA into the Firmware Test Suite. Colin Ian King 
<colin.king@canonical.com>.

Added support for SMBus predefined names (from SMBus Control Method 
Interface Specification, Version 1.0, December 10, 1999. New predefined 
names:
    _SBA
    _SBI
    _SBR
    _SBT
    _SBW

AML Disassembler: Added a new command, "All <NameSeg>". This command will 
evaluate all objects in the current namespace whose NameString contains 
the input NameSeg as the last element of the NameString. Useful for 
debugging.


2) iASL Compiler/Disassembler and ACPICA tools: 

iASL: fixed a crash that occurred when predefined objects return packages 
with lengths that exceed the initializer list.

iASL: added more detail to external resolution error message when 
compiling multiple definition blocks.

iASL: added a remark for an attempt to create a nameseg or namestring 
containing lower-case letters. This should prevent declaring multiple 
namesegs or namestrings in an attempt to refer to different objects (with 
different cases), but actually refer to the same object(s).

iASL: improve alias analysis by saving object type. If the alias is a 
method type, the parameter count is also recorded.

AcpiExec: Increase the default loop timeout value. Was 1 second, is now 
10 seconds. Prevents unnecessary timeouts when executing control methods 
from the command line.

AcpiHelp/disassembler: Added a bunch of "known" UUIDs to the internal 
list. Includes:
    Memory Device
    Generic Buttons Device
    NVDIMM Root Device
    Control Method Battery
    Device Graphs for _DSD method
    Hierarchical Data Extension
....ARM CoreSight Graph

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


17 July 2020. Summary of changes for version 20200717:

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


1) ACPICA kernel-resident subsystem:

Do not increment OperationRegion reference counts for field units. Recent 
server firmware has revealed that this reference count can overflow on 
large servers that declare many field units (thousands) under the same 
OperationRegion. This occurs because each field unit declaration will add 
a reference count to the source OperationRegion. This release solves the 
reference count overflow for OperationRegion objects by preventing 
fieldUnits from incrementing their parent OperationRegion's reference 
count.

Replaced one-element arrays with flexible-arrays, which were introduced 
in C99.

Restored the readme file containing the directions for generation of 
ACPICA from source on MSVC 2017. Updated the file for MSVC 2017. File is 
located at: generate/msvc2017/readme.txt

2) iASL Compiler/Disassembler and ACPICA tools: 

iASL: Fixed a regression found in version 20200214. Prevent iASL from 
emitting an extra byte of garbage data when control methods declared a 
single parameter type without using braces. This extra byte is known to 
cause a blue screen on the Windows AML interpreter.

iASL: Made a change to allow external declarations to specify the type of 
a named object even when some name segments are not defined.
This change allows the following ASL code to compile (When DEV0 is not 
defined or not defined yet):

    External (\_SB.DEV0.OBJ1, IntObj)
    External (\_SB.DEV0, DeviceObj)

iASL: Fixed a problem where method names in "Alias ()" statement could be 
misinterpreted. They are now interpreted correctly as method invocations.

iASL: capture a method parameter count (Within the Method info segment, 
as well as the argument node) when using parameter type lists.

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


28 May 2020. Summary of changes for version 20200528:


1) ACPICA kernel-resident subsystem:

Removed old/obsolete Visual Studio files which were used to build the 
Windows versions of the ACPICA tools. Since we have moved to Visual 
Studio 2017, we are no longer supporting Visual Studio 2006 and 2009 
project files. The new subdirectory and solution file are located at:

    acpica/generate/msvc2017/AcpiComponents.sln


2) iASL Compiler/Disassembler and ACPICA tools: 

iASL: added support for a new OperationRegion Address Space (subtype): 
PlatformRtMechanism. Support for this new keyword is being released for 
early prototyping. It will appear in the next release of the ACPI 
specification.

iASL: do not optimize the NameString parameter of the CondRefOf operator. 
In the previous iASL compiler release, the NameString parameter of the 
CondRefOf was optimized. There is evidence that some implementations of 
the AML interpreter do not perform the recursive search-to-parent search 
during the execution of the CondRefOf operator. Therefore, the CondRefOf 
operator behaves differently when the NameString parameter is a single 
name segment (a NameSeg) as opposed to a full NamePath (starting at the 
root scope) or a NameString containing parent prefixes.

iASL: Prevent an inadvertent remark message. This change prevents a 
remark if within a control method the following exist:
1) An Operation Region is defined, and
2) A Field operator is defined that refers to the region.
This happens because at the top level, the Field operator does not 
actually create a new named object, it simply references the operation 
region.

Removed support for the acpinames utility. The acpinames was a simple 
utility used to populate and display the ACPI namespace without executing 
any AML code. However, ACPICA now supports executable opcodes outside of 
control methods. This means that executable AML opcodes such as If and 
Store opcodes need to be executed during table load. Therefore, acpinames 
would need to be updated to match the same behavior as the acpiexec 
utility and since acpiexec can already dump the entire namespace (via the 
'namespace' command), we no longer have the need to maintain acpinames.

    In order to dump the contents of the ACPI namespace using acpiexec,
execute the following command from the command line:

        acpiexec -b "n" [aml files]

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


30 April 2020. Summary of changes for version 20200430:

1) ACPICA kernel-resident subsystem:

Cleaned up the coding style of a couple of global variables 
(AcpiGbl_NextCmdNum and AcpiProtocolLengths) caught by static analyzers. 
AcpiProtocolLengths was made static, and the definition of 
AcpiGbl_NextCmdNum was moved to acglobal.h.


2) iASL Compiler/Disassembler and ACPICA tools: 

iASL DataTable Compiler:  Fixed a segfault on errors that aren't directly 
associated with a field.

Disassembler: has been made more resilient so that it will continue to 
parse AML even if the AML generates ACPI namespace errors. This enables 
iASL to disassemble some AML that may have been compiled using older 
versions of iASL that no longer compile with newer versions of iASL.

iASL: Fixed the required parameters for _NIH and _NIG. Previously, there 
was a mixup where _NIG required one parameter and _NIH required zero 
parameters. This change swaps these parameter requirements. Now it is 
required that _NIH must be called with one parameter and _NIG requires 
zero parameters.

iASL: Allow use of undefined externals as long as they are protected by 
an if (CondRefOf (...)) block when compiling multiple definition blocks.

iASL: Fixed the type override behavior of named objects that are declared 
as External. External declarations will no longer override the type of 
the actual definition if it already exists.

AcpiNames: Added setargv.obj to the MSVC 2017 link sequence to enable 
command line wildcard support on Windows. Note: the AcpiNames utility is 
essentially redundant with the AcpiExec utility (using the "namespace" 
command) and is therefore deprecated. It will be removed in future 
releases of ACPICA.

Disassembler: ignore AE_ALREADY_EXISTS status when parsing create* 
operators. The disassembler is intended to emit existing ASL code as-is. 
Therefore, error messages emitted during disassembly should be ignored or 
handled in a way such that the disassembler can continue to parse the 
AML. This change ignores AE_ALREADY_EXISTS errors during the deferred Op 
parsing for create operators in order to complete parsing ASL termlists.

iASL DataTable Compiler: IVRS table: fix potentially uninitialized 
variable warning. Some compilers catch potential uninitialized variables. 
This is done by examining branches of if/else statements. This change 
replaces an "else if" with an "else" to fix the uninitialized variable 
warning.


----------------------------------------
26 March 2020. Summary of changes for version 20200326:


1) ACPICA kernel-resident subsystem:

Performed a code clean-up to prevent build errors on early versions of 
GCC-10.

Added the NHLT table signature. iASL data table compiler/disassembler 
support for this table is coming soon.


2) iASL Compiler/Disassembler and ACPICA tools: 

AcpiExec: Fixed several problems with the namespace initialization file 
(-fi<filename> option). Includes fixes to prevent AE_ALREADY_EXISTS 
errors, several seg faults, and enhancements to line parsing within the 
init file. In addition, each object found in the init file and it's new 
value is displayed, as well as any such entries that do not have a 
corresponding name in the namespace. For reference, the syntax for the 
various supported data types are presented below:
	PCHG 0x777788889999BBBB	// Integer
	\DEV1.STR1 "XYZ"			// String
	BUF1 (88 99 AA)			// Buffer
	PKG1 [0x1111 0x2222]		// Package
	\BF1 0x7980				// BufferField
	RCRV 0x0123456789ABCDEF	// Field Unit

iASL: Added a custom iASL macro __EXPECT__(iASL-Error-Code). This macro 
can be used anywhere in a given ASL file to configure iASL to expect an 
iASL compiler error code on the line where this macro was placed. If the 
error code does not exist, an error is generated. This is intended to be 
used for ACPICA's ASL test suite, but can be used by ASL developers as 
well.

iASL: table compiler: Implemented IVRS IVHD type 11h parsing. The AMD 
IVRS table parsing supported only IVHD type 10h structures. Parsing an 
IVHD type 11h caused the iasl to report unknown subtable type. Add 
necessary structure definition for IVHD type 11h and apply correct 
parsing method based on subtable type. Micha? ?ygowski.

iASL: table compiler: Fixed IVRS table IVHD type 10h reserved field name 
According to AMD IOMMU Specification Revision 3.05 the reserved field 
should be IOMMU Feature Reporting. Change the name of the field to the 
correct one. Micha? ?ygowski.

acpiexec: removed redeclaration of AcpiGbl_DbOpt_NoRegionSupport. Patch 
based on suggestions by David Seifert and Benjamin Berg.

iASL: table compiler: removed an unused variable (DtCompilerParserResult) 
causing linking errors. Patch based on suggestions by David Seifert and 
Benjamin Berg.

iASL: table compiler: make LexBuffer static to avoid linking errors in 
newer compilers. Patch based on suggestions by David Seifert and Benjamin 
Berg.

iASL: fixed type matching between External and Named objects. External 
object types can only be expressed with ACPI object type values that are 
defined in the ACPI spec. However, iASL uses ACPI object type values that 
are local to ACPICA in addition to the values defined in the ACPI spec. 
This change implements type matching to map some object type values 
specific to ACPICA to ones that are defined in the ACPI spec.

iASL: Dropped the type mismatch compiler error that can arise from 
External declarations to a warning. This warning can occur when there is 
a type difference between the external declaration and the actual object 
declaration (when compiling multiple files/modules simultaneously).

iASL: removed an incorrect error message regarding externals. This change 
removes an incorrect error that is emitted when a duplicate external 
declaration does not contain a type that opens a scope. This is incorrect 
because the duplicate external with conflicting types are already caught 
by iASL and it doesn't make any sense to enforce what this conflicting 
type should be.

AcpiXtract: fix AX_IS_TABLE_BLOCK_HEADER macro. This macro needs to be 
surrounded by parens. Otherwise, a logical statement that applies a 
logical not operator to this macro could result in a computation that 
applies the operator to the left side of the logical and but not the 
right. Reported-by: John Levon <john.levon@joyent.com>

Fixed a problem with the local version of sprint(): On 32-bit, the 
provided sprintf() is non-functional: with a size of ACPI_UINT32_MAX, 
String + Size will wrap, meaning End < Start, and 
AcpiUtBoundStringOutput() will never output anything as a result. The 
symptom seen of this was acpixtract failing to output anything -- with a 
custom build that included utprint.c. Signed-off-by: John Levon 
<john.levon@joyent.com>

iASL: Changed the "PlatformCommChannel" ASL keyword to "PCC", as per the 
ACPI specification.


----------------------------------------
14 February 2020. Summary of changes for version 20200214:


1) ACPICA kernel-resident subsystem:

Enable sleep button on ACPI legacy wake:  Hibernation (S4) is triggered 
in a guest when it receives a sleep trigger from the hypervisor. When the 
guest resumes from this power state, it does not see the SleepEnabled 
bit. In other words, the sleepHibernation (S4) is triggered in a guest 
when it receives a sleep trigger from the hypervisor. When the guest 
resumes from this power state, it does not see the SleepEnabled bit. In 
other words, the sleep button is not enabled on waking from an S4 state. 
This causes subsequent invocation of sleep state to fail since the 
guest.button is not enabled on waking from an S4 state. This causes 
subsequent invocation of sleep state to fail in the guest. Fix this 
problem by enabling the sleep button in ACPI legacy wake. From Anchal 
Agarwal <anchalag@amazon.com>.

Implemented a new external interface, AcpiAnyGpeStatusSet (). To be used 
for checking the status bits of all enabled GPEs in one go. It is needed 
to distinguish spurious SCIs from genuine ones when deciding whether or 
not to wake up the system from suspend-to-idle.

Generic Makefiles: replace HOST name with ACPI_HOST: Some machines may be 
using HOST in their environment to represent the host name for their 
machines. Avoid this problem by renaming this variable from HOST to 
ACPI_HOST.

MSVC 2017 project files: Enable multiprocessor generation to improve 
build performance.

Added a macro to get the byte width of a Generic Address structure. New 
ACPI_ACCESS_BYTE_WIDTH is in addition to the existing 
ACPI_ACCESS_BIT_WIDTH. From Mika Westerberg.


2) iASL Compiler/Disassembler and ACPICA tools: 

iASL: Implemented full support for the (optional, rarely used) ReturnType 
and ParameterTypesList for the Method, Function, and External operators. 
For Method declarations, the number of individual ParameterTypes must 
match the declaration of the number of arguments (NumArgs). This also 
Fixes a problem with the External operator where extra/extraneous bytes 
were emitted in the AML code if the optional ReturnType/ParameterTypes 
were specified for a MethodObj declaration.
New error message:
1) Method NumArgs count does not match length of ParameterTypes list

iASL: Implemented detection of type mismatches between External 
declarations and named object declarations. Also, detect type mismatches 
between multiple External declarations of the same Name.
New error messages:
1) Type mismatch between external declaration and actual object 
declaration detected
2) Type mismatch between multiple external declarations detected

iASL: Implemented new error messages for External operators that specify 
a ReturnType and/or ParameterTypesList for any object type other than 
control methods (MethodObj).
New error messages:
1) Return type is only allowed for Externals declared as MethodObj
2) Parameter type is only allowed for Externals declared as MethodObj

iASL: Implemented two new remark/warning messages for ASL code that 
creates named objects from within a control method. This is very 
inefficient since the named object must be created and deleted each time 
the method is executed.
New messages:
1) Creation of named objects within a method is highly inefficient, use 
globals or method local variables instead (remark)
2) Static OperationRegion should be declared outside control method 
(warning)

iASL: Improved illegal forward reference detection by adding support to 
detect forward-reference method invocations.

iASL: Detect and issue an error message for NameStrings that contain too 
many individual NameSegs (>255). This is an AML limitation that is 
defined in the ACPI specification.
New message:
1) NameString contains too many NameSegs (>255)

acpidump: windows: use GetSystemFirmwareTable API for all tables except 
SSDT. By using this API, acpidump is able to get all tables in the XSDT

iASL: Removed unused parser file and updated msvc2017 project files. 
Removed the obsolete AslCompiler.y from the repository.

iASL: msvc2017: Fixed macros in the file dependency list to prevent 
unnecessary rebuilds. Replace %(Directory) with %(RelativeDir).

Disassembler: Prevent spilling error messages to the output file. All 
errors are directed to the console instead. These error messages 
prevented re-compilation of the resulting disassembled ASL output file 
(.DSL).


----------------------------------------
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 interpreter.

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 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.

Disassembler: 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
the 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.
