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

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


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 aquire/release error could occur. Lv Zheng.

Fixed some issues generating ACPICA with the Intel C compiler by 
restoring the original behavior and compiler-specific include file in 
acenv.h. Lv Zheng.

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

  Current Release:
    Non-Debug Version: 141.7K Code, 58.5K Data, 200.2K Total
    Debug Version:     207.5K Code, 82.7K Data, 290.2K Total
  Previous Release:
    Non-Debug Version: 137.4K Code, 52.6K Data, 190.0K Total
    Debug Version:     201.5K Code, 82.2K Data, 283.7K Total


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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


1) General ACPICA software:

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

    New:
    ASL+ Optimizing Compiler version 20170119

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


1) ACPICA kernel-resident subsystem:

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

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

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

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

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

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

    Called from these internal interfaces:
        AcpiHwLegacySleep
        AcpiHwExtendedSleep

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

    source/tools/efihello/efihello.c

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

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

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

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

  Current Release:
    Non-Debug Version: 141.5K Code, 58.5K Data, 200.0K Total
    Debug Version:     201.7K Code, 82.7K Data, 284.4K Total
  Previous Release:
    Non-Debug Version: 140.5K Code, 58.5K Data, 198.9K Total
    Debug Version:     201.3K Code, 82.7K Data, 284.0K Total


2) iASL Compiler/Disassembler and Tools:

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

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

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


1) ACPICA kernel-resident subsystem:

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

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

Table Manager: Added a new public interface, AcpiPutTable, used to 
release and free an ACPI table returned by AcpiGetTable and related 
interfaces. Lv Zheng.

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

  Current Release:
    Non-Debug Version: 140.5K Code, 58.5K Data, 198.9K Total
    Debug Version:     201.3K Code, 82.7K Data, 284.0K Total
  Previous Release:
    Non-Debug Version: 140.4K Code, 58.1K Data, 198.5K Total
    Debug Version:     200.7K Code, 82.1K Data, 282.8K Total


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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

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

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

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


1) ACPICA kernel-resident subsystem:

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

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

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

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

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

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

  Current Release:
    Non-Debug Version: 140.4K Code, 58.1K Data, 198.5K Total
    Debug Version:     200.7K Code, 82.1K Data, 282.8K Total
  Previous Release:
    Non-Debug Version: 140.0K Code, 58.1K Data, 198.1K Total
    Debug Version:     200.3K Code, 82.1K Data, 282.4K Total


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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

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

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


1) ACPICA kernel-resident subsystem:

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

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

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

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

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

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

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

Cleanup the inclusion order of the various compiler-specific headers. 
This simplifies build configuration management. The compiler-specific 
headers are now split out from the host-specific headers. Lv Zheng.

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

  Current Release:
    Non-Debug Version: 140.1K Code, 58.1K Data, 198.1K Total
    Debug Version:     200.3K Code, 82.1K Data, 282.4K Total


2) iASL Compiler/Disassembler and Tools:

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

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

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


1) ACPICA kernel-resident subsystem:

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

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

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

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

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

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


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

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


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

  Current Release:
    Non-Debug Version: 139.1K Code, 22.9K Data, 162.0K Total
    Debug Version:     199.0K Code, 81.8K Data, 280.8K Total


2) iASL Compiler/Disassembler and Tools:

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

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

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

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


1) ACPICA kernel-resident subsystem:

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

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

Fixed a couple of GCC warnings associated with the use of the -Wcast-qual 
option. Adds a new return macro, return_STR. Junk-uk Kim.

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

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

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

1) ACPICA kernel-resident subsystem:

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

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

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

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

ACPI 6.1: Added support for a new PCCT subtable, "HW-Reduced Comm 
Subspace Type2" (Headers, Disassembler, and data table compiler).

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

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


2) iASL Compiler/Disassembler and Tools:

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

    Device
    PowerResource
    Processor
    Scope
    ThermalZone

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

    For (Initialize, Predicate, Update) {TermList}

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


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

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

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

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

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

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

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

1) ACPICA kernel-resident subsystem:

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

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

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

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

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

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

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

  Current Release:
    Non-Debug Version: 137.1K Code, 51.5K Data, 188.6K Total
    Debug Version:     201.0K Code, 82.0K Data, 283.0K Total
  Previous Release:
    Non-Debug Version: 136.2K Code, 51.5K Data, 187.7K Total
    Debug Version:     200.4K Code, 82.0K Data, 282.4K Total


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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

1) ACPICA kernel-resident subsystem:

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

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

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

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

ACPICA now supports the GCC 6 compiler.

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

1) ACPICA kernel-resident subsystem:

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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


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

1) ACPICA kernel-resident subsystem:

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

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

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

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

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

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

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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

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

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


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

1) ACPICA kernel-resident subsystem:

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

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

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

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

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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


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

1) ACPICA kernel-resident subsystem:

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

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

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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

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

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

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

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

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

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


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

1) ACPICA kernel-resident subsystem:

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

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

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

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

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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


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

1) ACPICA kernel-resident subsystem:

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

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

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

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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

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

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


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

Two regressions in version 20150616 have been addressed:

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

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


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


1) ACPICA kernel-resident subsystem:

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

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

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

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

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

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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

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

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

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

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


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

This release implements most of ACPI 6.0 as described below.

1) ACPICA kernel-resident subsystem:

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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

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


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

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


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


1) ACPICA kernel-resident subsystem:

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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

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

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

Debugger: Removed some unused global variables.

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


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

ACPICA kernel-resident subsystem:

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

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

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

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

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

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

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

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


1) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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


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

    // Math operators

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

    // Logical operators

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

    // Assignment and compound assignment operations

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


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

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

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

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

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


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

1) ACPICA kernel-resident subsystem:

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

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

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

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

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

2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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


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

1) ACPICA kernel-resident subsystem:

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

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

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

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

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

2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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

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

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

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

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


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

24 July 2014. Summary of changes for version 20140724: 

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


0) ACPI 5.1 support in ACPICA:

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

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

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

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


1) ACPICA kernel-resident subsystem:

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

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

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

1) ACPICA kernel-resident subsystem:

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

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

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

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

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

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

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

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

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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


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

1) ACPICA kernel-resident subsystem:

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

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

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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


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

1) ACPICA kernel-resident subsystem:

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

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

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

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

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

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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


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

1) ACPICA kernel-resident subsystem:

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

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

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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


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

1) ACPICA kernel-resident subsystem:

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

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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


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

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


1) ACPICA kernel-resident subsystem:

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

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

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

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

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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

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


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

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


1) ACPICA kernel-resident subsystem:

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

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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


1) ACPICA kernel-resident subsystem:

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

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

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

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

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

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

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

Replaced __FUNCTION_ with __func__ in the gcc-specific header.

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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

1) ACPICA kernel-resident subsystem:

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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

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

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

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

1) ACPICA kernel-resident subsystem:

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

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

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

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

1) ACPICA kernel-resident subsystem:

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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

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

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

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

1) ACPICA kernel-resident subsystem:

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

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

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

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

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

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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

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

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

1) ACPICA kernel-resident subsystem:

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

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

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

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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

1) ACPICA kernel-resident subsystem:

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

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

1) ACPICA Kernel-resident Subsystem:

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

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

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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

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

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

1) ACPICA Kernel-resident Subsystem:

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

1) ACPICA Kernel-resident Subsystem:

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

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

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

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

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

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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


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

1) ACPICA Kernel-resident Subsystem:

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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

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

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

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

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


1) ACPICA Kernel-resident Subsystem:

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

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

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

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

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

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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


1) ACPICA Kernel-resident Subsystem:

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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

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

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


1) ACPICA Kernel-resident Subsystem:

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

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

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

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

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

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

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

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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

1) ACPICA Kernel-resident Subsystem:

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

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

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

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

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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


1) ACPICA Kernel-resident Subsystem:

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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

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


1) ACPICA Core Subsystem:

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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

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


1) ACPICA Core Subsystem:

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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

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

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


1) ACPICA Core Subsystem:

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

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

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

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


1) ACPICA Core Subsystem:

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

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

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

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

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

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


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

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

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

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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


1) ACPICA Core Subsystem:

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

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

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

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

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


2) iASL Compiler/Disassembler and Tools:

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

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

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

0) ACPI 5.0 Support:

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

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

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

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

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

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

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

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

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

    GeneralPurposeIo
    GenericSerialBus

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

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

    FixedDma
    GpioIo
    GpioInt
    I2cSerialBus
    SpiSerialBus
    UartSerialBus

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

1) ACPICA Core Subsystem:

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

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

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

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

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

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

2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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

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

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

3) Example Code and Data Size

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

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

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

0) ACPI 5.0 News:

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

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

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

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

2) iASL Compiler/Disassembler and Tools:

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

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

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

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

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

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

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

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

3) Example Code and Data Size

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

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


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

1) ACPI CA Core Subsystem:

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

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

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

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

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug 
version of the code includes the debug output trace mechanism and has a 
much 
larger code and data size.

  Previous Release (VC 9.0):
    Non-Debug Version:  90.1K Code, 23.9K Data, 114.0K Total
    Debug Version:     165.6K Code, 68.4K Data, 234.0K Total
  Current Release (VC 9.0):
    Non-Debug Version:  90.2K Code, 23.9K Data, 114.1K Total
    Debug Version:     165.6K Code, 68.4K Data, 234.0K Total

2) iASL Compiler/Disassembler and Tools:

With this release, a new utility named "acpihelp" has been added to the 
ACPICA 
package. This utility summarizes the ACPI specification chapters for the 
ASL 
and AML languages. It generates under Linux/Unix as well as Windows, and 
provides the following functionality:
    Find/display ASL operator(s) -- with description and syntax.
    Find/display ASL keyword(s) -- with exact spelling and descriptions.
    Find/display ACPI predefined name(s) -- with description, number
        of arguments, and the return value data type.
    Find/display AML opcode name(s) -- with opcode, arguments, and 
grammar.
    Decode/display AML opcode -- with opcode name, arguments, and 
grammar.

Service Layers: Make multi-thread support configurable. Conditionally 
compile 
the multi-thread support so that threading libraries will not be linked 
if 
not 
necessary. The only tool that requires multi-thread support is AcpiExec.

iASL: Update yyerrror/AslCompilerError for "const" errors. Newer versions 
of 
Bison appear to want the interface to yyerror to be a const char * (or at 
least this is a problem when generating iASL on some systems.) ACPICA BZ 
923 
Pierre Lejeune.

Tools: Fix for systems where O_BINARY is not defined. Only used for 
Windows 
versions of the tools.

----------------------------------------
27 May 2011. Summary of changes for version 20110527:

1) ACPI CA Core Subsystem:

ASL Load() operator: Reinstate most restrictions on the incoming ACPI 
table 
signature. Now, only allow SSDT, OEMx, and a null signature. History:
    1) Originally, we checked the table signature for "SSDT" or "PSDT".
       (PSDT is now obsolete.)
    2) We added support for OEMx tables, signature "OEM" plus a fourth
       "don't care" character.
    3) Valid tables were encountered with a null signature, so we just
       gave up on validating the signature, (05/2008).
    4) We encountered non-AML tables such as the MADT, which caused
       interpreter errors and kernel faults. So now, we once again allow
       only SSDT, OEMx, and now, also a null signature. (05/2011).

Added the missing _TDL predefined name to the global name list in order 
to 
enable validation. Affects both the core ACPICA code and the iASL 
compiler.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug 
version of the code includes the debug output trace mechanism and has a 
much 
larger code and data size.

  Previous Release (VC 9.0):
    Non-Debug Version:  90.0K Code, 23.8K Data, 113.8K Total
    Debug Version:     164.5K Code, 68.0K Data, 232.5K Total
  Current Release (VC 9.0):
    Non-Debug Version:  90.1K Code, 23.9K Data, 114.0K Total
    Debug Version:     165.6K Code, 68.4K Data, 234.0K Total

2) iASL Compiler/Disassembler and Tools:

Debugger/AcpiExec: Implemented support for "complex" method arguments on 
the 
debugger command line. This adds support beyond simple integers -- 
including 
Strings, Buffers, and Packages. Includes support for nested packages. 
Increased the default command line buffer size to accommodate these 
arguments. 
See the ACPICA reference for details and syntax. ACPICA BZ 917.
 
Debugger/AcpiExec: Implemented support for "default" method arguments for 
the 
Execute/Debug command. Now, the debugger will always invoke a control 
method 
with the required number of arguments -- even if the command line 
specifies 
none or insufficient arguments. It uses default integer values for any 
missing 
arguments. Also fixes a bug where only six method arguments maximum were 
supported instead of the required seven.

Debugger/AcpiExec: Add a maximum buffer length parameter to AcpiOsGetLine 
and 
also return status in order to prevent buffer overruns. See the ACPICA 
reference for details and syntax. ACPICA BZ 921

iASL: Cleaned up support for Berkeley yacc. A general cleanup of code and 
makefiles to simplify support for the two different but similar parser 
generators, bison and yacc.

Updated the generic unix makefile for gcc 4. The default gcc version is 
now 
expected to be 4 or greater, since options specific to gcc 4 are used.

----------------------------------------
13 April 2011. Summary of changes for version 20110413:

1) ACPI CA Core Subsystem:

Implemented support to execute a so-called "orphan" _REG method under the 
EC 
device. This change will force the execution of a _REG method underneath 
the 
EC 
device even if there is no corresponding operation region of type 
EmbeddedControl. Fixes a problem seen on some machines and apparently is 
compatible with Windows behavior. ACPICA BZ 875.

Added more predefined methods that are eligible for automatic NULL 
package 
element removal. This change adds another group of predefined names to 
the 
list 
of names that can be repaired by having NULL package elements dynamically 
removed. This group are those methods that return a single variable-
length 
package containing simple data types such as integers, buffers, strings. 
This 
includes: _ALx, _BCL, _CID,_ DOD, _EDL, _FIX, _PCL, _PLD, _PMD, _PRx, 
_PSL, 
_Sx, 
and _TZD. ACPICA BZ 914.

Split and segregated all internal global lock functions to a new file, 
evglock.c.

Updated internal address SpaceID for DataTable regions. Moved this 
internal 
space 
id in preparation for ACPI 5.0 changes that will include some new space 
IDs. 
This 
change should not affect user/host code.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib 
produced by the Microsoft Visual C++ 9.0 32-bit compiler. The debug 
version of 
the code includes the debug output trace mechanism and has a much larger 
code 
and 
data size.

  Previous Release (VC 9.0):
    Non-Debug Version:  89.8K Code, 23.8K Data, 113.6K Total
    Debug Version:     164.2K Code, 67.9K Data, 232.1K Total
  Current Release (VC 9.0):
    Non-Debug Version:  90.0K Code, 23.8K Data, 113.8K Total
    Debug Version:     164.5K Code, 68.0K Data, 232.5K Total

2) iASL Compiler/Disassembler and Tools:

iASL/DTC: Major update for new grammar features. Allow generic data types 
in 
custom ACPI tables. Field names are now optional. Any line can be split 
to 
multiple lines using the continuation char (\). Large buffers now use 
line-
continuation character(s) and no colon on the continuation lines. See the 
grammar 
update in the iASL compiler reference. ACPI BZ 910,911. Lin Ming, Bob 
Moore.

iASL: Mark ASL "Return()" and the simple "Return" as "Null" return 
statements. 
Since the parser stuffs a "zero" as the return value for these statements 
(due 
to 
the underlying AML grammar), they were seen as "return with value" by the 
iASL 
semantic checking. They are now seen correctly as "null" return 
statements.

iASL: Check if a_REG declaration has a corresponding Operation Region. 
Adds a 
check for each _REG to ensure that there is in fact a corresponding 
operation 
region declaration in the same scope. If not, the _REG method is not very 
useful 
since it probably won't be executed. ACPICA BZ 915.

iASL/DTC: Finish support for expression evaluation. Added a new 
expression 
parser 
that implements c-style operator precedence and parenthesization. ACPICA 
bugzilla 
908.

Disassembler/DTC: Remove support for () and <> style comments in data 
tables. 
Now 
that DTC has full expression support, we don't want to have comment 
strings 
that 
start with a parentheses or a less-than symbol. Now, only the standard /* 
and 
// 
comments are supported, as well as the bracket [] comments.

AcpiXtract: Fix for RSDP and dynamic SSDT extraction. These tables have 
"unusual" 
headers in the acpidump file. Update the header validation to support 
these 
tables. Problem introduced in previous AcpiXtract version in the change 
to 
support "wrong checksum" error messages emitted by acpidump utility.

iASL: Add a * option to generate all template files (as a synonym for 
ALL) 
as 
in 
"iasl -T *" or "iasl -T ALL".

iASL/DTC: Do not abort compiler on fatal errors. We do not want to 
completely 
abort the compiler on "fatal" errors, simply should abort the current 
compile. 
This allows multiple compiles with a single (possibly wildcard) compiler 
invocation.

----------------------------------------
16 March 2011. Summary of changes for version 20110316:

1) ACPI CA Core Subsystem:

Fixed a problem caused by a _PRW method appearing at the namespace root 
scope 
during the setup of wake GPEs. A fault could occur if a _PRW directly 
under 
the 
root object was passed to the AcpiSetupGpeForWake interface. Lin Ming.

Implemented support for "spurious" Global Lock interrupts. On some 
systems, a 
global lock interrupt can occur without the pending flag being set. Upon 
a 
GL 
interrupt, we now ensure that a thread is actually waiting for the lock 
before 
signaling GL availability. Rafael Wysocki, Bob Moore.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib 
produced by the Microsoft Visual C++ 9.0 32-bit compiler. The debug 
version of 
the code includes the debug output trace mechanism and has a much larger 
code 
and 
data size.

  Previous Release (VC 9.0):
    Non-Debug Version:  89.7K Code, 23.7K Data, 113.4K Total
    Debug Version:     163.9K Code, 67.5K Data, 231.4K Total
  Current Release (VC 9.0):
    Non-Debug Version:  89.8K Code, 23.8K Data, 113.6K Total
    Debug Version:     164.2K Code, 67.9K Data, 232.1K Total

2) iASL Compiler/Disassembler and Tools:

Implemented full support for the "SLIC" ACPI table. Includes support in 
the 
header files, disassembler, table compiler, and template generator. Bob 
Moore, 
Lin Ming.

AcpiXtract: Correctly handle embedded comments and messages from 
AcpiDump. 
Apparently some or all versions of acpidump will occasionally emit a 
comment 
like 
"Wrong checksum", etc., into the dump file. This was causing problems for 
AcpiXtract. ACPICA BZ 905.

iASL: Fix the Linux makefile by removing an inadvertent double file 
inclusion. 
ACPICA BZ 913.

AcpiExec: Update installation of operation region handlers. Install one 
handler 
for a user-defined address space. This is used by the ASL test suite 
(ASLTS).

----------------------------------------
11 February 2011. Summary of changes for version 20110211:

1) ACPI CA Core Subsystem:

Added a mechanism to defer _REG methods for some early-installed 
handlers. 
Most user handlers should be installed before call to 
AcpiEnableSubsystem. 
However, Event handlers and region handlers should be installed after 
AcpiInitializeObjects. Override handlers for the "default" regions should 
be 
installed early, however. This change executes all _REG methods for the 
default regions (Memory/IO/PCI/DataTable) simultaneously to prevent any 
chicken/egg issues between them. ACPICA BZ 848.

Implemented an optimization for GPE detection. This optimization will 
simply 
ignore GPE registers that contain no enabled GPEs -- there is no need to 
read the register since this information is available internally. This 
becomes more important on machines with a large GPE space. ACPICA 
bugzilla 
884. Lin Ming. Suggestion from Joe Liu.

Removed all use of the highly unreliable FADT revision field. The 
revision 
number in the FADT has been found to be completely unreliable and cannot 
be 
trusted. Only the actual table length can be used to infer the version. 
This 
change updates the ACPICA core and the disassembler so that both no 
longer 
even look at the FADT version and instead depend solely upon the FADT 
length.

Fix an unresolved name issue for the no-debug and no-error-message source 
generation cases. The _AcpiModuleName was left undefined in these cases, 
but 
it is actually needed as a parameter to some interfaces. Define 
_AcpiModuleName as a null string in these cases. ACPICA Bugzilla 888.

Split several large files (makefiles and project files updated)
  utglobal.c   -> utdecode.c
  dbcomds.c    -> dbmethod.c dbnames.c
  dsopcode.c   -> dsargs.c dscontrol.c
  dsload.c     -> dsload2.c
  aslanalyze.c -> aslbtypes.c aslwalks.c

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release (VC 9.0):
    Non-Debug Version:  89.7K Code, 23.7K Data, 113.4K Total
    Debug Version:     163.9K Code, 67.5K Data, 231.4K Total
  Current Release (VC 9.0):
    Non-Debug Version:  89.7K Code, 23.7K Data, 113.4K Total
    Debug Version:     163.9K Code, 67.5K Data, 231.4K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Implemented the predefined macros __LINE__, __FILE__, and __DATE__. 
These are useful C-style macros with the standard definitions. ACPICA 
bugzilla 898.

iASL/DTC: Added support for integer expressions and labels. Support for 
full 
expressions for all integer fields in all ACPI tables. Support for labels 
in 
"generic" portions of tables such as UEFI. See the iASL reference manual.

Debugger: Added a command to display the status of global handlers. The 
"handlers" command will display op region, fixed event, and miscellaneous 
global handlers. installation status -- and for op regions, whether 
default 
or user-installed handler will be used.

iASL: Warn if reserved method incorrectly returns a value. Many 
predefined 
names are defined such that they do not return a value. If implemented as 
a 
method, issue a warning if such a name explicitly returns a value. ACPICA 
Bugzilla 855.

iASL: Added detection of GPE method name conflicts. Detects a conflict 
where 
there are two GPE methods of the form _Lxy and _Exy in the same scope. 
(For 
example, _L1D and _E1D in the same scope.) ACPICA bugzilla 848.

iASL/DTC: Fixed a couple input scanner issues with comments and line 
numbers. Comment remover could get confused and miss a comment ending. 
Fixed 
a problem with line counter maintenance.

iASL/DTC: Reduced the severity of some errors from fatal to error. There 
is 
no need to abort on simple errors within a field definition.

Debugger: Simplified the output of the help command. All help output now 
in 
a single screen, instead of help subcommands. ACPICA Bugzilla 897.

----------------------------------------
12 January 2011. Summary of changes for version 20110112:

1) ACPI CA Core Subsystem:

Fixed a race condition between method execution and namespace walks that 
can 
possibly cause a fault. The problem was apparently introduced in version 
20100528 as a result of a performance optimization that reduces the 
number 
of 
namespace walks upon method exit by using the delete_namespace_subtree 
function instead of the delete_namespace_by_owner function used 
previously. 
Bug is a missing namespace lock in the delete_namespace_subtree function. 
dana.myers@oracle.com

Fixed several issues and a possible fault with the automatic "serialized" 
method support. History: This support changes a method to "serialized" on 
the 
fly if the method generates an AE_ALREADY_EXISTS error, indicating the 
possibility that it cannot handle reentrancy. This fix repairs a couple 
of 
issues seen in the field, especially on machines with many cores:

    1) Delete method children only upon the exit of the last thread,
       so as to not delete objects out from under other running threads
      (and possibly causing a fault.)
    2) Set the "serialized" bit for the method only upon the exit of the
       Last thread, so as to not cause deadlock when running threads
       attempt to exit.
    3) Cleanup the use of the AML "MethodFlags" and internal method flags
       so that there is no longer any confusion between the two.

    Lin Ming, Bob Moore. Reported by dana.myers@oracle.com.

Debugger: Now lock the namespace for duration of a namespace dump. 
Prevents 
issues if the namespace is changing dynamically underneath the debugger. 
Especially affects temporary namespace nodes, since the debugger displays 
these also.

Updated the ordering of include files. The ACPICA headers should appear 
before any compiler-specific headers (stdio.h, etc.) so that acenv.h can 
set 
any necessary compiler-specific defines, etc. Affects the ACPI-related 
tools 
and utilities.

Updated all ACPICA copyrights and signons to 2011. Added the 2011 
copyright 
to all module headers and signons, including the Linux header. This 
affects 
virtually every file in the ACPICA core subsystem, iASL compiler, and all 
utilities.

Added project files for MS Visual Studio 2008 (VC++ 9.0). The original 
project files for VC++ 6.0 are now obsolete. New project files can be 
found 
under acpica/generate/msvc9. See acpica/generate/msvc9/readme.txt for 
details.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release (VC 6.0):
    Non-Debug Version:  89.8K Code, 18.9K Data, 108.7K Total
    Debug Version:     166.6K Code, 52.1K Data, 218.7K Total
  Current Release (VC 9.0):
    Non-Debug Version:  89.7K Code, 23.7K Data, 113.4K Total
    Debug Version:     163.9K Code, 67.5K Data, 231.4K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Added generic data types to the Data Table compiler. Add "generic" 
data 
types such as UINT32, String, Unicode, etc., to simplify the generation 
of 
platform-defined tables such as UEFI. Lin Ming.

iASL: Added listing support for the Data Table Compiler. Adds listing 
support 
(-l) to display actual binary output for each line of input code.

----------------------------------------
09 December 2010. Summary of changes for version 20101209:

1) ACPI CA Core Subsystem:

Completed the major overhaul of the GPE support code that was begun in 
July 
2010. Major features include: removal of _PRW execution in ACPICA (host 
executes _PRWs anyway), cleanup of "wake" GPE interfaces and processing, 
changes to existing interfaces, simplification of GPE handler operation, 
and 
a handful of new interfaces:

    AcpiUpdateAllGpes
    AcpiFinishGpe
    AcpiSetupGpeForWake
    AcpiSetGpeWakeMask
    One new file, evxfgpe.c to consolidate all external GPE interfaces.

See the ACPICA Programmer Reference for full details and programming 
information. See the new section 4.4 "General Purpose Event (GPE) 
Support" 
for a full overview, and section 8.7 "ACPI General Purpose Event 
Management" 
for programming details. ACPICA BZ 858,870,877. Matthew Garrett, Lin 
Ming, 
Bob Moore, Rafael Wysocki.

Implemented a new GPE feature for Windows compatibility, the "Implicit 
Wake 
GPE Notify". This feature will automatically issue a Notify(2) on a 
device 
when a Wake GPE is received if there is no corresponding GPE method or 
handler. ACPICA BZ 870.

Fixed a problem with the Scope() operator during table parse and load 
phase. 
During load phase (table load or method execution), the scope operator 
should 
not enter the target into the namespace. Instead, it should open a new 
scope 
at the target location. Linux BZ 19462, ACPICA BZ 882.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  89.8K Code, 18.9K Data, 108.7K Total
    Debug Version:     166.6K Code, 52.1K Data, 218.7K Total
  Current Release:
    Non-Debug Version:  89.9K Code, 19.0K Data, 108.9K Total
    Debug Version:     166.3K Code, 52.1K Data, 218.4K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Relax the alphanumeric restriction on _CID strings. These strings 
are 
"bus-specific" per the ACPI specification, and therefore any characters 
are 
acceptable. The only checks that can be performed are for a null string 
and 
perhaps for a leading asterisk. ACPICA BZ 886.

iASL: Fixed a problem where a syntax error that caused a premature EOF 
condition on the source file emitted a very confusing error message. The 
premature EOF is now detected correctly. ACPICA BZ 891.

Disassembler: Decode the AccessSize within a Generic Address Structure 
(byte 
access, word access, etc.) Note, this field does not allow arbitrary bit 
access, the size is encoded as 1=byte, 2=word, 3=dword, and 4=qword.

New: AcpiNames utility - Example namespace dump utility. Shows an example 
of 
ACPICA configuration for a minimal namespace dump utility. Uses table and 
namespace managers, but no AML interpreter. Does not add any 
functionality 
over AcpiExec, it is a subset of AcpiExec. The purpose is to show how to 
partition and configure ACPICA. ACPICA BZ 883.

AML Debugger: Increased the debugger buffer size for method return 
objects. 
Was 4K, increased to 16K. Also enhanced error messages for debugger 
method 
execution, including the buffer overflow case.

----------------------------------------
13 October 2010. Summary of changes for version 20101013:

1) ACPI CA Core Subsystem:

Added support to clear the PCIEXP_WAKE event. When clearing ACPI events, 
now 
clear the PCIEXP_WAKE_STS bit in the ACPI PM1 Status Register, via 
HwClearAcpiStatus. Original change from Colin King. ACPICA BZ 880.

Changed the type of the predefined namespace object _TZ from ThermalZone 
to 
Device. This was found to be confusing to the host software that 
processes 
the various thermal zones, since _TZ is not really a ThermalZone. 
However, 
a 
Notify() can still be performed on it. ACPICA BZ 876. Suggestion from Rui 
Zhang.

Added Windows Vista SP2 to the list of supported _OSI strings. The actual 
string is "Windows 2006 SP2".

Eliminated duplicate code in AcpiUtExecute* functions. Now that the 
nsrepair 
code automatically repairs _HID-related strings, this type of code is no 
longer needed in Execute_HID, Execute_CID, and Execute_UID. ACPICA BZ 
878.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  89.9K Code, 19.0K Data, 108.9K Total
    Debug Version:     166.3K Code, 52.1K Data, 218.4K Total
  Current Release:
    Non-Debug Version:  89.9K Code, 19.0K Data, 108.9K Total
    Debug Version:     166.3K Code, 52.1K Data, 218.4K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Implemented additional compile-time validation for _HID strings. 
The 
non-hex prefix (such as "PNP" or "ACPI") must be uppercase, and the 
length 
of 
the string must be exactly seven or eight characters. For both _HID and 
_CID 
strings, all characters must be alphanumeric. ACPICA BZ 874.

iASL: Allow certain "null" resource descriptors. Some BIOS code creates 
descriptors that are mostly or all zeros, with the expectation that they 
will 
be filled in at runtime. iASL now allows this as long as there is a 
"resource 
tag" (name) associated with the descriptor, which gives the ASL a handle 
needed to modify the descriptor. ACPICA BZ 873.

Added single-thread support to the generic Unix application OSL. 
Primarily 
for iASL support, this change removes the use of semaphores in the 
single-
threaded ACPICA tools/applications - increasing performance. The 
_MULTI_THREADED option was replaced by the (reverse) ACPI_SINGLE_THREADED 
option. ACPICA BZ 879.

AcpiExec: several fixes for the 64-bit version. Adds XSDT support and 
support 
for 64-bit DSDT/FACS addresses in the FADT. Lin Ming.

iASL: Moved all compiler messages to a new file, aslmessages.h.

----------------------------------------
15 September 2010. Summary of changes for version 20100915:

1) ACPI CA Core Subsystem:

Removed the AcpiOsDerivePciId OSL interface. The various host 
implementations 
of this function were not OS-dependent and are now obsolete and can be 
removed from all host OSLs. This function has been replaced by 
AcpiHwDerivePciId, which is now part of the ACPICA core code. 
AcpiHwDerivePciId has been implemented without recursion. Adds one new 
module, hwpci.c. ACPICA BZ 857.

Implemented a dynamic repair for _HID and _CID strings. The following 
problems are now repaired at runtime: 1) Remove a leading asterisk in the 
string, and 2) the entire string is uppercased. Both repairs are in 
accordance with the ACPI specification and will simplify host driver 
code. 
ACPICA BZ 871.

The ACPI_THREAD_ID type is no longer configurable, internally it is now 
always UINT64. This simplifies the ACPICA code, especially any printf 
output. 
UINT64 is the only common data type for all thread_id types across all 
operating systems. It is now up to the host OSL to cast the native 
thread_id 
type to UINT64 before returning the value to ACPICA (via 
AcpiOsGetThreadId). 
Lin Ming, Bob Moore.

Added the ACPI_INLINE type to enhance the ACPICA configuration. The 
"inline" 
keyword is not standard across compilers, and this type allows inline to 
be 
configured on a per-compiler basis. Lin Ming.

Made the system global AcpiGbl_SystemAwakeAndRunning publically 
available. 
Added an extern for this boolean in acpixf.h. Some hosts utilize this 
value 
during suspend/restore operations. ACPICA BZ 869.

All code that implements error/warning messages with the "ACPI:" prefix 
has 
been moved to a new module, utxferror.c.

The UINT64_OVERLAY was moved to utmath.c, which is the only module where 
it 
is used. ACPICA BZ 829. Lin Ming, Bob Moore.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  89.1K Code, 19.0K Data, 108.1K Total
    Debug Version:     165.1K Code, 51.9K Data, 217.0K Total
  Current Release:
    Non-Debug Version:  89.9K Code, 19.0K Data, 108.9K Total
    Debug Version:     166.3K Code, 52.1K Data, 218.4K Total

2) iASL Compiler/Disassembler and Tools:

iASL/Disassembler: Write ACPI errors to stderr instead of the output 
file. 
This keeps the output files free of random error messages that may 
originate 
from within the namespace/interpreter code. Used this opportunity to 
merge 
all ACPI:-style messages into a single new module, utxferror.c. ACPICA BZ 
866. Lin Ming, Bob Moore.

Tools: update some printfs for ansi warnings on size_t. Handle width 
change 
of size_t on 32-bit versus 64-bit generations. Lin Ming.

----------------------------------------
06 August 2010. Summary of changes for version 20100806:

1) ACPI CA Core Subsystem:

Designed and implemented a new host interface to the _OSI support code. 
This 
will allow the host to dynamically add or remove multiple _OSI strings, 
as 
well as install an optional handler that is called for each _OSI 
invocation. 
Also added a new AML debugger command, 'osi' to display and modify the 
global 
_OSI string table, and test support in the AcpiExec utility. See the 
ACPICA 
reference manual for full details. Lin Ming, Bob Moore. ACPICA BZ 836.
New Functions:
    AcpiInstallInterface - Add an _OSI string.
    AcpiRemoveInterface - Delete an _OSI string.
    AcpiInstallInterfaceHandler - Install optional _OSI handler.
Obsolete Functions:
    AcpiOsValidateInterface - no longer used.
New Files:
    source/components/utilities/utosi.c

Re-introduced the support to enable multi-byte transfers for Embedded 
Controller (EC) operation regions. A reported problem was found to be a 
bug 
in the host OS, not in the multi-byte support. Previously, the maximum 
data 
size passed to the EC operation region handler was a single byte. There 
are 
often EC Fields larger than one byte that need to be transferred, and it 
is 
useful for the EC driver to lock these as a single transaction. This 
change 
enables single transfers larger than 8 bits. This effectively changes the 
access to the EC space from ByteAcc to AnyAcc, and will probably require 
changes to the host OS Embedded Controller driver to enable 16/32/64/256-
bit 
transfers in addition to 8-bit transfers. Alexey Starikovskiy, Lin Ming.

Fixed a problem with the prototype for AcpiOsReadPciConfiguration. The 
prototype in acpiosxf.h had the output value pointer as a (void *).
It should be a (UINT64 *). This may affect some host OSL code.

Fixed a couple problems with the recently modified Linux makefiles for 
iASL 
and AcpiExec. These new makefiles place the generated object files in the 
local directory so that there can be no collisions between the files that 
are 
shared between them that are compiled with different options.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  88.3K Code, 18.8K Data, 107.1K Total
    Debug Version:     164.0K Code, 51.5K Data, 215.5K Total
  Current Release:
    Non-Debug Version:  89.1K Code, 19.0K Data, 108.1K Total
    Debug Version:     165.1K Code, 51.9K Data, 217.0K Total

2) iASL Compiler/Disassembler and Tools:

iASL/Disassembler: Added a new option (-da, "disassemble all") to load 
the 
namespace from and disassemble an entire group of AML files. Useful for 
loading all of the AML tables for a given machine (DSDT, SSDT1...SSDTn) 
and 
disassembling with one simple command. ACPICA BZ 865. Lin Ming.

iASL: Allow multiple invocations of -e option. This change allows 
multiple 
uses of -e on the command line: "-e ssdt1.dat -e ssdt2.dat". ACPICA BZ 
834. 
Lin Ming.

----------------------------------------
02 July 2010. Summary of changes for version 20100702:

1) ACPI CA Core Subsystem:

Implemented several updates to the recently added GPE reference count 
support. The model for "wake" GPEs is changing to give the host OS 
complete 
control of these GPEs. Eventually, the ACPICA core will not execute any 
_PRW 
methods, since the host already must execute them. Also, additional 
changes 
were made to help ensure that the reference counts are kept in proper 
synchronization with reality. Rafael J. Wysocki.

1) Ensure that GPEs are not enabled twice during initialization.
2) Ensure that GPE enable masks stay in sync with the reference count.
3) Do not inadvertently enable GPEs when writing GPE registers.
4) Remove the internal wake reference counter and add new AcpiGpeWakeup 
interface. This interface will set or clear individual GPEs for wakeup.
5) Remove GpeType argument from AcpiEnable and AcpiDisable. These 
interfaces 
are now used for "runtime" GPEs only.

Changed the behavior of the GPE install/remove handler interfaces. The 
GPE 
is 
no longer disabled during this process, as it was found to cause problems 
on 
some machines. Rafael J. Wysocki.

Reverted a change introduced in version 20100528 to enable Embedded 
Controller multi-byte transfers. This change was found to cause problems 
with 
Index Fields and possibly Bank Fields. It will be reintroduced when these 
problems have been resolved.

Fixed a problem with references to Alias objects within Package Objects. 
A 
reference to an Alias within the definition of a Package was not always 
resolved properly. Aliases to objects like Processors, Thermal zones, 
etc. 
were resolved to the actual object instead of a reference to the object 
as 
it 
should be. Package objects are only allowed to contain integer, string, 
buffer, package, and reference objects. Redhat bugzilla 608648.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  88.3K Code, 18.8K Data, 107.1K Total
    Debug Version:     164.1K Code, 51.5K Data, 215.6K Total
  Current Release:
    Non-Debug Version:  88.3K Code, 18.8K Data, 107.1K Total
    Debug Version:     164.0K Code, 51.5K Data, 215.5K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Implemented a new compiler subsystem to allow definition and 
compilation of the non-AML ACPI tables such as FADT, MADT, SRAT, etc. 
These 
are called "ACPI Data Tables", and the new compiler is the "Data Table 
Compiler". This compiler is intended to simplify the existing error-prone 
process of creating these tables for the BIOS, as well as allowing the 
disassembly, modification, recompilation, and override of existing ACPI 
data 
tables. See the iASL User Guide for detailed information.

iASL: Implemented a new Template Generator option in support of the new 
Data 
Table Compiler. This option will create examples of all known ACPI tables 
that can be used as the basis for table development. See the iASL 
documentation and the -T option.

Disassembler and headers: Added support for the WDDT ACPI table (Watchdog 
Descriptor Table).

Updated the Linux makefiles for iASL and AcpiExec to place the generated 
object files in the local directory so that there can be no collisions 
between the shared files between them that are generated with different 
options.

Added support for Mac OS X in the Unix OSL used for iASL and AcpiExec. 
Use 
the #define __APPLE__ to enable this support.

----------------------------------------
28 May 2010. Summary of changes for version 20100528:

Note: The ACPI 4.0a specification was released on April 5, 2010 and is 
available at www.acpi.info. This is primarily an errata release.

1) ACPI CA Core Subsystem:

Undefined ACPI tables: We are looking for the definitions for the 
following 
ACPI tables that have been seen in the field: ATKG, IEIT, GSCI.

Implemented support to enable multi-byte transfers for Embedded 
Controller 
(EC) operation regions. Previously, the maximum data size passed to the 
EC 
operation region handler was a single byte. There are often EC Fields 
larger 
than one byte that need to be transferred, and it is useful for the EC 
driver 
to lock these as a single transaction. This change enables single 
transfers 
larger than 8 bits. This effectively changes the access to the EC space 
from 
ByteAcc to AnyAcc, and will probably require changes to the host OS 
Embedded 
Controller driver to enable 16/32/64/256-bit transfers in addition to 8-
bit 
transfers. Alexey Starikovskiy, Lin Ming

Implemented a performance enhancement for namespace search and access. 
This 
change enhances the performance of namespace searches and walks by adding 
a 
backpointer to the parent in each namespace node. On large namespaces, 
this 
change can improve overall ACPI performance by up to 9X. Adding a pointer 
to 
each namespace node increases the overall size of the internal namespace 
by 
about 5%, since each namespace entry usually consists of both a namespace 
node and an ACPI operand object. However, this is the first growth of the 
namespace in ten years. ACPICA bugzilla 817. Alexey Starikovskiy.

Implemented a performance optimization that reduces the number of 
namespace 
walks. On control method exit, only walk the namespace if the method is 
known 
to have created namespace objects outside of its local scope. Previously, 
the 
entire namespace was traversed on each control method exit. This change 
can 
improve overall ACPI performance by up to 3X. Alexey Starikovskiy, Bob 
Moore.

Added support to truncate I/O addresses to 16 bits for Windows 
compatibility. 
Some ASL code has been seen in the field that inadvertently has bits set 
above bit 15. This feature is optional and is enabled if the BIOS 
requests 
any Windows OSI strings. It can also be enabled by the host OS. Matthew 
Garrett, Bob Moore.

Added support to limit the maximum time for the ASL Sleep() operator. To 
prevent accidental deep sleeps, limit the maximum time that Sleep() will 
actually sleep. Configurable, the default maximum is two seconds. ACPICA 
bugzilla 854.

Added run-time validation support for the _WDG and_WED Microsoft 
predefined 
methods. These objects are defined by "Windows Instrumentation", and are 
not 
part of the ACPI spec. ACPICA BZ 860.

Expanded all statistic counters used during namespace and device 
initialization from 16 to 32 bits in order to support very large 
namespaces.

Replaced all instances of %d in printf format specifiers with %u since 
nearly 
all integers in ACPICA are unsigned.

Fixed the exception namestring for AE_WAKE_ONLY_GPE. Was incorrectly 
returned 
as AE_NO_HANDLER.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  88.4K Code, 18.8K Data, 107.2K Total
    Debug Version:     164.2K Code, 51.5K Data, 215.7K Total
  Current Release:
    Non-Debug Version:  88.3K Code, 18.8K Data, 107.1K Total
    Debug Version:     164.1K Code, 51.5K Data, 215.6K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Added compiler support for the _WDG and_WED Microsoft predefined 
methods. These objects are defined by "Windows Instrumentation", and are 
not 
part of the ACPI spec. ACPICA BZ 860.

AcpiExec: added option to disable the memory tracking mechanism. The -dt 
option will disable the tracking mechanism, which improves performance 
considerably.

AcpiExec: Restructured the command line options into -d (disable) and -e 
(enable) options.

----------------------------------------
28 April 2010. Summary of changes for version 20100428:

1) ACPI CA Core Subsystem:

Implemented GPE support for dynamically loaded ACPI tables. For all GPEs, 
including FADT-based and GPE Block Devices, execute any _PRW methods in 
the 
new table, and process any _Lxx/_Exx GPE methods in the new table. Any 
runtime GPE that is referenced by an _Lxx/_Exx method in the new table is 
immediately enabled. Handles the FADT-defined GPEs as well as GPE Block 
Devices. Provides compatibility with other ACPI implementations. Two new 
files added, evgpeinit.c and evgpeutil.c. ACPICA BZ 833. Lin Ming, Bob 
Moore.

Fixed a regression introduced in version 20100331 within the table 
manager 
where initial table loading could fail. This was introduced in the fix 
for 
AcpiReallocateRootTable. Also, renamed some of fields in the table 
manager 
data structures to clarify their meaning and use.

Fixed a possible allocation overrun during internal object copy in 
AcpiUtCopySimpleObject. The original code did not correctly handle the 
case 
where the object to be copied was a namespace node. Lin Ming. ACPICA BZ 
847.

Updated the allocation dump routine, AcpiUtDumpAllocation and fixed a 
possible access beyond end-of-allocation. Also, now fully validate 
descriptor 
(size and type) before output. Lin Ming, Bob Moore. ACPICA BZ 847

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  87.9K Code, 18.6K Data, 106.5K Total
    Debug Version:     163.5K Code, 51.3K Data, 214.8K Total
  Current Release:
    Non-Debug Version:  88.4K Code, 18.8K Data, 107.2K Total
    Debug Version:     164.2K Code, 51.5K Data, 215.7K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Implemented Min/Max/Len/Gran validation for address resource 
descriptors. This change implements validation for the address fields 
that 
are common to all address-type resource descriptors. These checks are 
implemented: Checks for valid Min/Max, length within the Min/Max window, 
valid granularity, Min/Max a multiple of granularity, and _MIF/_MAF as 
per 
table 6-40 in the ACPI 4.0a specification. Also split the large 
aslrestype1.c 
and aslrestype2.c files into five new files. ACPICA BZ 840.

iASL: Added support for the _Wxx predefined names. This support was 
missing 
and these names were not recognized by the compiler as valid predefined 
names. ACPICA BZ 851.

iASL: Added an error for all predefined names that are defined to return 
no 
value and thus must be implemented as Control Methods. These include all 
of 
the _Lxx, _Exx, _Wxx, and _Qxx names, as well as some other miscellaneous 
names such as _DIS, _INI, _IRC, _OFF, _ON, and _PSx. ACPICA BZ 850, 856.

iASL: Implemented the -ts option to emit hex AML data in ASL format, as 
an 
ASL Buffer. Allows ACPI tables to be easily included within ASL files, to 
be 
dynamically loaded via the Load() operator. Also cleaned up output for 
the 
-
ta and -tc options. ACPICA BZ 853.

Tests: Added a new file with examples of extended iASL error checking. 
Demonstrates the advanced error checking ability of the iASL compiler. 
Available at tests/misc/badcode.asl.

----------------------------------------
31 March 2010. Summary of changes for version 20100331:

1) ACPI CA Core Subsystem:

Completed a major update for the GPE support in order to improve support 
for 
shared GPEs and to simplify both host OS and ACPICA code. Added a 
reference 
count mechanism to support shared GPEs that require multiple device 
drivers. 
Several external interfaces have changed. One external interface has been 
removed. One new external interface was added. Most of the GPE external 
interfaces now use the GPE spinlock instead of the events mutex (and the 
Flags parameter for many GPE interfaces has been removed.) See the 
updated 
ACPICA Programmer Reference for details. Matthew Garrett, Bob Moore, 
Rafael 
Wysocki. ACPICA BZ 831.

Changed:
    AcpiEnableGpe, AcpiDisableGpe, AcpiClearGpe, AcpiGetGpeStatus
Removed:
    AcpiSetGpeType
New:
    AcpiSetGpe

Implemented write support for DataTable operation regions. These regions 
are 
defined via the DataTableRegion() operator. Previously, only read support 
was 
implemented. The ACPI specification allows DataTableRegions to be 
read/write, 
however.

Implemented a new subsystem option to force a copy of the DSDT to local 
memory. Optionally copy the entire DSDT to local memory (instead of 
simply 
mapping it.) There are some (albeit very rare) BIOSs that corrupt or 
replace 
the original DSDT, creating the need for this option. Default is FALSE, 
do 
not copy the DSDT.

Implemented detection of a corrupted or replaced DSDT. This change adds 
support to detect a DSDT that has been corrupted and/or replaced from 
outside 
the OS (by firmware). This is typically catastrophic for the system, but 
has 
been seen on some machines. Once this problem has been detected, the DSDT 
copy option can be enabled via system configuration. Lin Ming, Bob Moore.

Fixed two problems with AcpiReallocateRootTable during the root table 
copy. 
When copying the root table to the new allocation, the length used was 
incorrect. The new size was used instead of the current table size, 
meaning 
too much data was copied. Also, the count of available slots for ACPI 
tables 
was not set correctly. Alexey Starikovskiy, Bob Moore.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  87.5K Code, 18.4K Data, 105.9K Total
    Debug Version:     163.4K Code, 51.1K Data, 214.5K Total
  Current Release:
    Non-Debug Version:  87.9K Code, 18.6K Data, 106.5K Total
    Debug Version:     163.5K Code, 51.3K Data, 214.8K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Implement limited typechecking for values returned from predefined 
control methods. The type of any returned static (unnamed) object is now 
validated. For example, Return(1). ACPICA BZ 786.

iASL: Fixed a predefined name object verification regression. Fixes a 
problem 
introduced in version 20100304. An error is incorrectly generated if a 
predefined name is declared as a static named object with a value defined 
using the keywords "Zero", "One", or "Ones". Lin Ming.

iASL: Added Windows 7 support for the -g option (get local ACPI tables) 
by 
reducing the requested registry access rights. ACPICA BZ 842.

Disassembler: fixed a possible fault when generating External() 
statements. 
Introduced in commit ae7d6fd: Properly handle externals with parent-
prefix 
(carat). Fixes a string length allocation calculation. Lin Ming.

----------------------------------------
04 March 2010. Summary of changes for version 20100304:

1) ACPI CA Core Subsystem:

Fixed a possible problem with the AML Mutex handling function 
AcpiExReleaseMutex where the function could fault under the very rare 
condition when the interpreter has blocked, the interpreter lock is 
released, 
the interpreter is then reentered via the same thread, and attempts to 
acquire an AML mutex that was previously acquired. FreeBSD report 140979. 
Lin 
Ming.

Implemented additional configuration support for the AML "Debug Object". 
Output from the debug object can now be enabled via a global variable, 
AcpiGbl_EnableAmlDebugObject. This will assist with remote machine 
debugging. 
This debug output is now available in the release version of ACPICA 
instead 
of just the debug version. Also, the entire debug output module can now 
be 
configured out of the ACPICA build if desired. One new file added, 
executer/exdebug.c. Lin Ming, Bob Moore.

Added header support for the ACPI MCHI table (Management Controller Host 
Interface Table). This table was added in ACPI 4.0, but the defining 
document 
has only recently become available.

Standardized output of integer values for ACPICA warnings/errors. Always 
use 
0x prefix for hex output, always use %u for unsigned integer decimal 
output. 
Affects ACPI_INFO, ACPI_ERROR, ACPI_EXCEPTION, and ACPI_WARNING (about 
400 
invocations.) These invocations were converted from the original 
ACPI_DEBUG_PRINT invocations and were not consistent. ACPICA BZ 835.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  87.1K Code, 18.0K Data, 105.1K Total
    Debug Version:     163.5K Code, 50.9K Data, 214.4K Total
  Current Release:
    Non-Debug Version:  87.5K Code, 18.4K Data, 105.9K Total
    Debug Version:     163.4K Code, 51.1K Data, 214.5K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Implemented typechecking support for static (non-control method) 
predefined named objects that are declared with the Name() operator. For 
example, the type of this object is now validated to be of type Integer: 
Name(_BBN, 1). This change migrates the compiler to using the core 
predefined 
name table instead of maintaining a local version. Added a new file, 
aslpredef.c. ACPICA BZ 832.

Disassembler: Added support for the ACPI 4.0 MCHI table.

----------------------------------------
21 January 2010. Summary of changes for version 20100121:

1) ACPI CA Core Subsystem:

Added the 2010 copyright to all module headers and signons. This affects 
virtually every file in the ACPICA core subsystem, the iASL compiler, the 
tools/utilities, and the test suites.

Implemented a change to the AcpiGetDevices interface to eliminate 
unnecessary 
invocations of the _STA method. In the case where a specific _HID is 
requested, do not run _STA until a _HID match is found. This eliminates 
potentially dozens of _STA calls during a search for a particular 
device/HID, 
which in turn can improve boot times. ACPICA BZ 828. Lin Ming.

Implemented an additional repair for predefined method return values. 
Attempt 
to repair unexpected NULL elements within returned Package objects. 
Create 
an 
Integer of value zero, a NULL String, or a zero-length Buffer as 
appropriate. 
ACPICA BZ 818. Lin Ming, Bob Moore.

Removed the obsolete ACPI_INTEGER data type. This type was introduced as 
the 
code was migrated from ACPI 1.0 (with 32-bit AML integers) to ACPI 2.0 
(with 
64-bit AML integers). It is now obsolete and this change removes it from 
the 
ACPICA code base, replaced by UINT64. The original typedef has been 
retained 
for now for compatibility with existing device driver code. ACPICA BZ 
824.

Removed the unused UINT32_STRUCT type, and the obsolete Integer64 field 
in 
the parse tree object.

Added additional warning options for the gcc-4 generation. Updated the 
source 
accordingly. This includes some code restructuring to eliminate 
unreachable 
code, elimination of some gotos, elimination of unused return values, 
some 
additional casting, and removal of redundant declarations.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  87.0K Code, 18.0K Data, 105.0K Total
    Debug Version:     163.4K Code, 50.8K Data, 214.2K Total
  Current Release:
    Non-Debug Version:  87.1K Code, 18.0K Data, 105.1K Total
    Debug Version:     163.5K Code, 50.9K Data, 214.4K Total

2) iASL Compiler/Disassembler and Tools:

No functional changes for this release.

----------------------------------------
14 December 2009. Summary of changes for version 20091214:

1) ACPI CA Core Subsystem:

Enhanced automatic data type conversions for predefined name repairs. 
This 
change expands the automatic repairs/conversions for predefined name 
return 
values to make Integers, Strings, and Buffers fully interchangeable. 
Also, 
a 
Buffer can be converted to a Package of Integers if necessary. The 
nsrepair.c 
module was completely restructured. Lin Ming, Bob Moore.

Implemented automatic removal of null package elements during predefined 
name 
repairs. This change will automatically remove embedded and trailing NULL 
package elements from returned package objects that are defined to 
contain 
a 
variable number of sub-packages. The driver is then presented with a 
package 
with no null elements to deal with. ACPICA BZ 819.

Implemented a repair for the predefined _FDE and _GTM names. The expected 
return value for both names is a Buffer of 5 DWORDs. This repair fixes 
two 
possible problems (both seen in the field), where a package of integers 
is 
returned, or a buffer of BYTEs is returned. With assistance from Jung-uk 
Kim.

Implemented additional module-level code support. This change will 
properly 
execute module-level code that is not at the root of the namespace (under 
a 
Device object, etc.). Now executes the code within the current scope 
instead 
of the root. ACPICA BZ 762. Lin Ming.

Fixed possible mutex acquisition errors when running _REG methods. Fixes 
a 
problem where mutex errors can occur when running a _REG method that is 
in 
the same scope as a method-defined operation region or an operation 
region 
under a module-level IF block. This type of code is rare, so the problem 
has 
not been seen before. ACPICA BZ 826. Lin Ming, Bob Moore.

Fixed a possible memory leak during module-level code execution. An 
object 
could be leaked for each block of executed module-level code if the 
interpreter slack mode is enabled This change deletes any implicitly 
returned 
object from the module-level code block. Lin Ming.

Removed messages for successful predefined repair(s). The repair 
mechanism 
was considered too wordy. Now, messages are only unconditionally emitted 
if 
the return object cannot be repaired. Existing messages for successful 
repairs were converted to ACPI_DEBUG_PRINT messages for now. ACPICA BZ 
827.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  86.6K Code, 18.2K Data, 104.8K Total
    Debug Version:     162.7K Code, 50.8K Data, 213.5K Total
  Current Release:
    Non-Debug Version:  87.0K Code, 18.0K Data, 105.0K Total
    Debug Version:     163.4K Code, 50.8K Data, 214.2K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Fixed a regression introduced in 20091112 where intermediate .SRC 
files 
were no longer automatically removed at the termination of the compile.

acpiexec: Implemented the -f option to specify default region fill value. 
This option specifies the value used to initialize buffers that simulate 
operation regions. Default value is zero. Useful for debugging problems 
that 
depend on a specific initial value for a region or field.

----------------------------------------
12 November 2009. Summary of changes for version 20091112:

1) ACPI CA Core Subsystem:

Implemented a post-order callback to AcpiWalkNamespace. The existing 
interface only has a pre-order callback. This change adds an additional 
parameter for a post-order callback which will be more useful for bus 
scans. 
ACPICA BZ 779. Lin Ming. Updated the ACPICA Programmer Reference.

Modified the behavior of the operation region memory mapping cache for 
SystemMemory. Ensure that the memory mappings created for operation 
regions 
do not cross 4K page boundaries. Crossing a page boundary while mapping 
regions can cause kernel warnings on some hosts if the pages have 
different 
attributes. Such regions are probably BIOS bugs, and this is the 
workaround. 
Linux BZ 14445. Lin Ming.

Implemented an automatic repair for predefined methods that must return 
sorted lists. This change will repair (by sorting) packages returned by 
_ALR, 
_PSS, and _TSS. Drivers can now assume that the packages are correctly 
sorted 
and do not contain NULL package elements. Adds one new file, 
namespace/nsrepair2.c. ACPICA BZ 784. Lin Ming, Bob Moore.

Fixed a possible fault during predefined name validation if a return 
Package 
object contains NULL elements. Also adds a warning if a NULL element is 
followed by any non-null elements. ACPICA BZ 813, 814. Future enhancement 
may 
include repair or removal of all such NULL elements where possible.

Implemented additional module-level executable AML code support. This 
change 
will execute module-level code that is not at the root of the namespace 
(under a Device object, etc.) at table load time. Module-level executable 
AML 
code has been illegal since ACPI 2.0. ACPICA BZ 762. Lin Ming.

Implemented a new internal function to create Integer objects. This 
function 
simplifies miscellaneous object creation code. ACPICA BZ 823.

Reduced the severity of predefined repair messages, Warning to Info. 
Since 
the object was successfully repaired, a warning is too severe. Reduced to 
an 
info message for now. These messages may eventually be changed to debug-
only. 
ACPICA BZ 812.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  85.8K Code, 18.0K Data, 103.8K Total
    Debug Version:     161.8K Code, 50.6K Data, 212.4K Total
  Current Release:
    Non-Debug Version:  86.6K Code, 18.2K Data, 104.8K Total
    Debug Version:     162.7K Code, 50.8K Data, 213.5K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Implemented Switch() with While(1) so that Break works correctly. 
This 
change correctly implements the Switch operator with a surrounding 
While(1) 
so that the Break operator works as expected. ACPICA BZ 461. Lin Ming.

iASL: Added a message if a package initializer list is shorter than 
package 
length. Adds a new remark for a Package() declaration if an initializer 
list 
exists, but is shorter than the declared length of the package. Although 
technically legal, this is probably a coding error and it is seen in the 
field. ACPICA BZ 815. Lin Ming, Bob Moore.

iASL: Fixed a problem where the compiler could fault after the maximum 
number 
of errors was reached (200).

acpixtract: Fixed a possible warning for pointer cast if the compiler 
warning 
level set very high.

----------------------------------------
13 October 2009. Summary of changes for version 20091013:

1) ACPI CA Core Subsystem:

Fixed a problem where an Operation Region _REG method could be executed 
more 
than once. If a custom address space handler is installed by the host 
before 
the "initialize operation regions" phase of the ACPICA initialization, 
any 
_REG methods for that address space could be executed twice. This change 
fixes the problem. ACPICA BZ 427. Lin Ming.

Fixed a possible memory leak for the Scope() ASL operator. When the exact 
invocation of "Scope(\)" is executed (change scope to root), one internal 
operand object was leaked. Lin Ming.

Implemented a run-time repair for the _MAT predefined method. If the _MAT 
return value is defined as a Field object in the AML, and the field
size is less than or equal to the default width of an integer (32 or 
64),_MAT 
can incorrectly return an Integer instead of a Buffer. ACPICA now 
automatically repairs this problem. ACPICA BZ 810.

Implemented a run-time repair for the _BIF and _BIX predefined methods. 
The 
"OEM Information" field is often incorrectly returned as an Integer with 
value zero if the field is not supported by the platform. This is due to 
an 
ambiguity in the ACPI specification. The field should always be a string. 
ACPICA now automatically repairs this problem by returning a NULL string 
within the returned Package. ACPICA BZ 807.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  85.6K Code, 18.0K Data, 103.6K Total
    Debug Version:     161.7K Code, 50.9K Data, 212.6K Total
  Current Release:
    Non-Debug Version:  85.8K Code, 18.0K Data, 103.8K Total
    Debug Version:     161.8K Code, 50.6K Data, 212.4K Total

2) iASL Compiler/Disassembler and Tools:

Disassembler: Fixed a problem where references to external symbols that 
contained one or more parent-prefixes (carats) were not handled 
correctly, 
possibly causing a fault. ACPICA BZ 806. Lin Ming.

Disassembler: Restructured the code so that all functions that handle 
external symbols are in a single module. One new file is added, 
common/dmextern.c.

AML Debugger: Added a max count argument for the Batch command (which 
executes multiple predefined methods within the namespace.)

iASL: Updated the compiler documentation (User Reference.) Available at 
http://www.acpica.org/documentation/. ACPICA BZ 750.

AcpiXtract: Updated for Lint and other formatting changes. Close all open 
files.

----------------------------------------
03 September 2009. Summary of changes for version 20090903:

1) ACPI CA Core Subsystem:

For Windows Vista compatibility, added the automatic execution of an _INI 
method located at the namespace root (\_INI). This method is executed at 
table load time. This support is in addition to the automatic execution 
of 
\_SB._INI. Lin Ming.

Fixed a possible memory leak in the interpreter for AML package objects 
if 
the package initializer list is longer than the defined size of the 
package. 
This apparently can only happen if the BIOS changes the package size on 
the 
fly (seen in a _PSS object), as ASL compilers do not allow this. The 
interpreter will truncate the package to the defined size (and issue an 
error 
message), but previously could leave the extra objects undeleted if they 
were 
pre-created during the argument processing (such is the case if the 
package 
consists of a number of sub-packages as in the _PSS.) ACPICA BZ 805.

Fixed a problem seen when a Buffer or String is stored to itself via ASL. 
This has been reported in the field. Previously, ACPICA would zero out 
the 
buffer/string. Now, the operation is treated as a noop. Provides Windows 
compatibility. ACPICA BZ 803. Lin Ming.

Removed an extraneous error message for ASL constructs of the form 
Store(LocalX,LocalX) when LocalX is uninitialized. These curious 
statements 
are seen in many BIOSs and are once again treated as NOOPs and no error 
is 
emitted when they are encountered. ACPICA BZ 785.

Fixed an extraneous warning message if a _DSM reserved method returns a 
Package object. _DSM can return any type of object, so validation on the 
return type cannot be performed. ACPICA BZ 802.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  85.5K Code, 18.0K Data, 103.5K Total
    Debug Version:     161.6K Code, 50.9K Data, 212.5K Total
  Current Release:
    Non-Debug Version:  85.6K Code, 18.0K Data, 103.6K Total
    Debug Version:     161.7K Code, 50.9K Data, 212.6K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Fixed a problem with the use of the Alias operator and Resource 
Templates. The correct alias is now constructed and no error is emitted. 
ACPICA BZ 738.

iASL: Implemented the -I option to specify additional search directories 
for 
include files. Allows multiple additional search paths for include files. 
Directories are searched in the order specified on the command line 
(after 
the local directory is searched.) ACPICA BZ 800.

iASL: Fixed a problem where the full pathname for include files was not 
emitted for warnings/errors. This caused the IDE support to not work 
properly. ACPICA BZ 765.

iASL: Implemented the -@ option to specify a Windows-style response file 
containing additional command line options. ACPICA BZ 801.

AcpiExec: Added support to load multiple AML files simultaneously (such 
as 
a 
DSDT and multiple SSDTs). Also added support for wildcards within the AML 
pathname. These features allow all machine tables to be easily loaded and 
debugged together. ACPICA BZ 804.

Disassembler: Added missing support for disassembly of HEST table Error 
Bank 
subtables. 

----------------------------------------
30 July 2009. Summary of changes for version 20090730:

The ACPI 4.0 implementation for ACPICA is complete with this release.

1) ACPI CA Core Subsystem:

ACPI 4.0: Added header file support for all new and changed ACPI tables. 
Completely new tables are: IBFT, IVRS, MSCT, and WAET. Tables that are 
new 
for ACPI 4.0, but have previously been supported in ACPICA are: CPEP, 
BERT, 
EINJ, ERST, and HEST. Other newly supported tables are: UEFI and WDAT. 
There 
have been some ACPI 4.0 changes to other existing tables. Split the large 
actbl1.h header into the existing actbl2.h header. ACPICA BZ 774.

ACPI 4.0: Implemented predefined name validation for all new names. There 
are 
31 new names in ACPI 4.0. The predefined validation module was split into 
two 
files. The new file is namespace/nsrepair.c. ACPICA BZ 770.

Implemented support for so-called "module-level executable code". This is 
executable AML code that exists outside of any control method and is 
intended 
to be executed at table load time. Although illegal since ACPI 2.0, this 
type 
of code still exists and is apparently still being created. Blocks of 
this 
code are now detected and executed as intended. Currently, the code 
blocks 
must exist under either an If, Else, or While construct; these are the 
typical cases seen in the field. ACPICA BZ 762. Lin Ming.

Implemented an automatic dynamic repair for predefined names that return 
nested Package objects. This applies to predefined names that are defined 
to 
return a variable-length Package of sub-packages. If the number of sub-
packages is one, BIOS code is occasionally seen that creates a simple 
single 
package with no sub-packages. This code attempts to fix the problem by 
wrapping a new package object around the existing package. These methods 
can 
be repaired: _ALR, _CSD, _HPX, _MLS, _PRT, _PSS, _TRT, and _TSS. ACPICA 
BZ 
790.

Fixed a regression introduced in 20090625 for the AcpiGetDevices 
interface. 
The _HID/_CID matching was broken and no longer matched IDs correctly. 
ACPICA 
BZ 793.

Fixed a problem with AcpiReset where the reset would silently fail if the 
register was one of the protected I/O ports. AcpiReset now bypasses the 
port 
validation mechanism. This may eventually be driven into the 
AcpiRead/Write 
interfaces.

Fixed a regression related to the recent update of the AcpiRead/Write 
interfaces. A sleep/suspend could fail if the optional PM2 Control 
register 
does not exist during an attempt to write the Bus Master Arbitration bit. 
(However, some hosts already delete the code that writes this bit, and 
the 
code may in fact be obsolete at this date.) ACPICA BZ 799.

Fixed a problem where AcpiTerminate could fault if inadvertently called 
twice 
in succession. ACPICA BZ 795.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  84.7K Code, 17.8K Data, 102.5K Total
    Debug Version:     160.5K Code, 50.6K Data, 211.1K Total
  Current Release:
    Non-Debug Version:  85.5K Code, 18.0K Data, 103.5K Total
    Debug Version:     161.6K Code, 50.9K Data, 212.5K Total

2) iASL Compiler/Disassembler and Tools:

ACPI 4.0: Implemented disassembler support for all new ACPI tables and 
changes to existing tables. ACPICA BZ 775.

----------------------------------------
25 June 2009. Summary of changes for version 20090625:

The ACPI 4.0 Specification was released on June 16 and is available at 
www.acpi.info. ACPICA implementation of ACPI 4.0 is underway and will 
continue for the next few releases.

1) ACPI CA Core Subsystem:

ACPI 4.0: Implemented interpreter support for the IPMI operation region 
address space. Includes support for bi-directional data buffers and an 
IPMI 
address space handler (to be installed by an IPMI device driver.) ACPICA 
BZ 
773. Lin Ming.

ACPI 4.0: Added changes for existing ACPI tables - FACS and SRAT. 
Includes 
support in both the header files and the disassembler.

Completed a major update for the AcpiGetObjectInfo external interface. 
Changes include:
 - Support for variable, unlimited length HID, UID, and CID strings.
 - Support Processor objects the same as Devices (HID,UID,CID,ADR,STA, 
etc.)
 - Call the _SxW power methods on behalf of a device object.
 - Determine if a device is a PCI root bridge.
 - Change the ACPI_BUFFER parameter to ACPI_DEVICE_INFO.
These changes will require an update to all callers of this interface. 
See 
the updated ACPICA Programmer Reference for details. One new source file 
has 
been added - utilities/utids.c. ACPICA BZ 368, 780.

Updated the AcpiRead and AcpiWrite external interfaces to support 64-bit 
transfers. The Value parameter has been extended from 32 bits to 64 bits 
in 
order to support new ACPI 4.0 tables. These changes will require an 
update 
to 
all callers of these interfaces. See the ACPICA Programmer Reference for 
details. ACPICA BZ 768.

Fixed several problems with AcpiAttachData. The handler was not invoked 
when 
the host node was deleted. The data sub-object was not automatically 
deleted 
when the host node was deleted. The interface to the handler had an 
unused 
parameter, this was removed. ACPICA BZ 778.

Enhanced the function that dumps ACPI table headers. All non-printable 
characters in the string fields are now replaced with '?' (Signature, 
OemId, 
OemTableId, and CompilerId.) ACPI tables with non-printable characters in 
these fields are occasionally seen in the field. ACPICA BZ 788.

Fixed a problem with predefined method repair code where the code that 
attempts to repair/convert an object of incorrect type is only executed 
on 
the first time the predefined method is called. The mechanism that 
disables 
warnings on subsequent calls was interfering with the repair mechanism. 
ACPICA BZ 781.

Fixed a possible memory leak in the predefined validation/repair code 
when 
a 
buffer is automatically converted to an expected string object.

Removed obsolete 16-bit files from the distribution and from the current 
git 
tree head. ACPICA BZ 776.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  83.4K Code, 17.5K Data, 100.9K Total
    Debug Version:     158.9K Code, 50.0K Data, 208.9K Total
  Current Release:
    Non-Debug Version:  84.7K Code, 17.8K Data, 102.5K Total
    Debug Version:     160.5K Code, 50.6K Data, 211.1K Total

2) iASL Compiler/Disassembler and Tools:

ACPI 4.0: iASL and Disassembler - implemented support for the new IPMI 
operation region keyword. ACPICA BZ 771, 772. Lin Ming.

ACPI 4.0: iASL - implemented compile-time validation support for all new 
predefined names and control methods (31 total). ACPICA BZ 769.

----------------------------------------
21 May 2009. Summary of changes for version 20090521:

1) ACPI CA Core Subsystem:

Disabled the preservation of the SCI enable bit in the PM1 control 
register. 
The SCI enable bit (bit 0, SCI_EN) is defined by the ACPI specification 
to 
be 
a "preserved" bit - "OSPM always preserves this bit position", section 
4.7.3.2.1. However, some machines fail if this bit is in fact preserved 
because the bit needs to be explicitly set by the OS as a workaround. No 
machines fail if the bit is not preserved. Therefore, ACPICA no longer 
attempts to preserve this bit.

Fixed a problem in AcpiRsGetPciRoutingTableLength where an invalid or 
incorrectly formed _PRT package could cause a fault. Added validation to 
ensure that each package element is actually a sub-package.

Implemented a new interface to install or override a single control 
method, 
AcpiInstallMethod. This interface is useful when debugging in order to 
repair 
an existing method or to install a missing method without having to 
override 
the entire ACPI table. See the ACPICA Programmer Reference for use and 
examples. Lin Ming, Bob Moore.

Fixed several reference count issues with the DdbHandle object that is 
created from a Load or LoadTable operator. Prevent premature deletion of 
the 
object. Also, mark the object as invalid once the table has been 
unloaded. 
This is needed because the handle itself may not be deleted after the 
table 
unload, depending on whether it has been stored in a named object by the 
caller. Lin Ming.

Fixed a problem with Mutex Sync Levels. Fixed a problem where if multiple 
mutexes of the same sync level are acquired but then not released in 
strict 
opposite order, the internally maintained Current Sync Level becomes 
confused 
and can cause subsequent execution errors. ACPICA BZ 471.

Changed the allowable release order for ASL mutex objects. The ACPI 4.0 
specification has been changed to make the SyncLevel for mutex objects 
more 
useful. When releasing a mutex, the SyncLevel of the mutex must now be 
the 
same as the current sync level. This makes more sense than the previous 
rule 
(SyncLevel less than or equal). This change updates the code to match the 
specification.

Fixed a problem with the local version of the AcpiOsPurgeCache function. 
The 
(local) cache must be locked during all cache object deletions. Andrew 
Baumann.

Updated the Load operator to use operation region interfaces. This 
replaces 
direct memory mapping with region access calls. Now, all region accesses 
go 
through the installed region handler as they should.

Simplified and optimized the NsGetNextNode function. Reduced parameter 
count 
and reduced code for this frequently used function.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  82.8K Code, 17.5K Data, 100.3K Total
    Debug Version:     158.0K Code, 49.9K Data, 207.9K Total
  Current Release:
    Non-Debug Version:  83.4K Code, 17.5K Data, 100.9K Total
    Debug Version:     158.9K Code, 50.0K Data, 208.9K Total

2) iASL Compiler/Disassembler and Tools:

Disassembler: Fixed some issues with DMAR, HEST, MADT tables. Some 
problems 
with sub-table disassembly and handling invalid sub-tables. Attempt 
recovery 
after an invalid sub-table ID.

----------------------------------------
22 April 2009. Summary of changes for version 20090422:

1) ACPI CA Core Subsystem:

Fixed a compatibility issue with the recently released I/O port 
protection 
mechanism. For windows compatibility, 1) On a port protection violation, 
simply ignore the request and do not return an exception (allow the 
control 
method to continue execution.) 2) If only part of the request overlaps a 
protected port, read/write the individual ports that are not protected. 
Linux 
BZ 13036. Lin Ming

Enhanced the execution of the ASL/AML BreakPoint operator so that it 
actually 
breaks into the AML debugger if the debugger is present. This matches the 
ACPI-defined behavior.

Fixed several possible warnings related to the use of the configurable 
ACPI_THREAD_ID. This type can now be configured as either an integer or a 
pointer with no warnings. Also fixes several warnings in printf-like 
statements for the 64-bit build when the type is configured as a pointer. 
ACPICA BZ 766, 767.

Fixed a number of possible warnings when compiling with gcc 4+ (depending 
on 
warning options.) Examples include printf formats, aliasing, unused 
globals, 
missing prototypes, missing switch default statements, use of non-ANSI 
library functions, use of non-ANSI constructs. See generate/unix/Makefile 
for 
a list of warning options used with gcc 3 and 4. ACPICA BZ 735.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  82.6K Code, 17.6K Data, 100.2K Total
    Debug Version:     157.7K Code, 49.9K Data, 207.6K Total
  Current Release:
    Non-Debug Version:  82.8K Code, 17.5K Data, 100.3K Total
    Debug Version:     158.0K Code, 49.9K Data, 207.9K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Fixed a generation warning from Bison 2.3 and fixed several 
warnings 
on 
the 64-bit build.

iASL: Fixed a problem where the Unix/Linux versions of the compiler could 
not 
correctly digest Windows/DOS formatted files (with CR/LF).

iASL: Added a new option for "quiet mode" (-va) that produces only the 
compilation summary, not individual errors and warnings. Useful for large 
batch compilations.

AcpiExec: Implemented a new option (-z) to enable a forced 
semaphore/mutex 
timeout that can be used to detect hang conditions during execution of 
AML 
code (includes both internal semaphores and AML-defined mutexes and 
events.)

Added new makefiles for the generation of acpica in a generic unix-like 
environment. These makefiles are intended to generate the acpica tools 
and 
utilities from the original acpica git source tree structure.

Test Suites: Updated and cleaned up the documentation files. Updated the 
copyrights to 2009, affecting all source files. Use the new version of 
iASL 
with quiet mode. Increased the number of available semaphores in the 
Windows 
OSL, allowing the aslts to execute fully on Windows. For the Unix OSL, 
added 
an alternate implementation of the semaphore timeout to allow aslts to 
execute fully on Cygwin.

----------------------------------------
20 March 2009. Summary of changes for version 20090320:

1) ACPI CA Core Subsystem:

Fixed a possible race condition between AcpiWalkNamespace and dynamic 
table 
unloads. Added a reader/writer locking mechanism to allow multiple 
concurrent 
namespace walks (readers), but block a dynamic table unload until it can 
gain 
exclusive write access to the namespace. This fixes a problem where a 
table 
unload could (possibly catastrophically) delete the portion of the 
namespace 
that is currently being examined by a walk. Adds a new file, utlock.c, 
that 
implements the reader/writer lock mechanism. ACPICA BZ 749.

Fixed a regression introduced in version 20090220 where a change to the 
FADT 
handling could cause the ACPICA subsystem to access non-existent I/O 
ports.

Modified the handling of FADT register and table (FACS/DSDT) addresses. 
The 
FADT can contain both 32-bit and 64-bit versions of these addresses. 
Previously, the 64-bit versions were favored, meaning that if both 32 and 
64 
versions were valid, but not equal, the 64-bit version was used. This was 
found to cause some machines to fail. Now, in this case, the 32-bit 
version 
is used instead. This now matches the Windows behavior.

Implemented a new mechanism to protect certain I/O ports. Provides 
Microsoft 
compatibility and protects the standard PC I/O ports from access via AML 
code. Adds a new file, hwvalid.c

Fixed a possible extraneous warning message from the FADT support. The 
message warns of a 32/64 length mismatch between the legacy and GAS 
definitions for a register.

Removed the obsolete AcpiOsValidateAddress OSL interface. This interface 
is 
made obsolete by the port protection mechanism above. It was previously 
used 
to validate the entire address range of an operation region, which could 
be 
incorrect if the range included illegal ports, but fields within the 
operation region did not actually access those ports. Validation is now 
performed on a per-field basis instead of the entire region.

Modified the handling of the PM1 Status Register ignored bit (bit 11.) 
Ignored bits must be "preserved" according to the ACPI spec. Usually, 
this 
means a read/modify/write when writing to the register. However, for 
status 
registers, writing a one means clear the event. Writing a zero means 
preserve 
the event (do not clear.) This behavior is clarified in the ACPI 4.0 
spec, 
and the ACPICA code now simply always writes a zero to the ignored bit.

Modified the handling of ignored bits for the PM1 A/B Control Registers. 
As 
per the ACPI specification, for the control registers, preserve 
(read/modify/write) all bits that are defined as either reserved or 
ignored.

Updated the handling of write-only bits in the PM1 A/B Control Registers. 
When reading the register, zero the write-only bits as per the ACPI spec. 
ACPICA BZ 443. Lin Ming.

Removed "Linux" from the list of supported _OSI strings. Linux no longer 
wants to reply true to this request. The Windows strings are the only 
paths 
through the AML that are tested and known to work properly.

  Previous Release:
    Non-Debug Version:  82.0K Code, 17.5K Data,  99.5K Total
    Debug Version:     156.9K Code, 49.8K Data, 206.7K Total
  Current Release:
    Non-Debug Version:  82.6K Code, 17.6K Data, 100.2K Total
    Debug Version:     157.7K Code, 49.9K Data, 207.6K Total

2) iASL Compiler/Disassembler and Tools:

Acpiexec: Split the large aeexec.c file into two new files, aehandlers.c 
and 
aetables.c

----------------------------------------
20 February 2009. Summary of changes for version 20090220:

1) ACPI CA Core Subsystem:

Optimized the ACPI register locking. Removed locking for reads from the 
ACPI 
bit registers in PM1 Status, Enable, Control, and PM2 Control. The lock 
is 
not required when reading the single-bit registers. The 
AcpiGetRegisterUnlocked function is no longer needed and has been 
removed. 
This will improve performance for reads on these registers. ACPICA BZ 
760.

Fixed the parameter validation for AcpiRead/Write. Now return 
AE_BAD_PARAMETER if the input register pointer is null, and 
AE_BAD_ADDRESS 
if 
the register has an address of zero. Previously, these cases simply 
returned 
AE_OK. For optional registers such as PM1B status/enable/control, the 
caller 
should check for a valid register address before calling. ACPICA BZ 748.

Renamed the external ACPI bit register access functions. Renamed 
AcpiGetRegister and AcpiSetRegister to clarify the purpose of these 
functions. The new names are AcpiReadBitRegister and 
AcpiWriteBitRegister. 
Also, restructured the code for these functions by simplifying the code 
path 
and condensing duplicate code to reduce code size.

Added new functions to transparently handle the possibly split PM1 A/B 
registers. AcpiHwReadMultiple and AcpiHwWriteMultiple. These two 
functions 
now handle the split registers for PM1 Status, Enable, and Control. 
ACPICA 
BZ 
746.

Added a function to handle the PM1 control registers, 
AcpiHwWritePm1Control. 
This function writes both of the PM1 control registers (A/B). These 
registers 
are different than the PM1 A/B status and enable registers in that 
different 
values can be written to the A/B registers. Most notably, the SLP_TYP 
bits 
can be different, as per the values returned from the _Sx predefined 
methods.

Removed an extra register write within AcpiHwClearAcpiStatus. This 
function 
was writing an optional PM1B status register twice. The existing call to 
the 
low-level AcpiHwRegisterWrite automatically handles a possibly split PM1 
A/B 
register. ACPICA BZ 751.

Split out the PM1 Status registers from the FADT. Added new globals for 
these 
registers (A/B), similar to the way the PM1 Enable registers are handled. 
Instead of overloading the FADT Event Register blocks. This makes the 
code 
clearer and less prone to error.

Fixed the warning message for when the platform contains too many ACPI 
tables 
for the default size of the global root table data structure. The 
calculation 
for the truncation value was incorrect.

Removed the ACPI_GET_OBJECT_TYPE macro. Removed all instances of this 
obsolete macro, since it is now a simple reference to ->common.type. 
There 
were about 150 invocations of the macro across 41 files. ACPICA BZ 755.

Removed the redundant ACPI_BITREG_SLEEP_TYPE_B. This type is the same as 
TYPE_A. Removed this and all related instances. Renamed SLEEP_TYPE_A to 
simply SLEEP_TYPE. ACPICA BZ 754.

Conditionally compile the AcpiSetFirmwareWakingVector64 function. This 
function is only needed on 64-bit host operating systems and is thus not 
included for 32-bit hosts.

Debug output: print the input and result for invocations of the _OSI 
reserved 
control method via the ACPI_LV_INFO debug level. Also, reduced some of 
the 
verbosity of this debug level. Len Brown.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  82.3K Code, 17.5K Data,  99.8K Total
    Debug Version:     157.3K Code, 49.8K Data, 207.1K Total
  Current Release:
    Non-Debug Version:  82.0K Code, 17.5K Data,  99.5K Total
    Debug Version:     156.9K Code, 49.8K Data, 206.7K Total

2) iASL Compiler/Disassembler and Tools:

Disassembler: Decode the FADT PM_Profile field. Emit ascii names for the 
various legal performance profiles.

----------------------------------------
23 January 2009. Summary of changes for version 20090123:

1) ACPI CA Core Subsystem:

Added the 2009 copyright to all module headers and signons. This affects 
virtually every file in the ACPICA core subsystem, the iASL compiler, and 
the tools/utilities.

Implemented a change to allow the host to override any ACPI table, 
including 
dynamically loaded tables. Previously, only the DSDT could be replaced by 
the 
host. With this change, the AcpiOsTableOverride interface is called for 
each 
table found in the RSDT/XSDT during ACPICA initialization, and also 
whenever 
a table is dynamically loaded via the AML Load operator.

Updated FADT flag definitions, especially the Boot Architecture flags.

Debugger: For the Find command, automatically pad the input ACPI name 
with 
underscores if the name is shorter than 4 characters. This enables a 
match 
with the actual namespace entry which is itself padded with underscores.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  82.3K Code, 17.4K Data,  99.7K Total
    Debug Version:     157.1K Code, 49.7K Data, 206.8K Total
  Current Release:
    Non-Debug Version:  82.3K Code, 17.5K Data,  99.8K Total
    Debug Version:     157.3K Code, 49.8K Data, 207.1K Total

2) iASL Compiler/Disassembler and Tools:

Fix build error under Bison-2.4.

Dissasembler: Enhanced FADT support. Added decoding of the Boot 
Architecture 
flags. Now decode all flags, regardless of the FADT version. Flag output 
includes the FADT version which first defined each flag.

The iASL -g option now dumps the RSDT to a file (in addition to the FADT 
and 
DSDT). Windows only.

----------------------------------------
04 December 2008. Summary of changes for version 20081204:

1) ACPI CA Core Subsystem:

The ACPICA Programmer Reference has been completely updated and revamped 
for 
this release. This includes updates to the external interfaces, OSL 
interfaces, the overview sections, and the debugger reference.

Several new ACPICA interfaces have been implemented and documented in the 
programmer reference:
AcpiReset - Writes the reset value to the FADT-defined reset register.
AcpiDisableAllGpes - Disable all available GPEs.
AcpiEnableAllRuntimeGpes - Enable all available runtime GPEs.
AcpiGetGpeDevice - Get the GPE block device associated with a GPE.
AcpiGbl_CurrentGpeCount - Tracks the current number of available GPEs.
AcpiRead - Low-level read ACPI register (was HwLowLevelRead.)
AcpiWrite - Low-level write ACPI register (was HwLowLevelWrite.)

Most of the public ACPI hardware-related interfaces have been moved to a 
new 
file, components/hardware/hwxface.c

Enhanced the FADT parsing and low-level ACPI register access: The ACPI 
register lengths within the FADT are now used, and the low level ACPI 
register access no longer hardcodes the ACPI register lengths. Given that 
there may be some risk in actually trusting the FADT register lengths, a 
run-
time option was added to fall back to the default hardcoded lengths if 
the 
FADT proves to contain incorrect values - UseDefaultRegisterWidths. This 
option is set to true for now, and a warning is issued if a suspicious 
FADT 
register length is overridden with the default value.

Fixed a reference count issue in NsRepairObject. This problem was 
introduced 
in version 20081031 as part of a fix to repair Buffer objects within 
Packages. Lin Ming.

Added semaphore support to the Linux/Unix application OS-services layer 
(OSL). ACPICA BZ 448. Lin Ming.

Added the ACPI_MUTEX_TYPE configuration option to select whether mutexes 
will 
be implemented in the OSL, or will binary semaphores be used instead.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  81.7K Code, 17.3K Data,  99.0K Total
    Debug Version:     156.4K Code, 49.4K Data, 205.8K Total
  Current Release:
    Non-Debug Version:  82.3K Code, 17.4K Data,  99.7K Total
    Debug Version:     157.1K Code, 49.7K Data, 206.8K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Completed the '-e' option to include additional ACPI tables in 
order 
to 
aid with disassembly and External statement generation. ACPICA BZ 742. 
Lin 
Ming.

iASL: Removed the "named object in while loop" error. The compiler cannot 
determine how many times a loop will execute. ACPICA BZ 730.

Disassembler: Implemented support for FADT revision 2 (MS extension). 
ACPICA 
BZ 743.

Disassembler: Updates for several ACPI data tables (HEST, EINJ, and 
MCFG).

----------------------------------------
31 October 2008. Summary of changes for version 20081031:

1) ACPI CA Core Subsystem:

Restructured the ACPICA header files into public/private. acpi.h now 
includes 
only the "public" acpica headers. All other acpica headers are "private" 
and 
should not be included by acpica users. One new file, accommon.h is used 
to 
include the commonly used private headers for acpica code generation. 
Future 
plans include moving all private headers to a new subdirectory.

Implemented an automatic Buffer->String return value conversion for 
predefined ACPI methods. For these methods (such as _BIF), added 
automatic 
conversion for return objects that are required to be a String, but a 
Buffer 
was found instead. This can happen when reading string battery data from 
an 
operation region, because it used to be difficult to convert the data 
from 
buffer to string from within the ASL. Ensures that the host OS is 
provided 
with a valid null-terminated string. Linux BZ 11822.

Updated the FACS waking vector interfaces. Split 
AcpiSetFirmwareWakingVector 
into two: one for the 32-bit vector, another for the 64-bit vector. This 
is 
required because the host OS must setup the wake much differently for 
each 
vector (real vs. protected mode, etc.) and the interface itself should 
not 
be 
deciding which vector to use. Also, eliminated the 
GetFirmwareWakingVector 
interface, as it served no purpose (only the firmware reads the vector, 
OS 
only writes the vector.) ACPICA BZ 731.

Implemented a mechanism to escape infinite AML While() loops. Added a 
loop 
counter to force exit from AML While loops if the count becomes too 
large. 
This can occur in poorly written AML when the hardware does not respond 
within a while loop and the loop does not implement a timeout. The 
maximum 
loop count is configurable. A new exception code is returned when a loop 
is 
broken, AE_AML_INFINITE_LOOP. Alexey Starikovskiy, Bob Moore.

Optimized the execution of AML While loops. Previously, a control state 
object was allocated and freed for each execution of the loop. The 
optimization is to simply reuse the control state for each iteration. 
This 
speeds up the raw loop execution time by about 5%.

Enhanced the implicit return mechanism. For Windows compatibility, return 
an 
implicit integer of value zero for methods that contain no executable 
code. 
Such methods are seen in the field as stubs (presumably), and can cause 
drivers to fail if they expect a return value. Lin Ming.

Allow multiple backslashes as root prefixes in namepaths. In a fully 
qualified namepath, allow multiple backslash prefixes. This can happen 
(and 
is seen in the field) because of the use of a double-backslash in strings 
(since backslash is the escape character) causing confusion. ACPICA BZ 
739 
Lin Ming.

Emit a warning if two different FACS or DSDT tables are discovered in the 
FADT. Checks if there are two valid but different addresses for the FACS 
and 
DSDT within the FADT (mismatch between the 32-bit and 64-bit fields.)

Consolidated the method argument count validation code. Merged the code 
that 
validates control method argument counts into the predefined validation 
module. Eliminates possible multiple warnings for incorrect argument 
counts.

Implemented ACPICA example code. Includes code for ACPICA initialization, 
handler installation, and calling a control method. Available at 
source/tools/examples.

Added a global pointer for FACS table to simplify internal FACS access. 
Use 
the global pointer instead of using AcpiGetTableByIndex for each FACS 
access. 
This simplifies the code for the Global Lock and the Firmware Waking 
Vector(s).

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  81.2K Code, 17.0K Data,  98.2K Total
    Debug Version:     155.8K Code, 49.1K Data, 204.9K Total
  Current Release:
    Non-Debug Version:  81.7K Code, 17.3K Data,  99.0K Total
    Debug Version:     156.4K Code, 49.4K Data, 205.8K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Improved disassembly of external method calls. Added the -e option 
to 
allow the inclusion of additional ACPI tables to help with the 
disassembly 
of 
method invocations and the generation of external declarations during the 
disassembly. Certain external method invocations cannot be disassembled 
properly without the actual declaration of the method. Use the -e option 
to 
include the table where the external method(s) are actually declared. 
Most 
useful for disassembling SSDTs that make method calls back to the master 
DSDT. Lin Ming. Example: To disassemble an SSDT with calls to DSDT:  iasl 
-d 
-e dsdt.aml ssdt1.aml

iASL: Fix to allow references to aliases within ASL namepaths. Fixes a 
problem where the use of an alias within a namepath would result in a not 
found error or cause the compiler to fault. Also now allows forward 
references from the Alias operator itself. ACPICA BZ 738.

----------------------------------------
26 September 2008. Summary of changes for version 20080926:

1) ACPI CA Core Subsystem:

Designed and implemented a mechanism to validate predefined ACPI methods 
and 
objects. This code validates the predefined ACPI objects (objects whose 
names 
start with underscore) that appear in the namespace, at the time they are 
evaluated. The argument count and the type of the returned object are 
validated against the ACPI specification. The purpose of this validation 
is 
to detect problems with the BIOS-implemented predefined ACPI objects 
before 
the results are returned to the ACPI-related drivers. Future enhancements 
may 
include actual repair of incorrect return objects where possible. Two new 
files are nspredef.c and acpredef.h.

Fixed a fault in the AML parser if a memory allocation fails during the 
Op 
completion routine AcpiPsCompleteThisOp. Lin Ming. ACPICA BZ 492.

Fixed an issue with implicit return compatibility. This change improves 
the 
implicit return mechanism to be more compatible with the MS interpreter. 
Lin 
Ming, ACPICA BZ 349.

Implemented support for zero-length buffer-to-string conversions. Allow 
zero 
length strings during interpreter buffer-to-string conversions. For 
example, 
during the ToDecimalString and ToHexString operators, as well as implicit 
conversions. Fiodor Suietov, ACPICA BZ 585.

Fixed two possible memory leaks in the error exit paths of 
AcpiUtUpdateObjectReference and AcpiUtWalkPackageTree. These functions 
are 
similar in that they use a stack of state objects in order to eliminate 
recursion. The stack must be fully unwound and deallocated if an error 
occurs. Lin Ming. ACPICA BZ 383.

Removed the unused ACPI_BITREG_WAKE_ENABLE definition and entry in the 
global 
ACPI register table. This bit does not exist and is unused. Lin Ming, Bob 
Moore ACPICA BZ 442.

Removed the obsolete version number in module headers. Removed the 
"$Revision" number that appeared in each module header. This version 
number 
was useful under SourceSafe and CVS, but has no meaning under git. It is 
not 
only incorrect, it could also be misleading.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  79.7K Code, 16.4K Data,  96.1K Total
    Debug Version:     153.7K Code, 48.2K Data, 201.9K Total
  Current Release:
    Non-Debug Version:  81.2K Code, 17.0K Data,  98.2K Total
    Debug Version:     155.8K Code, 49.1K Data, 204.9K Total

----------------------------------------
29 August 2008. Summary of changes for version 20080829:

1) ACPI CA Core Subsystem:

Completed a major cleanup of the internal ACPI_OPERAND_OBJECT of type 
Reference. Changes include the elimination of cheating on the Object 
field 
for the DdbHandle subtype, addition of a reference class field to 
differentiate the various reference types (instead of an AML opcode), and 
the 
cleanup of debug output for this object. Lin Ming, Bob Moore. BZ 723

Reduce an error to a warning for an incorrect method argument count. 
Previously aborted with an error if too few arguments were passed to a 
control method via the external ACPICA interface. Now issue a warning 
instead 
and continue. Handles the case where the method inadvertently declares 
too 
many arguments, but does not actually use the extra ones. Applies mainly 
to 
the predefined methods. Lin Ming. Linux BZ 11032.

Disallow the evaluation of named object types with no intrinsic value. 
Return 
AE_TYPE for objects that have no value and therefore evaluation is 
undefined: 
Device, Event, Mutex, Region, Thermal, and Scope. Previously, evaluation 
of 
these types were allowed, but an exception would be generated at some 
point 
during the evaluation. Now, the error is generated up front.

Fixed a possible memory leak in the AcpiNsGetExternalPathname function 
(nsnames.c). Fixes a leak in the error exit path.

Removed the obsolete debug levels ACPI_DB_WARN and ACPI_DB_ERROR. These 
debug 
levels were made obsolete by the ACPI_WARNING, ACPI_ERROR, and 
ACPI_EXCEPTION 
interfaces. Also added ACPI_DB_EVENTS to correspond with the existing 
ACPI_LV_EVENTS.

Removed obsolete and/or unused exception codes from the acexcep.h header. 
There is the possibility that certain device drivers may be affected if 
they 
use any of these exceptions.

The ACPICA documentation has been added to the public git source tree, 
under 
acpica/documents. Included are the ACPICA programmer reference, the iASL 
compiler reference, and the changes.txt release logfile.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  79.7K Code, 16.4K Data,  96.1K Total
    Debug Version:     153.9K Code, 48.4K Data, 202.3K Total
  Current Release:
    Non-Debug Version:  79.7K Code, 16.4K Data,  96.1K Total
    Debug Version:     153.7K Code, 48.2K Data, 201.9K Total

2) iASL Compiler/Disassembler and Tools:

Allow multiple argument counts for the predefined _SCP method. ACPI 3.0 
defines _SCP with 3 arguments. Previous versions defined it with only 1 
argument. iASL now allows both definitions.

iASL/disassembler: avoid infinite loop on bad ACPI tables. Check for 
zero-
length subtables when disassembling ACPI tables. Also fixed a couple of 
errors where a full 16-bit table type field was not extracted from the 
input 
properly.

acpisrc: Improve comment counting mechanism for generating source code 
statistics. Count first and last lines of multi-line comments as 
whitespace, 
not comment lines. Handle Linux legal header in addition to standard 
acpica 
header.

----------------------------------------

29 July 2008. Summary of changes for version 20080729:

1) ACPI CA Core Subsystem:

Fix a possible deadlock in the GPE dispatch. Remove call to 
AcpiHwDisableAllGpes during wake in AcpiEvGpeDispatch. This call will 
attempt 
to acquire the GPE lock but can deadlock since the GPE lock is already 
held 
at dispatch time. This code was introduced in version 20060831 as a 
response 
to Linux BZ 6881 and has since been removed from Linux.

Add a function to dereference returned reference objects. Examines the 
return 
object from a call to AcpiEvaluateObject. Any Index or RefOf references 
are 
automatically dereferenced in an attempt to return something useful 
(these 
reference types cannot be converted into an external ACPI_OBJECT.) 
Provides 
MS compatibility. Lin Ming, Bob Moore. Linux BZ 11105

x2APIC support: changes for MADT and SRAT ACPI tables. There are 2 new 
subtables for the MADT and one new subtable for the SRAT. Includes 
disassembler and AcpiSrc support. Data from the Intel 64 Architecture 
x2APIC 
Specification, June 2008.

Additional error checking for pathname utilities. Add error check after 
all 
calls to AcpiNsGetPathnameLength. Add status return from 
AcpiNsBuildExternalPath and check after all calls. Add parameter 
validation 
to AcpiUtInitializeBuffer. Reported by and initial patch by Ingo Molnar.

Return status from the global init function AcpiUtGlobalInitialize. This 
is 
used by both the kernel subsystem and the utilities such as iASL 
compiler. 
The function could possibly fail when the caches are initialized. Yang 
Yi.

Add a function to decode reference object types to strings. Created for 
improved error messages. 

Improve object conversion error messages. Better error messages during 
object 
conversion from internal to the external ACPI_OBJECT. Used for external 
calls 
to AcpiEvaluateObject.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  79.6K Code, 16.2K Data,  95.8K Total
    Debug Version:     153.5K Code, 48.2K Data, 201.7K Total
  Current Release:
    Non-Debug Version:  79.7K Code, 16.4K Data,  96.1K Total
    Debug Version:     153.9K Code, 48.4K Data, 202.3K Total

2) iASL Compiler/Disassembler and Tools:

Debugger: fix a possible hang when evaluating non-methods. Fixes a 
problem 
introduced in version 20080701. If the object being evaluated (via 
execute 
command) is not a method, the debugger can hang while trying to obtain 
non-
existent parameters.

iASL: relax error for using reserved "_T_x" identifiers. These names can 
appear in a disassembled ASL file if they were emitted by the original 
compiler. Instead of issuing an error or warning and forcing the user to 
manually change these names, issue a remark instead.

iASL: error if named object created in while loop. Emit an error if any 
named 
object is created within a While loop. If allowed, this code will 
generate 
a 
run-time error on the second iteration of the loop when an attempt is 
made 
to 
create the same named object twice. ACPICA bugzilla 730.

iASL: Support absolute pathnames for include files. Add support for 
absolute 
pathnames within the Include operator. previously, only relative 
pathnames 
were supported.

iASL: Enforce minimum 1 interrupt in interrupt macro and Resource 
Descriptor. 
The ACPI spec requires one interrupt minimum. BZ 423

iASL: Handle a missing ResourceSource arg, with a present SourceIndex. 
Handles the case for the Interrupt Resource Descriptor where
the ResourceSource argument is omitted but ResourceSourceIndex
is present. Now leave room for the Index. BZ 426

iASL: Prevent error message if CondRefOf target does not exist. Fixes 
cases 
where an error message is emitted if the target does not exist. BZ 516

iASL: Fix broken -g option (get Windows ACPI tables). Fixes the -g option 
(get ACPI tables on Windows). This was apparently broken in version 
20070919.

AcpiXtract: Handle EOF while extracting data. Correctly handle the case 
where 
the EOF happens immediately after the last table in the input file. Print 
completion message. Previously, no message was displayed in this case.

----------------------------------------
01 July 2008. Summary of changes for version 20080701:

0) Git source tree / acpica.org

Fixed a problem where a git-clone from http would not transfer the entire 
source tree.

1) ACPI CA Core Subsystem:

Implemented a "careful" GPE disable in AcpiEvDisableGpe, only modify one 
enable bit. Now performs a read-change-write of the enable register 
instead 
of simply writing out the cached enable mask. This will prevent 
inadvertent 
enabling of GPEs if a rogue GPE is received during initialization (before 
GPE 
handlers are installed.)

Implemented a copy for dynamically loaded tables. Previously, dynamically 
loaded tables were simply mapped - but on some machines this memory is 
corrupted after suspend. Now copy the table to a local buffer. For the 
OpRegion case, added checksum verify. Use the table length from the table 
header, not the region length. For the Buffer case, use the table length 
also. Dennis Noordsij, Bob Moore. BZ 10734

Fixed a problem where the same ACPI table could not be dynamically loaded 
and 
unloaded more than once. Without this change, a table cannot be loaded 
again 
once it has been loaded/unloaded one time. The current mechanism does not 
unregister a table upon an unload. During a load, if the same table is 
found, 
this no longer returns an exception. BZ 722

Fixed a problem where the wrong descriptor length was calculated for the 
EndTag descriptor in 64-bit mode. The "minimal" descriptors such as 
EndTag 
are calculated as 12 bytes long, but the actual length in the internal 
descriptor is 16 because of the round-up to 8 on the 64-bit build. 
Reported 
by Linn Crosetto. BZ 728

Fixed a possible memory leak in the Unload operator. The DdbHandle 
returned 
by Load() did not have its reference count decremented during unload, 
leading 
to a memory leak. Lin Ming. BZ 727

Fixed a possible memory leak when deleting thermal/processor objects. Any 
associated notify handlers (and objects) were not being deleted. Fiodor 
Suietov. BZ 506

Fixed the ordering of the ASCII names in the global mutex table to match 
the 
actual mutex IDs. Used by AcpiUtGetMutexName, a function used for debug 
only. 
Vegard Nossum. BZ 726

Enhanced the AcpiGetObjectInfo interface to return the number of required 
arguments if the object is a control method. Added this call to the 
debugger 
so the proper number of default arguments are passed to a method. This 
prevents a warning when executing methods from AcpiExec.

Added a check for an invalid handle in AcpiGetObjectInfo. Return 
AE_BAD_PARAMETER if input handle is invalid. BZ 474

Fixed an extraneous warning from exconfig.c on the 64-bit build.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  79.3K Code, 16.2K Data,  95.5K Total
    Debug Version:     153.0K Code, 48.2K Data, 201.2K Total
  Current Release:
    Non-Debug Version:  79.6K Code, 16.2K Data,  95.8K Total
    Debug Version:     153.5K Code, 48.2K Data, 201.7K Total

2) iASL Compiler/Disassembler and Tools:

iASL: Added two missing ACPI reserved names. Added _MTP and _ASZ, both 
resource descriptor names.

iASL: Detect invalid ASCII characters in input (windows version). Removed 
the 
"-CF" flag from the flex compile, enables correct detection of non-ASCII 
characters in the input. BZ 441

iASL: Eliminate warning when result of LoadTable is not used. Eliminate 
the 
"result of operation not used" warning when the DDB handle returned from 
LoadTable is not used. The warning is not needed. BZ 590

AcpiExec: Add support for dynamic table load/unload. Now calls _CFG 
method 
to 
pass address of table to the AML. Added option to disable OpRegion 
simulation 
to allow creation of an OpRegion with a real address that was passed to 
_CFG. 
All of this allows testing of the Load and Unload operators from 
AcpiExec.

Debugger: update tables command for unloaded tables. Handle unloaded 
tables 
and use the standard table header output routine.

----------------------------------------
09 June 2008. Summary of changes for version 20080609:

1) ACPI CA Core Subsystem:

Implemented a workaround for reversed _PRT entries. A significant number 
of 
BIOSs erroneously reverse the _PRT SourceName and the SourceIndex. This 
change dynamically detects and repairs this problem. Provides 
compatibility 
with MS ACPI. BZ 6859

Simplified the internal ACPI hardware interfaces to eliminate the locking 
flag parameter from Register Read/Write. Added a new external interface, 
AcpiGetRegisterUnlocked.

Fixed a problem where the invocation of a GPE control method could hang. 
This 
was a regression introduced in 20080514. The new method argument count 
validation mechanism can enter an infinite loop when a GPE method is 
dispatched. Problem fixed by removing the obsolete code that passed GPE 
block 
information to the notify handler via the control method parameter 
pointer.

Fixed a problem where the _SST execution status was incorrectly returned 
to 
the caller of AcpiEnterSleepStatePrep. This was a regression introduced 
in 
20080514. _SST is optional and a NOT_FOUND exception should never be 
returned. BZ 716

Fixed a problem where a deleted object could be accessed from within the 
AML 
parser. This was a regression introduced in version 20080123 as a fix for 
the 
Unload operator. Lin Ming. BZ 10669

Cleaned up the debug operand dump mechanism. Eliminated unnecessary 
operands 
and eliminated the use of a negative index in a loop. Operands are now 
displayed in the correct order, not backwards. This also fixes a 
regression 
introduced in 20080514 on 64-bit systems where the elimination of 
ACPI_NATIVE_UINT caused the negative index to go large and positive. BZ 
715

Fixed a possible memory leak in EvPciConfigRegionSetup where the error 
exit 
path did not delete a locally allocated structure.

Updated definitions for the DMAR and SRAT tables to synchronize with the 
current specifications. Includes disassembler support.

Fixed a problem in the mutex debug code (in utmutex.c) where an incorrect 
loop termination value was used. Loop terminated on iteration early, 
missing 
one mutex. Linn Crosetto

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  79.5K Code, 16.2K Data,  95.7K Total
    Debug Version:     153.3K Code, 48.3K Data, 201.6K Total
  Current Release:
    Non-Debug Version:  79.3K Code, 16.2K Data,  95.5K Total
    Debug Version:     153.0K Code, 48.2K Data, 201.2K Total

2) iASL Compiler/Disassembler and Tools:

Disassembler: Implemented support for EisaId() within _CID objects. Now 
disassemble integer _CID objects back to EisaId invocations, including 
multiple integers within _CID packages. Includes single-step support for 
debugger also.

Disassembler: Added support for DMAR and SRAT table definition changes.

----------------------------------------
14 May 2008. Summary of changes for version 20080514:

1) ACPI CA Core Subsystem:

Fixed a problem where GPEs were enabled too early during the ACPICA 
initialization. This could lead to "handler not installed" errors on some 
machines. Moved GPE enable until after _REG/_STA/_INI methods are run. 
This 
ensures that all operation regions and devices throughout the namespace 
have 
been initialized before GPEs are enabled. Alexey Starikovskiy, BZ 9916.

Implemented a change to the enter sleep code. Moved execution of the _GTS 
method to just before setting sleep enable bit. The execution was moved 
from 
AcpiEnterSleepStatePrep to AcpiEnterSleepState. _GTS is now executed 
immediately before the SLP_EN bit is set, as per the ACPI specification. 
Luming Yu, BZ 1653.

Implemented a fix to disable unknown GPEs (2nd version). Now always 
disable 
the GPE, even if ACPICA thinks that that it is already disabled. It is 
possible that the AML or some other code has enabled the GPE unbeknownst 
to 
the ACPICA code.

Fixed a problem with the Field operator where zero-length fields would 
return 
an AE_AML_NO_OPERAND exception during table load. Fix enables zero-length 
ASL 
field declarations in Field(), BankField(), and IndexField(). BZ 10606.

Implemented a fix for the Load operator, now load the table at the 
namespace 
root. This reverts a change introduced in version 20071019. The table is 
now 
loaded at the namespace root even though this goes against the ACPI 
specification. This provides compatibility with other ACPI 
implementations. 
The ACPI specification will be updated to reflect this in ACPI 4.0. Lin 
Ming.

Fixed a problem where ACPICA would not Load() tables with unusual 
signatures. 
Now ignore ACPI table signature for Load() operator. Only "SSDT" is 
acceptable to the ACPI spec, but tables are seen with OEMx and null sigs. 
Therefore, signature validation is worthless. Apparently MS ACPI accepts 
such 
signatures, ACPICA must be compatible. BZ 10454.

Fixed a possible negative array index in AcpiUtValidateException. Added 
NULL 
fields to the exception string arrays to eliminate a -1 subtraction on 
the 
SubStatus field.

Updated the debug tracking macros to reduce overall code and data size. 
Changed ACPI_MODULE_NAME and ACPI_FUNCTION_NAME to use arrays of strings 
instead of pointers to static strings. Jan Beulich and Bob Moore.

Implemented argument count checking in control method invocation via 
AcpiEvaluateObject. Now emit an error if too few arguments, warning if 
too 
many. This applies only to extern programmatic control method execution, 
not 
method-to-method calls within the AML. Lin Ming.

Eliminated the ACPI_NATIVE_UINT type across all ACPICA code. This type is 
no 
longer needed, especially with the removal of 16-bit support. It was 
replaced 
mostly with UINT32, but also ACPI_SIZE where a type that changes 32/64 
bit 
on 
32/64-bit platforms is required.

Added the C const qualifier for appropriate string constants -- mostly 
MODULE_NAME and printf format strings. Jan Beulich.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has a 
much larger code and data size.

  Previous Release:
    Non-Debug Version:  80.0K Code, 17.4K Data,  97.4K Total
    Debug Version:     159.4K Code, 64.4K Data, 223.8K Total
  Current Release:
    Non-Debug Version:  79.5K Code, 16.2K Data,  95.7K Total
    Debug Version:     153.3K Code, 48.3K Data, 201.6K Total

2) iASL Compiler/Disassembler and Tools:

Implemented ACPI table revision ID validation in the disassembler. Zero 
is 
always invalid. For DSDTs, the ID controls the interpreter integer width. 
1 
means 32-bit and this is unusual. 2 or greater is 64-bit.

----------------------------------------
21 March 2008. Summary of changes for version 20080321:

1) ACPI CA Core Subsystem:

Implemented an additional change to the GPE support in order to suppress 
spurious or stray GPEs. The AcpiEvDisableGpe function will now 
permanently 
disable incoming GPEs that are neither enabled nor disabled -- meaning 
that 
the GPE is unknown to the system. This should prevent future interrupt 
floods 
from that GPE. BZ 6217 (Zhang Rui)

Fixed a problem where NULL package elements were not returned to the 
AcpiEvaluateObject interface correctly. The element was simply ignored 
instead of returning a NULL ACPI_OBJECT package element, potentially 
causing 
a buffer overflow and/or confusing the caller who expected a fixed number 
of 
elements. BZ 10132 (Lin Ming, Bob Moore)

Fixed a problem with the CreateField, CreateXXXField (Bit, Byte, Word, 
Dword, 
Qword), Field, BankField, and IndexField operators when invoked from 
inside 
an executing control method. In this case, these operators created 
namespace 
nodes that were incorrectly left marked as permanent nodes instead of 
temporary nodes. This could cause a problem if there is race condition 
between an exiting control method and a running namespace walk. (Reported 
by 
Linn Crosetto)

Fixed a problem where the CreateField and CreateXXXField operators would 
incorrectly allow duplicate names (the name of the field) with no 
exception 
generated.

Implemented several changes for Notify handling. Added support for new 
Notify 
values (ACPI 2.0+) and improved the Notify debug output. Notify on 
PowerResource objects is no longer allowed, as per the ACPI 
specification. 
(Bob Moore, Zhang Rui)

All Reference Objects returned via the AcpiEvaluateObject interface are 
now 
marked as type "REFERENCE" instead of "ANY". The type ANY is now reserved 
for 
NULL objects - either NULL package elements or unresolved named 
references.

Fixed a problem where an extraneous debug message was produced for 
package 
objects (when debugging enabled). The message "Package List length larger 
than NumElements count" is now produced in the correct case, and is now 
an 
error message rather than a debug message. Added a debug message for the 
opposite case, where NumElements is larger than the Package List (the 
package 
will be padded out with NULL elements as per the ACPI spec.)

Implemented several improvements for the output of the ASL "Debug" object 
to 
clarify and keep all data for a given object on one output line.

Fixed two size calculation issues with the variable-length Start 
Dependent 
resource descriptor.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  79.7K Code, 17.3K Data,  97.0K Total
    Debug Version:     158.9K Code, 64.0K Data, 222.9K Total
  Current Release:
    Non-Debug Version:  80.0K Code, 17.4K Data,  97.4K Total
    Debug Version:     159.4K Code, 64.4K Data, 223.8K Total

2) iASL Compiler/Disassembler and Tools:

Fixed a problem with the use of the Switch operator where execution of 
the 
containing method by multiple concurrent threads could cause an 
AE_ALREADY_EXISTS exception. This is caused by the fact that there is no 
actual Switch opcode, it must be simulated with local named temporary 
variables and if/else pairs. The solution chosen was to mark any method 
that 
uses Switch as Serialized, thus preventing multiple thread entries. BZ 
469.

----------------------------------------
13 February 2008. Summary of changes for version 20080213:

1) ACPI CA Core Subsystem:

Implemented another MS compatibility design change for GPE/Notify 
handling. 
GPEs are now cleared/enabled asynchronously to allow all pending notifies 
to 
complete first. It is expected that the OSL will queue the enable request 
behind all pending notify requests (may require changes to the local host 
OSL 
in AcpiOsExecute). Alexey Starikovskiy.

Fixed a problem where buffer and package objects passed as arguments to a 
control method via the external AcpiEvaluateObject interface could cause 
an 
AE_AML_INTERNAL exception depending on the order and type of operators 
executed by the target control method.

Fixed a problem where resource descriptor size optimization could cause a 
problem when a _CRS resource template is passed to a _SRS method. The 
_SRS 
resource template must use the same descriptors (with the same size) as 
returned from _CRS. This change affects the following resource 
descriptors: 
IRQ / IRQNoFlags and StartDependendentFn / StartDependentFnNoPri. (BZ 
9487)

Fixed a problem where a CopyObject to RegionField, BankField, and 
IndexField 
objects did not perform an implicit conversion as it should. These types 
must 
retain their initial type permanently as per the ACPI specification. 
However, 
a CopyObject to all other object types should not perform an implicit 
conversion, as per the ACPI specification. (Lin Ming, Bob Moore) BZ 388

Fixed a problem with the AcpiGetDevices interface where the mechanism to 
match device CIDs did not examine the entire list of available CIDs, but 
instead aborted on the first non-matching CID. Andrew Patterson.

Fixed a regression introduced in version 20071114. The ACPI_HIDWORD macro 
was 
inadvertently changed to return a 16-bit value instead of a 32-bit value, 
truncating the upper dword of a 64-bit value. This macro is only used to 
display debug output, so no incorrect calculations were made. Also, 
reimplemented the macro so that a 64-bit shift is not performed by 
inefficient compilers.

Added missing va_end statements that should correspond with each va_start 
statement.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  79.5K Code, 17.2K Data,  96.7K Total
    Debug Version:     159.0K Code, 63.8K Data, 222.8K Total
  Current Release:
    Non-Debug Version:  79.7K Code, 17.3K Data,  97.0K Total
    Debug Version:     158.9K Code, 64.0K Data, 222.9K Total

2) iASL Compiler/Disassembler and Tools:

Implemented full disassembler support for the following new ACPI tables: 
BERT, EINJ, and ERST. Implemented partial disassembler support for the 
complicated HEST table. These tables support the Windows Hardware Error 
Architecture (WHEA).

----------------------------------------
23 January 2008. Summary of changes for version 20080123:

1) ACPI CA Core Subsystem:

Added the 2008 copyright to all module headers and signons. This affects 
virtually every file in the ACPICA core subsystem, the iASL compiler, and 
the tools/utilities.

Fixed a problem with the SizeOf operator when used with Package and 
Buffer 
objects. These objects have deferred execution for some arguments, and 
the 
execution is now completed before the SizeOf is executed. This problem 
caused 
unexpected AE_PACKAGE_LIMIT errors on some systems (Lin Ming, Bob Moore) 
BZ 
9558

Implemented an enhancement to the interpreter "slack mode". In the 
absence 
of 
an explicit return or an implicitly returned object from the last 
executed 
opcode, a control method will now implicitly return an integer of value 0 
for 
Microsoft compatibility. (Lin Ming) BZ 392

Fixed a problem with the Load operator where an exception was not 
returned 
in 
the case where the table is already loaded. (Lin Ming) BZ 463

Implemented support for the use of DDBHandles as an Indexed Reference, as 
per 
the ACPI spec. (Lin Ming) BZ 486

Implemented support for UserTerm (Method invocation) for the Unload 
operator 
as per the ACPI spec. (Lin Ming) BZ 580

Fixed a problem with the LoadTable operator where the OemId and 
OemTableId 
input strings could cause unexpected failures if they were shorter than 
the 
maximum lengths allowed. (Lin Ming, Bob Moore) BZ 576

Implemented support for UserTerm (Method invocation) for the Unload 
operator 
as per the ACPI spec. (Lin Ming) BZ 580

Implemented header file support for new ACPI tables - BERT, ERST, EINJ, 
HEST, 
IBFT, UEFI, WDAT. Disassembler support is forthcoming.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  79.3K Code, 17.2K Data,  96.5K Total
    Debug Version:     158.6K Code, 63.8K Data, 222.4K Total
  Current Release:
    Non-Debug Version:  79.5K Code, 17.2K Data,  96.7K Total
    Debug Version:     159.0K Code, 63.8K Data, 222.8K Total

2) iASL Compiler/Disassembler and Tools:

Implemented support in the disassembler for checksum validation on 
incoming 
binary DSDTs and SSDTs. If incorrect, a message is displayed within the 
table 
header dump at the start of the disassembly.

Implemented additional debugging information in the namespace listing 
file 
created during compilation. In addition to the namespace hierarchy, the 
full 
pathname to each namespace object is displayed.

Fixed a problem with the disassembler where invalid ACPI tables could 
cause 
faults or infinite loops.

Fixed an unexpected parse error when using the optional "parameter types" 
list in a control method declaration. (Lin Ming) BZ 397

Fixed a problem where two External declarations with the same name did 
not 
cause an error (Lin Ming) BZ 509

Implemented support for full TermArgs (adding Argx, Localx and method 
invocation) for the ParameterData parameter to the LoadTable operator. 
(Lin 
Ming) BZ 583,587

----------------------------------------
19 December 2007. Summary of changes for version 20071219:

1) ACPI CA Core Subsystem:

Implemented full support for deferred execution for the TermArg string 
arguments for DataTableRegion. This enables forward references and full 
operand resolution for the three string arguments. Similar to 
OperationRegion 
deferred argument execution.) Lin Ming. BZ 430

Implemented full argument resolution support for the BankValue argument 
to 
BankField. Previously, only constants were supported, now any TermArg may 
be 
used. Lin Ming BZ 387, 393

Fixed a problem with AcpiGetDevices where the search of a branch of the 
device tree could be terminated prematurely. In accordance with the ACPI 
specification, the search down the current branch is terminated if a 
device 
is both not present and not functional (instead of just not present.) 
Yakui 
Zhao.

Fixed a problem where "unknown" GPEs could be allowed to fire repeatedly 
if 
the underlying AML code changed the GPE enable registers. Now, any 
unknown 
incoming GPE (no _Lxx/_Exx method and not the EC GPE) is immediately 
disabled 
instead of simply ignored. Rui Zhang.

Fixed a problem with Index Fields where the Index register was 
incorrectly 
limited to a maximum of 32 bits. Now any size may be used.

Fixed a couple memory leaks associated with "implicit return" objects 
when 
the AML Interpreter slack mode is enabled. Lin Ming BZ 349

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  79.0K Code, 17.2K Data,  96.2K Total
    Debug Version:     157.9K Code, 63.6K Data, 221.5K Total
  Current Release:
    Non-Debug Version:  79.3K Code, 17.2K Data,  96.5K Total
    Debug Version:     158.6K Code, 63.8K Data, 222.4K Total

----------------------------------------
14 November 2007. Summary of changes for version 20071114:

1) ACPI CA Core Subsystem:

Implemented event counters for each of the Fixed Events, the ACPI SCI 
(interrupt) itself, and control methods executed. Named 
AcpiFixedEventCount[], AcpiSciCount, and AcpiMethodCount respectively. 
These 
should be useful for debugging and statistics.

Implemented a new external interface, AcpiGetStatistics, to retrieve the 
contents of the various event counters. Returns the current values for 
AcpiSciCount, AcpiGpeCount, the AcpiFixedEventCount array, and 
AcpiMethodCount. The interface can be expanded in the future if new 
counters 
are added. Device drivers should use this interface rather than access 
the 
counters directly.

Fixed a problem with the FromBCD and ToBCD operators. With some 
compilers, 
the ShortDivide function worked incorrectly, causing problems with the 
BCD 
functions with large input values. A truncation from 64-bit to 32-bit 
inadvertently occurred. Internal BZ 435. Lin Ming

Fixed a problem with Index references passed as method arguments. 
References 
passed as arguments to control methods were dereferenced immediately 
(before 
control was passed to the called method). The references are now 
correctly 
passed directly to the called method. BZ 5389. Lin Ming

Fixed a problem with CopyObject used in conjunction with the Index 
operator. 
The reference was incorrectly dereferenced before the copy. The reference 
is 
now correctly copied. BZ 5391. Lin Ming

Fixed a problem with Control Method references within Package objects. 
These 
references are now correctly generated. This completes the package 
construction overhaul that began in version 20071019.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  78.8K Code, 17.2K Data,  96.0K Total
    Debug Version:     157.2K Code, 63.4K Data, 220.6K Total
  Current Release:
    Non-Debug Version:  79.0K Code, 17.2K Data,  96.2K Total
    Debug Version:     157.9K Code, 63.6K Data, 221.5K Total


2) iASL Compiler/Disassembler and Tools:

The AcpiExec utility now installs handlers for all of the predefined 
Operation Region types. New types supported are: PCI_Config, CMOS, and 
PCIBARTarget.

Fixed a problem with the 64-bit version of AcpiExec where the extended 
(64-
bit) address fields for the DSDT and FACS within the FADT were not being 
used, causing truncation of the upper 32-bits of these addresses. Lin 
Ming 
and Bob Moore

----------------------------------------
19 October 2007. Summary of changes for version 20071019:

1) ACPI CA Core Subsystem:

Fixed a problem with the Alias operator when the target of the alias is a 
named ASL operator that opens a new scope -- Scope, Device, 
PowerResource, 
Processor, and ThermalZone. In these cases, any children of the original 
operator could not be accessed via the alias, potentially causing 
unexpected 
AE_NOT_FOUND exceptions. (BZ 9067)

Fixed a problem with the Package operator where all named references were 
created as object references and left otherwise unresolved. According to 
the 
ACPI specification, a Package can only contain Data Objects or references 
to 
control methods. The implication is that named references to Data Objects 
(Integer, Buffer, String, Package, BufferField, Field) should be resolved 
immediately upon package creation. This is the approach taken with this 
change. References to all other named objects (Methods, Devices, Scopes, 
etc.) are all now properly created as reference objects. (BZ 5328)

Reverted a change to Notify handling that was introduced in version 
20070508. This version changed the Notify handling from asynchronous to 
fully synchronous (Device driver Notify handling with respect to the 
Notify 
ASL operator). It was found that this change caused more problems than it 
solved and was removed by most users.

Fixed a problem with the Increment and Decrement operators where the type 
of 
the target object could be unexpectedly and incorrectly changed. (BZ 353) 
Lin Ming.

Fixed a problem with the Load and LoadTable operators where the table 
location within the namespace was ignored. Instead, the table was always 
loaded into the root or current scope. Lin Ming.

Fixed a problem with the Load operator when loading a table from a buffer 
object. The input buffer was prematurely zeroed and/or deleted. (BZ 577)

Fixed a problem with the Debug object where a store of a DdbHandle 
reference 
object to the Debug object could cause a fault.

Added a table checksum verification for the Load operator, in the case 
where 
the load is from a buffer. (BZ 578).

Implemented additional parameter validation for the LoadTable operator. 
The 
length of the input strings SignatureString, OemIdString, and OemTableId 
are 
now checked for maximum lengths. (BZ 582) Lin Ming.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  78.5K Code, 17.1K Data,  95.6K Total
    Debug Version:     156.7K Code, 63.2K Data, 219.9K Total
  Current Release:
    Non-Debug Version:  78.8K Code, 17.2K Data,  96.0K Total
    Debug Version:     157.2K Code, 63.4K Data, 220.6K Total


2) iASL Compiler/Disassembler:

Fixed a problem where if a single file was specified and the file did not 
exist, no error message was emitted. (Introduced with wildcard support in 
version 20070917.)

----------------------------------------
19 September 2007. Summary of changes for version 20070919:

1) ACPI CA Core Subsystem:

Designed and implemented new external interfaces to install and remove 
handlers for ACPI table-related events. Current events that are defined 
are 
LOAD and UNLOAD. These interfaces allow the host to track ACPI tables as 
they are dynamically loaded and unloaded. See AcpiInstallTableHandler and 
AcpiRemoveTableHandler. (Lin Ming and Bob Moore)

Fixed a problem where the use of the AcpiGbl_AllMethodsSerialized flag 
(acpi_serialized option on Linux) could cause some systems to hang during 
initialization. (Bob Moore) BZ 8171

Fixed a problem where objects of certain types (Device, ThermalZone, 
Processor, PowerResource) can be not found if they are declared and 
referenced from within the same control method (Lin Ming) BZ 341

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  78.3K Code, 17.0K Data,  95.3K Total
    Debug Version:     156.3K Code, 63.1K Data, 219.4K Total
  Current Release:
    Non-Debug Version:  78.5K Code, 17.1K Data,  95.6K Total
    Debug Version:     156.7K Code, 63.2K Data, 219.9K Total


2) iASL Compiler/Disassembler:

Implemented support to allow multiple files to be compiled/disassembled 
in 
a 
single invocation. This includes command line wildcard support for both 
the 
Windows and Unix versions of the compiler. This feature simplifies the 
disassembly and compilation of multiple ACPI tables in a single 
directory.

----------------------------------------
08 May 2007. Summary of changes for version 20070508:

1) ACPI CA Core Subsystem:

Implemented a Microsoft compatibility design change for the handling of 
the 
Notify AML operator. Previously, notify handlers were dispatched and 
executed completely asynchronously in a deferred thread. The new design 
still executes the notify handlers in a different thread, but the 
original 
thread that executed the Notify() now waits at a synchronization point 
for 
the notify handler to complete. Some machines depend on a synchronous 
Notify 
operator in order to operate correctly.

Implemented support to allow Package objects to be passed as method 
arguments to the external AcpiEvaluateObject interface. Previously, this 
would return the AE_NOT_IMPLEMENTED exception. This feature had not been 
implemented since there were no reserved control methods that required it 
until recently.

Fixed a problem with the internal FADT conversion where ACPI 1.0 FADTs 
that 
contained invalid non-zero values in reserved fields could cause later 
failures because these fields have meaning in later revisions of the 
FADT. 
For incoming ACPI 1.0 FADTs, these fields are now always zeroed. (The 
fields 
are: Preferred_PM_Profile, PSTATE_CNT, CST_CNT, and IAPC_BOOT_FLAGS.)

Fixed a problem where the Global Lock handle was not properly updated if 
a 
thread that acquired the Global Lock via executing AML code then 
attempted 
to acquire the lock via the AcpiAcquireGlobalLock interface. Reported by 
Joe 
Liu.

Fixed a problem in AcpiEvDeleteGpeXrupt where the global interrupt list 
could be corrupted if the interrupt being removed was at the head of the 
list. Reported by Linn Crosetto.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  78.0K Code, 17.1K Data,  95.1K Total
    Debug Version:     155.9K Code, 63.1K Data, 219.0K Total
  Current Release:
    Non-Debug Version:  78.3K Code, 17.0K Data,  95.3K Total
    Debug Version:     156.3K Code, 63.1K Data, 219.4K Total

----------------------------------------
20 March 2007. Summary of changes for version 20070320:

1) ACPI CA Core Subsystem:

Implemented a change to the order of interpretation and evaluation of AML 
operand objects within the AML interpreter. The interpreter now evaluates 
operands in the order that they appear in the AML stream (and the 
corresponding ASL code), instead of in the reverse order (after the 
entire 
operand list has been parsed). The previous behavior caused several 
subtle 
incompatibilities with the Microsoft AML interpreter as well as being 
somewhat non-intuitive. BZ 7871, local BZ 263. Valery Podrezov.

Implemented a change to the ACPI Global Lock support. All interfaces to 
the 
global lock now allow the same thread to acquire the lock multiple times. 
This affects the AcpiAcquireGlobalLock external interface to the global 
lock 
as well as the internal use of the global lock to support AML fields -- a 
control method that is holding the global lock can now simultaneously 
access 
AML fields that require global lock protection. Previously, in both 
cases, 
this would have resulted in an AE_ALREADY_ACQUIRED exception. The change 
to 
AcpiAcquireGlobalLock is of special interest to drivers for the Embedded 
Controller. There is no change to the behavior of the AML Acquire 
operator, 
as this can already be used to acquire a mutex multiple times by the same 
thread. BZ 8066. With assistance from Alexey Starikovskiy.

Fixed a problem where invalid objects could be referenced in the AML 
Interpreter after error conditions. During operand evaluation, ensure 
that 
the internal "Return Object" field is cleared on error and only valid 
pointers are stored there. Caused occasional access to deleted objects 
that 
resulted in "large reference count" warning messages. Valery Podrezov.

Fixed a problem where an AE_STACK_OVERFLOW internal exception could occur 
on 
deeply nested control method invocations. BZ 7873, local BZ 487. Valery 
Podrezov.

Fixed an internal problem with the handling of result objects on the 
interpreter result stack. BZ 7872. Valery Podrezov.

Removed obsolete code that handled the case where AML_NAME_OP is the 
target 
of a reference (Reference.Opcode). This code was no longer necessary. BZ 
7874. Valery Podrezov.

Removed obsolete ACPI_NO_INTEGER64_SUPPORT from two header files. This 
was 
a 
remnant from the previously discontinued 16-bit support.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  78.0K Code, 17.1K Data,  95.1K Total
    Debug Version:     155.8K Code, 63.3K Data, 219.1K Total
  Current Release:
    Non-Debug Version:  78.0K Code, 17.1K Data,  95.1K Total
    Debug Version:     155.9K Code, 63.1K Data, 219.0K Total

----------------------------------------
26 January 2007. Summary of changes for version 20070126:

1) ACPI CA Core Subsystem:

Added the 2007 copyright to all module headers and signons. This affects 
virtually every file in the ACPICA core subsystem, the iASL compiler, and 
the utilities.

Implemented a fix for an incorrect parameter passed to AcpiTbDeleteTable 
during a table load. A bad pointer was passed in the case where the DSDT 
is 
overridden, causing a fault in this case.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  78.0K Code, 17.1K Data,  95.1K Total
    Debug Version:     155.8K Code, 63.3K Data, 219.1K Total
  Current Release:
    Non-Debug Version:  78.0K Code, 17.1K Data,  95.1K Total
    Debug Version:     155.8K Code, 63.3K Data, 219.1K Total

----------------------------------------
15 December 2006. Summary of changes for version 20061215:

1) ACPI CA Core Subsystem:

Support for 16-bit ACPICA has been completely removed since it is no 
longer 
necessary and it clutters the code. All 16-bit macros, types, and 
conditional compiles have been removed, cleaning up and simplifying the 
code 
across the entire subsystem. DOS support is no longer needed since the 
bootable Linux firmware kit is now available.

The handler for the Global Lock is now removed during AcpiTerminate to 
enable a clean subsystem restart, via the implementation of the 
AcpiEvRemoveGlobalLockHandler function. (With assistance from Joel Bretz, 
HP)

Implemented enhancements to the multithreading support within the 
debugger 
to enable improved multithreading debugging and evaluation of the 
subsystem. 
(Valery Podrezov)

Debugger: Enhanced the Statistics/Memory command to emit the total 
(maximum) 
memory used during the execution, as well as the maximum memory consumed 
by 
each of the various object types. (Valery Podrezov)

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  77.9K Code, 17.0K Data,  94.9K Total
    Debug Version:     155.2K Code, 63.1K Data, 218.3K Total
  Current Release:
    Non-Debug Version:  78.0K Code, 17.1K Data,  95.1K Total
    Debug Version:     155.8K Code, 63.3K Data, 219.1K Total


2) iASL Compiler/Disassembler and Tools:

AcpiExec: Implemented a new option (-m) to display full memory use 
statistics upon subsystem/program termination. (Valery Podrezov)

----------------------------------------
09 November 2006. Summary of changes for version 20061109:

1) ACPI CA Core Subsystem:

Optimized the Load ASL operator in the case where the source operand is 
an 
operation region. Simply map the operation region memory, instead of 
performing a bytewise read. (Region must be of type SystemMemory, see 
below.)

Fixed the Load ASL operator for the case where the source operand is a 
region field. A buffer object is also allowed as the source operand. BZ 
480

Fixed a problem where the Load ASL operator allowed the source operand to 
be 
an operation region of any type. It is now restricted to regions of type 
SystemMemory, as per the ACPI specification. BZ 481

Additional cleanup and optimizations for the new Table Manager code.

AcpiEnable will now fail if all of the required ACPI tables are not 
loaded 
(FADT, FACS, DSDT). BZ 477

Added #pragma pack(8/4) to acobject.h to ensure that the structures in 
this 
header are always compiled as aligned. The ACPI_OPERAND_OBJECT has been 
manually optimized to be aligned and will not work if it is byte-packed. 

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  78.1K Code, 17.1K Data,  95.2K Total
    Debug Version:     155.4K Code, 63.1K Data, 218.5K Total
  Current Release:
    Non-Debug Version:  77.9K Code, 17.0K Data,  94.9K Total
    Debug Version:     155.2K Code, 63.1K Data, 218.3K Total


2) iASL Compiler/Disassembler and Tools:

Fixed a problem where the presence of the _OSI predefined control method 
within complex expressions could cause an internal compiler error.

AcpiExec: Implemented full region support for multiple address spaces. 
SpaceId is now part of the REGION object. BZ 429

----------------------------------------
11 October 2006. Summary of changes for version 20061011:

1) ACPI CA Core Subsystem:

Completed an AML interpreter performance enhancement for control method 
execution. Previously a 2-pass parse/execution, control methods are now 
completely parsed and executed in a single pass. This improves overall 
interpreter performance by ~25%, reduces code size, and reduces CPU stack 
use. (Valery Podrezov + interpreter changes in version 20051202 that 
eliminated namespace loading during the pass one parse.)

Implemented _CID support for PCI Root Bridge detection. If the _HID does 
not 
match the predefined PCI Root Bridge IDs, the _CID list (if present) is 
now 
obtained and also checked for an ID match.

Implemented additional support for the PCI _ADR execution: upsearch until 
a 
device scope is found before executing _ADR. This allows PCI_Config 
operation regions to be declared locally within control methods 
underneath 
PCI device objects.

Fixed a problem with a possible race condition between threads executing 
AcpiWalkNamespace and the AML interpreter. This condition was removed by 
modifying AcpiWalkNamespace to (by default) ignore all temporary 
namespace 
entries created during any concurrent control method execution. An 
additional namespace race condition is known to exist between 
AcpiWalkNamespace and the Load/Unload ASL operators and is still under 
investigation.

Restructured the AML ParseLoop function, breaking it into several 
subfunctions in order to reduce CPU stack use and improve 
maintainability. 
(Mikhail Kouzmich)

AcpiGetHandle: Fix for parameter validation to detect invalid 
combinations 
of prefix handle and pathname. BZ 478

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  77.9K Code, 17.1K Data,  95.0K Total
    Debug Version:     154.6K Code, 63.0K Data, 217.6K Total
  Current Release:
    Non-Debug Version:  78.1K Code, 17.1K Data,  95.2K Total
    Debug Version:     155.4K Code, 63.1K Data, 218.5K Total

2) iASL Compiler/Disassembler and Tools:

Ported the -g option (get local ACPI tables) to the new ACPICA Table 
Manager 
to restore original behavior.

----------------------------------------
27 September 2006. Summary of changes for version 20060927:

1) ACPI CA Core Subsystem:

Removed the "Flags" parameter from AcpiGetRegister and AcpiSetRegister. 
These functions now use a spinlock for mutual exclusion and the interrupt 
level indication flag is not needed.

Fixed a problem with the Global Lock where the lock could appear to be 
obtained before it is actually obtained. The global lock semaphore was 
inadvertently created with one unit instead of zero units. (BZ 464) 
Fiodor 
Suietov.

Fixed a possible memory leak and fault in AcpiExResolveObjectToValue 
during 
a read from a buffer or region field. (BZ 458) Fiodor Suietov.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  77.9K Code, 17.1K Data,  95.0K Total
    Debug Version:     154.7K Code, 63.0K Data, 217.7K Total
  Current Release:
    Non-Debug Version:  77.9K Code, 17.1K Data,  95.0K Total
    Debug Version:     154.6K Code, 63.0K Data, 217.6K Total


2) iASL Compiler/Disassembler and Tools:

Fixed a compilation problem with the pre-defined Resource Descriptor 
field 
names where an "object does not exist" error could be incorrectly 
generated 
if the parent ResourceTemplate pathname places the template within a 
different namespace scope than the current scope. (BZ 7212)

Fixed a problem where the compiler could hang after syntax errors 
detected 
in an ElseIf construct. (BZ 453)

Fixed a problem with the AmlFilename parameter to the DefinitionBlock() 
operator. An incorrect output filename was produced when this parameter 
was 
a null string (""). Now, the original input filename is used as the AML 
output filename, with an ".aml" extension.

Implemented a generic batch command mode for the AcpiExec utility 
(execute 
any AML debugger command) (Valery Podrezov).

----------------------------------------
12 September 2006. Summary of changes for version 20060912:

1) ACPI CA Core Subsystem:

Enhanced the implementation of the "serialized mode" of the interpreter 
(enabled via the AcpiGbl_AllMethodsSerialized flag.) When this mode is 
specified, instead of creating a serialization semaphore per control 
method, 
the interpreter lock is simply no longer released before a blocking 
operation during control method execution. This effectively makes the AML 
Interpreter single-threaded. The overhead of a semaphore per-method is 
eliminated.

Fixed a regression where an error was no longer emitted if a control 
method 
attempts to create 2 objects of the same name. This once again returns 
AE_ALREADY_EXISTS. When this exception occurs, it invokes the mechanism 
that 
will dynamically serialize the control method to possible prevent future 
errors. (BZ 440)

Integrated a fix for a problem with PCI Express HID detection in the PCI 
Config Space setup procedure. (BZ 7145)

Moved all FADT-related functions to a new file, tbfadt.c. Eliminated the 
AcpiHwInitialize function - the FADT registers are now validated when the 
table is loaded.

Added two new warnings during FADT verification - 1) if the FADT is 
larger 
than the largest known FADT version, and 2) if there is a mismatch 
between 
a 
32-bit block address and the 64-bit X counterpart (when both are non-
zero.)

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  77.9K Code, 16.7K Data,  94.6K Total
    Debug Version:     154.9K Code, 62.6K Data, 217.5K Total
  Current Release:
    Non-Debug Version:  77.9K Code, 17.1K Data,  95.0K Total
    Debug Version:     154.7K Code, 63.0K Data, 217.7K Total


2) iASL Compiler/Disassembler and Tools:

Fixed a problem with the implementation of the Switch() operator where 
the 
temporary variable was declared too close to the actual Switch, instead 
of 
at method level. This could cause a problem if the Switch() operator is 
within a while loop, causing an error on the second iteration. (BZ 460)

Disassembler - fix for error emitted for unknown type for target of scope 
operator. Now, ignore it and continue.

Disassembly of an FADT now verifies the input FADT and reports any errors 
found. Fix for proper disassembly of full-sized (ACPI 2.0) FADTs.

Disassembly of raw data buffers with byte initialization data now 
prefixes 
each output line with the current buffer offset.

Disassembly of ASF! table now includes all variable-length data fields at 
the end of some of the subtables.

The disassembler now emits a comment if a buffer appears to be a 
ResourceTemplate, but cannot be disassembled as such because the EndTag 
does 
not appear at the very end of the buffer.

AcpiExec - Added the "-t" command line option to enable the serialized 
mode 
of the AML interpreter.

----------------------------------------
31 August 2006. Summary of changes for version 20060831:

1) ACPI CA Core Subsystem:

Miscellaneous fixes for the Table Manager:
- Correctly initialize internal common FADT for all 64-bit "X" fields
- Fixed a couple table mapping issues during table load
- Fixed a couple alignment issues for IA64
- Initialize input array to zero in AcpiInitializeTables
- Additional parameter validation for AcpiGetTable, AcpiGetTableHeader, 
AcpiGetTableByIndex

Change for GPE support: when a "wake" GPE is received, all wake GPEs are 
now 
immediately disabled to prevent the waking GPE from firing again and to 
prevent other wake GPEs from interrupting the wake process.

Added the AcpiGpeCount global that tracks the number of processed GPEs, 
to 
be used for debugging systems with a large number of ACPI interrupts.

Implemented support for the "DMAR" ACPI table (DMA Redirection Table) in 
both the ACPICA headers and the disassembler.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  77.8K Code, 16.5K Data,  94.3K Total
    Debug Version:     154.6K Code, 62.3K Data, 216.9K Total
  Current Release:
    Non-Debug Version:  77.9K Code, 16.7K Data,  94.6K Total
    Debug Version:     154.9K Code, 62.6K Data, 217.5K Total


2) iASL Compiler/Disassembler and Tools:

Disassembler support for the DMAR ACPI table.

----------------------------------------
23 August 2006. Summary of changes for version 20060823:

1) ACPI CA Core Subsystem:

The Table Manager component has been completely redesigned and 
reimplemented. The new design is much simpler, and reduces the overall 
code 
and data size of the kernel-resident ACPICA by approximately 5%. Also, it 
is 
now possible to obtain the ACPI tables very early during kernel 
initialization, even before dynamic memory management is initialized. 
(Alexey Starikovskiy, Fiodor Suietov, Bob Moore)

Obsolete ACPICA interfaces:

- AcpiGetFirmwareTable: Use AcpiGetTable instead (works at early kernel 
init 
time).
- AcpiLoadTable: Not needed.
- AcpiUnloadTable: Not needed.

New ACPICA interfaces:

- AcpiInitializeTables: Must be called before the table manager can be 
used.
- AcpiReallocateRootTable: Used to transfer the root table to dynamically 
allocated memory after it becomes available.
- AcpiGetTableByIndex: Allows the host to easily enumerate all ACPI 
tables 
in the RSDT/XSDT.

Other ACPICA changes:

- AcpiGetTableHeader returns the actual mapped table header, not a copy. 
Use 
AcpiOsUnmapMemory to free this mapping.
- AcpiGetTable returns the actual mapped table. The mapping is managed 
internally and must not be deleted by the caller. Use of this interface 
causes no additional dynamic memory allocation.
- AcpiFindRootPointer: Support for physical addressing has been 
eliminated, 
it appeared to be unused.
- The interface to AcpiOsMapMemory has changed to be consistent with the 
other allocation interfaces.
- The interface to AcpiOsGetRootPointer has changed to eliminate 
unnecessary 
parameters.
- ACPI_PHYSICAL_ADDRESS is now 32 bits on 32-bit platforms, 64 bits on 
64-
bit platforms. Was previously 64 bits on all platforms.
- The interface to the ACPI Global Lock acquire/release macros have 
changed 
slightly since ACPICA no longer keeps a local copy of the FACS with a 
constructed pointer to the actual global lock.

Porting to the new table manager:

- AcpiInitializeTables: Must be called once, and can be called anytime 
during the OS initialization process. It allows the host to specify an 
area 
of memory to be used to store the internal version of the RSDT/XSDT (root 
table). This allows the host to access ACPI tables before memory 
management 
is initialized and running.
- AcpiReallocateRootTable: Can be called after memory management is 
running 
to copy the root table to a dynamically allocated array, freeing up the 
scratch memory specified in the call to AcpiInitializeTables.
- AcpiSubsystemInitialize: This existing interface is independent of the 
Table Manager, and does not have to be called before the Table Manager 
can 
be used, it only must be called before the rest of ACPICA can be used.
- ACPI Tables: Some changes have been made to the names and structure of 
the 
actbl.h and actbl1.h header files and may require changes to existing 
code. 
For example, bitfields have been completely removed because of their lack 
of 
portability across C compilers.
- Update interfaces to the Global Lock acquire/release macros if local 
versions are used. (see acwin.h)

Obsolete files: tbconvrt.c, tbget.c, tbgetall.c, tbrsdt.c

New files: tbfind.c

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  80.7K Code, 17.9K Data,  98.6K Total
    Debug Version:     161.0K Code, 65.1K Data, 226.1K Total
  Current Release:
    Non-Debug Version:  77.8K Code, 16.5K Data,  94.3K Total
    Debug Version:     154.6K Code, 62.3K Data, 216.9K Total


2) iASL Compiler/Disassembler and Tools:

No changes for this release.

----------------------------------------
21 July 2006. Summary of changes for version 20060721:

1) ACPI CA Core Subsystem:

The full source code for the ASL test suite used to validate the iASL 
compiler and the ACPICA core subsystem is being released with the ACPICA 
source for the first time. The source is contained in a separate package 
and 
consists of over 1100 files that exercise all ASL/AML operators. The 
package 
should appear on the Intel/ACPI web site shortly. (Valery Podrezov, 
Fiodor 
Suietov)

Completed a new design and implementation for support of the ACPI Global 
Lock. On the OS side, the global lock is now treated as a standard AML 
mutex. Previously, multiple OS threads could "acquire" the global lock 
simultaneously. However, this could cause the BIOS to be starved out of 
the 
lock - especially in cases such as the Embedded Controller driver where 
there is a tight coupling between the OS and the BIOS.

Implemented an optimization for the ACPI Global Lock interrupt mechanism. 
The Global Lock interrupt handler no longer queues the execution of a 
separate thread to signal the global lock semaphore. Instead, the 
semaphore 
is signaled directly from the interrupt handler.

Implemented support within the AML interpreter for package objects that 
contain a larger AML length (package list length) than the package 
element 
count. In this case, the length of the package is truncated to match the 
package element count. Some BIOS code apparently modifies the package 
length 
on the fly, and this change supports this behavior. Provides 
compatibility 
with the MS AML interpreter. (With assistance from Fiodor Suietov)

Implemented a temporary fix for the BankValue parameter of a Bank Field 
to 
support all constant values, now including the Zero and One opcodes. 
Evaluation of this parameter must eventually be converted to a full 
TermArg 
evaluation. A not-implemented error is now returned (temporarily) for 
non-
constant values for this parameter.

Fixed problem reports (Fiodor Suietov) integrated:
- Fix for premature object deletion after CopyObject on Operation Region 
(BZ 
350)

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  80.7K Code, 18.0K Data,  98.7K Total
    Debug Version:     160.9K Code, 65.1K Data, 226.0K Total
  Current Release:
    Non-Debug Version:  80.7K Code, 17.9K Data,  98.6K Total
    Debug Version:     161.0K Code, 65.1K Data, 226.1K Total


2) iASL Compiler/Disassembler and Tools:

No changes for this release.

----------------------------------------
07 July 2006. Summary of changes for version 20060707:

1) ACPI CA Core Subsystem:

Added the ACPI_PACKED_POINTERS_NOT_SUPPORTED macro to support C compilers 
that do not allow the initialization of address pointers within packed 
structures - even though the hardware itself may support misaligned 
transfers. Some of the debug data structures are packed by default to 
minimize size.

Added an error message for the case where AcpiOsGetThreadId() returns 
zero. 
A non-zero value is required by the core ACPICA code to ensure the proper 
operation of AML mutexes and recursive control methods.

The DSDT is now the only ACPI table that determines whether the AML 
interpreter is in 32-bit or 64-bit mode. Not really a functional change, 
but 
the hooks for per-table 32/64 switching have been removed from the code. 
A 
clarification to the ACPI specification is forthcoming in ACPI 3.0B.

Fixed a possible leak of an OwnerID in the error path of 
AcpiTbInitTableDescriptor (tbinstal.c), and migrated all table OwnerID 
deletion to a single place in AcpiTbUninstallTable to correct possible 
leaks 
when using the AcpiTbDeleteTablesByType interface (with assistance from 
Lance Ortiz.)

Fixed a problem with Serialized control methods where the semaphore 
associated with the method could be over-signaled after multiple method 
invocations.

Fixed two issues with the locking of the internal namespace data 
structure. 
Both the Unload() operator and AcpiUnloadTable interface now lock the 
namespace during the namespace deletion associated with the table unload 
(with assistance from Linn Crosetto.)

Fixed problem reports (Valery Podrezov) integrated:
- Eliminate unnecessary memory allocation for CreateXxxxField (BZ 5426)

Fixed problem reports (Fiodor Suietov) integrated:
- Incomplete cleanup branches in AcpiTbGetTableRsdt (BZ 369)
- On Address Space handler deletion, needless deactivation call (BZ 374)
- AcpiRemoveAddressSpaceHandler: validate Device handle parameter (BZ 
375)
- Possible memory leak, Notify sub-objects of Processor, Power, 
ThermalZone 
(BZ 376)
- AcpiRemoveAddressSpaceHandler: validate Handler parameter (BZ 378)
- Minimum Length of RSDT should be validated (BZ 379)
- AcpiRemoveNotifyHandler: return AE_NOT_EXIST if Processor Obj has no 
Handler (BZ (380)
- AcpiUnloadTable: return AE_NOT_EXIST if no table of specified type 
loaded 
(BZ 381)

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  80.5K Code, 17.8K Data,  98.3K Total
    Debug Version:     160.8K Code, 64.8K Data, 225.6K Total
  Current Release:
    Non-Debug Version:  80.7K Code, 17.9K Data,  98.6K Total
    Debug Version:     161.0K Code, 65.1K Data, 226.1K Total


2) iASL Compiler/Disassembler and Tools:

Fixed problem reports:
Compiler segfault when ASL contains a long (>1024) String declaration (BZ 
436)

----------------------------------------
23 June 2006. Summary of changes for version 20060623:

1) ACPI CA Core Subsystem:

Implemented a new ACPI_SPINLOCK type for the OSL lock interfaces. This 
allows the type to be customized to the host OS for improved efficiency 
(since a spinlock is usually a very small object.)

Implemented support for "ignored" bits in the ACPI registers. According 
to 
the ACPI specification, these bits should be preserved when writing the 
registers via a read/modify/write cycle. There are 3 bits preserved in 
this 
manner: PM1_CONTROL[0] (SCI_EN), PM1_CONTROL[9], and PM1_STATUS[11].

Implemented the initial deployment of new OSL mutex interfaces. Since 
some 
host operating systems have separate mutex and semaphore objects, this 
feature was requested. The base code now uses mutexes (and the new mutex 
interfaces) wherever a binary semaphore was used previously. However, for 
the current release, the mutex interfaces are defined as macros to map 
them 
to the existing semaphore interfaces. Therefore, no OSL changes are 
required 
at this time. (See acpiosxf.h)

Fixed several problems with the support for the control method SyncLevel 
parameter. The SyncLevel now works according to the ACPI specification 
and 
in concert with the Mutex SyncLevel parameter, since the current 
SyncLevel 
is a property of the executing thread. Mutual exclusion for control 
methods 
is now implemented with a mutex instead of a semaphore.

Fixed three instances of the use of the C shift operator in the bitfield 
support code (exfldio.c) to avoid the use of a shift value larger than 
the 
target data width. The behavior of C compilers is undefined in this case 
and 
can cause unpredictable results, and therefore the case must be detected 
and 
avoided. (Fiodor Suietov)

Added an info message whenever an SSDT or OEM table is loaded dynamically 
via the Load() or LoadTable() ASL operators. This should improve 
debugging 
capability since it will show exactly what tables have been loaded 
(beyond 
the tables present in the RSDT/XSDT.)

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  80.0K Code, 17.6K Data,  97.6K Total
    Debug Version:     160.2K Code, 64.7K Data, 224.9K Total
  Current Release:
    Non-Debug Version:  80.5K Code, 17.8K Data,  98.3K Total
    Debug Version:     160.8K Code, 64.8K Data, 225.6K Total


2) iASL Compiler/Disassembler and Tools:

No changes for this release.

----------------------------------------
08 June 2006. Summary of changes for version 20060608:

1) ACPI CA Core Subsystem:

Converted the locking mutex used for the ACPI hardware to a spinlock. 
This 
change should eliminate all problems caused by attempting to acquire a 
semaphore at interrupt level, and it means that all ACPICA external 
interfaces that directly access the ACPI hardware can be safely called 
from 
interrupt level. OSL code that implements the semaphore interfaces should 
be 
able to eliminate any workarounds for being called at interrupt level.

Fixed a regression introduced in 20060526 where the ACPI device 
initialization could be prematurely aborted with an AE_NOT_FOUND if a 
device 
did not have an optional _INI method.

Fixed an IndexField issue where a write to the Data Register should be 
limited in size to the AccessSize (width) of the IndexField itself. (BZ 
433, 
Fiodor Suietov)

Fixed problem reports (Valery Podrezov) integrated:
- Allow store of ThermalZone objects to Debug object (BZ 5369/5370)

Fixed problem reports (Fiodor Suietov) integrated:
- AcpiGetTableHeader doesn't handle multiple instances correctly (BZ 364)

Removed four global mutexes that were obsolete and were no longer being 
used.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  80.0K Code, 17.7K Data,  97.7K Total
    Debug Version:     160.3K Code, 64.9K Data, 225.2K Total
  Current Release:
    Non-Debug Version:  80.0K Code, 17.6K Data,  97.6K Total
    Debug Version:     160.2K Code, 64.7K Data, 224.9K Total


2) iASL Compiler/Disassembler and Tools:

Fixed a fault when using -g option (get tables from registry) on Windows 
machines.

Fixed problem reports integrated:
- Generate error if CreateField NumBits parameter is zero. (BZ 405)
- Fault if Offset/Length in Field unit is very large (BZ 432, Fiodor 
Suietov)
- Global table revision override (-r) is ignored (BZ 413)

----------------------------------------
26 May 2006. Summary of changes for version 20060526:

1) ACPI CA Core Subsystem:

Restructured, flattened, and simplified the internal interfaces for 
namespace object evaluation - resulting in smaller code, less CPU stack 
use, 
and fewer interfaces. (With assistance from Mikhail Kouzmich)

Fixed a problem with the CopyObject operator where the first parameter 
was 
not typed correctly for the parser, interpreter, compiler, and 
disassembler. 
Caused various errors and unexpected behavior.

Fixed a problem where a ShiftLeft or ShiftRight of more than 64 bits 
produced incorrect results with some C compilers. Since the behavior of C 
compilers when the shift value is larger than the datatype width is 
apparently not well defined, the interpreter now detects this condition 
and 
simply returns zero as expected in all such cases. (BZ 395)

Fixed problem reports (Valery Podrezov) integrated:
- Update String-to-Integer conversion to match ACPI 3.0A spec (BZ 5329)
- Allow interpreter to handle nested method declarations (BZ 5361)

Fixed problem reports (Fiodor Suietov) integrated:
- AcpiTerminate doesn't free debug memory allocation list objects (BZ 
355)
- After Core Subsystem shutdown, AcpiSubsystemStatus returns AE_OK (BZ 
356)
- AcpiOsUnmapMemory for RSDP can be invoked inconsistently (BZ 357)
- Resource Manager should return AE_TYPE for non-device objects (BZ 358)
- Incomplete cleanup branch in AcpiNsEvaluateRelative (BZ 359)
- Use AcpiOsFree instead of ACPI_FREE in AcpiRsSetSrsMethodData (BZ 360)
- Incomplete cleanup branch in AcpiPsParseAml (BZ 361)
- Incomplete cleanup branch in AcpiDsDeleteWalkState (BZ 362)
- AcpiGetTableHeader returns AE_NO_ACPI_TABLES until DSDT is loaded (BZ 
365)
- Status of the Global Initialization Handler call not used (BZ 366)
- Incorrect object parameter to Global Initialization Handler (BZ 367)

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  79.8K Code, 17.7K Data,  97.5K Total
    Debug Version:     160.5K Code, 65.1K Data, 225.6K Total
  Current Release:
    Non-Debug Version:  80.0K Code, 17.7K Data,  97.7K Total
    Debug Version:     160.3K Code, 64.9K Data, 225.2K Total


2) iASL Compiler/Disassembler and Tools:

Modified the parser to allow the names IO, DMA, and IRQ to be used as 
namespace identifiers with no collision with existing resource descriptor 
macro names. This provides compatibility with other ASL compilers and is 
most useful for disassembly/recompilation of existing tables without 
parse 
errors. (With assistance from Thomas Renninger)

Disassembler: fixed an incorrect disassembly problem with the 
DataTableRegion and CopyObject operators. Fixed a possible fault during 
disassembly of some Alias operators.

----------------------------------------
12 May 2006. Summary of changes for version 20060512:

1) ACPI CA Core Subsystem:

Replaced the AcpiOsQueueForExecution interface with a new interface named 
AcpiOsExecute. The major difference is that the new interface does not 
have 
a Priority parameter, this appeared to be useless and has been replaced 
by 
a 
Type parameter. The Type tells the host what type of execution is being 
requested, such as global lock handler, notify handler, GPE handler, etc. 
This allows the host to queue and execute the request as appropriate for 
the 
request type, possibly using different work queues and different 
priorities 
for the various request types. This enables fixes for multithreading 
deadlock problems such as BZ #5534, and will require changes to all 
existing 
OS interface layers. (Alexey Starikovskiy and Bob Moore)

Fixed a possible memory leak associated with the support for the so-
called 
"implicit return" ACPI extension. Reported by FreeBSD, BZ #6514. (Fiodor 
Suietov)

Fixed a problem with the Load() operator where a table load from an 
operation region could overwrite an internal table buffer by up to 7 
bytes 
and cause alignment faults on IPF systems. (With assistance from Luming 
Yu)

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  79.7K Code, 17.7K Data,  97.4K Total
    Debug Version:     160.1K Code, 65.2K Data, 225.3K Total
  Current Release:
    Non-Debug Version:  79.8K Code, 17.7K Data,  97.5K Total
    Debug Version:     160.5K Code, 65.1K Data, 225.6K Total



2) iASL Compiler/Disassembler and Tools:

Disassembler: Implemented support to cross reference the internal 
namespace 
and automatically generate ASL External() statements for symbols not 
defined 
within the current table being disassembled. This will simplify the 
disassembly and recompilation of interdependent tables such as SSDTs 
since 
these statements will no longer have to be added manually.

Disassembler: Implemented experimental support to automatically detect 
invocations of external control methods and generate appropriate 
External() 
statements. This is problematic because the AML cannot be correctly 
parsed 
until the number of arguments for each control method is known. 
Currently, 
standalone method invocations and invocations as the source operand of a 
Store() statement are supported.

Disassembler: Implemented support for the ASL pseudo-operators LNotEqual, 
LLessEqual, and LGreaterEqual. Previously disassembled as LNot(LEqual()), 
LNot(LGreater()), and LNot(LLess()), this makes the disassembled ASL code 
more readable and likely closer to the original ASL source.

----------------------------------------
21 April 2006. Summary of changes for version 20060421:

1) ACPI CA Core Subsystem:

Removed a device initialization optimization introduced in 20051216 where 
the _STA method was not run unless an _INI was also present for the same 
device. This optimization could cause problems because it could allow 
_INI 
methods to be run within a not-present device subtree. (If a not-present 
device had no _INI, _STA would not be run, the not-present status would 
not 
be discovered, and the children of the device would be incorrectly 
traversed.)

Implemented a new _STA optimization where namespace subtrees that do not 
contain _INI are identified and ignored during device initialization. 
Selectively running _STA can significantly improve boot time on large 
machines (with assistance from Len Brown.)

Implemented support for the device initialization case where the returned 
_STA flags indicate a device not-present but functioning. In this case, 
_INI 
is not run, but the device children are examined for presence, as per the 
ACPI specification.

Implemented an additional change to the IndexField support in order to 
conform to MS behavior. The value written to the Index Register is not 
simply a byte offset, it is a byte offset in units of the access width of 
the parent Index Field. (Fiodor Suietov)

Defined and deployed a new OSL interface, AcpiOsValidateAddress. This 
interface is called during the creation of all AML operation regions, and 
allows the host OS to exert control over what addresses it will allow the 
AML code to access. Operation Regions whose addresses are disallowed will 
cause a runtime exception when they are actually accessed (will not 
affect 
or abort table loading.) See oswinxf or osunixxf for an example 
implementation.

Defined and deployed a new OSL interface, AcpiOsValidateInterface. This 
interface allows the host OS to match the various "optional" 
interface/behavior strings for the _OSI predefined control method as 
appropriate (with assistance from Bjorn Helgaas.) See oswinxf or osunixxf 
for an example implementation.

Restructured and corrected various problems in the exception handling 
code 
paths within DsCallControlMethod and DsTerminateControlMethod in dsmethod 
(with assistance from Takayoshi Kochi.)

Modified the Linux source converter to ignore quoted string literals 
while 
converting identifiers from mixed to lower case. This will correct 
problems 
with the disassembler and other areas where such strings must not be 
modified.

The ACPI_FUNCTION_* macros no longer require quotes around the function 
name. This allows the Linux source converter to convert the names, now 
that 
the converter ignores quoted strings.

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:

    Non-Debug Version:  81.1K Code, 17.7K Data,  98.8K Total
    Debug Version:     158.9K Code, 64.9K Data, 223.8K Total
  Current Release:
    Non-Debug Version:  79.7K Code, 17.7K Data,  97.4K Total
    Debug Version:     160.1K Code, 65.2K Data, 225.3K Total


2) iASL Compiler/Disassembler and Tools:

Implemented 3 new warnings for iASL, and implemented multiple warning 
levels 
(w2 flag).

1) Ignored timeouts: If the TimeoutValue parameter to Wait or Acquire is 
not 
WAIT_FOREVER (0xFFFF) and the code does not examine the return value to 
check for the possible timeout, a warning is issued.

2) Useless operators: If an ASL operator does not specify an optional 
target 
operand and it also does not use the function return value from the 
operator, a warning is issued since the operator effectively does 
nothing.

3) Unreferenced objects: If a namespace object is created, but never 
referenced, a warning is issued. This is a warning level 2 since there 
are 
cases where this is ok, such as when a secondary table is loaded that 
uses 
the unreferenced objects. Even so, care is taken to only flag objects 
that 
don't look like they will ever be used. For example, the reserved methods 
(starting with an underscore) are usually not referenced because it is 
expected that the OS will invoke them.

----------------------------------------
31 March 2006. Summary of changes for version 20060331:

1) ACPI CA Core Subsystem:

Implemented header file support for the following additional ACPI tables: 
ASF!, BOOT, CPEP, DBGP, MCFG, SPCR, SPMI, TCPA, and WDRT. With this 
support, 
all current and known ACPI tables are now defined in the ACPICA headers 
and 
are available for use by device drivers and other software.

Implemented support to allow tables that contain ACPI names with invalid 
characters to be loaded. Previously, this would cause the table load to 
fail, but since there are several known cases of such tables on existing 
machines, this change was made to enable ACPI support for them. Also, 
this 
matches the behavior of the Microsoft ACPI implementation.

Fixed a couple regressions introduced during the memory optimization in 
the 
20060317 release. The namespace node definition required additional 
reorganization and an internal datatype that had been changed to 8-bit 
was 
restored to 32-bit. (Valery Podrezov)

Fixed a problem where a null pointer passed to AcpiUtDeleteGenericState 
could be passed through to AcpiOsReleaseObject which is unexpected. Such 
null pointers are now trapped and ignored, matching the behavior of the 
previous implementation before the deployment of AcpiOsReleaseObject.
(Valery Podrezov, Fiodor Suietov)

Fixed a memory mapping leak during the deletion of a SystemMemory 
operation 
region where a cached memory mapping was not deleted. This became a 
noticeable problem for operation regions that are defined within 
frequently 
used control methods. (Dana Meyers)

Reorganized the ACPI table header files into two main files: one for the 
ACPI tables consumed by the ACPICA core, and another for the 
miscellaneous 
ACPI tables that are consumed by the drivers and other software. The 
various 
FADT definitions were merged into one common section and three different 
tables (ACPI 1.0, 1.0+, and 2.0)

Example Code and Data Size: These are the sizes for the OS-independent 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
debug version of the code includes the debug output trace mechanism and 
has 
a much larger code and data size.

  Previous Release:
    Non-Debug Version:  80.9K Code, 17.7K Data,  98.6K Total
    Debug Version:     158.7K Code, 64.8K Data, 223.5K Total
  Current Release:
    Non-Debug Version:  81.1K Code, 17.7K Data,  98.8K Total
    Debug Version:     158.9K Code, 64.9K Data, 223.8K Total


2) iASL Compiler/Disassembler and Tools:

Disassembler: Implemented support to decode and format all non-AML ACPI 
tables (tables other than DSDTs and SSDTs.) This includes the new tables 
added to the ACPICA headers, therefore all current and known ACPI tables 
are 
supported.

Disassembler: The change to allow ACPI names with invalid characters also 
enables the disassembly of such tables. Invalid characters within names 
are 
changed to '*' to make the name printable; the iASL compiler will still 
generate an error for such names, however, since this is an invalid ACPI 
character.

Implemented an option for AcpiXtract (-a) to extract all tables found in 
the 
input file. The default invocation extracts only the DSDTs and SSDTs.

Fixed a couple of gcc generation issues for iASL and AcpiExec and added a 
makefile for the AcpiXtract utility.

----------------------------------------
17 March 2006. Summary of changes for version 20060317:

1) ACPI CA Core Subsystem:

Implemented the use of a cache object for all internal namespace nodes. 
Since there are about 1000 static nodes in a typical system, this will 
decrease memory use for cache implementations that minimize per-
allocation 
overhead (such as a slab allocator.)

Removed the reference count mechanism for internal namespace nodes, since 
it 
was deemed unnecessary. This reduces the size of each namespace node by 
about 5%-10% on all platforms. Nodes are now 20 bytes for the 32-bit 
case, 
and 32 bytes for the 64-bit case.

Optimized several internal data structures to reduce object size on 64-
bit 
platforms by packing data within the 64-bit alignment. This includes the 
frequently used ACPI_OPERAND_OBJECT, of which there can be ~1000 static 
instances corresponding to the namespace objects.

Added two new strings for the predefined _OSI method: "Windows 2001.1 
SP1" 
and "Windows 2006".

Split the allocation tracking mechanism out to a separate file, from 
utalloc.c to uttrack.c. This mechanism appears to be only useful for 
application-level code. Kernels may wish to not include uttrack.c in 
distributions.

Removed all remnants of the obsolete ACPI_REPORT_* macros and the 
associated 
code. (These macros have been replaced by the ACPI_ERROR and ACPI_WARNING 
macros.)

Code and Data Size: These are the sizes for the acpica.lib produced by 
the 
Microsoft Visual C++ 6.0 32-bit compiler. The values do not include any 
ACPI 
driver or OSPM code. The debug version of the code includes the debug 
output 
trace mechanism and has a much larger code and data size. Note that these 
values will vary depending on the efficiency of the compiler and the 
compiler options used during generation.

  Previous Release:
    Non-Debug Version:  81.1K Code, 17.8K Data,  98.9K Total
    Debug Version:     161.6K Code, 65.7K Data, 227.3K Total
  Current Release:
    Non-Debug Version:  80.9K Code, 17.7K Data,  98.6K Total
    Debug Version:     158.7K Code, 64.8K Data, 223.5K Total


2) iASL Compiler/Disassembler and Tools:

Implemented an ANSI C version of the acpixtract utility. This version 
will 
automatically extract the DSDT and all SSDTs from the input acpidump text 
file and dump the binary output to separate files. It can also display a 
summary of the input file including the headers for each table found and 
will extract any single ACPI table, with any signature. (See 
source/tools/acpixtract)

----------------------------------------
10 March 2006. Summary of changes for version 20060310:

1) ACPI CA Core Subsystem:

Tagged all external interfaces to the subsystem with the new 
ACPI_EXPORT_SYMBOL macro. This macro can be defined as necessary to 
assist 
kernel integration. For Linux, the macro resolves to the EXPORT_SYMBOL 
macro. The default definition is NULL.

Added the ACPI_THREAD_ID type for the return value from 
AcpiOsGetThreadId. 
This allows the host to define this as necessary to simplify kernel 
integration. The default definition is ACPI_NATIVE_UINT.

Fixed two interpreter problems related to error processing, the deletion 
of 
objects, and placing invalid pointers onto the internal operator result 
stack. BZ 6028, 6151 (Valery Podrezov)

Increased the reference count threshold where a warning is emitted for 
large 
reference counts in order to eliminate unnecessary warnings on systems 
with 
large namespaces (especially 64-bit.) Increased the value from 0x400 to 
0x800.

Due to universal disagreement as to the meaning of the 'c' in the 
calloc() 
function, the ACPI_MEM_CALLOCATE macro has been renamed to 
ACPI_ALLOCATE_ZEROED so that the purpose of the interface is 'clear'. 
ACPI_MEM_ALLOCATE and ACPI_MEM_FREE are renamed to ACPI_ALLOCATE and 
ACPI_FREE.

Code and Data Size: These are the sizes for the acpica.lib produced by 
the 
Microsoft Visual C++ 6.0 32-bit compiler. The values do not include any 
ACPI 
driver or OSPM code. The debug version of the code includes the debug 
output 
trace mechanism and has a much larger code and data size. Note that these 
values will vary depending on the efficiency of the compiler and the 
compiler options used during generation.

  Previous Release:
    Non-Debug Version:  81.0K Code, 17.8K Data,  98.8K Total
    Debug Version:     161.4K Code, 65.7K Data, 227.1K Total
  Current Release:
    Non-Debug Version:  81.1K Code, 17.8K Data,  98.9K Total
    Debug Version:     161.6K Code, 65.7K Data, 227.3K Total


2) iASL Compiler/Disassembler:

Disassembler: implemented support for symbolic resource descriptor 
references. If a CreateXxxxField operator references a fixed offset 
within 
a 
resource descriptor, a name is assigned to the descriptor and the offset 
is 
translated to the appropriate resource tag and pathname. The addition of 
this support brings the disassembled code very close to the original ASL 
source code and helps eliminate run-time errors when the disassembled 
code 
is modified (and recompiled) in such a way as to invalidate the original 
fixed offsets.

Implemented support for a Descriptor Name as the last parameter to the 
ASL 
Register() macro. This parameter was inadvertently left out of the ACPI 
specification, and will be added for ACPI 3.0b.

Fixed a problem where the use of the "_OSI" string (versus the full path 
"\_OSI") caused an internal compiler error. ("No back ptr to op")

Fixed a problem with the error message that occurs when an invalid string 
is 
used for a _HID object (such as one with an embedded asterisk: 
"*PNP010A".) 
The correct message is now displayed.

----------------------------------------
17 February 2006. Summary of changes for version 20060217:

1) ACPI CA Core Subsystem:

Implemented a change to the IndexField support to match the behavior of 
the 
Microsoft AML interpreter. The value written to the Index register is now 
a 
byte offset, no longer an index based upon the width of the Data 
register. 
This should fix IndexField problems seen on some machines where the Data 
register is not exactly one byte wide. The ACPI specification will be 
clarified on this point.

Fixed a problem where several resource descriptor types could overrun the 
internal descriptor buffer due to size miscalculation: VendorShort, 
VendorLong, and Interrupt. This was noticed on IA64 machines, but could 
affect all platforms.

Fixed a problem where individual resource descriptors were misaligned 
within 
the internal buffer, causing alignment faults on IA64 platforms.

Code and Data Size: These are the sizes for the acpica.lib produced by 
the 
Microsoft Visual C++ 6.0 32-bit compiler. The values do not include any 
ACPI 
driver or OSPM code. The debug version of the code includes the debug 
output 
trace mechanism and has a much larger code and data size. Note that these 
values will vary depending on the efficiency of the compiler and the 
compiler options used during generation.

  Previous Release:
    Non-Debug Version:  81.1K Code, 17.8K Data,  98.9K Total
    Debug Version:     161.3K Code, 65.6K Data, 226.9K Total
  Current Release:
    Non-Debug Version:  81.0K Code, 17.8K Data,  98.8K Total
    Debug Version:     161.4K Code, 65.7K Data, 227.1K Total


2) iASL Compiler/Disassembler:

Implemented support for new reserved names: _WDG and _WED are Microsoft 
extensions for Windows Instrumentation Management, _TDL is a new ACPI-
defined method (Throttling Depth Limit.)

Fixed a problem where a zero-length VendorShort or VendorLong resource 
descriptor was incorrectly emitted as a descriptor of length one.

----------------------------------------
10 February 2006. Summary of changes for version 20060210:

1) ACPI CA Core Subsystem:

Removed a couple of extraneous ACPI_ERROR messages that appeared during 
normal execution. These became apparent after the conversion from 
ACPI_DEBUG_PRINT.

Fixed a problem where the CreateField operator could hang if the BitIndex 
or 
NumBits parameter referred to a named object. (Valery Podrezov, BZ 5359)

Fixed a problem where a DeRefOf operation on a buffer object incorrectly 
failed with an exception. This also fixes a couple of related RefOf and 
DeRefOf issues. (Valery Podrezov, BZ 5360/5392/5387)

Fixed a problem where the AE_BUFFER_LIMIT exception was returned instead 
of 
AE_STRING_LIMIT on an out-of-bounds Index() operation. (Valery Podrezov, 
BZ 
5480)

Implemented a memory cleanup at the end of the execution of each 
iteration 
of an AML While() loop, preventing the accumulation of outstanding 
objects. 
(Valery Podrezov, BZ 5427)

Eliminated a chunk of duplicate code in the object resolution code. 
(Valery 
Podrezov, BZ 5336)

Fixed several warnings during the 64-bit code generation.

The AcpiSrc source code conversion tool now inserts one line of 
whitespace 
after an if() statement that is followed immediately by a comment, 
improving 
readability of the Linux code.

Code and Data Size: The current and previous library sizes for the core 
subsystem are shown below. These are the code and data sizes for the 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 
These 
values do not include any ACPI driver or OSPM code. The debug version of 
the 
code includes the debug output trace mechanism and has a much larger code 
and data size. Note that these values will vary depending on the 
efficiency 
of the compiler and the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  81.0K Code, 17.9K Data,  98.9K Total
    Debug Version:     161.3K Code, 65.7K Data, 227.0K Total
  Current Release:
    Non-Debug Version:  81.1K Code, 17.8K Data,  98.9K Total
    Debug Version:     161.3K Code, 65.6K Data, 226.9K Total


2) iASL Compiler/Disassembler:

Fixed a problem with the disassembly of a BankField operator with a 
complex 
expression for the BankValue parameter.

----------------------------------------
27 January 2006. Summary of changes for version 20060127:

1) ACPI CA Core Subsystem:

Implemented support in the Resource Manager to allow unresolved 
namestring 
references within resource package objects for the _PRT method. This 
support 
is in addition to the previously implemented unresolved reference support 
within the AML parser. If the interpreter slack mode is enabled, these 
unresolved references will be passed through to the caller as a NULL 
package 
entry.

Implemented and deployed new macros and functions for error and warning 
messages across the subsystem. These macros are simpler and generate less 
code than their predecessors. The new macros ACPI_ERROR, ACPI_EXCEPTION, 
ACPI_WARNING, and ACPI_INFO replace the ACPI_REPORT_* macros. The older 
macros remain defined to allow ACPI drivers time to migrate to the new 
macros.

Implemented the ACPI_CPU_FLAGS type to simplify host OS integration of 
the 
Acquire/Release Lock OSL interfaces.

Fixed a problem where Alias ASL operators are sometimes not correctly 
resolved, in both the interpreter and the iASL compiler.

Fixed several problems with the implementation of the 
ConcatenateResTemplate 
ASL operator. As per the ACPI specification, zero length buffers are now 
treated as a single EndTag. One-length buffers always cause a fatal 
exception. Non-zero length buffers that do not end with a full 2-byte 
EndTag 
cause a fatal exception.

Fixed a possible structure overwrite in the AcpiGetObjectInfo external 
interface. (With assistance from Thomas Renninger)

Code and Data Size: The current and previous library sizes for the core 
subsystem are shown below. These are the code and data sizes for the 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 
These 
values do not include any ACPI driver or OSPM code. The debug version of 
the 
code includes the debug output trace mechanism and has a much larger code 
and data size. Note that these values will vary depending on the 
efficiency 
of the compiler and the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  83.1K Code, 18.4K Data, 101.5K Total
    Debug Version:     163.2K Code, 66.2K Data, 229.4K Total
  Current Release:
    Non-Debug Version:  81.0K Code, 17.9K Data,  98.9K Total
    Debug Version:     161.3K Code, 65.7K Data, 227.0K Total


2) iASL Compiler/Disassembler:

Fixed an internal error that was generated for any forward references to 
ASL 
Alias objects.

----------------------------------------
13 January 2006. Summary of changes for version 20060113:

1) ACPI CA Core Subsystem:

Added 2006 copyright to all module headers and signons. This affects 
virtually every file in the ACPICA core subsystem, iASL compiler, and the 
utilities.
 
Enhanced the ACPICA error reporting in order to simplify user migration 
to 
the non-debug version of ACPICA. Replaced all instances of the 
ACPI_DEBUG_PRINT macro invoked at the ACPI_DB_ERROR and ACPI_DB_WARN 
debug 
levels with the ACPI_REPORT_ERROR and ACPI_REPORT_WARNING macros, 
respectively. This preserves all error and warning messages in the non-
debug 
version of the ACPICA code (this has been referred to as the "debug lite" 
option.) Over 200 cases were converted to create a total of over 380 
error/warning messages across the ACPICA code. This increases the code 
and 
data size of the default non-debug version of the code somewhat (about 
13K), 
but all error/warning reporting may be disabled if desired (and code 
eliminated) by specifying the ACPI_NO_ERROR_MESSAGES compile-time 
configuration option. The size of the debug version of ACPICA remains 
about 
the same.

Fixed a memory leak within the AML Debugger "Set" command. One object was 
not properly deleted for every successful invocation of the command.

Code and Data Size: The current and previous library sizes for the core 
subsystem are shown below. These are the code and data sizes for the 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 
These 
values do not include any ACPI driver or OSPM code. The debug version of 
the 
code includes the debug output trace mechanism and has a much larger code 
and data size. Note that these values will vary depending on the 
efficiency 
of the compiler and the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  76.6K Code, 12.3K Data,  88.9K Total
    Debug Version:     163.7K Code, 67.5K Data, 231.2K Total
  Current Release:
    Non-Debug Version:  83.1K Code, 18.4K Data, 101.5K Total
    Debug Version:     163.2K Code, 66.2K Data, 229.4K Total


2) iASL Compiler/Disassembler:

The compiler now officially supports the ACPI 3.0a specification that was 
released on December 30, 2005. (Specification is available at 
www.acpi.info)

----------------------------------------
16 December 2005. Summary of changes for version 20051216:

1) ACPI CA Core Subsystem:

Implemented optional support to allow unresolved names within ASL Package 
objects. A null object is inserted in the package when a named reference 
cannot be located in the current namespace. Enabled via the interpreter 
slack flag, this should eliminate AE_NOT_FOUND exceptions seen on 
machines 
that contain such code.

Implemented an optimization to the initialization sequence that can 
improve 
boot time. During ACPI device initialization, the _STA method is now run 
if 
and only if the _INI method exists. The _STA method is used to determine 
if 
the device is present; An _INI can only be run if _STA returns present, 
but 
it is a waste of time to run the _STA method if the _INI does not exist. 
(Prototype and assistance from Dong Wei)

Implemented use of the C99 uintptr_t for the pointer casting macros if it 
is 
available in the current compiler. Otherwise, the default (void *) cast 
is 
used as before.

Fixed some possible memory leaks found within the execution path of the 
Break, Continue, If, and CreateField operators. (Valery Podrezov)

Fixed a problem introduced in the 20051202 release where an exception is 
generated during method execution if a control method attempts to declare 
another method.

Moved resource descriptor string constants that are used by both the AML 
disassembler and AML debugger to the common utilities directory so that 
these components are independent.

Implemented support in the AcpiExec utility (-e switch) to globally 
ignore 
exceptions during control method execution (method is not aborted.)

Added the rsinfo.c source file to the AcpiExec makefile for Linux/Unix 
generation.

Code and Data Size: The current and previous library sizes for the core 
subsystem are shown below. These are the code and data sizes for the 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 
These 
values do not include any ACPI driver or OSPM code. The debug version of 
the 
code includes the debug output trace mechanism and has a much larger code 
and data size. Note that these values will vary depending on the 
efficiency 
of the compiler and the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  76.3K Code, 12.3K Data,  88.6K Total
    Debug Version:     163.2K Code, 67.4K Data, 230.6K Total
  Current Release:
    Non-Debug Version:  76.6K Code, 12.3K Data,  88.9K Total
    Debug Version:     163.7K Code, 67.5K Data, 231.2K Total


2) iASL Compiler/Disassembler:

Fixed a problem where a CPU stack overflow fault could occur if a 
recursive 
method call was made from within a Return statement.

----------------------------------------
02 December 2005. Summary of changes for version 20051202:

1) ACPI CA Core Subsystem:

Modified the parsing of control methods to no longer create namespace 
objects during the first pass of the parse. Objects are now created only 
during the execute phase, at the moment the namespace creation operator 
is 
encountered in the AML (Name, OperationRegion, CreateByteField, etc.) 
This 
should eliminate ALREADY_EXISTS exceptions seen on some machines where 
reentrant control methods are protected by an AML mutex. The mutex will 
now 
correctly block multiple threads from attempting to create the same 
object 
more than once.

Increased the number of available Owner Ids for namespace object tracking 
from 32 to 255. This should eliminate the OWNER_ID_LIMIT exceptions seen 
on 
some machines with a large number of ACPI tables (either static or 
dynamic).

Fixed a problem with the AcpiExec utility where a fault could occur when 
the 
-b switch (batch mode) is used.

Enhanced the namespace dump routine to output the owner ID for each 
namespace object.

Code and Data Size: The current and previous library sizes for the core 
subsystem are shown below. These are the code and data sizes for the 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 
These 
values do not include any ACPI driver or OSPM code. The debug version of 
the 
code includes the debug output trace mechanism and has a much larger code 
and data size. Note that these values will vary depending on the 
efficiency 
of the compiler and the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  76.3K Code, 12.3K Data,  88.6K Total
    Debug Version:     163.0K Code, 67.4K Data, 230.4K Total
  Current Release:
    Non-Debug Version:  76.3K Code, 12.3K Data,  88.6K Total
    Debug Version:     163.2K Code, 67.4K Data, 230.6K Total


2) iASL Compiler/Disassembler:

Fixed a parse error during compilation of certain Switch/Case constructs. 
To 
simplify the parse, the grammar now allows for multiple Default 
statements 
and this error is now detected and flagged during the analysis phase.

Disassembler: The disassembly now includes the contents of the original 
table header within a comment at the start of the file. This includes the 
name and version of the original ASL compiler.

----------------------------------------
17 November 2005. Summary of changes for version 20051117:

1) ACPI CA Core Subsystem:

Fixed a problem in the AML parser where the method thread count could be 
decremented below zero if any errors occurred during the method parse 
phase. 
This should eliminate AE_AML_METHOD_LIMIT exceptions seen on some 
machines. 
This also fixed a related regression with the mechanism that detects and 
corrects methods that cannot properly handle reentrancy (related to the 
deployment of the new OwnerId mechanism.)

Eliminated the pre-parsing of control methods (to detect errors) during 
table load. Related to the problem above, this was causing unwind issues 
if 
any errors occurred during the parse, and it seemed to be overkill. A 
table 
load should not be aborted if there are problems with any single control 
method, thus rendering this feature rather pointless.

Fixed a problem with the new table-driven resource manager where an 
internal 
buffer overflow could occur for small resource templates.

Implemented a new external interface, AcpiGetVendorResource. This 
interface 
will find and return a vendor-defined resource descriptor within a _CRS 
or 
_PRS method via an ACPI 3.0 UUID match. With assistance from Bjorn 
Helgaas.

Removed the length limit (200) on string objects as per the upcoming ACPI 
3.0A specification. This affects the following areas of the interpreter: 
1) 
any implicit conversion of a Buffer to a String, 2) a String object 
result 
of the ASL Concatentate operator, 3) the String object result of the ASL 
ToString operator.

Fixed a problem in the Windows OS interface layer (OSL) where a 
WAIT_FOREVER 
on a semaphore object would incorrectly timeout. This allows the 
multithreading features of the AcpiExec utility to work properly under 
Windows.

Updated the Linux makefiles for the iASL compiler and AcpiExec to include 
the recently added file named "utresrc.c".

Code and Data Size: The current and previous library sizes for the core 
subsystem are shown below. These are the code and data sizes for the 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 
These 
values do not include any ACPI driver or OSPM code. The debug version of 
the 
code includes the debug output trace mechanism and has a much larger code 
and data size. Note that these values will vary depending on the 
efficiency 
of the compiler and the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  76.2K Code, 12.3K Data,  88.5K Total
    Debug Version:     163.0K Code, 67.4K Data, 230.4K Total
  Current Release:
    Non-Debug Version:  76.3K Code, 12.3K Data,  88.6K Total
    Debug Version:     163.0K Code, 67.4K Data, 230.4K Total


2) iASL Compiler/Disassembler:

Removed the limit (200) on string objects as per the upcoming ACPI 3.0A 
specification. For the iASL compiler, this means that string literals 
within 
the source ASL can be of any length. 

Enhanced the listing output to dump the AML code for resource descriptors 
immediately after the ASL code for each descriptor, instead of in a block 
at 
the end of the entire resource template.

Enhanced the compiler debug output to dump the entire original parse tree 
constructed during the parse phase, before any transforms are applied to 
the 
tree. The transformed tree is dumped also.

----------------------------------------
02 November 2005. Summary of changes for version 20051102:

1) ACPI CA Core Subsystem:

Modified the subsystem initialization sequence to improve GPE support. 
The 
GPE initialization has been split into two parts in order to defer 
execution 
of the _PRW methods (Power Resources for Wake) until after the hardware 
is 
fully initialized and the SCI handler is installed. This allows the _PRW 
methods to access fields protected by the Global Lock. This will fix 
systems 
where a NO_GLOBAL_LOCK exception has been seen during initialization.

Converted the ACPI internal object disassemble and display code within 
the 
AML debugger to fully table-driven operation, reducing code size and 
increasing maintainability.

Fixed a regression with the ConcatenateResTemplate() ASL operator 
introduced 
in the 20051021 release.

Implemented support for "local" internal ACPI object types within the 
debugger "Object" command and the AcpiWalkNamespace external interfaces. 
These local types include RegionFields, BankFields, IndexFields, Alias, 
and 
reference objects.

Moved common AML resource handling code into a new file, "utresrc.c". 
This 
code is shared by both the Resource Manager and the AML Debugger.

Code and Data Size: The current and previous library sizes for the core 
subsystem are shown below. These are the code and data sizes for the 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 
These 
values do not include any ACPI driver or OSPM code. The debug version of 
the 
code includes the debug output trace mechanism and has a much larger code 
and data size. Note that these values will vary depending on the 
efficiency 
of the compiler and the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  76.1K Code, 12.2K Data,  88.3K Total
    Debug Version:     163.5K Code, 67.0K Data, 230.5K Total
  Current Release:
    Non-Debug Version:  76.2K Code, 12.3K Data,  88.5K Total
    Debug Version:     163.0K Code, 67.4K Data, 230.4K Total


2) iASL Compiler/Disassembler:

Fixed a problem with very large initializer lists (more than 4000 
elements) 
for both Buffer and Package objects where the parse stack could overflow.

Enhanced the pre-compile source code scan for non-ASCII characters to 
ignore 
characters within comment fields. The scan is now always performed and is 
no 
longer optional, detecting invalid characters within a source file 
immediately rather than during the parse phase or later.

Enhanced the ASL grammar definition to force early reductions on all 
list-
style grammar elements so that the overall parse stack usage is greatly 
reduced. This should improve performance and reduce the possibility of 
parse 
stack overflow.

Eliminated all reduce/reduce conflicts in the iASL parser generation. 
Also, 
with the addition of a %expected statement, the compiler generates from 
source with no warnings.

Fixed a possible segment fault in the disassembler if the input filename 
does not contain a "dot" extension (Thomas Renninger).

----------------------------------------
21 October 2005. Summary of changes for version 20051021:

1) ACPI CA Core Subsystem:

Implemented support for the EM64T and other x86-64 processors. This 
essentially entails recognizing that these processors support non-aligned 
memory transfers. Previously, all 64-bit processors were assumed to lack 
hardware support for non-aligned transfers.

Completed conversion of the Resource Manager to nearly full table-driven 
operation. Specifically, the resource conversion code (convert AML to 
internal format and the reverse) and the debug code to dump internal 
resource descriptors are fully table-driven, reducing code and data size 
and 
improving maintainability.

The OSL interfaces for Acquire and Release Lock now use a 64-bit flag 
word 
on 64-bit processors instead of a fixed 32-bit word. (With assistance 
from 
Alexey Starikovskiy)

Implemented support within the resource conversion code for the Type-
Specific byte within the various ACPI 3.0 *WordSpace macros.

Fixed some issues within the resource conversion code for the type-
specific 
flags for both Memory and I/O address resource descriptors. For Memory, 
implemented support for the MTP and TTP flags. For I/O, split the TRS and 
TTP flags into two separate fields.

Code and Data Size: The current and previous library sizes for the core 
subsystem are shown below. These are the code and data sizes for the 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 
These 
values do not include any ACPI driver or OSPM code. The debug version of 
the 
code includes the debug output trace mechanism and has a much larger code 
and data size. Note that these values will vary depending on the 
efficiency 
of the compiler and the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  77.1K Code, 12.1K Data,  89.2K Total
    Debug Version:     168.0K Code, 68.3K Data, 236.3K Total
  Current Release:
    Non-Debug Version:  76.1K Code, 12.2K Data,  88.3K Total
    Debug Version:     163.5K Code, 67.0K Data, 230.5K Total



2) iASL Compiler/Disassembler:

Relaxed a compiler restriction that disallowed a ResourceIndex byte if 
the 
corresponding ResourceSource string was not also present in a resource 
descriptor declaration. This restriction caused problems with existing 
AML/ASL code that includes the Index byte without the string. When such 
AML 
was disassembled, it could not be compiled without modification. Further, 
the modified code created a resource template with a different size than 
the 
original, breaking code that used fixed offsets into the resource 
template 
buffer.

Removed a recent feature of the disassembler to ignore a lone 
ResourceIndex 
byte. This byte is now emitted if present so that the exact AML can be 
reproduced when the disassembled code is recompiled.

Improved comments and text alignment for the resource descriptor code 
emitted by the disassembler.

Implemented disassembler support for the ACPI 3.0 AccessSize field within 
a 
Register() resource descriptor.

----------------------------------------
30 September 2005. Summary of changes for version 20050930:

1) ACPI CA Core Subsystem:

Completed a major overhaul of the Resource Manager code - specifically, 
optimizations in the area of the AML/internal resource conversion code. 
The 
code has been optimized to simplify and eliminate duplicated code, CPU 
stack 
use has been decreased by optimizing function parameters and local 
variables, and naming conventions across the manager have been 
standardized 
for clarity and ease of maintenance (this includes function, parameter, 
variable, and struct/typedef names.) The update may force changes in some 
driver code, depending on how resources are handled by the host OS.

All Resource Manager dispatch and information tables have been moved to a 
single location for clarity and ease of maintenance. One new file was 
created, named "rsinfo.c".

The ACPI return macros (return_ACPI_STATUS, etc.) have been modified to 
guarantee that the argument is not evaluated twice, making them less 
prone 
to macro side-effects. However, since there exists the possibility of 
additional stack use if a particular compiler cannot optimize them (such 
as 
in the debug generation case), the original macros are optionally 
available.  
Note that some invocations of the return_VALUE macro may now cause size 
mismatch warnings; the return_UINT8 and return_UINT32 macros are provided 
to 
eliminate these. (From Randy Dunlap)

Implemented a new mechanism to enable debug tracing for individual 
control 
methods. A new external interface, AcpiDebugTrace, is provided to enable 
this mechanism. The intent is to allow the host OS to easily enable and 
disable tracing for problematic control methods. This interface can be 
easily exposed to a user or debugger interface if desired. See the file 
psxface.c for details.

AcpiUtCallocate will now return a valid pointer if a length of zero is 
specified - a length of one is used and a warning is issued. This matches 
the behavior of AcpiUtAllocate.

Code and Data Size: The current and previous library sizes for the core 
subsystem are shown below. These are the code and data sizes for the 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 
These 
values do not include any ACPI driver or OSPM code. The debug version of 
the 
code includes the debug output trace mechanism and has a much larger code 
and data size. Note that these values will vary depending on the 
efficiency 
of the compiler and the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  77.5K Code, 12.0K Data,  89.5K Total
    Debug Version:     168.1K Code, 68.4K Data, 236.5K Total
  Current Release:
    Non-Debug Version:  77.1K Code, 12.1K Data,  89.2K Total
    Debug Version:     168.0K Code, 68.3K Data, 236.3K Total


2) iASL Compiler/Disassembler:

A remark is issued if the effective compile-time length of a package or 
buffer is zero. Previously, this was a warning.

----------------------------------------
16 September 2005. Summary of changes for version 20050916:

1) ACPI CA Core Subsystem:

Fixed a problem within the Resource Manager where support for the Generic 
Register descriptor was not fully implemented. This descriptor is now 
fully 
recognized, parsed, disassembled, and displayed.

Completely restructured the Resource Manager code to utilize table-driven 
dispatch and lookup, eliminating many of the large switch() statements. 
This 
reduces overall subsystem code size and code complexity. Affects the 
resource parsing and construction, disassembly, and debug dump output.

Cleaned up and restructured the debug dump output for all resource 
descriptors. Improved readability of the output and reduced code size.

Fixed a problem where changes to internal data structures caused the 
optional ACPI_MUTEX_DEBUG code to fail compilation if specified.

Code and Data Size: The current and previous library sizes for the core 
subsystem are shown below. These are the code and data sizes for the 
acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 
These 
values do not include any ACPI driver or OSPM code. The debug version of 
the 
code includes the debug output trace mechanism and has a much larger code 
and data size. Note that these values will vary depending on the 
efficiency 
of the compiler and the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.4K Code, 11.8K Data,  90.2K Total
    Debug Version:     169.6K Code, 69.9K Data, 239.5K Total
  Current Release:
    Non-Debug Version:  77.5K Code, 12.0K Data,  89.5K Total
    Debug Version:     168.1K Code, 68.4K Data, 236.5K Total


2) iASL Compiler/Disassembler:

Updated the disassembler to automatically insert an EndDependentFn() 
macro 
into the ASL stream if this macro is missing in the original AML code, 
simplifying compilation of the resulting ASL module.

Fixed a problem in the disassembler where a disassembled ResourceSource 
string (within a large resource descriptor) was not surrounded by quotes 
and 
not followed by a comma, causing errors when the resulting ASL module was 
compiled. Also, escape sequences within a ResourceSource string are now 
handled correctly (especially "\\")

----------------------------------------
02 September 2005. Summary of changes for version 20050902:

1) ACPI CA Core Subsystem:

Fixed a problem with the internal Owner ID allocation and deallocation 
mechanisms for control method execution and recursive method invocation. 
This should eliminate the OWNER_ID_LIMIT exceptions and "Invalid OwnerId" 
messages seen on some systems. Recursive method invocation depth is 
currently limited to 255. (Alexey Starikovskiy)

Completely eliminated all vestiges of support for the "module-level 
executable code" until this support is fully implemented and debugged. 
This 
should eliminate the NO_RETURN_VALUE exceptions seen during table load on 
some systems that invoke this support.

Fixed a problem within the resource manager code where the transaction 
flags 
for a 64-bit address descriptor were handled incorrectly in the type-
specific flag byte.

Consolidated duplicate code within the address descriptor resource 
manager 
code, reducing overall subsystem code size.

Fixed a fault when using the AML debugger "disassemble" command to 
disassemble individual control methods.

Removed references to the "release_current" directory within the Unix 
release package.

Code and Data Size: The current and previous core subsystem library sizes 
are shown below. These are the code and data sizes for the acpica.lib 
produced by the Microsoft Visual C++ 6.0 compiler. These values do not 
include any ACPI driver or OSPM code. The debug version of the code 
includes 
the debug output trace mechanism and has a much larger code and data 
size. 
Note that these values will vary depending on the efficiency of the 
compiler 
and the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.6K Code, 11.7K Data,  90.3K Total
    Debug Version:     170.0K Code, 69.9K Data, 239.9K Total
  Current Release:
    Non-Debug Version:  78.4K Code, 11.8K Data,  90.2K Total
    Debug Version:     169.6K Code, 69.9K Data, 239.5K Total


2) iASL Compiler/Disassembler:

Implemented an error check for illegal duplicate values in the interrupt 
and 
dma lists for the following ASL macros: Dma(), Irq(), IrqNoFlags(), and 
Interrupt().

Implemented error checking for the Irq() and IrqNoFlags() macros to 
detect 
too many values in the interrupt list (16 max) and invalid values in the 
list (range 0 - 15)

The maximum length string literal within an ASL file is now restricted to 
200 characters as per the ACPI specification.

Fixed a fault when using the -ln option (generate namespace listing).

Implemented an error check to determine if a DescriptorName within a 
resource descriptor has already been used within the current scope.

----------------------------------------
15 August 2005.  Summary of changes for version 20050815:
 
1) ACPI CA Core Subsystem:
 
Implemented a full bytewise compare to determine if a table load request 
is 
attempting to load a duplicate table. The compare is performed if the 
table 
signatures and table lengths match. This will allow different tables with 
the same OEM Table ID and revision to be loaded - probably against the 
ACPI 
specification, but discovered in the field nonetheless.
 
Added the changes.txt logfile to each of the zipped release packages.
 
Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.
 
  Previous Release:
    Non-Debug Version:  78.6K Code, 11.7K Data,  90.3K Total
    Debug Version:     167.0K Code, 69.9K Data, 236.9K Total
  Current Release:
    Non-Debug Version:  78.6K Code, 11.7K Data,  90.3K Total
    Debug Version:     170.0K Code, 69.9K Data, 239.9K Total
 
 
2) iASL Compiler/Disassembler:
 
Fixed a problem where incorrect AML code could be generated for Package 
objects if optimization is disabled (via the -oa switch).
 
Fixed a problem with where incorrect AML code is generated for variable-
length packages when the package length is not specified and the number 
of 
initializer values is greater than 255.
 

----------------------------------------
29 July 2005.  Summary of changes for version 20050729:

1) ACPI CA Core Subsystem:

Implemented support to ignore an attempt to install/load a particular 
ACPI 
table more than once. Apparently there exists BIOS code that repeatedly 
attempts to load the same SSDT upon certain events. With assistance from 
Venkatesh Pallipadi.

Restructured the main interface to the AML parser in order to correctly 
handle all exceptional conditions. This will prevent leakage of the 
OwnerId 
resource and should eliminate the AE_OWNER_ID_LIMIT exceptions seen on 
some 
machines. With assistance from Alexey Starikovskiy.

Support for "module level code" has been disabled in this version due to 
a 
number of issues that have appeared on various machines. The support can 
be 
enabled by defining ACPI_ENABLE_MODULE_LEVEL_CODE during subsystem 
compilation. When the issues are fully resolved, the code will be enabled 
by 
default again.

Modified the internal functions for debug print support to define the 
FunctionName parameter as a (const char *) for compatibility with 
compiler 
built-in macros such as __FUNCTION__, etc.

Linted the entire ACPICA source tree for both 32-bit and 64-bit.

Implemented support to display an object count summary for the AML 
Debugger 
commands Object and Methods.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.6K Code, 11.6K Data,  90.2K Total
    Debug Version:     170.0K Code, 69.7K Data, 239.7K Total
  Current Release:
    Non-Debug Version:  78.6K Code, 11.7K Data,  90.3K Total
    Debug Version:     167.0K Code, 69.9K Data, 236.9K Total


2) iASL Compiler/Disassembler:

Fixed a regression that appeared in the 20050708 version of the compiler 
where an error message was inadvertently emitted for invocations of the 
_OSI 
reserved control method.

----------------------------------------
08 July 2005.  Summary of changes for version 20050708:

1) ACPI CA Core Subsystem:

The use of the CPU stack in the debug version of the subsystem has been 
considerably reduced. Previously, a debug structure was declared in every 
function that used the debug macros. This structure has been removed in 
favor of declaring the individual elements as parameters to the debug 
functions. This reduces the cumulative stack use during nested execution 
of 
ACPI function calls at the cost of a small increase in the code size of 
the 
debug version of the subsystem. With assistance from Alexey Starikovskiy 
and 
Len Brown.

Added the ACPI_GET_FUNCTION_NAME macro to enable the compiler-dependent 
headers to define a macro that will return the current function name at 
runtime (such as __FUNCTION__ or _func_, etc.) The function name is used 
by 
the debug trace output. If ACPI_GET_FUNCTION_NAME is not defined in the 
compiler-dependent header, the function name is saved on the CPU stack 
(one 
pointer per function.) This mechanism is used because apparently there 
exists no standard ANSI-C defined macro that that returns the function 
name.

Redesigned and reimplemented the "Owner ID" mechanism used to track 
namespace objects created/deleted by ACPI tables and control method 
execution. A bitmap is now used to allocate and free the IDs, thus 
solving 
the wraparound problem present in the previous implementation. The size 
of 
the namespace node descriptor was reduced by 2 bytes as a result (Alexey 
Starikovskiy).

Removed the UINT32_BIT and UINT16_BIT types that were used for the 
bitfield 
flag definitions within the headers for the predefined ACPI tables. These 
have been replaced by UINT8_BIT in order to increase the code portability 
of 
the subsystem. If the use of UINT8 remains a problem, we may be forced to 
eliminate bitfields entirely because of a lack of portability.

Enhanced the performance of the AcpiUtUpdateObjectReference procedure. 
This 
is a frequently used function and this improvement increases the 
performance 
of the entire subsystem (Alexey Starikovskiy).

Fixed several possible memory leaks and the inverse - premature object 
deletion (Alexey Starikovskiy).

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.6K Code, 11.5K Data,  90.1K Total
    Debug Version:     165.2K Code, 69.6K Data, 234.8K Total
  Current Release:
    Non-Debug Version:  78.6K Code, 11.6K Data,  90.2K Total
    Debug Version:     170.0K Code, 69.7K Data, 239.7K Total

----------------------------------------
24 June 2005.  Summary of changes for version 20050624:

1) ACPI CA Core Subsystem:

Modified the new OSL cache interfaces to use ACPI_CACHE_T as the type for 
the host-defined cache object. This allows the OSL implementation to 
define 
and type this object in any manner desired, simplifying the OSL 
implementation. For example, ACPI_CACHE_T is defined as kmem_cache_t for 
Linux, and should be defined in the OS-specific header file for other 
operating systems as required.

Changed the interface to AcpiOsAcquireObject to directly return the 
requested object as the function return (instead of ACPI_STATUS.) This 
change was made for performance reasons, since this is the purpose of the 
interface in the first place. AcpiOsAcquireObject is now similar to the 
AcpiOsAllocate interface.

Implemented a new AML debugger command named Businfo. This command 
displays 
information about all devices that have an associate _PRT object. The 
_ADR, 
_HID, _UID, and _CID are displayed for these devices.

Modified the initialization sequence in AcpiInitializeSubsystem to call 
the 
OSL interface AcpiOslInitialize first, before any local initialization. 
This 
change was required because the global initialization now calls OSL 
interfaces.

Enhanced the Dump command to display the entire contents of Package 
objects 
(including all sub-objects and their values.) 

Restructured the code base to split some files because of size and/or 
because the code logically belonged in a separate file. New files are 
listed 
below. All makefiles and project files included in the ACPI CA release 
have 
been updated.
    utilities/utcache.c           /* Local cache interfaces */
    utilities/utmutex.c           /* Local mutex support */
    utilities/utstate.c           /* State object support */
    interpreter/parser/psloop.c   /* Main AML parse loop */

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.3K Code, 11.6K Data,  89.9K Total
    Debug Version:     164.0K Code, 69.1K Data, 233.1K Total
  Current Release:
    Non-Debug Version:  78.6K Code, 11.5K Data,  90.1K Total
    Debug Version:     165.2K Code, 69.6K Data, 234.8K Total


2) iASL Compiler/Disassembler:

Fixed a regression introduced in version 20050513 where the use of a 
Package 
object within a Case() statement caused a compile time exception. The 
original behavior has been restored (a Match() operator is emitted.)

----------------------------------------
17 June 2005.  Summary of changes for version 20050617:

1) ACPI CA Core Subsystem:

Moved the object cache operations into the OS interface layer (OSL) to 
allow 
the host OS to handle these operations if desired (for example, the Linux 
OSL will invoke the slab allocator). This support is optional; the 
compile 
time define ACPI_USE_LOCAL_CACHE may be used to utilize the original 
cache 
code in the ACPI CA core. The new OSL interfaces are shown below. See 
utalloc.c for an example implementation, and acpiosxf.h for the exact 
interface definitions. With assistance from Alexey Starikovskiy.
    AcpiOsCreateCache
    AcpiOsDeleteCache
    AcpiOsPurgeCache
    AcpiOsAcquireObject
    AcpiOsReleaseObject

Modified the interfaces to AcpiOsAcquireLock and AcpiOsReleaseLock to 
return 
and restore a flags parameter. This fits better with many OS lock models. 
Note: the current execution state (interrupt handler or not) is no longer 
passed to these interfaces. If necessary, the OSL must determine this 
state 
by itself, a simple and fast operation. With assistance from Alexey 
Starikovskiy.

Fixed a problem in the ACPI table handling where a valid XSDT was assumed 
present if the revision of the RSDP was 2 or greater. According to the 
ACPI 
specification, the XSDT is optional in all cases, and the table manager 
therefore now checks for both an RSDP >=2 and a valid XSDT pointer. 
Otherwise, the RSDT pointer is used. Some ACPI 2.0 compliant BIOSs 
contain 
only the RSDT.

Fixed an interpreter problem with the Mid() operator in the case of an 
input 
string where the resulting output string is of zero length. It now 
correctly 
returns a valid, null terminated string object instead of a string object 
with a null pointer.

Fixed a problem with the control method argument handling to allow a 
store 
to an Arg object that already contains an object of type Device. The 
Device 
object is now correctly overwritten. Previously, an error was returned.


Enhanced the debugger Find command to emit object values in addition to 
the 
found object pathnames. The output format is the same as the dump 
namespace 
command.

Enhanced the debugger Set command. It now has the ability to set the 
value 
of any Named integer object in the namespace (Previously, only method 
locals 
and args could be set.)

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.1K Code, 11.6K Data,  89.7K Total
    Debug Version:     164.0K Code, 69.3K Data, 233.3K Total
  Current Release:
    Non-Debug Version:  78.3K Code, 11.6K Data,  89.9K Total
    Debug Version:     164.0K Code, 69.1K Data, 233.1K Total


2) iASL Compiler/Disassembler:

Fixed a regression in the disassembler where if/else/while constructs 
were 
output incorrectly. This problem was introduced in the previous release 
(20050526). This problem also affected the single-step disassembly in the 
debugger.

Fixed a problem where compiling the reserved _OSI method would randomly 
(but 
rarely) produce compile errors.

Enhanced the disassembler to emit compilable code in the face of 
incorrect 
AML resource descriptors. If the optional ResourceSourceIndex is present, 
but the ResourceSource is not, do not emit the ResourceSourceIndex in the 
disassembly. Otherwise, the resulting code cannot be compiled without 
errors.

----------------------------------------
26 May 2005.  Summary of changes for version 20050526:

1) ACPI CA Core Subsystem:

Implemented support to execute Type 1 and Type 2 AML opcodes appearing at 
the module level (not within a control method.) These opcodes are 
executed 
exactly once at the time the table is loaded. This type of code was legal 
up 
until the release of ACPI 2.0B (2002) and is now supported within ACPI CA 
in 
order to provide backwards compatibility with earlier BIOS 
implementations. 
This eliminates the "Encountered executable code at module level" warning 
that was previously generated upon detection of such code.

Fixed a problem in the interpreter where an AE_NOT_FOUND exception could 
inadvertently be generated during the lookup of namespace objects in the 
second pass parse of ACPI tables and control methods. It appears that 
this 
problem could occur during the resolution of forward references to 
namespace 
objects.

Added the ACPI_MUTEX_DEBUG #ifdef to the AcpiUtReleaseMutex function, 
corresponding to the same #ifdef in the AcpiUtAcquireMutex function. This 
allows the deadlock detection debug code to be compiled out in the normal 
case, improving mutex performance (and overall subsystem performance) 
considerably.

Implemented a handful of miscellaneous fixes for possible memory leaks on 
error conditions and error handling control paths. These fixes were 
suggested by FreeBSD and the Coverity Prevent source code analysis tool.

Added a check for a null RSDT pointer in AcpiGetFirmwareTable 
(tbxfroot.c) 
to prevent a fault in this error case.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.2K Code, 11.6K Data,  89.8K Total
    Debug Version:     163.7K Code, 69.3K Data, 233.0K Total
  Current Release:
    Non-Debug Version:  78.1K Code, 11.6K Data,  89.7K Total
    Debug Version:     164.0K Code, 69.3K Data, 233.3K Total


2) iASL Compiler/Disassembler:

Implemented support to allow Type 1 and Type 2 ASL operators to appear at 
the module level (not within a control method.) These operators will be 
executed once at the time the table is loaded. This type of code was 
legal 
up until the release of ACPI 2.0B (2002) and is now supported by the iASL 
compiler in order to provide backwards compatibility with earlier BIOS 
ASL 
code.

The ACPI integer width (specified via the table revision ID or the -r 
override, 32 or 64 bits) is now used internally during compile-time 
constant 
folding to ensure that constants are truncated to 32 bits if necessary. 
Previously, the revision ID value was only emitted in the AML table 
header.

An error message is now generated for the Mutex and Method operators if 
the 
SyncLevel parameter is outside the legal range of 0 through 15.

Fixed a problem with the Method operator ParameterTypes list handling 
(ACPI 
3.0). Previously, more than 2 types or 2 arguments generated a syntax 
error.  
The actual underlying implementation of method argument typechecking is 
still under development, however.

----------------------------------------
13 May 2005.  Summary of changes for version 20050513:

1) ACPI CA Core Subsystem:

Implemented support for PCI Express root bridges -- added support for 
device 
PNP0A08 in the root bridge search within AcpiEvPciConfigRegionSetup.

The interpreter now automatically truncates incoming 64-bit constants to 
32 
bits if currently executing out of a 32-bit ACPI table (Revision < 2). 
This 
also affects the iASL compiler constant folding. (Note: as per below, the 
iASL compiler no longer allows 64-bit constants within 32-bit tables.)

Fixed a problem where string and buffer objects with "static" pointers 
(pointers to initialization data within an ACPI table) were not handled 
consistently. The internal object copy operation now always copies the 
data 
to a newly allocated buffer, regardless of whether the source object is 
static or not.

Fixed a problem with the FromBCD operator where an implicit result 
conversion was improperly performed while storing the result to the 
target 
operand. Since this is an "explicit conversion" operator, the implicit 
conversion should never be performed on the output.

Fixed a problem with the CopyObject operator where a copy to an existing 
named object did not always completely overwrite the existing object 
stored 
at name. Specifically, a buffer-to-buffer copy did not delete the 
existing 
buffer.

Replaced "InterruptLevel" with "InterruptNumber" in all GPE interfaces 
and 
structs for consistency.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.2K Code, 11.6K Data,  89.8K Total
    Debug Version:     163.7K Code, 69.3K Data, 233.0K Total
  Current Release: (Same sizes)
    Non-Debug Version:  78.2K Code, 11.6K Data,  89.8K Total
    Debug Version:     163.7K Code, 69.3K Data, 233.0K Total


2) iASL Compiler/Disassembler:

The compiler now emits a warning if an attempt is made to generate a 64-
bit 
integer constant from within a 32-bit ACPI table (Revision < 2). The 
integer 
is truncated to 32 bits.

Fixed a problem with large package objects: if the static length of the 
package is greater than 255, the "variable length package" opcode is 
emitted. Previously, this caused an error. This requires an update to the 
ACPI spec, since it currently (incorrectly) states that packages larger 
than 
255 elements are not allowed.

The disassembler now correctly handles variable length packages and 
packages 
larger than 255 elements.

----------------------------------------
08 April 2005.  Summary of changes for version 20050408:

1) ACPI CA Core Subsystem:

Fixed three cases in the interpreter where an "index" argument to an ASL 
function was still (internally) 32 bits instead of the required 64 bits. 
This was the Index argument to the Index, Mid, and Match operators.

The "strupr" function is now permanently local (AcpiUtStrupr), since this 
is 
not a POSIX-defined function and not present in most kernel-level C 
libraries. All references to the C library strupr function have been 
removed 
from the headers.

Completed the deployment of static functions/prototypes. All prototypes 
with 
the static attribute have been moved from the headers to the owning C 
file.

Implemented an extract option (-e) for the AcpiBin utility (AML binary 
utility). This option allows the utility to extract individual ACPI 
tables 
from the output of AcpiDmp. It provides the same functionality of the 
acpixtract.pl perl script without the worry of setting the correct perl 
options. AcpiBin runs on Windows and has not yet been generated/validated 
in 
the Linux/Unix environment (but should be soon).
 
Updated and fixed the table dump option for AcpiBin (-d). This option 
converts a single ACPI table to a hex/ascii file, similar to the output 
of 
AcpiDmp.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.0K Code, 11.6K Data,  89.6K Total
    Debug Version:     163.5K Code, 69.3K Data, 232.8K Total
  Current Release:
    Non-Debug Version:  78.2K Code, 11.6K Data,  89.8K Total
    Debug Version:     163.7K Code, 69.3K Data, 233.0K Total


2) iASL Compiler/Disassembler:

Disassembler fix: Added a check to ensure that the table length found in 
the 
ACPI table header within the input file is not longer than the actual 
input 
file size. This indicates some kind of file or table corruption.

----------------------------------------
29 March 2005.  Summary of changes for version 20050329:

1) ACPI CA Core Subsystem:

An error is now generated if an attempt is made to create a Buffer Field 
of 
length zero (A CreateField with a length operand of zero.)

The interpreter now issues a warning whenever executable code at the 
module 
level is detected during ACPI table load. This will give some idea of the 
prevalence of this type of code.

Implemented support for references to named objects (other than control 
methods) within package objects.

Enhanced package object output for the debug object. Package objects are 
now 
completely dumped, showing all elements.

Enhanced miscellaneous object output for the debug object. Any object can 
now be written to the debug object (for example, a device object can be 
written, and the type of the object will be displayed.)

The "static" qualifier has been added to all local functions across both 
the 
core subsystem and the iASL compiler.

The number of "long" lines (> 80 chars) within the source has been 
significantly reduced, by about 1/3.

Cleaned up all header files to ensure that all CA/iASL functions are 
prototyped (even static functions) and the formatting is consistent.

Two new header files have been added, acopcode.h and acnames.h.

Removed several obsolete functions that were no longer used.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.3K Code, 11.5K Data,  89.8K Total
    Debug Version:     165.4K Code, 69.7K Data, 236.1K Total
  Current Release:
    Non-Debug Version:  78.0K Code, 11.6K Data,  89.6K Total
    Debug Version:     163.5K Code, 69.3K Data, 232.8K Total



2) iASL Compiler/Disassembler:

Fixed a problem with the resource descriptor generation/support. For the 
ResourceSourceIndex and the ResourceSource fields, both must be present, 
or 
both must be not present - can't have one without the other.

The compiler now returns non-zero from the main procedure if any errors 
have 
occurred during the compilation.


----------------------------------------
09 March 2005.  Summary of changes for version 20050309:

1) ACPI CA Core Subsystem:

The string-to-buffer implicit conversion code has been modified again 
after 
a change to the ACPI specification.  In order to match the behavior of 
the 
other major ACPI implementation, the target buffer is no longer truncated 
if 
the source string is smaller than an existing target buffer. This change 
requires an update to the ACPI spec, and should eliminate the recent 
AE_AML_BUFFER_LIMIT issues.

The "implicit return" support was rewritten to a new algorithm that 
solves 
the general case. Rather than attempt to determine when a method is about 
to 
exit, the result of every ASL operator is saved momentarily until the 
very 
next ASL operator is executed. Therefore, no matter how the method exits, 
there will always be a saved implicit return value. This feature is only 
enabled with the AcpiGbl_EnableInterpreterSlack flag, and should 
eliminate 
AE_AML_NO_RETURN_VALUE errors when enabled.

Implemented implicit conversion support for the predicate (operand) of 
the 
If, Else, and While operators. String and Buffer arguments are 
automatically 
converted to Integers.

Changed the string-to-integer conversion behavior to match the new ACPI 
errata: "If no integer object exists, a new integer is created. The ASCII 
string is interpreted as a hexadecimal constant. Each string character is 
interpreted as a hexadecimal value ('0'-'9', 'A'-'F', 'a', 'f'), starting 
with the first character as the most significant digit, and ending with 
the 
first non-hexadecimal character or end-of-string." This means that the 
first 
non-hex character terminates the conversion and this is the code that was 
changed.

Fixed a problem where the ObjectType operator would fail (fault) when 
used 
on an Index of a Package which pointed to a null package element. The 
operator now properly returns zero (Uninitialized) in this case.

Fixed a problem where the While operator used excessive memory by not 
properly popping the result stack during execution. There was no memory 
leak 
after execution, however. (Code provided by Valery Podrezov.)

Fixed a problem where references to control methods within Package 
objects 
caused the method to be invoked, instead of producing a reference object 
pointing to the method.

Restructured and simplified the pswalk.c module (AcpiPsDeleteParseTree) 
to 
improve performance and reduce code size. (Code provided by Alexey 
Starikovskiy.)

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.3K Code, 11.5K Data,  89.8K Total
    Debug Version:     165.4K Code, 69.6K Data, 236.0K Total
  Current Release:
    Non-Debug Version:  78.3K Code, 11.5K Data,  89.8K Total
    Debug Version:     165.4K Code, 69.7K Data, 236.1K Total


2) iASL Compiler/Disassembler:

Fixed a problem with the Return operator with no arguments. Since the AML 
grammar for the byte encoding requires an operand for the Return opcode, 
the 
compiler now emits a Return(Zero) for this case.  An ACPI specification 
update has been written for this case.

For tables other than the DSDT, namepath optimization is automatically 
disabled. This is because SSDTs can be loaded anywhere in the namespace, 
the 
compiler has no knowledge of where, and thus cannot optimize namepaths.

Added "ProcessorObj" to the ObjectTypeKeyword list. This object type was 
inadvertently omitted from the ACPI specification, and will require an 
update to the spec.

The source file scan for ASCII characters is now optional (-a). This 
change 
was made because some vendors place non-ascii characters within comments. 
However, the scan is simply a brute-force byte compare to ensure all 
characters in the file are in the range 0x00 to 0x7F.

Fixed a problem with the CondRefOf operator where the compiler was 
inappropriately checking for the existence of the target. Since the point 
of 
the operator is to check for the existence of the target at run-time, the 
compiler no longer checks for the target existence.

Fixed a problem where errors generated from the internal AML interpreter 
during constant folding were not handled properly, causing a fault.

Fixed a problem with overly aggressive range checking for the Stall 
operator. The valid range (max 255) is now only checked if the operand is 
of 
type Integer. All other operand types cannot be statically checked.

Fixed a problem where control method references within the RefOf, 
DeRefOf, 
and ObjectType operators were not treated properly. They are now treated 
as 
actual references, not method invocations.

Fixed and enhanced the "list namespace" option (-ln). This option was 
broken 
a number of releases ago.

Improved error handling for the Field, IndexField, and BankField 
operators. 
The compiler now cleanly reports and recovers from errors in the field 
component (FieldUnit) list.

Fixed a disassembler problem where the optional ResourceDescriptor fields 
TRS and TTP were not always handled correctly.

Disassembler - Comments in output now use "//" instead of "/*"

----------------------------------------
28 February 2005.  Summary of changes for version 20050228:

1) ACPI CA Core Subsystem:

Fixed a problem where the result of an Index() operator (an object 
reference) must increment the reference count on the target object for 
the 
life of the object reference.

Implemented AML Interpreter and Debugger support for the new ACPI 3.0 
Extended Address (IO, Memory, Space), QwordSpace, DwordSpace, and 
WordSpace 
resource descriptors.

Implemented support in the _OSI method for the ACPI 3.0 "Extended Address 
Space Descriptor" string, indicating interpreter support for the 
descriptors 
above.

Implemented header support for the new ACPI 3.0 FADT flag bits.

Implemented header support for the new ACPI 3.0 PCI Express bits for the 
PM1 
status/enable registers.

Updated header support for the MADT processor local Apic struct and MADT 
platform interrupt source struct for new ACPI 3.0 fields.

Implemented header support for the SRAT and SLIT ACPI tables.

Implemented the -s switch in AcpiExec to enable the "InterpreterSlack" 
flag 
at runtime.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.2K Code, 11.5K Data,  89.7K Total
    Debug Version:     164.9K Code, 69.2K Data, 234.1K Total
  Current Release:
    Non-Debug Version:  78.3K Code, 11.5K Data,  89.8K Total
    Debug Version:     165.4K Code, 69.6K Data, 236.0K Total


2) iASL Compiler/Disassembler:

Fixed a problem with the internal 64-bit String-to-integer conversion 
with 
strings less than two characters long.

Fixed a problem with constant folding where the result of the Index() 
operator can not be considered a constant. This means that Index() cannot 
be 
a type3 opcode and this will require an update to the ACPI specification.

Disassembler: Implemented support for the TTP, MTP, and TRS resource 
descriptor fields. These fields were inadvertently ignored and not output 
in 
the disassembly of the resource descriptor.


 ----------------------------------------
11 February 2005.  Summary of changes for version 20050211:

1) ACPI CA Core Subsystem:

Implemented ACPI 3.0 support for implicit conversion within the Match() 
operator. MatchObjects can now be of type integer, buffer, or string 
instead 
of just type integer.  Package elements are implicitly converted to the 
type 
of the MatchObject. This change aligns the behavior of Match() with the 
behavior of the other logical operators (LLess(), etc.) It also requires 
an 
errata change to the ACPI specification as this support was intended for 
ACPI 3.0, but was inadvertently omitted.

Fixed a problem with the internal implicit "to buffer" conversion. 
Strings 
that are converted to buffers will cause buffer truncation if the string 
is 
smaller than the target buffer. Integers that are converted to buffers 
will 
not cause buffer truncation, only zero extension (both as per the ACPI 
spec.) The problem was introduced when code was added to truncate the 
buffer, but this should not be performed in all cases, only the string 
case.

Fixed a problem with the Buffer and Package operators where the 
interpreter 
would get confused if two such operators were used as operands to an ASL 
operator (such as LLess(Buffer(1){0},Buffer(1){1}). The internal result 
stack was not being popped after the execution of these operators, 
resulting 
in an AE_NO_RETURN_VALUE exception.

Fixed a problem with constructs of the form Store(Index(...),...). The 
reference object returned from Index was inadvertently resolved to an 
actual 
value. This problem was introduced in version 20050114 when the behavior 
of 
Store() was modified to restrict the object types that can be used as the 
source operand (to match the ACPI specification.)

Reduced excessive stack use within the AcpiGetObjectInfo procedure.

Added a fix to aclinux.h to allow generation of AcpiExec on Linux.

Updated the AcpiSrc utility to add the FADT_DESCRIPTOR_REV2_MINUS struct.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.1K Code, 11.5K Data,  89.6K Total
    Debug Version:     164.8K Code, 69.2K Data, 234.0K Total
  Current Release:
    Non-Debug Version:  78.2K Code, 11.5K Data,  89.7K Total
    Debug Version:     164.9K Code, 69.2K Data, 234.1K Total


2) iASL Compiler/Disassembler:

Fixed a code generation problem in the constant folding optimization code 
where incorrect code was generated if a constant was reduced to a buffer 
object (i.e., a reduced type 5 opcode.)

Fixed a typechecking problem for the ToBuffer operator. Caused by an 
incorrect return type in the internal opcode information table.

----------------------------------------
25 January 2005.  Summary of changes for version 20050125:

1) ACPI CA Core Subsystem:

Fixed a recently introduced problem with the Global Lock where the 
underlying semaphore was not created.  This problem was introduced in 
version 20050114, and caused an AE_AML_NO_OPERAND exception during an 
Acquire() operation on _GL.

The local object cache is now optional, and is disabled by default. Both 
AcpiExec and the iASL compiler enable the cache because they run in user 
mode and this enhances their performance. #define 
ACPI_ENABLE_OBJECT_CACHE 
to enable the local cache.

Fixed an issue in the internal function AcpiUtEvaluateObject concerning 
the 
optional "implicit return" support where an error was returned if no 
return 
object was expected, but one was implicitly returned. AE_OK is now 
returned 
in this case and the implicitly returned object is deleted. 
AcpiUtEvaluateObject is only occasionally used, and only to execute 
reserved 
methods such as _STA and _INI where the return type is known up front.

Fixed a few issues with the internal convert-to-integer code. It now 
returns 
an error if an attempt is made to convert a null string, a string of only 
blanks/tabs, or a zero-length buffer. This affects both implicit 
conversion 
and explicit conversion via the ToInteger() operator.

The internal debug code in AcpiUtAcquireMutex has been commented out. It 
is 
not needed for normal operation and should increase the performance of 
the 
entire subsystem. The code remains in case it is needed for debug 
purposes 
again.

The AcpiExec source and makefile are included in the Unix/Linux package 
for 
the first time.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.4K Code,  11.5K Data,   89.9K Total
    Debug Version:     165.4K Code,  69.4K Data,  234.8K Total
  Current Release:
    Non-Debug Version:  78.1K Code,  11.5K Data,   89.6K Total
    Debug Version:     164.8K Code,  69.2K Data,  234.0K Total

2) iASL Compiler/Disassembler:

Switch/Case support: A warning is now issued if the type of the Switch 
value 
cannot be determined at compile time. For example, Switch(Arg0) will 
generate the warning, and the type is assumed to be an integer. As per 
the 
ACPI spec, use a construct such as Switch(ToInteger(Arg0)) to eliminate 
the 
warning.

Switch/Case support: Implemented support for buffer and string objects as 
the switch value.  This is an ACPI 3.0 feature, now that LEqual supports 
buffers and strings.

Switch/Case support: The emitted code for the LEqual() comparisons now 
uses 
the switch value as the first operand, not the second. The case value is 
now 
the second operand, and this allows the case value to be implicitly 
converted to the type of the switch value, not the other way around.

Switch/Case support: Temporary variables are now emitted immediately 
within 
the control method, not at the global level. This means that there are 
now 
36 temps available per-method, not 36 temps per-module as was the case 
with 
the earlier implementation (_T_0 through _T_9 and _T_A through _T_Z.)

----------------------------------------
14 January 2005.  Summary of changes for version 20050114:

Added 2005 copyright to all module headers.  This affects every module in 
the core subsystem, iASL compiler, and the utilities.

1) ACPI CA Core Subsystem:

Fixed an issue with the String-to-Buffer conversion code where the string 
null terminator was not included in the buffer after conversion, but 
there 
is existing ASL that assumes the string null terminator is included. This 
is 
the root of the ACPI_AML_BUFFER_LIMIT regression. This problem was 
introduced in the previous version when the code was updated to correctly 
set the converted buffer size as per the ACPI specification. The ACPI 
spec 
is ambiguous and will be updated to specify that the null terminator must 
be 
included in the converted buffer. This also affects the ToBuffer() ASL 
operator.

Fixed a problem with the Mid() ASL/AML operator where it did not work 
correctly on Buffer objects. Newly created sub-buffers were not being 
marked 
as initialized.


Fixed a problem in AcpiTbFindTable where incorrect string compares were 
performed on the OemId and OemTableId table header fields.  These fields 
are 
not null terminated, so strncmp is now used instead of strcmp.

Implemented a restriction on the Store() ASL/AML operator to align the 
behavior with the ACPI specification.  Previously, any object could be 
used 
as the source operand.  Now, the only objects that may be used are 
Integers, 
Buffers, Strings, Packages, Object References, and DDB Handles.  If 
necessary, the original behavior can be restored by enabling the 
EnableInterpreterSlack flag.

Enhanced the optional "implicit return" support to allow an implicit 
return 
value from methods that are invoked externally via the AcpiEvaluateObject 
interface.  This enables implicit returns from the _STA and _INI methods, 
for example.

Changed the Revision() ASL/AML operator to return the current version of 
the 
AML interpreter, in the YYYYMMDD format. Previously, it incorrectly 
returned 
the supported ACPI version (This is the function of the _REV method).

Updated the _REV predefined method to return the currently supported 
version 
of ACPI, now 3.

Implemented batch mode option for the AcpiExec utility (-b).

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.3K Code,  11.5K Data,   89.8K Total
    Debug Version:     165.3K Code,  69.4K Data,  234.7K Total
  Current Release:
    Non-Debug Version:  78.4K Code,  11.5K Data,   89.9K Total
    Debug Version:     165.4K Code,  69.4K Data,  234.8K Total

----------------------------------------
10 December 2004.  Summary of changes for version 20041210:

ACPI 3.0 support is nearing completion in both the iASL compiler and the 
ACPI CA core subsystem.

1) ACPI CA Core Subsystem:

Fixed a problem in the ToDecimalString operator where the resulting 
string 
length was incorrectly calculated. The length is now calculated exactly, 
eliminating incorrect AE_STRING_LIMIT exceptions.

Fixed a problem in the ToHexString operator to allow a maximum 200 
character 
string to be produced.

Fixed a problem in the internal string-to-buffer and buffer-to-buffer 
copy 
routine where the length of the resulting buffer was not truncated to the 
new size (if the target buffer already existed).

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.3K Code,  11.5K Data,   89.8K Total
    Debug Version:     164.7K Code,  68.5K Data,  233.2K Total
  Current Release:
    Non-Debug Version:  78.3K Code,  11.5K Data,   89.8K Total
    Debug Version:     165.3K Code,  69.4K Data,  234.7K Total


2) iASL Compiler/Disassembler:

Implemented the new ACPI 3.0 resource template macros - DWordSpace, 
ExtendedIO, ExtendedMemory, ExtendedSpace, QWordSpace, and WordSpace. 
Includes support in the disassembler.

Implemented support for the new (ACPI 3.0) parameter to the Register 
macro, 
AccessSize.

Fixed a problem where the _HE resource name for the Interrupt macro was 
referencing bit 0 instead of bit 1.

Implemented check for maximum 255 interrupts in the Interrupt macro.

Fixed a problem with the predefined resource descriptor names where 
incorrect AML code was generated if the offset within the resource buffer 
was 0 or 1.  The optimizer shortened the AML code to a single byte opcode 
but did not update the surrounding package lengths.

Changes to the Dma macro:  All channels within the channel list must be 
in 
the range 0-7.  Maximum 8 channels can be specified. BusMaster operand is 
optional (default is BusMaster).

Implemented check for maximum 7 data bytes for the VendorShort macro.

The ReadWrite parameter is now optional for the Memory32 and similar 
macros.

----------------------------------------
03 December 2004.  Summary of changes for version 20041203:

1) ACPI CA Core Subsystem:

The low-level field insertion/extraction code (exfldio) has been 
completely 
rewritten to eliminate unnecessary complexity, bugs, and boundary 
conditions.

Fixed a problem in the ToInteger, ToBuffer, ToHexString, and 
ToDecimalString 
operators where the input operand could be inadvertently deleted if no 
conversion was necessary (e.g., if the input to ToInteger was an Integer 
object.)

Fixed a problem with the ToDecimalString and ToHexString where an 
incorrect 
exception code was returned if the resulting string would be > 200 chars.  
AE_STRING_LIMIT is now returned.

Fixed a problem with the Concatenate operator where AE_OK was always 
returned, even if the operation failed.

Fixed a problem in oswinxf (used by AcpiExec and iASL) to allow > 128 
semaphores to be allocated.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.5K Code,  11.5K Data,   90.0K Total
    Debug Version:     165.2K Code,  68.6K Data,  233.8K Total
  Current Release:
    Non-Debug Version:  78.3K Code,  11.5K Data,   89.8K Total
    Debug Version:     164.7K Code,  68.5K Data,  233.2K Total


2) iASL Compiler/Disassembler:

Fixed typechecking for the ObjectType and SizeOf operators.  Problem was 
recently introduced in 20041119.

Fixed a problem with the ToUUID macro where the upper nybble of each 
buffer 
byte was inadvertently set to zero.

----------------------------------------
19 November 2004.  Summary of changes for version 20041119:

1) ACPI CA Core Subsystem:

Fixed a problem in the internal ConvertToInteger routine where new 
integers 
were not truncated to 32 bits for 32-bit ACPI tables. This routine 
converts 
buffers and strings to integers.

Implemented support to store a value to an Index() on a String object. 
This 
is an ACPI 2.0 feature that had not yet been implemented.

Implemented new behavior for storing objects to individual package 
elements 
(via the Index() operator). The previous behavior was to invoke the 
implicit 
conversion rules if an object was already present at the index.  The new 
behavior is to simply delete any existing object and directly store the 
new 
object. Although the ACPI specification seems unclear on this subject, 
other 
ACPI implementations behave in this manner.  (This is the root of the 
AE_BAD_HEX_CONSTANT issue.)

Modified the RSDP memory scan mechanism to support the extended checksum 
for 
ACPI 2.0 (and above) RSDPs. Note that the search continues until a valid 
RSDP signature is found with a valid checksum.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.5K Code,  11.5K Data,   90.0K Total
    Debug Version:     165.2K Code,  68.6K Data,  233.8K Total
  Current Release:
    Non-Debug Version:  78.5K Code,  11.5K Data,   90.0K Total
    Debug Version:     165.2K Code,  68.6K Data,  233.8K Total


2) iASL Compiler/Disassembler:

Fixed a missing semicolon in the aslcompiler.y file.

----------------------------------------
05 November 2004.  Summary of changes for version 20041105:

1) ACPI CA Core Subsystem:

Implemented support for FADT revision 2.  This was an interim table 
(between 
ACPI 1.0 and ACPI 2.0) that adds support for the FADT reset register.

Implemented optional support to allow uninitialized LocalX and ArgX 
variables in a control method.  The variables are initialized to an 
Integer 
object with a value of zero.  This support is enabled by setting the 
AcpiGbl_EnableInterpreterSlack flag to TRUE.

Implemented support for Integer objects for the SizeOf operator.  Either 
4 
or 8 is returned, depending on the current integer size (32-bit or 64-
bit, 
depending on the parent table revision).

Fixed a problem in the implementation of the SizeOf and ObjectType 
operators 
where the operand was resolved to a value too early, causing incorrect 
return values for some objects.

Fixed some possible memory leaks during exceptional conditions.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.0K Code,  11.5K Data,   89.5K Total
    Debug Version:     164.8K Code,  68.6K Data,  233.4K Total
  Current Release:
    Non-Debug Version:  78.5K Code,  11.5K Data,   90.0K Total
    Debug Version:     165.2K Code,  68.6K Data,  233.8K Total


2) iASL Compiler/Disassembler:

Implemented support for all ACPI 3.0 reserved names and methods.

Implemented all ACPI 3.0 grammar elements in the front-end, including 
support for semicolons.

Implemented the ACPI 3.0 Function() and ToUUID() macros

Fixed a problem in the disassembler where a Scope() operator would not be 
emitted properly if the target of the scope was in another table.

----------------------------------------
15 October 2004.  Summary of changes for version 20041015:

Note:  ACPI CA is currently undergoing an in-depth and complete formal 
evaluation to test/verify the following areas. Other suggestions are 
welcome. This will result in an increase in the frequency of releases and 
the number of bug fixes in the next few months.
  - Functional tests for all ASL/AML operators
  - All implicit/explicit type conversions
  - Bit fields and operation regions
  - 64-bit math support and 32-bit-only "truncated" math support
  - Exceptional conditions, both compiler and interpreter
  - Dynamic object deletion and memory leaks
  - ACPI 3.0 support when implemented
  - External interfaces to the ACPI subsystem


1) ACPI CA Core Subsystem:

Fixed two alignment issues on 64-bit platforms - within debug statements 
in 
AcpiEvGpeDetect and AcpiEvCreateGpeBlock. Removed references to the 
Address 
field within the non-aligned ACPI generic address structure.

Fixed a problem in the Increment and Decrement operators where incorrect 
operand resolution could result in the inadvertent modification of the 
original integer when the integer is passed into another method as an 
argument and the arg is then incremented/decremented.

Fixed a problem in the FromBCD operator where the upper 32-bits of a 64-
bit 
BCD number were truncated during conversion.

Fixed a problem in the ToDecimal operator where the length of the 
resulting 
string could be set incorrectly too long if the input operand was a 
Buffer 
object.

Fixed a problem in the Logical operators (LLess, etc.) where a NULL byte 
(0) 
within a buffer would prematurely terminate a compare between buffer 
objects.

Added a check for string overflow (>200 characters as per the ACPI 
specification) during the Concatenate operator with two string operands.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  77.8K Code,  11.5K Data,   89.3K Total
    Debug Version:     164.6K Code,  68.5K Data,  233.1K Total
  Current Release:
    Non-Debug Version:  78.0K Code,  11.5K Data,   89.5K Total
    Debug Version:     164.8K Code,  68.6K Data,  233.4K Total



2) iASL Compiler/Disassembler:

Allow the use of the ObjectType operator on uninitialized Locals and Args 
(returns 0 as per the ACPI specification).

Fixed a problem where the compiler would fault if there was a syntax 
error 
in the FieldName of all of the various CreateXXXField operators.

Disallow the use of lower case letters within the EISAID macro, as per 
the 
ACPI specification.  All EISAID strings must be of the form "UUUNNNN" 
Where 
U is an uppercase letter and N is a hex digit.


----------------------------------------
06 October 2004.  Summary of changes for version 20041006:

1) ACPI CA Core Subsystem:

Implemented support for the ACPI 3.0 Timer operator. This ASL function 
implements a 64-bit timer with 100 nanosecond granularity.

Defined a new OSL interface, AcpiOsGetTimer. This interface is used to 
implement the ACPI 3.0 Timer operator.  This allows the host OS to 
implement 
the timer with the best clock available. Also, it keeps the core 
subsystem 
out of the clock handling business, since the host OS (usually) performs 
this function.

Fixed an alignment issue on 64-bit platforms. The HwLowLevelRead(Write) 
functions use a 64-bit address which is part of the packed ACPI Generic 
Address Structure. Since the structure is non-aligned, the alignment 
macros 
are now used to extract the address to a local variable before use.

Fixed a problem where the ToInteger operator assumed all input strings 
were 
hexadecimal. The operator now handles both decimal strings and hex 
strings 
(prefixed with "0x").

Fixed a problem where the string length in the string object created as a 
result of the internal ConvertToString procedure could be incorrect. This 
potentially affected all implicit conversions and also the 
ToDecimalString 
and ToHexString operators.

Fixed two problems in the ToString operator. If the length parameter was 
zero, an incorrect string object was created and the value of the input 
length parameter was inadvertently changed from zero to Ones.

Fixed a problem where the optional ResourceSource string in the 
ExtendedIRQ 
resource macro was ignored.

Simplified the interfaces to the internal division functions, reducing 
code 
size and complexity.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  77.9K Code,  11.4K Data,   89.3K Total
    Debug Version:     164.5K Code,  68.3K Data,  232.8K Total
  Current Release:
    Non-Debug Version:  77.8K Code,  11.5K Data,   89.3K Total
    Debug Version:     164.6K Code,  68.5K Data,  233.1K Total


2) iASL Compiler/Disassembler:

Implemented support for the ACPI 3.0 Timer operator.

Fixed a problem where the Default() operator was inadvertently ignored in 
a 
Switch/Case block.  This was a problem in the translation of the Switch 
statement to If...Else pairs.

Added support to allow a standalone Return operator, with no parentheses 
(or 
operands).

Fixed a problem with code generation for the ElseIf operator where the 
translated Else...If parse tree was improperly constructed leading to the 
loss of some code.

----------------------------------------
22 September 2004.  Summary of changes for version 20040922:

1) ACPI CA Core Subsystem:

Fixed a problem with the implementation of the LNot() operator where 
"Ones" 
was not returned for the TRUE case. Changed the code to return Ones 
instead 
of (!Arg) which was usually 1. This change affects iASL constant folding 
for 
this operator also.

Fixed a problem in AcpiUtInitializeBuffer where an existing buffer was 
not 
initialized properly -- Now zero the entire buffer in this case where the 
buffer already exists.

Changed the interface to AcpiOsSleep from (UINT32 Seconds, UINT32 
Milliseconds) to simply (ACPI_INTEGER Milliseconds). This simplifies all 
related code considerably. This will require changes/updates to all OS 
interface layers (OSLs.)

Implemented a new external interface, AcpiInstallExceptionHandler, to 
allow 
a system exception handler to be installed. This handler is invoked upon 
any 
run-time exception that occurs during control method execution.

Added support for the DSDT in AcpiTbFindTable. This allows the 
DataTableRegion() operator to access the local copy of the DSDT.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below. These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code. The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size. 
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  77.8K Code,  11.4K Data,   89.2K Total
    Debug Version:     164.2K Code,  68.2K Data,  232.4K Total
  Current Release:
    Non-Debug Version:  77.9K Code,  11.4K Data,   89.3K Total
    Debug Version:     164.5K Code,  68.3K Data,  232.8K Total


2) iASL Compiler/Disassembler:

Fixed a problem with constant folding and the LNot operator. LNot was 
returning 1 in the TRUE case, not Ones as per the ACPI specification. 
This 
could result in the generation of an incorrect folded/reduced constant.

End-Of-File is now allowed within a "//"-style comment.  A parse error no 
longer occurs if such a comment is at the very end of the input ASL 
source 
file.

Implemented the "-r" option to override the Revision in the table header. 
The initial use of this option will be to simplify the evaluation of the 
AML 
interpreter by allowing a single ASL source module to be compiled for 
either 
32-bit or 64-bit integers.


----------------------------------------
27 August 2004.  Summary of changes for version 20040827:

1) ACPI CA Core Subsystem:

- Implemented support for implicit object conversion in the non-numeric 
logical operators (LEqual, LGreater, LGreaterEqual, LLess, LLessEqual, 
and 
LNotEqual.)  Any combination of Integers/Strings/Buffers may now be used; 
the second operand is implicitly converted on the fly to match the type 
of 
the first operand.  For example:

    LEqual (Source1, Source2)

Source1 and Source2 must each evaluate to an integer, a string, or a 
buffer. 
The data type of Source1 dictates the required type of Source2. Source2 
is 
implicitly converted if necessary to match the type of Source1.

- Updated and corrected the behavior of the string conversion support.  
The 
rules concerning conversion of buffers to strings (according to the ACPI 
specification) are as follows:

ToDecimalString - explicit byte-wise conversion of buffer to string of 
decimal values (0-255) separated by commas. ToHexString - explicit byte-
wise 
conversion of buffer to string of hex values (0-FF) separated by commas. 
ToString - explicit byte-wise conversion of buffer to string.  Byte-by-
byte 
copy with no transform except NULL terminated. Any other implicit buffer-
to-
string conversion - byte-wise conversion of buffer to string of hex 
values 
(0-FF) separated by spaces.

- Fixed typo in definition of AcpiGbl_EnableInterpreterSlack.

- Fixed a problem in AcpiNsGetPathnameLength where the returned length 
was 
one byte too short in the case of a node in the root scope.  This could 
cause a fault during debug output.

- Code and Data Size: Current and previous core subsystem library sizes 
are 
shown below.  These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code.  The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size.  
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  77.9K Code,  11.5K Data,   89.4K Total
    Debug Version:     164.1K Code,  68.3K Data,  232.4K Total
  Current Release:
    Non-Debug Version:  77.8K Code,  11.4K Data,   89.2K Total
    Debug Version:     164.2K Code,  68.2K Data,  232.4K Total


2) iASL Compiler/Disassembler:

- Fixed a Linux generation error.


----------------------------------------
16 August 2004.  Summary of changes for version 20040816:

1) ACPI CA Core Subsystem:

Designed and implemented support within the AML interpreter for the so-
called "implicit return".  This support returns the result of the last 
ASL 
operation within a control method, in the absence of an explicit Return() 
operator.  A few machines depend on this behavior, even though it is not 
explicitly supported by the ASL language.  It is optional support that 
can 
be enabled at runtime via the AcpiGbl_EnableInterpreterSlack flag.

Removed support for the PCI_Config address space from the internal low 
level 
hardware interfaces (AcpiHwLowLevelRead and AcpiHwLowLevelWrite).  This 
support was not used internally, and would not work correctly anyway 
because 
the PCI bus number and segment number were not supported.  There are 
separate interfaces for PCI configuration space access because of the 
unique 
interface.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below.  These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code.  The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size.  
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  78.0K Code,  11.5K Data,   89.5K Total
    Debug Version:     164.1K Code,  68.2K Data,  232.3K Total
  Current Release:
    Non-Debug Version:  77.9K Code,  11.5K Data,   89.4K Total
    Debug Version:     164.1K Code,  68.3K Data,  232.4K Total


2) iASL Compiler/Disassembler:

Fixed a problem where constants in ASL expressions at the root level (not 
within a control method) could be inadvertently truncated during code 
generation.  This problem was introduced in the 20040715 release.


----------------------------------------
15 July 2004.  Summary of changes for version 20040715:

1) ACPI CA Core Subsystem:

Restructured the internal HW GPE interfaces to pass/track the current 
state 
of interrupts (enabled/disabled) in order to avoid possible deadlock and 
increase flexibility of the interfaces.

Implemented a "lexicographical compare" for String and Buffer objects 
within 
the logical operators -- LGreater, LLess, LGreaterEqual, and LLessEqual -
- 
as per further clarification to the ACPI specification.  Behavior is 
similar 
to C library "strcmp".

Completed a major reduction in CPU stack use for the AcpiGetFirmwareTable 
external function.  In the 32-bit non-debug case, the stack use has been 
reduced from 168 bytes to 32 bytes.

Deployed a new run-time configuration flag, 
AcpiGbl_EnableInterpreterSlack, 
whose purpose is to allow the AML interpreter to forgive certain bad AML 
constructs.  Default setting is FALSE.

Implemented the first use of AcpiGbl_EnableInterpreterSlack in the Field 
IO 
support code.  If enabled, it allows field access to go beyond the end of 
a 
region definition if the field is within the region length rounded up to 
the 
next access width boundary (a common coding error.)

Renamed OSD_HANDLER to ACPI_OSD_HANDLER, and OSD_EXECUTION_CALLBACK to 
ACPI_OSD_EXEC_CALLBACK for consistency with other ACPI symbols.  Also, 
these 
symbols are lowercased by the latest version of the AcpiSrc tool.

The prototypes for the PCI interfaces in acpiosxf.h have been updated to 
rename "Register" to simply "Reg" to prevent certain compilers from 
complaining.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below.  These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code.  The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size.  
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  77.8K Code,  11.5K Data,   89.3K Total
    Debug Version:     163.8K Code,  68.2K Data,  232.0K Total
  Current Release:
    Non-Debug Version:  78.0K Code,  11.5K Data,   89.5K Total
    Debug Version:     164.1K Code,  68.2K Data,  232.3K Total


2) iASL Compiler/Disassembler:

Implemented full support for Package objects within the Case() operator.  
Note: The Break() operator is currently not supported within Case blocks 
(TermLists) as there is some question about backward compatibility with 
ACPI 
1.0 interpreters.


Fixed a problem where complex terms were not supported properly within 
the 
Switch() operator.

Eliminated extraneous warning for compiler-emitted reserved names of the 
form "_T_x".  (Used in Switch/Case operators.)

Eliminated optimization messages for "_T_x" objects and small constants 
within the DefinitionBlock operator.


----------------------------------------
15 June 2004.  Summary of changes for version 20040615:

1) ACPI CA Core Subsystem:

Implemented support for Buffer and String objects (as per ACPI 2.0) for 
the 
following ASL operators:  LEqual, LGreater, LLess, LGreaterEqual, and 
LLessEqual.

All directory names in the entire source package are lower case, as they 
were in earlier releases.

Implemented "Disassemble" command in the AML debugger that will 
disassemble 
a single control method.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below.  These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code.  The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size.  
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  77.7K Code,  11.5K Data,   89.2K Total
    Debug Version:     163.3K Code,  67.2K Data,  230.5K Total

  Current Release:
    Non-Debug Version:  77.8K Code,  11.5K Data,   89.3K Total
    Debug Version:     163.8K Code,  68.2K Data,  232.0K Total


2) iASL Compiler/Disassembler:

Implemented support for Buffer and String objects (as per ACPI 2.0) for 
the 
following ASL operators:  LEqual, LGreater, LLess, LGreaterEqual, and 
LLessEqual.

All directory names in the entire source package are lower case, as they 
were in earlier releases.

Fixed a fault when using the -g or -d<nofilename> options if the FADT was 
not found.

Fixed an issue with the Windows version of the compiler where later 
versions 
of Windows place the FADT in the registry under the name "FADT" and not 
"FACP" as earlier versions did.  This applies when using the -g or -
d<nofilename> options.  The compiler now looks for both strings as 
necessary.

Fixed a problem with compiler namepath optimization where a namepath 
within 
the Scope() operator could not be optimized if the namepath was a subpath 
of 
the current scope path.

----------------------------------------
27 May 2004.  Summary of changes for version 20040527:

1) ACPI CA Core Subsystem:

Completed a new design and implementation for EBDA (Extended BIOS Data 
Area) 
support in the RSDP scan code.  The original code improperly scanned for 
the 
EBDA by simply scanning from memory location 0 to 0x400.  The correct 
method 
is to first obtain the EBDA pointer from within the BIOS data area, then 
scan 1K of memory starting at the EBDA pointer.  There appear to be few 
if 
any machines that place the RSDP in the EBDA, however.

Integrated a fix for a possible fault during evaluation of BufferField 
arguments.  Obsolete code that was causing the problem was removed.

Found and fixed a problem in the Field Support Code where data could be 
corrupted on a bit field read that starts on an aligned boundary but does 
not end on an aligned boundary.  Merged the read/write "datum length" 
calculation code into a common procedure.

Rolled in a couple of changes to the FreeBSD-specific header.


Code and Data Size: Current and previous core subsystem library sizes are 
shown below.  These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code.  The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size.  
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  77.6K Code,  11.5K Data,   89.1K Total
    Debug Version:     163.2K Code,  67.2K Data,  230.4K Total
  Current Release:
    Non-Debug Version:  77.7K Code,  11.5K Data,   89.2K Total
    Debug Version:     163.3K Code,  67.2K Data,  230.5K Total


2) iASL Compiler/Disassembler:

Fixed a generation warning produced by some overly-verbose compilers for 
a 
64-bit constant.

----------------------------------------
14 May 2004.  Summary of changes for version 20040514:

1) ACPI CA Core Subsystem:

Fixed a problem where hardware GPE enable bits sometimes not set properly 
during and after GPE method execution.  Result of 04/27 changes.

Removed extra "clear all GPEs" when sleeping/waking.

Removed AcpiHwEnableGpe and AcpiHwDisableGpe, replaced by the single 
AcpiHwWriteGpeEnableReg. Changed a couple of calls to the functions above 
to 
the new AcpiEv* calls as appropriate.

ACPI_OS_NAME was removed from the OS-specific headers.  The default name 
is 
now "Microsoft Windows NT" for maximum compatibility.  However this can 
be 
changed by modifying the acconfig.h file.

Allow a single invocation of AcpiInstallNotifyHandler for a handler that 
traps both types of notifies (System, Device).  Use ACPI_ALL_NOTIFY flag. 

Run _INI methods on ThermalZone objects.  This is against the ACPI 
specification, but there is apparently ASL code in the field that has 
these 
_INI methods, and apparently "other" AML interpreters execute them.

Performed a full 16/32/64 bit lint that resulted in some small changes.

Added a sleep simulation command to the AML debugger to test sleep code. 

Code and Data Size: Current and previous core subsystem library sizes are 
shown below.  These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code.  The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size.  
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  77.6K Code,  11.5K Data,   89.1K Total
    Debug Version:     162.9K Code,  67.0K Data,  229.9K Total
  Current Release:
    Non-Debug Version:  77.6K Code,  11.5K Data,   89.1K Total
    Debug Version:     163.2K Code,  67.2K Data,  230.4K Total

----------------------------------------
27 April 2004.  Summary of changes for version 20040427:

1) ACPI CA Core Subsystem:

Completed a major overhaul of the GPE handling within ACPI CA.  There are 
now three types of GPEs:  wake-only, runtime-only, and combination 
wake/run.  
The only GPEs allowed to be combination wake/run are for button-style 
devices such as a control-method power button, control-method sleep 
button, 
or a notebook lid switch.  GPEs that have an _Lxx or _Exx method and are 
not 
referenced by any _PRW methods are marked for "runtime" and hardware 
enabled.  Any GPE that is referenced by a _PRW method is marked for 
"wake" 
(and disabled at runtime).  However, at sleep time, only those GPEs that 
have been specifically enabled for wake via the AcpiEnableGpe interface 
will 
actually be hardware enabled.

A new external interface has been added, AcpiSetGpeType(), that is meant 
to 
be used by device drivers to force a GPE to a particular type.  It will 
be 
especially useful for the drivers for the button devices mentioned above.

Completed restructuring of the ACPI CA initialization sequence so that 
default operation region handlers are installed before GPEs are 
initialized 
and the _PRW methods are executed.  This will prevent errors when the 
_PRW 
methods attempt to access system memory or I/O space.

GPE enable/disable no longer reads the GPE enable register.  We now keep 
the 
enable info for runtime and wake separate and in the GPE_EVENT_INFO.  We 
thus no longer depend on the hardware to maintain these bits.

Always clear the wake status and fixed/GPE status bits before sleep, even 
for state S5.

Improved the AML debugger output for displaying the GPE blocks and their 
current status.

Added new strings for the _OSI method, of the form "Windows 2001 SPx" 
where 
x = 0,1,2,3,4.

Fixed a problem where the physical address was incorrectly calculated 
when 
the Load() operator was used to directly load from an Operation Region 
(vs. 
loading from a Field object.)  Also added check for minimum table length 
for 
this case.

Fix for multiple mutex acquisition.  Restore original thread SyncLevel on 
mutex release.

Added ACPI_VALID_SXDS flag to the AcpiGetObjectInfo interface for 
consistency with the other fields returned.

Shrunk the ACPI_GPE_EVENT_INFO structure by 40%.  There is one such 
structure for each GPE in the system, so the size of this structure is 
important.

CPU stack requirement reduction:  Cleaned up the method execution and 
object 
evaluation paths so that now a parameter structure is passed, instead of 
copying the various method parameters over and over again.

In evregion.c:  Correctly exit and reenter the interpreter region if and 
only if dispatching an operation region request to a user-installed 
handler.  
Do not exit/reenter when dispatching to a default handler (e.g., default 
system memory or I/O handlers)


Notes for updating drivers for the new GPE support.  The following 
changes 
must be made to ACPI-related device drivers that are attached to one or 
more 
GPEs: (This information will be added to the ACPI CA Programmer 
Reference.)

1) AcpiInstallGpeHandler no longer automatically enables the GPE, you 
must 
explicitly call AcpiEnableGpe.
2) There is a new interface called AcpiSetGpeType. This should be called 
before enabling the GPE.  Also, this interface will automatically disable 
the GPE if it is currently enabled.
3) AcpiEnableGpe no longer supports a GPE type flag.

Specific drivers that must be changed:
1) EC driver:
    AcpiInstallGpeHandler (NULL, GpeNum, ACPI_GPE_EDGE_TRIGGERED, 
AeGpeHandler, NULL);
    AcpiSetGpeType (NULL, GpeNum, ACPI_GPE_TYPE_RUNTIME);
    AcpiEnableGpe (NULL, GpeNum, ACPI_NOT_ISR);

2) Button Drivers (Power, Lid, Sleep):
Run _PRW method under parent device
If _PRW exists: /* This is a control-method button */
    Extract GPE number and possibly GpeDevice
    AcpiSetGpeType (GpeDevice, GpeNum, ACPI_GPE_TYPE_WAKE_RUN);
    AcpiEnableGpe (GpeDevice, GpeNum, ACPI_NOT_ISR);

For all other devices that have _PRWs, we automatically set the GPE type 
to 
ACPI_GPE_TYPE_WAKE, but the GPE is NOT automatically (wake) enabled.  
This 
must be done on a selective basis, usually requiring some kind of user 
app 
to allow the user to pick the wake devices.


Code and Data Size: Current and previous core subsystem library sizes are 
shown below.  These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code.  The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size.  
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  77.0K Code,  11.4K Data,   88.4K Total
    Debug Version:     161.0K Code,  66.3K Data,  227.3K Total
  Current Release:

    Non-Debug Version:  77.6K Code,  11.5K Data,   89.1K Total
    Debug Version:     162.9K Code,  67.0K Data,  229.9K Total



----------------------------------------
02 April 2004.  Summary of changes for version 20040402:

1) ACPI CA Core Subsystem:

Fixed an interpreter problem where an indirect store through an ArgX 
parameter was incorrectly applying the "implicit conversion rules" during 
the store.  From the ACPI specification: "If the target is a method local 
or 
argument (LocalX or ArgX), no conversion is performed and the result is 
stored directly to the target".  The new behavior is to disable implicit 
conversion during ALL stores to an ArgX.

Changed the behavior of the _PRW method scan to ignore any and all errors 
returned by a given _PRW.  This prevents the scan from aborting from the 
failure of any single _PRW.

Moved the runtime configuration parameters from the global init procedure 
to 
static variables in acglobal.h.  This will allow the host to override the 
default values easily.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below.  These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code.  The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size.  
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  76.9K Code,  11.4K Data,   88.3K Total
    Debug Version:     160.8K Code,  66.1K Data,  226.9K Total
  Current Release:
    Non-Debug Version:  77.0K Code,  11.4K Data,   88.4K Total
    Debug Version:     161.0K Code,  66.3K Data,  227.3K Total


2) iASL Compiler/Disassembler:

iASL now fully disassembles SSDTs.  However, External() statements are 
not 
generated automatically for unresolved symbols at this time.  This is a 
planned feature for future implementation.

Fixed a scoping problem in the disassembler that occurs when the type of 
the 
target of a Scope() operator is overridden.  This problem caused an 
incorrectly nested internal namespace to be constructed.

Any warnings or errors that are emitted during disassembly are now 
commented 
out automatically so that the resulting file can be recompiled without 
any 
hand editing.

----------------------------------------
26 March 2004.  Summary of changes for version 20040326:

1) ACPI CA Core Subsystem:

Implemented support for "wake" GPEs via interaction between GPEs and the 
_PRW methods.  Every GPE that is pointed to by one or more _PRWs is 
identified as a WAKE GPE and by default will no longer be enabled at 
runtime.  Previously, we were blindly enabling all GPEs with a 
corresponding 
_Lxx or _Exx method - but most of these turn out to be WAKE GPEs anyway.  
We 
believe this has been the cause of thousands of "spurious" GPEs on some 
systems.

This new GPE behavior is can be reverted to the original behavior (enable 
ALL GPEs at runtime) via a runtime flag.

Fixed a problem where aliased control methods could not access objects 
properly.  The proper scope within the namespace was not initialized 
(transferred to the target of the aliased method) before executing the 
target method.

Fixed a potential race condition on internal object deletion on the 
return 
object in AcpiEvaluateObject. 

Integrated a fix for resource descriptors where both _MEM and _MTP were 
being extracted instead of just _MEM.  (i.e. bitmask was incorrectly too 
wide, 0x0F instead of 0x03.)

Added a special case for ACPI_ROOT_OBJECT in AcpiUtGetNodeName, 
preventing 
a 
fault in some cases.

Updated Notify() values for debug statements in evmisc.c

Return proper status from AcpiUtMutexInitialize, not just simply AE_OK.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below.  These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code.  The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size.  
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:

    Non-Debug Version:  76.5K Code,  11.3K Data,   87.8K Total
    Debug Version:     160.3K Code,  66.0K Data,  226.3K Total
  Current Release:
    Non-Debug Version:  76.9K Code,  11.4K Data,   88.3K Total
    Debug Version:     160.8K Code,  66.1K Data,  226.9K Total

----------------------------------------
11 March 2004.  Summary of changes for version 20040311:

1) ACPI CA Core Subsystem:

Fixed a problem where errors occurring during the parse phase of control 
method execution did not abort cleanly.  For example, objects created and 
installed in the namespace were not deleted.  This caused all subsequent 
invocations of the method to return the AE_ALREADY_EXISTS exception.

Implemented a mechanism to force a control method to "Serialized" 
execution 
if the method attempts to create namespace objects. (The root of the 
AE_ALREADY_EXISTS problem.)

Implemented support for the predefined _OSI "internal" control method.  
Initial supported strings are "Linux", "Windows 2000", "Windows 2001", 
and 
"Windows 2001.1", and can be easily upgraded for new strings as 
necessary.  
This feature will allow "other" operating systems to execute the fully 
tested, "Windows" code path through the ASL code

Global Lock Support:  Now allows multiple acquires and releases with any 
internal thread.  Removed concept of "owning thread" for this special 
mutex.

Fixed two functions that were inappropriately declaring large objects on 
the 
CPU stack:  PsParseLoop, NsEvaluateRelative.  Reduces the stack usage 
during 
method execution considerably.

Fixed a problem in the ACPI 2.0 FACS descriptor (actbl2.h) where the 
S4Bios_f field was incorrectly defined as UINT32 instead of UINT32_BIT.

Fixed a problem where AcpiEvGpeDetect would fault if there were no GPEs 
defined on the machine.

Implemented two runtime options:  One to force all control method 
execution 
to "Serialized" to mimic Windows behavior, another to disable _OSI 
support 
if it causes problems on a given machine.

Code and Data Size: Current and previous core subsystem library sizes are 
shown below.  These are the code and data sizes for the acpica.lib 
produced 
by the Microsoft Visual C++ 6.0 compiler, and these values do not include 
any ACPI driver or OSPM code.  The debug version of the code includes the 
debug output trace mechanism and has a much larger code and data size.  
Note 
that these values will vary depending on the efficiency of the compiler 
and 
the compiler options used during generation.

  Previous Release:
    Non-Debug Version:  74.8K Code,  10.1K Data,   84.9K Total
    Debug Version:     158.7K Code,  65.1K Data,  223.8K Total
  Current Release:
    Non-Debug Version:  76.5K Code,  11.3K Data,   87.8K Total
    Debug Version:     160.3K Code,  66.0K Data,  226.3K Total

2) iASL Compiler/Disassembler:

Fixed an array size problem for FreeBSD that would cause the compiler to 
fault.

----------------------------------------
20 February 2004.  Summary of changes for version 20040220:


1) ACPI CA Core Subsystem:

Implemented execution of _SxD methods for Device objects in the 
GetObjectInfo interface.

Fixed calls to _SST method to pass the correct arguments.

Added a call to _SST on wake to restore to "working" state.

Check for End-Of-Buffer failure case in the WalkResources interface.

Integrated fix for 64-bit alignment issue in acglobal.h by moving two 
structures to the beginning of the file.

After wake, clear GPE status register(s) before enabling GPEs.

After wake, clear/enable power button.  (Perhaps we should clear/enable 
all 
fixed events upon wake.)

Fixed a couple of possible memory leaks in the Namespace manager.

Integrated latest acnetbsd.h file.

----------------------------------------
11 February 2004.  Summary of changes for version 20040211:


1) ACPI CA Core Subsystem:

Completed investigation and implementation of the call-by-reference 
mechanism for control method arguments.

Fixed a problem where a store of an object into an indexed package could 
fail if the store occurs within a different method than the method that 
created the package.

Fixed a problem where the ToDecimal operator could return incorrect 
results.

Fixed a problem where the CopyObject operator could fail on some of the 
more 
obscure objects (e.g., Reference objects.)

Improved the output of the Debug object to display buffer, package, and 
index objects.

Fixed a problem where constructs of the form "RefOf (ArgX)" did not 
return 
the expected result.

Added permanent ACPI_REPORT_ERROR macros for all instances of the 
ACPI_AML_INTERNAL exception.

Integrated latest version of acfreebsd.h

----------------------------------------
16 January 2004.  Summary of changes for version 20040116:

The purpose of this release is primarily to update the copyright years in 
each module, thus causing a huge number of diffs.  There are a few small 
functional changes, however.

1) ACPI CA Core Subsystem:

Improved error messages when there is a problem finding one or more of 
the 
required base ACPI tables

Reintroduced the definition of APIC_HEADER in actbl.h

Changed definition of MADT_ADDRESS_OVERRIDE to 64 bits (actbl.h)

Removed extraneous reference to NewObj in dsmthdat.c

2) iASL compiler

Fixed a problem introduced in December that disabled the correct 
disassembly 
of Resource Templates


----------------------------------------
03 December 2003.  Summary of changes for version 20031203:

1) ACPI CA Core Subsystem:

Changed the initialization of Operation Regions during subsystem
init to perform two entire walks of the ACPI namespace; The first
to initialize the regions themselves, the second to execute the
_REG methods.  This fixed some interdependencies across _REG
methods found on some machines.

Fixed a problem where a Store(Local0, Local1) could simply update
the object reference count, and not create a new copy of the
object if the Local1 is uninitialized.

Implemented support for the _SST reserved method during sleep
transitions.

Implemented support to clear the SLP_TYP and SLP_EN bits when
waking up, this is apparently required by some machines.

When sleeping, clear the wake status only if SleepState is not S5.

Fixed a problem in AcpiRsExtendedIrqResource() where an incorrect
pointer arithmetic advanced a string pointer too far.

Fixed a problem in AcpiTbGetTablePtr() where a garbage pointer
could be returned if the requested table has not been loaded.

Within the support for IRQ resources, restructured the handling of
the active and edge/level bits.

Fixed a few problems in AcpiPsxExecute() where memory could be
leaked under certain error conditions.

Improved error messages for the cases where the ACPI mode could
not be entered.

Code and Data Size: Current and previous core subsystem library
sizes are shown below.  These are the code and data sizes for the
acpica.lib produced by the Microsoft Visual C++ 6.0 compiler, and
these values do not include any ACPI driver or OSPM code.  The
debug version of the code includes the debug output trace
mechanism and has a much larger code and data size.  Note that
these values will vary depending on the efficiency of the compiler
and the compiler options used during generation.

  Previous Release (20031029):
    Non-Debug Version:  74.4K Code,  10.1K Data,   84.5K Total
    Debug Version:     158.3K Code,  65.0K Data,  223.3K Total
  Current Release:
    Non-Debug Version:  74.8K Code,  10.1K Data,   84.9K Total
    Debug Version:     158.7K Code,  65.1K Data,  223.8K Total

2) iASL Compiler/Disassembler:

Implemented a fix for the iASL disassembler where a bad index was
generated.  This was most noticeable on 64-bit platforms


----------------------------------------
29 October 2003.  Summary of changes for version 20031029:

1) ACPI CA Core Subsystem:


Fixed a problem where a level-triggered GPE with an associated
_Lxx control method was incorrectly cleared twice.

Fixed a problem with the Field support code where an access can
occur beyond the end-of-region if the field is non-aligned but
extends to the very end of the parent region (resulted in an
AE_AML_REGION_LIMIT exception.)

Fixed a problem with ACPI Fixed Events where an RT Clock handler
would not get invoked on an RTC event.  The RTC event bitmasks for
the PM1 registers were not being initialized properly.

Implemented support for executing _STA and _INI methods for
Processor objects.  Although this is currently not part of the
ACPI specification, there is existing ASL code that depends on the
init-time execution of these methods.

Implemented and deployed a GetDescriptorName function to decode
the various types of internal descriptors.  Guards against null
descriptors during debug output also.

Implemented and deployed a GetNodeName function to extract the 4-
character namespace node name.  This function simplifies the debug
and error output, as well as guarding against null pointers during
output.

Implemented and deployed the ACPI_FORMAT_UINT64 helper macro to
simplify the debug and error output of 64-bit integers.  This
macro replaces the HIDWORD and LODWORD macros for dumping these
integers.

Updated the implementation of the Stall() operator to only call
AcpiOsStall(), and also return an error if the operand is larger
than 255.  This preserves the required behavior of not
relinquishing the processor, as would happen if AcpiOsSleep() was
called for "long stalls".

Constructs of the form "Store(LocalX,LocalX)" where LocalX is not
initialized are now treated as NOOPs.

Cleaned up a handful of warnings during 64-bit generation.

Fixed a reported error where and incorrect GPE number was passed
to the GPE dispatch handler.  This value is only used for error
output, however.  Used this opportunity to clean up and streamline
the GPE dispatch code.

Code and Data Size: Current and previous core subsystem library
sizes are shown below.  These are the code and data sizes for the
acpica.lib produced by the Microsoft Visual C++ 6.0 compiler, and
these values do not include any ACPI driver or OSPM code.  The

debug version of the code includes the debug output trace
mechanism and has a much larger code and data size.  Note that
these values will vary depending on the efficiency of the compiler
and the compiler options used during generation.

  Previous Release (20031002):
    Non-Debug Version:  74.1K Code,   9.7K Data,   83.8K Total
    Debug Version:     157.9K Code,  64.8K Data,  222.7K Total
  Current Release:
    Non-Debug Version:  74.4K Code,  10.1K Data,   84.5K Total
    Debug Version:     158.3K Code,  65.0K Data,  223.3K Total


2) iASL Compiler/Disassembler:

Updated the iASL compiler to return an error if the operand to the
Stall() operator is larger than 255.


----------------------------------------
02 October 2003.  Summary of changes for version 20031002:


1) ACPI CA Core Subsystem:

Fixed a problem with Index Fields where the index was not
incremented for fields that require multiple writes to the
index/data registers (Fields that are wider than the data
register.)

Fixed a problem with all Field objects where a write could go
beyond the end-of-field if the field was larger than the access
granularity and therefore required multiple writes to complete the
request.  An extra write beyond the end of the field could happen
inadvertently.

Fixed a problem with Index Fields where a BUFFER_OVERFLOW error
would incorrectly be returned if the width of the Data Register
was larger than the specified field access width.

Completed fixes for LoadTable() and Unload() and verified their
operation.  Implemented full support for the "DdbHandle" object
throughout the ACPI CA subsystem.

Implemented full support for the MADT and ECDT tables in the ACPI
CA header files.  Even though these tables are not directly
consumed by ACPI CA, the header definitions are useful for ACPI
device drivers.

Integrated resource descriptor fixes posted to the Linux ACPI
list.  This included checks for minimum descriptor length, and
support for trailing NULL strings within descriptors that have
optional string elements.

Code and Data Size: Current and previous core subsystem library
sizes are shown below.  These are the code and data sizes for the
acpica.lib produced by the Microsoft Visual C++ 6.0 compiler, and
these values do not include any ACPI driver or OSPM code.  The
debug version of the code includes the debug output trace
mechanism and has a much larger code and data size.  Note that
these values will vary depending on the efficiency of the compiler
and the compiler options used during generation.

  Previous Release (20030918):
    Non-Debug Version:  73.9K Code,   9.7K Data,   83.6K Total
    Debug Version:     157.3K Code,  64.5K Data,  221.8K Total
  Current Release:
    Non-Debug Version:  74.1K Code,   9.7K Data,   83.8K Total
    Debug Version:     157.9K Code,  64.8K Data,  222.7K Total


2) iASL Compiler:

Implemented detection of non-ASCII characters within the input
source ASL file.  This catches attempts to compile binary (AML)
files early in the compile, with an informative error message.

Fixed a problem where the disassembler would fault if the output
filename could not be generated or if the output file could not be
opened.

----------------------------------------
18 September 2003.  Summary of changes for version 20030918:


1) ACPI CA Core Subsystem:

Found and fixed a longstanding problem with the late execution of
the various deferred AML opcodes (such as Operation Regions,
Buffer Fields, Buffers, and Packages).  If the name string
specified for the name of the new object placed the object in a
scope other than the current scope, the initialization/execution
of the opcode failed.  The solution to this problem was to
implement a mechanism where the late execution of such opcodes
does not attempt to lookup/create the name a second time in an
incorrect scope.  This fixes the "region size computed
incorrectly" problem.

Fixed a call to AcpiHwRegisterWrite in hwregs.c that was causing a
Global Lock AE_BAD_PARAMETER error.

Fixed several 64-bit issues with prototypes, casting and data
types.

Removed duplicate prototype from acdisasm.h

Fixed an issue involving EC Operation Region Detach (Shaohua Li)

Code and Data Size: Current and previous core subsystem library
sizes are shown below.  These are the code and data sizes for the
acpica.lib produced by the Microsoft Visual C++ 6.0 compiler, and
these values do not include any ACPI driver or OSPM code.  The
debug version of the code includes the debug output trace
mechanism and has a much larger code and data size.  Note that
these values will vary depending on the efficiency of the compiler
and the compiler options used during generation.

  Previous Release:

    Non-Debug Version:  73.7K Code,   9.7K Data,   83.4K Total
    Debug Version:     156.9K Code,  64.2K Data,  221.1K Total
  Current Release:
    Non-Debug Version:  73.9K Code,   9.7K Data,   83.6K Total
    Debug Version:     157.3K Code,  64.5K Data,  221.8K Total


2) Linux:

Fixed the AcpiOsSleep implementation in osunixxf.c to pass the
correct sleep time in seconds.

----------------------------------------
14 July 2003.  Summary of changes for version 20030619:

1) ACPI CA Core Subsystem:

Parse SSDTs in order discovered, as opposed to reverse order
(Hrvoje Habjanic)

Fixes from FreeBSD and NetBSD. (Frank van der Linden, Thomas
Klausner,
   Nate Lawson)


2) Linux:

Dynamically allocate SDT list (suggested by Andi Kleen)

proc function return value cleanups (Andi Kleen)

Correctly handle NMI watchdog during long stalls (Andrew Morton)

Make it so acpismp=force works (reported by Andrew Morton)


----------------------------------------
19 June 2003.  Summary of changes for version 20030619:

1) ACPI CA Core Subsystem:

Fix To/FromBCD, eliminating the need for an arch-specific #define.

Do not acquire a semaphore in the S5 shutdown path.

Fix ex_digits_needed for 0. (Takayoshi Kochi)

Fix sleep/stall code reversal. (Andi Kleen)

Revert a change having to do with control method calling
semantics.

2) Linux:

acpiphp update (Takayoshi Kochi)

Export acpi_disabled for sonypi (Stelian Pop)

Mention acpismp=force in config help

Re-add acpitable.c and acpismp=force. This improves backwards

compatibility and also cleans up the code to a significant degree.

Add ASUS Value-add driver (Karol Kozimor and Julien Lerouge)

----------------------------------------
22 May 2003.  Summary of changes for version 20030522:

1) ACPI CA Core Subsystem:

Found and fixed a reported problem where an AE_NOT_FOUND error
occurred occasionally during _BST evaluation.  This turned out to
be an Owner ID allocation issue where a called method did not get
a new ID assigned to it.  Eventually, (after 64k calls), the Owner
ID UINT16 would wraparound so that the ID would be the same as the
caller's and the called method would delete the caller's
namespace.

Implemented extended error reporting for control methods that are
aborted due to a run-time exception.  Output includes the exact
AML instruction that caused the method abort, a dump of the method
locals and arguments at the time of the abort, and a trace of all
nested control method calls.

Modified the interpreter to allow the creation of buffers of zero
length from the AML code. Implemented new code to ensure that no
attempt is made to actually allocate a memory buffer (of length
zero) - instead, a simple buffer object with a NULL buffer pointer
and length zero is created.  A warning is no longer issued when
the AML attempts to create a zero-length buffer.

Implemented a workaround for the "leading asterisk issue" in
_HIDs, _UIDs, and _CIDs in the AML interpreter.  One leading
asterisk is automatically removed if present in any HID, UID, or
CID strings.  The iASL compiler will still flag this asterisk as
an error, however.

Implemented full support for _CID methods that return a package of
multiple CIDs (Compatible IDs).  The AcpiGetObjectInfo() interface
now additionally returns a device _CID list if present.  This
required a change to the external interface in order to pass an
ACPI_BUFFER object as a parameter since the _CID list is of
variable length.

Fixed a problem with the new AE_SAME_HANDLER exception where
handler initialization code did not know about this exception.

Code and Data Size: Current and previous core subsystem library
sizes are shown below.  These are the code and data sizes for the
acpica.lib produced by the Microsoft Visual C++ 6.0 compiler, and
these values do not include any ACPI driver or OSPM code.  The
debug version of the code includes the debug output trace
mechanism and has a much larger code and data size.  Note that
these values will vary depending on the efficiency of the compiler
and the compiler options used during generation.

  Previous Release (20030509):
    Non-Debug Version:  73.4K Code,   9.7K Data,   83.1K Total
    Debug Version:     156.1K Code,  63.9K Data,  220.0K Total
  Current Release:
    Non-Debug Version:  73.7K Code,   9.7K Data,   83.4K Total
    Debug Version:     156.9K Code,  64.2K Data,  221.1K Total


2) Linux:

Fixed a bug in which we would reinitialize the ACPI interrupt
after it was already working, thus disabling all ACPI and the IRQs
for any other device sharing the interrupt. (Thanks to Stian
Jordet)

Toshiba driver update (John Belmonte)

Return only 0 or 1 for our interrupt handler status (Andrew
Morton)


3) iASL Compiler:

Fixed a reported problem where multiple (nested) ElseIf()
statements were not handled correctly by the compiler, resulting
in incorrect warnings and incorrect AML code.  This was a problem
in both the ASL parser and the code generator.


4) Documentation:

Added changes to existing interfaces, new exception codes, and new
text concerning reference count object management versus garbage
collection.

----------------------------------------
09 May 2003.  Summary of changes for version 20030509.


1) ACPI CA Core Subsystem:

Changed the subsystem initialization sequence to hold off
installation of address space handlers until the hardware has been
initialized and the system has entered ACPI mode.  This is because
the installation of space handlers can cause _REG methods to be
run.  Previously, the _REG methods could potentially be run before
ACPI mode was enabled.

Fixed some memory leak issues related to address space handler and
notify handler installation.  There were some problems with the
reference count mechanism caused by the fact that the handler
objects are shared across several namespace objects.

Fixed a reported problem where reference counts within the
namespace were not properly updated when named objects created by
method execution were deleted.

Fixed a reported problem where multiple SSDTs caused a deletion
issue during subsystem termination.  Restructured the table data
structures to simplify the linked lists and the related code.

Fixed a problem where the table ID associated with secondary
tables (SSDTs) was not being propagated into the namespace objects
created by those tables.  This would only present a problem for
tables that are unloaded at run-time, however.

Updated AcpiOsReadable and AcpiOsWritable to use the ACPI_SIZE
type as the length parameter (instead of UINT32).

Solved a long-standing problem where an ALREADY_EXISTS error
appears on various systems.  This problem could happen when there
are multiple PCI_Config operation regions under a single PCI root
bus.  This doesn't happen very frequently, but there are some
systems that do this in the ASL.

Fixed a reported problem where the internal DeleteNode function
was incorrectly handling the case where a namespace node was the
first in the parent's child list, and had additional peers (not
the only child, but first in the list of children.)

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a much larger code and data size.  Note that these values will
vary depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  73.7K Code,   9.5K Data,   83.2K Total
    Debug Version:     156.1K Code,  63.6K Data,  219.7K Total
  Current Release:
    Non-Debug Version:  73.4K Code,   9.7K Data,   83.1K Total
    Debug Version:     156.1K Code,  63.9K Data,  220.0K Total


2) Linux:

Allow ":" in OS override string (Ducrot Bruno)

Kobject fix (Greg KH)


3 iASL Compiler/Disassembler:

Fixed a problem in the generation of the C source code files (AML
is emitted in C source statements for BIOS inclusion) where the
Ascii dump that appears within a C comment at the end of each line
could cause a compile time error if the AML sequence happens to
have an open comment or close comment sequence embedded.


----------------------------------------
24 April 2003.  Summary of changes for version 20030424.


1) ACPI CA Core Subsystem:

Support for big-endian systems has been implemented.  Most of the
support has been invisibly added behind big-endian versions of the
ACPI_MOVE_* macros.

Fixed a problem in AcpiHwDisableGpeBlock() and
AcpiHwClearGpeBlock() where an incorrect offset was passed to the
low level hardware write routine.  The offset parameter was
actually eliminated from the low level read/write routines because
they had become obsolete.

Fixed a problem where a handler object was deleted twice during
the removal of a fixed event handler.


2) Linux:

A fix for SMP systems with link devices was contributed by

Compaq's Dan Zink.

(2.5) Return whether we handled the interrupt in our IRQ handler.
(Linux ISRs no longer return void, so we can propagate the handler
return value from the ACPI CA core back to the OS.)



3) Documentation:

The ACPI CA Programmer Reference has been updated to reflect new
interfaces and changes to existing interfaces.

----------------------------------------
28 March 2003.  Summary of changes for version 20030328.

1) ACPI CA Core Subsystem:

The GPE Block Device support has been completed.  New interfaces
are AcpiInstallGpeBlock and AcpiRemoveGpeBlock.  The Event
interfaces (enable, disable, clear, getstatus) have been split
into separate interfaces for Fixed Events and General Purpose
Events (GPEs) in order to support GPE Block Devices properly.

Fixed a problem where the error message "Failed to acquire
semaphore" would appear during operations on the embedded
controller (EC).

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a much larger code and data size.  Note that these values will
vary depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  72.3K Code,   9.5K Data,   81.8K Total
    Debug Version:     154.0K Code,  63.4K Data,  217.4K Total
  Current Release:
    Non-Debug Version:  73.7K Code,   9.5K Data,   83.2K Total
    Debug Version:     156.1K Code,  63.6K Data,  219.7K Total


----------------------------------------
28 February 2003.  Summary of changes for version 20030228.


1) ACPI CA Core Subsystem:

The GPE handling and dispatch code has been completely overhauled
in preparation for support of GPE Block Devices (ID ACPI0006).
This affects internal data structures and code only; there should
be no differences visible externally.  One new file has been
added, evgpeblk.c

The FADT fields GPE0_BLK_LEN and GPE1_BLK_LEN are now the only
fields that are used to determine the GPE block lengths.  The
REGISTER_BIT_WIDTH field of the X_GPEx_BLK extended address
structures are ignored.  This is per the ACPI specification but it
isn't very clear.  The full 256 Block 0/1 GPEs are now supported
(the use of REGISTER_BIT_WIDTH limited the number of GPEs to 128).

In the SCI interrupt handler, removed the read of the PM1_CONTROL
register to look at the SCI_EN bit.  On some machines, this read
causes an SMI event and greatly slows down SCI events.  (This may
in fact be the cause of slow battery status response on some
systems.)

Fixed a problem where a store of a NULL string to a package object
could cause the premature deletion of the object.  This was seen
during execution of the battery _BIF method on some systems,
resulting in no battery data being returned.

Added AcpiWalkResources interface to simplify parsing of resource
lists.

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a much larger code and data size.  Note that these values will
vary depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  72.0K Code,   9.5K Data,   81.5K Total
    Debug Version:     153.0K Code,  62.9K Data,  215.9K Total
  Current Release:
    Non-Debug Version:  72.3K Code,   9.5K Data,   81.8K Total
    Debug Version:     154.0K Code,  63.4K Data,  217.4K Total


2) Linux

S3 fixes (Ole Rohne)

Update ACPI PHP driver with to use new acpi_walk_resource API
(Bjorn Helgaas)

Add S4BIOS support (Pavel Machek)

Map in entire table before performing checksum (John Stultz)

Expand the mem= cmdline to allow the specification of reserved and
ACPI DATA blocks (Pavel Machek)

Never use ACPI on VISWS

Fix derive_pci_id (Ducrot Bruno, Alvaro Lopez)

Revert a change that allowed P_BLK lengths to be 4 or 5. This is
causing us to think that some systems support C2 when they really
don't.

Do not count processor objects for non-present CPUs (Thanks to
Dominik Brodowski)


3) iASL Compiler:

Fixed a problem where ASL include files could not be found and
opened.

Added support for the _PDC reserved name.


----------------------------------------
22 January 2003.  Summary of changes for version 20030122.


1) ACPI CA Core Subsystem:

Added a check for constructs of the form:  Store (Local0, Local0)
where Local0 is not initialized.  Apparently, some BIOS
programmers believe that this is a NOOP.  Since this store doesn't
do anything anyway, the new prototype behavior will ignore this
error.  This is a case where we can relax the strict checking in
the interpreter in the name of compatibility.


2) Linux

The AcpiSrc Source Conversion Utility has been released with the
Linux package for the first time.  This is the utility that is
used to convert the ACPI CA base source code to the Linux version.

(Both) Handle P_BLK lengths shorter than 6 more gracefully

(Both) Move more headers to include/acpi, and delete an unused
header.

(Both) Move drivers/acpi/include directory to include/acpi

(Both) Boot functions don't use cmdline, so don't pass it around

(Both) Remove include of unused header (Adrian Bunk)

(Both) acpiphp.h includes both linux/acpi.h and acpi_bus.h. Since
the
former now also includes the latter, acpiphp.h only needs the one,
now.

(2.5) Make it possible to select method of bios restoring after S3
resume. [=> no more ugly ifdefs] (Pavel Machek)

(2.5) Make proc write interfaces work (Pavel Machek)

(2.5) Properly init/clean up in cpufreq/acpi (Dominik Brodowski)

(2.5) Break out ACPI Perf code into its own module, under cpufreq
(Dominik Brodowski)

(2.4) S4BIOS support (Ducrot Bruno)

(2.4) Fix acpiphp_glue.c for latest ACPI struct changes (Sergio
Visinoni)


3) iASL Compiler:

Added support to disassemble SSDT and PSDTs.

Implemented support to obtain SSDTs from the Windows registry if
available.


----------------------------------------
09 January 2003.  Summary of changes for version 20030109.

1) ACPI CA Core Subsystem:

Changed the behavior of the internal Buffer-to-String conversion
function.  The current ACPI specification states that the contents
of the buffer are "converted to a string of two-character
hexadecimal numbers, each separated by a space".  Unfortunately,
this definition is not backwards compatible with existing ACPI 1.0
implementations (although the behavior was not defined in the ACPI
1.0 specification).  The new behavior simply copies data from the
buffer to the string until a null character is found or the end of
the buffer is reached.  The new String object is always null
terminated.  This problem was seen during the generation of _BIF
battery data where incorrect strings were returned for battery
type, etc.  This will also require an errata to the ACPI
specification.

Renamed all instances of NATIVE_UINT and NATIVE_INT to
ACPI_NATIVE_UINT and ACPI_NATIVE_INT, respectively.

Copyright in all module headers (both Linux and non-Linux) has be
updated to 2003.

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a much larger code and data size.  Note that these values will
vary depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  72.0K Code,   9.5K Data,   81.5K Total
    Debug Version:     153.0K Code,  62.9K Data,  215.9K Total
  Current Release:
    Non-Debug Version:  72.0K Code,   9.5K Data,   81.5K Total
    Debug Version:     153.0K Code,  62.9K Data,  215.9K Total


2) Linux

Fixed an oops on module insertion/removal (Matthew Tippett)

(2.4) Fix to handle dynamic size of mp_irqs (Joerg Prante)

(2.5) Replace pr_debug (Randy Dunlap)

(2.5) Remove usage of CPUFREQ_ALL_CPUS (Dominik Brodowski)

(Both) Eliminate spawning of thread from timer callback, in favor
of schedule_work()

(Both) Show Lid status in /proc (Zdenek OGAR Skalak)

(Both) Added define for Fixed Function HW region (Matthew Wilcox)

(Both) Add missing statics to button.c (Pavel Machek)

Several changes have been made to the source code translation
utility that generates the Linux Code in order to make the code
more "Linux-like":

All typedefs on structs and unions have been removed in keeping
with the Linux coding style.

Removed the non-Linux SourceSafe module revision number from each
module header.

Completed major overhaul of symbols to be lowercased for linux.
Doubled the number of symbols that are lowercased.

Fixed a problem where identifiers within procedure headers and
within quotes were not fully lower cased (they were left with a
starting capital.)

Some C macros whose only purpose is to allow the generation of 16-
bit code are now completely removed in the Linux code, increasing
readability and maintainability.

----------------------------------------

12 December 2002.  Summary of changes for version 20021212.


1) ACPI CA Core Subsystem:

Fixed a problem where the creation of a zero-length AML Buffer
would cause a fault.

Fixed a problem where a Buffer object that pointed to a static AML
buffer (in an ACPI table) could inadvertently be deleted, causing
memory corruption.

Fixed a problem where a user buffer (passed in to the external
ACPI CA interfaces) could be overwritten if the buffer was too
small to complete the operation, causing memory corruption.

Fixed a problem in the Buffer-to-String conversion code where a
string of length one was always returned, regardless of the size
of the input Buffer object.

Removed the NATIVE_CHAR data type across the entire source due to
lack of need and lack of consistent use.

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a much larger code and data size.  Note that these values will
vary depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  72.1K Code,   9.5K Data,   81.6K Total
    Debug Version:     152.7K Code,  62.7K Data,  215.4K Total
  Current Release:
    Non-Debug Version:  72.0K Code,   9.5K Data,   81.5K Total
    Debug Version:     153.0K Code,  62.9K Data,  215.9K Total


----------------------------------------
05 December 2002.  Summary of changes for version 20021205.

1) ACPI CA Core Subsystem:

Fixed a problem where a store to a String or Buffer object could
cause corruption of the DSDT if the object type being stored was
the same as the target object type and the length of the object
being stored was equal to or smaller than the original (existing)
target object.  This was seen to cause corruption of battery _BIF
buffers if the _BIF method modified the buffer on the fly.

Fixed a problem where an internal error was generated if a control
method invocation was used in an OperationRegion, Buffer, or
Package declaration.  This was caused by the deferred parsing of
the control method and thus the deferred creation of the internal
method object.  The solution to this problem was to create the
internal method object at the moment the method is encountered in
the first pass - so that subsequent references to the method will
able to obtain the required parameter count and thus properly
parse the method invocation.  This problem presented itself as an
AE_AML_INTERNAL during the pass 1 parse phase during table load.

Fixed a problem where the internal String object copy routine did
not always allocate sufficient memory for the target String object
and caused memory corruption.  This problem was seen to cause
"Allocation already present in list!" errors as memory allocation
became corrupted.

Implemented a new function for the evaluation of namespace objects
that allows the specification of the allowable return object
types.  This simplifies a lot of code that checks for a return
object of one or more specific objects returned from the
evaluation (such as _STA, etc.)  This may become and external
function if it would be useful to ACPI-related drivers.

Completed another round of prefixing #defines with "ACPI_" for
clarity.

Completed additional code restructuring to allow more modular
linking for iASL compiler and AcpiExec.  Several files were split
creating new files.  New files:  nsparse.c dsinit.c evgpe.c

Implemented an abort mechanism to terminate an executing control
method via the AML debugger.  This feature is useful for debugging
control methods that depend (wait) for specific hardware
responses.

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a much larger code and data size.  Note that these values will
vary depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  71.4K Code,   9.0K Data,   80.4K Total
    Debug Version:     152.9K Code,  63.3K Data,  216.2K Total
  Current Release:
    Non-Debug Version:  72.1K Code,   9.5K Data,   81.6K Total
    Debug Version:     152.7K Code,  62.7K Data,  215.4K Total


2) iASL Compiler/Disassembler

Fixed a compiler code generation problem for "Interrupt" Resource
Descriptors.  If specified in the ASL, the optional "Resource
Source Index" and "Resource Source" fields were not inserted into
the correct location within the AML resource descriptor, creating
an invalid descriptor.

Fixed a disassembler problem for "Interrupt" resource descriptors.
The optional "Resource Source Index" and "Resource Source" fields
were ignored.


----------------------------------------
22 November 2002.  Summary of changes for version 20021122.


1) ACPI CA Core Subsystem:

Fixed a reported problem where an object stored to a Method Local
or Arg was not copied to a new object during the store - the
object pointer was simply copied to the Local/Arg.  This caused
all subsequent operations on the Local/Arg to also affect the
original source of the store operation.

Fixed a problem where a store operation to a Method Local or Arg
was not completed properly if the Local/Arg contained a reference
(from RefOf) to a named field.  The general-purpose store-to-
namespace-node code is now used so that this case is handled
automatically.

Fixed a problem where the internal object copy routine would cause
a protection fault if the object being copied was a Package and
contained either 1) a NULL package element or 2) a nested sub-
package.

Fixed a problem with the GPE initialization that resulted from an
ambiguity in the ACPI specification.  One section of the
specification states that both the address and length of the GPE
block must be zero if the block is not supported.  Another section
implies that only the address need be zero if the block is not
supported.  The code has been changed so that both the address and
the length must be non-zero to indicate a valid GPE block (i.e.,
if either the address or the length is zero, the GPE block is
invalid.)

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a much larger code and data size.  Note that these values will
vary depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  71.3K Code,   9.0K Data,   80.3K Total
    Debug Version:     152.7K Code,  63.2K Data,  215.5K Total
  Current Release:
    Non-Debug Version:  71.4K Code,   9.0K Data,   80.4K Total
    Debug Version:     152.9K Code,  63.3K Data,  216.2K Total


2) Linux

Cleaned up EC driver. Exported an external EC read/write
interface. By going through this, other drivers (most notably
sonypi) will be able to serialize access to the EC.


3) iASL Compiler/Disassembler

Implemented support to optionally generate include files for both
ASM and C (the -i switch).  This simplifies BIOS development by
automatically creating include files that contain external
declarations for the symbols that are created within the

(optionally generated) ASM and C AML source files.


----------------------------------------
15 November 2002.  Summary of changes for version 20021115.

1) ACPI CA Core Subsystem:

Fixed a memory leak problem where an error during resolution of

method arguments during a method invocation from another method
failed to cleanup properly by deleting all successfully resolved
argument objects.

Fixed a problem where the target of the Index() operator was not
correctly constructed if the source object was a package.  This
problem has not been detected because the use of a target operand
with Index() is very rare.

Fixed a problem with the Index() operator where an attempt was
made to delete the operand objects twice.

Fixed a problem where an attempt was made to delete an operand
twice during execution of the CondRefOf() operator if the target
did not exist.

Implemented the first of perhaps several internal create object
functions that create and initialize a specific object type.  This
consolidates duplicated code wherever the object is created, thus
shrinking the size of the subsystem.

Implemented improved debug/error messages for errors that occur
during nested method invocations.  All executing method pathnames
are displayed (with the error) as the call stack is unwound - thus
simplifying debug.

Fixed a problem introduced in the 10/02 release that caused
premature deletion of a buffer object if a buffer was used as an
ASL operand where an integer operand is required (Thus causing an
implicit object conversion from Buffer to Integer.)  The change in
the 10/02 release was attempting to fix a memory leak (albeit
incorrectly.)

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a much larger code and data size.  Note that these values will
vary depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  71.9K Code,   9.1K Data,   81.0K Total
    Debug Version:     153.1K Code,  63.3K Data,  216.4K Total
  Current Release:
    Non-Debug Version:  71.3K Code,   9.0K Data,   80.3K Total
    Debug Version:     152.7K Code,  63.2K Data,  215.5K Total


2) Linux

Changed the implementation of the ACPI semaphores to use down()
instead of down_interruptable().  It is important that the
execution of ACPI control methods not be interrupted by signals.
Methods must run to completion, or the system may be left in an
unknown/unstable state.

Fixed a compilation error when CONFIG_SOFTWARE_SUSPEND is not set.
(Shawn Starr)


3) iASL Compiler/Disassembler


Changed the default location of output files.  All output files
are now placed in the current directory by default instead of in
the directory of the source file.  This change may affect some
existing makefiles, but it brings the behavior of the compiler in
line with other similar tools.  The location of the output files
can be overridden with the -p command line switch.


----------------------------------------
11 November 2002.  Summary of changes for version 20021111.


0) ACPI Specification 2.0B is released and is now available at:
http://www.acpi.info/index.html


1) ACPI CA Core Subsystem:

Implemented support for the ACPI 2.0 SMBus Operation Regions.
This includes the early detection and handoff of the request to
the SMBus region handler (avoiding all of the complex field
support code), and support for the bidirectional return packet
from an SMBus write operation.  This paves the way for the
development of SMBus drivers in each host operating system.

Fixed a problem where the semaphore WAIT_FOREVER constant was
defined as 32 bits, but must be 16 bits according to the ACPI
specification.  This had the side effect of causing ASL
Mutex/Event timeouts even though the ASL code requested a wait
forever.  Changed all internal references to the ACPI timeout
parameter to 16 bits to prevent future problems.  Changed the name
of WAIT_FOREVER to ACPI_WAIT_FOREVER.

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a much larger code and data size.  Note that these values will
vary depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  71.4K Code,   9.0K Data,   80.4K Total
    Debug Version:     152.3K Code,  63.0K Data,  215.3K Total
  Current Release:
    Non-Debug Version:  71.9K Code,   9.1K Data,   81.0K Total
    Debug Version:     153.1K Code,  63.3K Data,  216.4K Total


2) Linux

Module loading/unloading fixes (John Cagle)


3) iASL Compiler/Disassembler

Added support for the SMBBlockProcessCall keyword (ACPI 2.0)

Implemented support for the disassembly of all SMBus protocol
keywords (SMBQuick, SMBWord, etc.)

----------------------------------------
01 November 2002.  Summary of changes for version 20021101.


1) ACPI CA Core Subsystem:

Fixed a problem where platforms that have a GPE1 block but no GPE0
block were not handled correctly.  This resulted in a "GPE
overlap" error message.  GPE0 is no longer required.

Removed code added in the previous release that inserted nodes
into the namespace in alphabetical order.  This caused some side-
effects on various machines.  The root cause of the problem is
still under investigation since in theory, the internal ordering
of the namespace nodes should not matter.


Enhanced error reporting for the case where a named object is not
found during control method execution.  The full ACPI namepath
(name reference) of the object that was not found is displayed in
this case.

Note: as a result of the overhaul of the namespace object types in
the previous release, the namespace nodes for the predefined
scopes (_TZ, _PR, etc.) are now of the type ACPI_TYPE_LOCAL_SCOPE
instead of ACPI_TYPE_ANY.  This simplifies the namespace
management code but may affect code that walks the namespace tree
looking for specific object types.

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a much larger code and data size.  Note that these values will
vary depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  70.7K Code,   8.6K Data,   79.3K Total
    Debug Version:     151.7K Code,  62.4K Data,  214.1K Total
  Current Release:
    Non-Debug Version:  71.4K Code,   9.0K Data,   80.4K Total
    Debug Version:     152.3K Code,  63.0K Data,  215.3K Total


2) Linux

Fixed a problem introduced in the previous release where the
Processor and Thermal objects were not recognized and installed in
/proc.  This was related to the scope type change described above.


3) iASL Compiler/Disassembler

Implemented the -g option to get all of the required ACPI tables
from the registry and save them to files (Windows version of the
compiler only.)  The required tables are the FADT, FACS, and DSDT.

Added ACPI table checksum validation during table disassembly in
order to catch corrupted tables.


----------------------------------------
22 October 2002.  Summary of changes for version 20021022.

1) ACPI CA Core Subsystem:

Implemented a restriction on the Scope operator that the target
must already exist in the namespace at the time the operator is
encountered (during table load or method execution).  In other
words, forward references are not allowed and Scope() cannot
create a new object. This changes the previous behavior where the
interpreter would create the name if not found.  This new behavior
correctly enables the search-to-root algorithm during namespace
lookup of the target name.  Because of this upsearch, this fixes
the known Compaq _SB_.OKEC problem and makes both the AML
interpreter and iASL compiler compatible with other ACPI
implementations.

Completed a major overhaul of the internal ACPI object types for
the ACPI Namespace and the associated operand objects.  Many of
these types had become obsolete with the introduction of the two-
pass namespace load.  This cleanup simplifies the code and makes
the entire namespace load mechanism much clearer and easier to
understand.

Improved debug output for tracking scope opening/closing to help
diagnose scoping issues.  The old scope name as well as the new
scope name are displayed.  Also improved error messages for
problems with ASL Mutex objects and error messages for GPE
problems.

Cleaned up the namespace dump code, removed obsolete code.

All string output (for all namespace/object dumps) now uses the
common ACPI string output procedure which handles escapes properly
and does not emit non-printable characters.

Fixed some issues with constants in the 64-bit version of the
local C library (utclib.c)


2) Linux

EC Driver:  No longer attempts to acquire the Global Lock at
interrupt level.


3) iASL Compiler/Disassembler

Implemented ACPI 2.0B grammar change that disallows all Type 1 and
2 opcodes outside of a control method.  This means that the
"executable" operators (versus the "namespace" operators) cannot
be used at the table level; they can only be used within a control
method.

Implemented the restriction on the Scope() operator where the
target must already exist in the namespace at the time the
operator is encountered (during ASL compilation). In other words,
forward references are not allowed and Scope() cannot create a new
object.  This makes the iASL compiler compatible with other ACPI
implementations and makes the Scope() implementation adhere to the
ACPI specification.

Fixed a problem where namepath optimization for the Alias operator
was optimizing the wrong path (of the two namepaths.)  This caused
a "Missing alias link" error message.

Fixed a problem where an "unknown reserved name" warning could be
incorrectly generated for names like "_SB" when the trailing
underscore is not used in the original ASL.

Fixed a problem where the reserved name check did not handle
NamePaths with multiple NameSegs correctly.  The first nameseg of
the NamePath was examined instead of the last NameSeg.


----------------------------------------

02 October 2002.  Summary of changes for this release.


1) ACPI CA Core Subsystem version 20021002:

Fixed a problem where a store/copy of a string to an existing
string did not always set the string length properly in the String
object.

Fixed a reported problem with the ToString operator where the
behavior was identical to the ToHexString operator instead of just
simply converting a raw buffer to a string data type.

Fixed a problem where CopyObject and the other "explicit"
conversion operators were not updating the internal namespace node
type as part of the store operation.

Fixed a memory leak during implicit source operand conversion
where the original object was not deleted if it was converted to a
new object of a different type.

Enhanced error messages for all problems associated with namespace
lookups.  Common procedure generates and prints the lookup name as
well as the formatted status.

Completed implementation of a new design for the Alias support
within the namespace.  The existing design did not handle the case
where a new object was assigned to one of the two names due to the
use of an explicit conversion operator, resulting in the two names
pointing to two different objects.  The new design simply points
the Alias name to the original name node - not to the object.
This results in a level of indirection that must be handled in the
name resolution mechanism.

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a larger code and data size.  Note that these values will vary
depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  69.6K Code,   8.3K Data,   77.9K Total
    Debug Version:     150.0K Code,  61.7K Data,  211.7K Total
  Current Release:
    Non-Debug Version:  70.7K Code,   8.6K Data,   79.3K Total
    Debug Version:     151.7K Code,  62.4K Data,  214.1K Total


2) Linux

Initialize thermal driver's timer before it is used. (Knut
Neumann)

Allow handling negative celsius values. (Kochi Takayoshi)

Fix thermal management and make trip points. R/W (Pavel Machek)

Fix /proc/acpi/sleep. (P. Christeas)

IA64 fixes. (David Mosberger)

Fix reversed logic in blacklist code. (Sergio Monteiro Basto)

Replace ACPI_DEBUG define with ACPI_DEBUG_OUTPUT. (Dominik
Brodowski)


3) iASL Compiler/Disassembler

Clarified some warning/error messages.


----------------------------------------
18 September 2002.  Summary of changes for this release.


1) ACPI CA Core Subsystem version 20020918:

Fixed a reported problem with reference chaining (via the Index()
and RefOf() operators) in the ObjectType() and SizeOf() operators.
The definition of these operators includes the dereferencing of
all chained references to return information on the base object.

Fixed a problem with stores to indexed package elements - the
existing code would not complete the store if an "implicit
conversion" was not performed.  In other words, if the existing
object (package element) was to be replaced completely, the code
didn't handle this case.

Relaxed typechecking on the ASL "Scope" operator to allow the
target name to refer to an object of type Integer, String, or
Buffer, in addition to the scoping object types (Device,
predefined Scopes, Processor, PowerResource, and ThermalZone.)
This allows existing AML code that has workarounds for a bug in
Windows to function properly.  A warning is issued, however.  This
affects both the AML interpreter and the iASL compiler. Below is
an example of this type of ASL code:

      Name(DEB,0x00)
      Scope(DEB)
      {

Fixed some reported problems with 64-bit integer support in the
local implementation of C library functions (clib.c)


2) Linux

Use ACPI fix map region instead of IOAPIC region, since it is
undefined in non-SMP.

Ensure that the SCI has the proper polarity and trigger, even on
systems that do not have an interrupt override entry in the MADT.

2.5 big driver reorganization (Pat Mochel)

Use early table mapping code from acpitable.c (Andi Kleen)

New blacklist entries (Andi Kleen)

Blacklist improvements. Split blacklist code out into a separate
file. Move checking the blacklist to very early. Previously, we
would use ACPI tables, and then halfway through init, check the
blacklist -- too late. Now, it's early enough to completely fall-
back to non-ACPI.


3) iASL Compiler/Disassembler version 20020918:

Fixed a problem where the typechecking code didn't know that an
alias could point to a method.  In other words, aliases were not
being dereferenced during typechecking.


----------------------------------------
29 August 2002.  Summary of changes for this release.

1) ACPI CA Core Subsystem Version 20020829:

If the target of a Scope() operator already exists, it must be an
object type that actually opens a scope -- such as a Device,
Method, Scope, etc.  This is a fatal runtime error.  Similar error
check has been added to the iASL compiler also.

Tightened up the namespace load to disallow multiple names in the
same scope.  This previously was allowed if both objects were of
the same type.  (i.e., a lookup was the same as entering a new
name).


2) Linux

Ensure that the ACPI interrupt has the proper trigger and
polarity.

local_irq_disable is extraneous. (Matthew Wilcox)

Make "acpi=off" actually do what it says, and not use the ACPI
interpreter *or* the tables.

Added arch-neutral support for parsing SLIT and SRAT tables (Kochi
Takayoshi)


3) iASL Compiler/Disassembler  Version 20020829:

Implemented namepath optimization for name declarations.  For
example, a declaration like "Method (\_SB_.ABCD)" would get
optimized to "Method (ABCD)" if the declaration is within the
\_SB_ scope.  This optimization is in addition to the named
reference path optimization first released in the previous
version. This would seem to complete all possible optimizations
for namepaths within the ASL/AML.

If the target of a Scope() operator already exists, it must be an
object type that actually opens a scope -- such as a Device,
Method, Scope, etc.

Implemented a check and warning for unreachable code in the same
block below a Return() statement.

Fixed a problem where the listing file was not generated if the
compiler aborted if the maximum error count was exceeded (200).

Fixed a problem where the typechecking of method return values was
broken.  This includes the check for a return value when the
method is invoked as a TermArg (a return value is expected.)

Fixed a reported problem where EOF conditions during a quoted
string or comment caused a fault.


----------------------------------------
15 August 2002.  Summary of changes for this release.

1) ACPI CA Core Subsystem Version 20020815:

Fixed a reported problem where a Store to a method argument that
contains a reference did not perform the indirect store correctly.
This problem was created during the conversion to the new
reference object model - the indirect store to a method argument
code was not updated to reflect the new model.

Reworked the ACPI mode change code to better conform to ACPI 2.0,
handle corner cases, and improve code legibility (Kochi Takayoshi)

Fixed a problem with the pathname parsing for the carat (^)
prefix.  The heavy use of the carat operator by the new namepath
optimization in the iASL compiler uncovered a problem with the AML
interpreter handling of this prefix.  In the case where one or
more carats precede a single nameseg, the nameseg was treated as
standalone and the search rule (to root) was inadvertently
applied.  This could cause both the iASL compiler and the
interpreter to find the wrong object or to miss the error that
should occur if the object does not exist at that exact pathname.

Found and fixed the problem where the HP Pavilion DSDT would not
load.  This was a relatively minor tweak to the table loading code
(a problem caused by the unexpected encounter with a method
invocation not within a control method), but it does not solve the
overall issue of the execution of AML code at the table level.
This investigation is still ongoing.

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a larger code and data size.  Note that these values will vary
depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  69.1K Code,   8.2K Data,   77.3K Total
    Debug Version:     149.4K Code,  61.6K Data,  211.0K Total
  Current Release:
    Non-Debug Version:  69.6K Code,   8.3K Data,   77.9K Total
    Debug Version:     150.0K Code,  61.7K Data,  211.7K Total


2) Linux

Remove redundant slab.h include (Brad Hards)

Fix several bugs in thermal.c (Herbert Nachtnebel)

Make CONFIG_ACPI_BOOT work properly (Pavel Machek)

Change acpi_system_suspend to use updated irq functions (Pavel
Machek)

Export acpi_get_firmware_table (Matthew Wilcox)

Use proper root proc entry for ACPI (Kochi Takayoshi)

Fix early-boot table parsing (Bjorn Helgaas)


3) iASL Compiler/Disassembler

Reworked the compiler options to make them more consistent and to
use two-letter options where appropriate.  We were running out of
sensible letters.   This may break some makefiles, so check the
current options list by invoking the compiler with no parameters.

Completed the design and implementation of the ASL namepath
optimization option for the compiler.  This option optimizes all
references to named objects to the shortest possible path.  The
first attempt tries to utilize a single nameseg (4 characters) and
the "search-to-root" algorithm used by the interpreter.  If that
cannot be used (because either the name is not in the search path
or there is a conflict with another object with the same name),
the pathname is optimized using the carat prefix (usually a
shorter string than specifying the entire path from the root.)

Implemented support to obtain the DSDT from the Windows registry
(when the disassembly option is specified with no input file).
Added this code as the implementation for AcpiOsTableOverride in
the Windows OSL.  Migrated the 16-bit code (used in the AcpiDump
utility) to scan memory for the DSDT to the AcpiOsTableOverride
function in the DOS OSL to make the disassembler truly OS
independent.

Implemented a new option to disassemble and compile in one step.
When used without an input filename, this option will grab the
DSDT from the local machine, disassemble it, and compile it in one
step.

Added a warning message for invalid escapes (a backslash followed
by any character other than the allowable escapes).  This catches
the quoted string error "\_SB_" (which should be "\\_SB_" ).

Also, there are numerous instances in the ACPI specification where
this error occurs.

Added a compiler option to disable all optimizations.  This is
basically the "compatibility mode" because by using this option,
the AML code will come out exactly the same as other ASL
compilers.

Added error messages for incorrectly ordered dependent resource
functions.  This includes: missing EndDependentFn macro at end of
dependent resource list, nested dependent function macros (both
start and end), and missing StartDependentFn macro.  These are
common errors that should be caught at compile time.

Implemented _OSI support for the disassembler and compiler.  _OSI
must be included in the namespace for proper disassembly (because
the disassembler must know the number of arguments.)

Added an "optimization" message type that is optional (off by
default).  This message is used for all optimizations - including
constant folding, integer optimization, and namepath optimization.

----------------------------------------
25 July 2002.  Summary of changes for this release.


1) ACPI CA Core Subsystem Version 20020725:

The AML Disassembler has been enhanced to produce compilable ASL
code and has been integrated into the iASL compiler (see below) as
well as the single-step disassembly for the AML debugger and the
disassembler for the AcpiDump utility.  All ACPI 2.0A opcodes,
resource templates and macros are fully supported.  The
disassembler has been tested on over 30 different AML files,
producing identical AML when the resulting disassembled ASL file
is recompiled with the same ASL compiler.

Modified the Resource Manager to allow zero interrupts and zero
dma channels during the GetCurrentResources call.  This was
causing problems on some platforms.

Added the AcpiOsRedirectOutput interface to the OSL to simplify
output redirection for the AcpiOsPrintf and AcpiOsVprintf
interfaces.

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a larger code and data size.  Note that these values will vary
depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  68.7K Code,   7.4K Data,   76.1K Total
    Debug Version:     142.9K Code,  58.7K Data,  201.6K Total
  Current Release:
    Non-Debug Version:  69.1K Code,   8.2K Data,   77.3K Total
    Debug Version:     149.4K Code,  61.6K Data,  211.0K Total


2) Linux

Fixed a panic in the EC driver (Dominik Brodowski)

Implemented checksum of the R/XSDT itself during Linux table scan
(Richard Schaal)


3) iASL compiler

The AML disassembler is integrated into the compiler.  The "-d"
option invokes the disassembler  to completely disassemble an
input AML file, producing as output a text ASL file with the
extension ".dsl" (to avoid name collisions with existing .asl
source files.)  A future enhancement will allow the disassembler
to obtain the BIOS DSDT from the registry under Windows.

Fixed a problem with the VendorShort and VendorLong resource
descriptors where an invalid AML sequence was created.

Implemented a fix for BufferData term in the ASL parser.  It was
inadvertently defined twice, allowing invalid syntax to pass and
causing reduction conflicts.

Fixed a problem where the Ones opcode could get converted to a
value of zero if "Ones" was used where a byte, word or dword value
was expected.  The 64-bit value is now truncated to the correct
size with the correct value.



----------------------------------------
02 July 2002.  Summary of changes for this release.


1) ACPI CA Core Subsystem Version 20020702:

The Table Manager code has been restructured to add several new
features.  Tables that are not required by the core subsystem
(other than the FADT, DSDT, FACS, PSDTs, etc.) are no longer
validated in any way and are returned from AcpiGetFirmwareTable if
requested.  The AcpiOsTableOverride interface is now called for
each table that is loaded by the subsystem in order to allow the
host to override any table it chooses.  Previously, only the DSDT
could be overridden.  Added one new files, tbrsdt.c and
tbgetall.c.

Fixed a problem with the conversion of internal package objects to
external objects (when a package is returned from a control
method.)  The return buffer length was set to zero instead of the
proper length of the package object.

Fixed a reported problem with the use of the RefOf and DeRefOf
operators when passing reference arguments to control methods.  A
new type of Reference object is used internally for references
produced by the RefOf operator.

Added additional error messages in the Resource Manager to explain
AE_BAD_DATA errors when they occur during resource parsing.

Split the AcpiEnableSubsystem into two primitives to enable a
finer granularity initialization sequence.  These two calls should
be called in this order: AcpiEnableSubsystem (flags),
AcpiInitializeObjects (flags).  The flags parameter remains the
same.


2) Linux

Updated the ACPI utilities module to understand the new style of
fully resolved package objects that are now returned from the core
subsystem.  This eliminates errors of the form:

    ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PPB_._PRT]
    acpi_utils-0430 [145] acpi_evaluate_reference:
        Invalid element in package (not a device reference)

The method evaluation utility uses the new buffer allocation
scheme instead of calling AcpiEvaluate Object twice.

Added support for ECDT. This allows the use of the Embedded

Controller before the namespace has been fully initialized, which
is necessary for ACPI 2.0 support, and for some laptops to
initialize properly. (Laptops using ECDT are still rare, so only
limited testing was performed of the added functionality.)

Fixed memory leaks in the EC driver.

Eliminated a brittle code structure in acpi_bus_init().

Eliminated the acpi_evaluate() helper function in utils.c. It is
no longer needed since acpi_evaluate_object can optionally
allocate memory for the return object.

Implemented fix for keyboard hang when getting battery readings on
some systems (Stephen White)

PCI IRQ routing update (Dominik Brodowski)

Fix an ifdef to allow compilation on UP with LAPIC but no IOAPIC
support

----------------------------------------
11 June 2002.  Summary of changes for this release.


1) ACPI CA Core Subsystem Version 20020611:

Fixed a reported problem where constants such as Zero and One
appearing within _PRT packages were not handled correctly within
the resource manager code.  Originally reported against the ASL
compiler because the code generator now optimizes integers to
their minimal AML representation (i.e. AML constants if possible.)
The _PRT code now handles all AML constant opcodes correctly
(Zero, One, Ones, Revision).

Fixed a problem with the Concatenate operator in the AML
interpreter where a buffer result object was incorrectly marked as
not fully evaluated, causing a run-time error of AE_AML_INTERNAL.

All package sub-objects are now fully resolved before they are
returned from the external ACPI interfaces.  This means that name
strings are resolved to object handles, and constant operators
(Zero, One, Ones, Revision) are resolved to Integers.

Implemented immediate resolution of the AML Constant opcodes
(Zero, One, Ones, Revision) to Integer objects upon detection
within the AML stream. This has simplified and reduced the
generated code size of the subsystem by eliminating about 10
switch statements for these constants (which previously were
contained in Reference objects.)  The complicating issues are that
the Zero opcode is used as a "placeholder" for unspecified
optional target operands and stores to constants are defined to be
no-ops.

Code and Data Size: Current core subsystem library sizes are shown
below. These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a larger code and data size.  Note that these values will vary
depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  69.3K Code,   7.4K Data,   76.7K Total
    Debug Version:     143.8K Code,  58.8K Data,  202.6K Total
  Current Release:
    Non-Debug Version:  68.7K Code,   7.4K Data,   76.1K Total
    Debug Version:     142.9K Code,  58.7K Data,  201.6K Total


2) Linux


Added preliminary support for obtaining _TRA data for PCI root
bridges (Bjorn Helgaas).


3) iASL Compiler Version X2046:

Fixed a problem where the "_DDN" reserved name was defined to be a
control method with one argument.  There are no arguments, and
_DDN does not have to be a control method.

Fixed a problem with the Linux version of the compiler where the
source lines printed with error messages were the wrong lines.
This turned out to be the "LF versus CR/LF" difference between
Windows and Unix.  This appears to be the longstanding issue
concerning listing output and error messages.

Fixed a problem with the Linux version of compiler where opcode
names within error messages were wrong.  This was caused by a
slight difference in the output of the Flex tool on Linux versus
Windows.

Fixed a problem with the Linux compiler where the hex output files
contained some garbage data caused by an internal buffer overrun.


----------------------------------------
17 May 2002.  Summary of changes for this release.


1) ACPI CA Core Subsystem Version 20020517:

Implemented a workaround to an BIOS bug discovered on the HP
OmniBook where the FADT revision number and the table size are
inconsistent (ACPI 2.0 revision vs. ACPI 1.0 table size).  The new
behavior is to fallback to using only the ACPI 1.0 fields of the
FADT if the table is too small to be a ACPI 2.0 table as claimed
by the revision number.  Although this is a BIOS bug, this is a
case where the workaround is simple enough and with no side
effects, so it seemed prudent to add it.  A warning message is
issued, however.

Implemented minimum size checks for the fixed-length ACPI tables -
- the FADT and FACS, as well as consistency checks between the
revision number and the table size.

Fixed a reported problem in the table override support where the
new table pointer was incorrectly treated as a physical address
instead of a logical address.

Eliminated the use of the AE_AML_ERROR exception and replaced it
with more descriptive codes.

Fixed a problem where an exception would occur if an ASL Field was
defined with no named Field Units underneath it (used by some
index fields).

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a larger code and data size.  Note that these values will vary
depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  68.8K Code,   7.1K Data,   75.9K Total
    Debug Version:     142.9K Code,  58.4K Data,  201.3K Total
  Current Release:
    Non-Debug Version:  69.3K Code,   7.4K Data,   76.7K Total
    Debug Version:     143.8K Code,  58.8K Data,  202.6K Total



2) Linux

Much work done on ACPI init (MADT and PCI IRQ routing support).
(Paul D. and Dominik Brodowski)

Fix PCI IRQ-related panic on boot (Sam Revitch)

Set BM_ARB_DIS when entering a sleep state (Ducrot Bruno)

Fix "MHz" typo (Dominik Brodowski)

Fix RTC year 2000 issue (Dominik Brodowski)

Preclude multiple button proc entries (Eric Brunet)

Moved arch-specific code out of include/platform/aclinux.h

3) iASL Compiler Version X2044:

Implemented error checking for the string used in the EISAID macro
(Usually used in the definition of the _HID object.)  The code now
strictly enforces the PnP format - exactly 7 characters, 3
uppercase letters and 4 hex digits.

If a raw string is used in the definition of the _HID object
(instead of the EISAID macro), the string must contain all
alphanumeric characters (e.g., "*PNP0011" is not allowed because
of the asterisk.)

Implemented checking for invalid use of ACPI reserved names for
most of the name creation operators (Name, Device, Event, Mutex,
OperationRegion, PowerResource, Processor, and ThermalZone.)
Previously, this check was only performed for control methods.

Implemented an additional check on the Name operator to emit an
error if a reserved name that must be implemented in ASL as a
control method is used.  We know that a reserved name must be a
method if it is defined with input arguments.

The warning emitted when a namespace object reference is not found
during the cross reference phase has been changed into an error.
The "External" directive should be used for names defined in other
modules.


4) Tools and Utilities

The 16-bit tools (adump16 and aexec16) have been regenerated and
tested.

Fixed a problem with the output of both acpidump and adump16 where
the indentation of closing parentheses and brackets was not

aligned properly with the parent block.


----------------------------------------
03 May 2002.  Summary of changes for this release.


1) ACPI CA Core Subsystem Version 20020503:

Added support a new OSL interface that allows the host operating

system software to override the DSDT found in the firmware -
AcpiOsTableOverride.  With this interface, the OSL can examine the
version of the firmware DSDT and replace it with a different one
if desired.

Added new external interfaces for accessing ACPI registers from
device drivers and other system software - AcpiGetRegister and
AcpiSetRegister.  This was simply an externalization of the
existing AcpiHwBitRegister interfaces.

Fixed a regression introduced in the previous build where the
ASL/AML CreateField operator always returned an error,
"destination must be a NS Node".

Extended the maximum time (before failure) to successfully enable
ACPI mode to 3 seconds.

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a larger code and data size.  Note that these values will vary
depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  68.5K Code,   7.0K Data,   75.5K Total
    Debug Version:     142.4K Code,  58.3K Data,  200.7K Total
  Current Release:
    Non-Debug Version:  68.8K Code,   7.1K Data,   75.9K Total
    Debug Version:     142.9K Code,  58.4K Data,  201.3K Total


2) Linux

Enhanced ACPI init code for SMP. We are now fully MPS and $PIR-
free. While 3 out of 4 of our in-house systems work fine, the last
one still hangs when testing the LAPIC timer.

Renamed many files in 2.5 kernel release to omit "acpi_" from the
name.

Added warning on boot for Presario 711FR.

Sleep improvements (Pavel Machek)

ACPI can now be built without CONFIG_PCI enabled.

IA64: Fixed memory map functions (JI Lee)


3) iASL Compiler Version X2043:

Added support to allow the compiler to be integrated into the MS
VC++ development environment for one-button compilation of single
files or entire projects -- with error-to-source-line mapping.

Implemented support for compile-time constant folding for the
Type3, Type4, and Type5 opcodes first defined in the ACPI 2.0
specification.  This allows the ASL writer to use expressions
instead of Integer/Buffer/String constants in terms that must
evaluate to constants at compile time and will also simplify the
emitted AML in any such sub-expressions that can be folded
(evaluated at compile-time.)  This increases the size of the
compiler significantly because a portion of the ACPI CA AML
interpreter is included within the compiler in order to pre-
evaluate constant expressions.


Fixed a problem with the "Unicode" ASL macro that caused the
compiler to fault.  (This macro is used in conjunction with the
_STR reserved name.)

Implemented an AML opcode optimization to use the Zero, One, and
Ones opcodes where possible to further reduce the size of integer
constants and thus reduce the overall size of the generated AML
code.

Implemented error checking for new reserved terms for ACPI version
2.0A.

Implemented the -qr option to display the current list of ACPI
reserved names known to the compiler.

Implemented the -qc option to display the current list of ASL
operators that are allowed within constant expressions and can
therefore be folded at compile time if the operands are constants.


4) Documentation

Updated the Programmer's Reference for new interfaces, data types,
and memory allocation model options.

Updated the iASL Compiler User Reference to apply new format and
add information about new features and options.

----------------------------------------
19 April 2002.  Summary of changes for this release.

1) ACPI CA Core Subsystem Version 20020419:

The source code base for the Core Subsystem has been completely
cleaned with PC-lint (FlexLint) for both 32-bit and 64-bit
versions.  The Lint option files used are included in the
/acpi/generate/lint directory.

Implemented enhanced status/error checking across the entire
Hardware manager subsystem.  Any hardware errors (reported from
the OSL) are now bubbled up and will abort a running control
method.


Fixed a problem where the per-ACPI-table integer width (32 or 64)
was stored only with control method nodes, causing a fault when
non-control method code was executed during table loading.  The
solution implemented uses a global variable to indicate table
width across the entire ACPI subsystem.  Therefore, ACPI CA does
not support mixed integer widths across different ACPI tables
(DSDT, SSDT).

Fixed a problem where NULL extended fields (X fields) in an ACPI
2.0 ACPI FADT caused the table load to fail.  Although the
existing ACPI specification is a bit fuzzy on this topic, the new
behavior is to fall back on a ACPI 1.0 field if the corresponding
ACPI 2.0 X field is zero (even though the table revision indicates
a full ACPI 2.0 table.)  The ACPI specification will be updated to
clarify this issue.

Fixed a problem with the SystemMemory operation region handler
where memory was always accessed byte-wise even if the AML-
specified access width was larger than a byte.  This caused
problems on systems with memory-mapped I/O.  Memory is now
accessed with the width specified.  On systems that do not support
non-aligned transfers, a check is made to guarantee proper address
alignment before proceeding in order to avoid an AML-caused
alignment fault within the kernel.


Fixed a problem with the ExtendedIrq resource where only one byte
of the 4-byte Irq field was extracted.

Fixed the AcpiExDigitsNeeded() procedure to support _UID.  This
function was out of date and required a rewrite.

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a larger code and data size.  Note that these values will vary
depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  66.6K Code,   6.5K Data,   73.1K Total
    Debug Version:     139.8K Code,  57.4K Data,  197.2K Total
  Current Release:
    Non-Debug Version:  68.5K Code,   7.0K Data,   75.5K Total
    Debug Version:     142.4K Code,  58.3K Data,  200.7K Total


2) Linux

PCI IRQ routing fixes (Dominik Brodowski)


3) iASL Compiler Version X2042:

Implemented an additional compile-time error check for a field
unit whose size + minimum access width would cause a run-time
access beyond the end-of-region.  Previously, only the field size
itself was checked.

The Core subsystem and iASL compiler now share a common parse
object in preparation for compile-time evaluation of the type
3/4/5 ASL operators.


----------------------------------------
Summary of changes for this release: 03_29_02

1) ACPI CA Core Subsystem Version 20020329:

Implemented support for late evaluation of TermArg operands to
Buffer and Package objects.  This allows complex expressions to be
used in the declarations of these object types.

Fixed an ACPI 1.0 compatibility issue when reading Fields. In ACPI
1.0, if the field was larger than 32 bits, it was returned as a
buffer - otherwise it was returned as an integer.  In ACPI 2.0,
the field is returned as a buffer only if the field is larger than
64 bits.  The TableRevision is now considered when making this
conversion to avoid incompatibility with existing ASL code.

Implemented logical addressing for AcpiOsGetRootPointer.  This
allows an RSDP with either a logical or physical address.  With
this support, the host OS can now override all ACPI tables with
one logical RSDP.  Includes implementation of  "typed" pointer
support to allow a common data type for both physical and logical
pointers internally.  This required a change to the
AcpiOsGetRootPointer interface.

Implemented the use of ACPI 2.0 Generic Address Structures for all
GPE, Fixed Event, and PM Timer I/O.  This allows the use of memory
mapped I/O for these ACPI features.

Initialization now ignores not only non-required tables (All
tables other than the FADT, FACS, DSDT, and SSDTs), but also does
not validate the table headers of unrecognized tables.

Fixed a problem where a notify handler could only be
installed/removed on an object of type Device.  All "notify"

objects are now supported -- Devices, Processor, Power, and
Thermal.

Removed most verbosity from the ACPI_DB_INFO debug level.  Only
critical information is returned when this debug level is enabled.

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a larger code and data size.  Note that these values will vary
depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release
    Non-Debug Version:  65.4K Code,   6.2K Data,   71.6K Total
    Debug Version:     138.0K Code,  56.6K Data,  194.6K Total
  Current Release:
    Non-Debug Version:  66.6K Code,   6.5K Data,   73.1K Total
    Debug Version:     139.8K Code,  57.4K Data,  197.2K Total


2) Linux:

The processor driver (acpi_processor.c) now fully supports ACPI
2.0-based processor performance control (e.g. Intel(R)
SpeedStep(TM) technology) Note that older laptops that only have
the Intel "applet" interface are not supported through this.  The
'limit' and 'performance' interface (/proc) are fully functional.
[Note that basic policy for controlling performance state
transitions will be included in the next version of ospmd.]  The
idle handler was modified to more aggressively use C2, and PIIX4
errata handling underwent a complete overhaul (big thanks to
Dominik Brodowski).

Added support for ACPI-PCI device binding (acpi_pci_root.c). _ADR-
based devices in the ACPI namespace are now dynamically bound
(associated) with their PCI counterparts (e.g. PCI1->01:00.0).
This allows, among other things, ACPI to resolve bus numbers for
subordinate PCI bridges.

Enhanced PCI IRQ routing to get the proper bus number for _PRT
entries defined underneath PCI bridges.

Added IBM 600E to bad bios list due to invalid _ADR value for
PIIX4 PCI-ISA bridge, resulting in improper PCI IRQ routing.

In the process of adding full MADT support (e.g. IOAPIC) for IA32
(acpi.c, mpparse.c) -- stay tuned.

Added back visual differentiation between fixed-feature and
control-method buttons in dmesg.  Buttons are also subtyped (e.g.
button/power/PWRF) to simplify button identification.

We no longer use -Wno-unused when compiling debug. Please ignore
any "_THIS_MODULE defined but not used" messages.

Can now shut down the system using "magic sysrq" key.


3) iASL Compiler version 2041:

Fixed a problem where conversion errors for hex/octal/decimal
constants were not reported.

Implemented a fix for the General Register template Address field.
This field was 8 bits when it should be 64.

Fixed a problem where errors/warnings were no longer being emitted
within the listing output file.

Implemented the ACPI 2.0A restriction on ACPI Table Signatures to
exactly 4 characters, alphanumeric only.




----------------------------------------
Summary of changes for this release: 03_08_02


1) ACPI CA Core Subsystem Version 20020308:

Fixed a problem with AML Fields where the use of the "AccessAny"
keyword could cause an interpreter error due to attempting to read
or write beyond the end of the parent Operation Region.

Fixed a problem in the SystemMemory Operation Region handler where
an attempt was made to map memory beyond the end of the region.
This was the root cause of the "AE_ERROR" and "AE_NO_MEMORY"
errors on some Linux systems.

Fixed a problem where the interpreter/namespace "search to root"
algorithm was not functioning for some object types.  Relaxed the
internal restriction on the search to allow upsearches for all
external object types as well as most internal types.


2) Linux:

We now use safe_halt() macro versus individual calls to sti | hlt.

Writing to the processor limit interface should now work. "echo 1"
will increase the limit, 2 will decrease, and 0 will reset to the

default.


3) ASL compiler:

Fixed segfault on Linux version.


----------------------------------------
Summary of changes for this release: 02_25_02

1) ACPI CA Core Subsystem:


Fixed a problem where the GPE bit masks were not initialized
properly, causing erratic GPE behavior.

Implemented limited support for multiple calling conventions.  The
code can be generated with either the VPL (variable parameter
list, or "C") convention, or the FPL (fixed parameter list, or
"Pascal") convention.  The core subsystem is about 3.4% smaller
when generated with FPL.


2) Linux

Re-add some /proc/acpi/event functionality that was lost during
the rewrite

Resolved issue with /proc events for fixed-feature buttons showing
up as the system device.

Fixed checks on C2/C3 latencies to be inclusive of maximum values.

Replaced AE_ERRORs in acpi_osl.c with more specific error codes.

Changed ACPI PRT option from "pci=noacpi-routing" to "pci=noacpi"

Fixed limit interface & usage to fix bugs with passive cooling
hysterisis.

Restructured PRT support.


----------------------------------------
Summary of changes for this label: 02_14_02


1) ACPI CA Core Subsystem:

Implemented support in AcpiLoadTable to allow loading of FACS and
FADT tables.

Suport for the now-obsolete interim 0.71 64-bit ACPI tables has
been removed.  All 64-bit platforms should be migrated to the ACPI
2.0 tables.  The actbl71.h header has been removed from the source
tree.

All C macros defined within the subsystem have been prefixed with
"ACPI_" to avoid collision with other system include files.

Removed the return value for the two AcpiOsPrint interfaces, since
it is never used and causes lint warnings for ignoring the return
value.

Added error checking to all internal mutex acquire and release
calls.  Although a failure from one of these interfaces is
probably a fatal system error, these checks will cause the
immediate abort of the currently executing method or interface.

Fixed a problem where the AcpiSetCurrentResources interface could
fault.  This was a side effect of the deployment of the new memory
allocation model.

Fixed a couple of problems with the Global Lock support introduced
in the last major build.  The "common" (1.0/2.0) internal FACS was
being overwritten with the FACS signature and clobbering the
Global Lock pointer.  Also, the actual firmware FACS was being
unmapped after construction of the "common" FACS, preventing
access to the actual Global Lock field within it.  The "common"
internal FACS is no longer installed as an actual ACPI table; it
is used simply as a global.

Code and Data Size: Current core subsystem library sizes are shown
below.  These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a larger code and data size.  Note that these values will vary
depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release (02_07_01)
    Non-Debug Version:  65.2K Code,   6.2K Data,   71.4K Total
    Debug Version:     136.9K Code,  56.4K Data,  193.3K Total
  Current Release:
    Non-Debug Version:  65.4K Code,   6.2K Data,   71.6K Total
    Debug Version:     138.0K Code,  56.6K Data,  194.6K Total


2) Linux

Updated Linux-specific code for core macro and OSL interface
changes described above.

Improved /proc/acpi/event. It now can be opened only once and has
proper poll functionality.

Fixed and restructured power management (acpi_bus).

Only create /proc "view by type" when devices of that class exist.

Fixed "charging/discharging" bug (and others) in acpi_battery.

Improved thermal zone code.


3) ASL Compiler, version X2039:


Implemented the new compiler restriction on ASL String hex/octal
escapes to non-null, ASCII values.  An error results if an invalid
value is used.  (This will require an ACPI 2.0 specification
change.)

AML object labels that are output to the optional C and ASM source
are now prefixed with both the ACPI table signature and table ID
to help guarantee uniqueness within a large BIOS project.


----------------------------------------
Summary of changes for this label: 02_01_02

1) ACPI CA Core Subsystem:

ACPI 2.0 support is complete in the entire Core Subsystem and the
ASL compiler. All new ACPI 2.0 operators are implemented and all
other changes for ACPI 2.0 support are complete.  With
simultaneous code and data optimizations throughout the subsystem,
ACPI 2.0 support has been implemented with almost no additional
cost in terms of code and data size.

Implemented a new mechanism for allocation of return buffers.  If
the buffer length is set to ACPI_ALLOCATE_BUFFER, the buffer will
be allocated on behalf of the caller.  Consolidated all return
buffer validation and allocation to a common procedure.  Return
buffers will be allocated via the primary OSL allocation interface
since it appears that a separate pool is not needed by most users.
If a separate pool is required for these buffers, the caller can
still use the original mechanism and pre-allocate the buffer(s).

Implemented support for string operands within the DerefOf
operator.

Restructured the Hardware and Event managers to be table driven,
simplifying the source code and reducing the amount of generated
code.

Split the common read/write low-level ACPI register bitfield
procedure into a separate read and write, simplifying the code
considerably.

Obsoleted the AcpiOsCallocate OSL interface.  This interface was
used only a handful of times and didn't have enough critical mass
for a separate interface.  Replaced with a common calloc procedure
in the core.

Fixed a reported problem with the GPE number mapping mechanism
that allows GPE1 numbers to be non-contiguous with GPE0.
Reorganized the GPE information and shrunk a large array that was
originally large enough to hold info for all possible GPEs (256)
to simply large enough to hold all GPEs up to the largest GPE
number on the machine.

Fixed a reported problem with resource structure alignment on 64-
bit platforms.

Changed the AcpiEnableEvent and AcpiDisableEvent external
interfaces to not require any flags for the common case of
enabling/disabling a GPE.

Implemented support to allow a "Notify" on a Processor object.

Most TBDs in comments within the source code have been resolved
and eliminated.


Fixed a problem in the interpreter where a standalone parent
prefix (^) was not handled correctly in the interpreter and
debugger.

Removed obsolete and unnecessary GPE save/restore code.

Implemented Field support in the ASL Load operator.  This allows a
table to be loaded from a named field, in addition to loading a
table directly from an Operation Region.

Implemented timeout and handle support in the external Global Lock
interfaces.

Fixed a problem in the AcpiDump utility where pathnames were no
longer being generated correctly during the dump of named objects.

Modified the AML debugger to give a full display of if/while
predicates instead of just one AML opcode at a time.  (The
predicate can have several nested ASL statements.)  The old method
was confusing during single stepping.

Code and Data Size: Current core subsystem library sizes are shown
below. These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a larger code and data size.  Note that these values will vary
depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release (12_18_01)
     Non-Debug Version:  66.1K Code,   5.5K Data,   71.6K Total
     Debug Version:     138.3K Code,  55.9K Data,  194.2K Total
   Current Release:
     Non-Debug Version:  65.2K Code,   6.2K Data,   71.4K Total
     Debug Version:     136.9K Code,  56.4K Data,  193.3K Total

2) Linux

 Implemented fix for PIIX reverse throttling errata (Processor
driver)

Added new Limit interface (Processor and Thermal drivers)

New thermal policy (Thermal driver)

Many updates to /proc

Battery "low" event support (Battery driver)

Supports ACPI PCI IRQ routing (PCI Link and PCI root drivers)

IA32 - IA64 initialization unification, no longer experimental

Menuconfig options redesigned

3) ASL Compiler, version X2037:

Implemented several new output features to simplify integration of
AML code into  firmware: 1) Output the AML in C source code with
labels for each named ASL object.  The    original ASL source code
is interleaved as C comments. 2) Output the AML in ASM source code
with labels and interleaved ASL    source. 3) Output the AML in
raw hex table form, in either C or ASM.

Implemented support for optional string parameters to the
LoadTable operator.

Completed support for embedded escape sequences within string
literals.  The compiler now supports all single character escapes
as well as the Octal and Hex escapes.  Note: the insertion of a
null byte into a string literal (via the hex/octal escape) causes
the string to be immediately terminated.  A warning is issued.

Fixed a problem where incorrect AML was generated for the case
where an ASL namepath consists of a single parent prefix (

) with no trailing name segments.

The compiler has been successfully generated with a 64-bit C
compiler.




----------------------------------------
Summary of changes for this label: 12_18_01

1) Linux

Enhanced blacklist with reason and severity fields. Any table's
signature may now be used to identify a blacklisted system.

Call _PIC control method to inform the firmware which interrupt
model the OS is using. Turn on any disabled link devices.

Cleaned up busmgr /proc error handling (Andreas Dilger)

 2) ACPI CA Core Subsystem:

Implemented ACPI 2.0 semantics for the "Break" operator (Exit from
while loop)

Completed implementation of the ACPI 2.0 "Continue",
"ConcatenateResTemplate", "DataTableRegion", and "LoadTable"
operators.  All new ACPI 2.0 operators are now implemented in both
the ASL compiler and the AML interpreter.  The only remaining ACPI
2.0 task is support for the String data type in the DerefOf
operator.  Fixed a problem with AcquireMutex where the status code
was lost if the caller had to actually wait for the mutex.

Increased the maximum ASL Field size from 64K bits to 4G bits.

Completed implementation of the external Global Lock interfaces --
AcpiAcquireGlobalLock and AcpiReleaseGlobalLock.  The Timeout and
Handler parameters were added.

Completed another pass at removing warnings and issues when
compiling with 64-bit compilers.  The code now compiles cleanly
with the Intel 64-bit C/C++ compiler.  Most notably, the pointer
add and subtract (diff) macros have changed considerably.


Created and deployed a new ACPI_SIZE type that is 64-bits wide on
64-bit platforms, 32-bits on all others.  This type is used
wherever memory allocation and/or the C sizeof() operator is used,
and affects the OSL memory allocation interfaces AcpiOsAllocate
and AcpiOsCallocate.

Implemented sticky user breakpoints in the AML debugger.

Code and Data Size: Current core subsystem library sizes are shown
below. These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a larger code and data size. Note that these values will vary
depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release (12_05_01)
     Non-Debug Version:  64.7K Code,   5.3K Data,   70.0K Total
     Debug Version:     136.2K Code,  55.6K Data,  191.8K Total
   Current Release:
     Non-Debug Version:  66.1K Code,   5.5K Data,   71.6K Total
     Debug Version:     138.3K Code,  55.9K Data,  194.2K Total

 3) ASL Compiler, version X2034:

Now checks for (and generates an error if detected) the use of a
Break or Continue statement without an enclosing While statement.


Successfully generated the compiler with the Intel 64-bit C
compiler.

 ----------------------------------------
Summary of changes for this label: 12_05_01

 1) ACPI CA Core Subsystem:

The ACPI 2.0 CopyObject operator is fully implemented.  This
operator creates a new copy of an object (and is also used to
bypass the "implicit conversion" mechanism of the Store operator.)

The ACPI 2.0 semantics for the SizeOf operator are fully
implemented.  The change is that performing a SizeOf on a
reference object causes an automatic dereference of the object to
tha actual value before the size is evaluated. This behavior was
undefined in ACPI 1.0.

The ACPI 2.0 semantics for the Extended IRQ resource descriptor
have been implemented.  The interrupt polarity and mode are now
independently set.

Fixed a problem where ASL Constants (Zero, One, Ones, Revision)
appearing in Package objects were not properly converted to
integers when the internal Package was converted to an external
object (via the AcpiEvaluateObject interface.)

Fixed a problem with the namespace object deletion mechanism for
objects created by control methods.  There were two parts to this
problem: 1) Objects created during the initialization phase method
parse were not being deleted, and 2) The object owner ID mechanism
to track objects was broken.

Fixed a problem where the use of the ASL Scope operator within a
control method would result in an invalid opcode exception.

Fixed a problem introduced in the previous label where the buffer
length required for the _PRT structure was not being returned
correctly.

Code and Data Size: Current core subsystem library sizes are shown
below. These are the code and data sizes for the acpica.lib
produced by the Microsoft Visual C++ 6.0 compiler, and these
values do not include any ACPI driver or OSPM code.  The debug
version of the code includes the debug output trace mechanism and
has a larger code and data size.  Note that these values will vary
depending on the efficiency of the compiler and the compiler
options used during generation.

  Previous Release (11_20_01)
     Non-Debug Version:  64.1K Code,   5.3K Data,   69.4K Total
     Debug Version:     135.1K Code,  55.4K Data,  190.5K Total

  Current Release:
     Non-Debug Version:  64.7K Code,   5.3K Data,   70.0K Total
     Debug Version:     136.2K Code,  55.6K Data,  191.8K Total

 2) Linux:

Updated all files to apply cleanly against 2.4.16.

Added basic PCI Interrupt Routing Table (PRT) support for IA32
(acpi_pci.c), and unified the PRT code for IA32 and IA64.  This
version supports both static and dyanmic PRT entries, but dynamic
entries are treated as if they were static (not yet
reconfigurable).  Architecture- specific code to use this data is
absent on IA32 but should be available shortly.

Changed the initialization sequence to start the ACPI interpreter
(acpi_init) prior to initialization of the PCI driver (pci_init)
in init/main.c.  This ordering is required to support PRT and
facilitate other (future) enhancement.  A side effect is that the
ACPI bus driver and certain device drivers can no longer be loaded
as modules.

Modified the 'make menuconfig' options to allow PCI Interrupt
Routing support to be included without the ACPI Bus and other
device drivers.

 3) ASL Compiler, version X2033:

Fixed some issues with the use of the new CopyObject and
DataTableRegion operators.  Both are fully functional.

 ----------------------------------------
Summary of changes for this label: 11_20_01

 20 November 2001.  Summary of changes for this release.

 1) ACPI CA Core Subsystem:

Updated Index support to match ACPI 2.0 semantics.  Storing a
Integer, String, or Buffer to an Index of a Buffer will store only
the least-significant byte of the source to the Indexed buffer
byte.  Multiple writes are not performed.

Fixed a problem where the access type used in an AccessAs ASL
operator was not recorded correctly into the field object.

Fixed a problem where ASL Event objects were created in a
signalled state. Events are now created in an unsignalled state.

The internal object cache is now purged after table loading and
initialization to reduce the use of dynamic kernel memory -- on
the assumption that object use is greatest during the parse phase
of the entire table (versus the run-time use of individual control
methods.)

ACPI 2.0 variable-length packages are now fully operational.

Code and Data Size: Code and Data optimizations have permitted new
feature development with an actual reduction in the library size.
Current core subsystem library sizes are shown below.  These are
the code and data sizes for the acpica.lib produced by the
Microsoft Visual C++ 6.0 compiler, and these values do not include
any ACPI driver or OSPM code.  The debug version of the code
includes the debug output trace mechanism and has a larger code
and data size.  Note that these values will vary depending on the
efficiency of the compiler and the compiler options used during
generation.

  Previous Release (11_09_01):
     Non-Debug Version:  63.7K Code,   5.2K Data,   68.9K Total
     Debug Version:     134.5K Code,  55.4K Data,  189.9K Total

  Current Release:
     Non-Debug Version:  64.1K Code,   5.3K Data,   69.4K Total
     Debug Version:     135.1K Code,  55.4K Data,  190.5K Total

 2) Linux:

Enhanced the ACPI boot-time initialization code to allow the use
of Local APIC tables for processor enumeration on IA-32, and to
pave the way for a fully MPS-free boot (on SMP systems) in the
near future.  This functionality replaces
arch/i386/kernel/acpitables.c, which was introduced in an earlier
2.4.15-preX release.  To enable this feature you must add
"acpi_boot=on" to the kernel command line -- see the help entry
for CONFIG_ACPI_BOOT for more information.  An IA-64 release is in
the works...

Restructured the configuration options to allow boot-time table
parsing support without inclusion of the ACPI Interpreter (and
other) code.

NOTE: This release does not include fixes for the reported events,
power-down, and thermal passive cooling issues (coming soon).

 3) ASL Compiler:

Added additional typechecking for Fields within restricted access
Operation Regions.  All fields within EC and CMOS regions must be
declared with ByteAcc. All fields withing SMBus regions must be
declared with the BufferAcc access type.

Fixed a problem where the listing file output of control methods
no longer interleaved the actual AML code with the ASL source
code.




----------------------------------------
Summary of changes for this label: 11_09_01

1) ACPI CA Core Subsystem:

Implemented ACPI 2.0-defined support for writes to fields with a
Buffer, String, or Integer source operand that is smaller than the
target field. In these cases, the source operand is zero-extended
to fill the target field.

Fixed a problem where a Field starting bit offset (within the
parent operation region) was calculated incorrectly if the

alignment of the field differed from the access width.  This
affected CreateWordField, CreateDwordField, CreateQwordField, and
possibly other fields that use the "AccessAny" keyword.

Fixed a problem introduced in the 11_02_01 release where indirect
stores through method arguments did not operate correctly.

2) Linux:

Implemented boot-time ACPI table parsing support
(CONFIG_ACPI_BOOT) for IA32 and IA64 UP/SMP systems.  This code
facilitates the use of ACPI tables (e.g. MADT, SRAT) rather than
legacy BIOS interfaces (e.g. MPS) for the configuration of system
processors, memory, and interrupts during setup_arch().  Note that
this patch does not include the required architecture-specific
changes required to apply this information -- subsequent patches
will be posted for both IA32 and IA64 to achieve this.

Added low-level sleep support for IA32 platforms, courtesy of Pat
Mochel. This allows IA32 systems to transition to/from various
sleeping states (e.g. S1, S3), although the lack of a centralized
driver model and power-manageable drivers will prevent its
(successful) use on most systems.

Revamped the ACPI 'menuconfig' layout: created new "ACPI Support"
submenu, unified IA32 and IA64 options, added new "Boot using ACPI
tables" option, etc.

Increased the default timeout for the EC driver from 1ms to 10ms
(1000 cycles of 10us) to try to address AE_TIME errors during EC
transactions.

 ----------------------------------------
Summary of changes for this label: 11_02_01

1) ACPI CA Core Subsystem:

ACPI 2.0 Support: Implemented ACPI 2.0 64-bit Field access
(QWordAcc keyword). All ACPI 2.0 64-bit support is now
implemented.

OSL Interfaces: Several of the OSL (AcpiOs*) interfaces required
changes to support ACPI 2.0 Qword field access.  Read/Write
PciConfiguration(), Read/Write Memory(), and Read/Write Port() now
accept an ACPI_INTEGER (64 bits) as the value parameter.  Also,
the value parameter for the address space handler interface is now
an ACPI_INTEGER.  OSL implementations of these interfaces must now
handle the case where the Width parameter is 64.

Index Fields: Fixed a problem where unaligned bit assembly and
disassembly for IndexFields was not supported correctly.

Index and Bank Fields:  Nested Index and Bank Fields are now
supported. During field access, a check is performed to ensure
that the value written to an Index or Bank register is not out of
the range of the register.  The Index (or Bank) register is
written before each access to the field data. Future support will
include allowing individual IndexFields to be wider than the
DataRegister width.

Fields: Fixed a problem where the AML interpreter was incorrectly
attempting to write beyond the end of a Field/OpRegion.  This was
a boundary case that occurred when a DWORD field was written to a
BYTE access OpRegion, forcing multiple writes and causing the
interpreter to write one datum too many.

Fields: Fixed a problem with Field/OpRegion access where the
starting bit address of a field was incorrectly calculated if the
current access type was wider than a byte (WordAcc, DwordAcc, or
QwordAcc).

Fields: Fixed a problem where forward references to individual
FieldUnits (individual Field names within a Field definition) were
not resolved during the AML table load.

Fields: Fixed a problem where forward references from a Field
definition to the parent Operation Region definition were not
resolved during the AML table load.

Fields: Duplicate FieldUnit names within a scope are now detected
during AML table load.

Acpi Interfaces: Fixed a problem where the AcpiGetName() interface
returned an incorrect name for the root node.

Code and Data Size: Code and Data optimizations have permitted new
feature development with an actual reduction in the library size.
Current core subsystem library sizes are shown below.  These are
the code and data sizes for the acpica.lib produced by the
Microsoft Visual C++ 6.0 compiler, and these values do not include
any ACPI driver or OSPM code.  The debug version of the code
includes the debug output trace mechanism and has a larger code
and data size.  Note that these values will vary depending on the
efficiency of the compiler and the compiler options used during
generation.

  Previous Release (10_18_01):
     Non-Debug Version:  63.9K Code,   5.1K Data,   69.0K Total
     Debug Version:     136.7K Code,  57.4K Data,  194.2K Total

  Current Release:
     Non-Debug Version:  63.7K Code,   5.2K Data,   68.9K Total
     Debug Version:     134.5K Code,  55.4K Data,  189.9K Total

 2) Linux:

Improved /proc processor output (Pavel Machek) Re-added
MODULE_LICENSE("GPL") to all modules.

 3) ASL Compiler version X2030:

Duplicate FieldUnit names within a scope are now detected and
flagged as errors.

 4) Documentation:

Programmer Reference updated to reflect OSL and address space
handler interface changes described above.

----------------------------------------
Summary of changes for this label: 10_18_01

ACPI CA Core Subsystem:

Fixed a problem with the internal object reference count mechanism
that occasionally caused premature object deletion. This resolves
all of the outstanding problem reports where an object is deleted
in the middle of an interpreter evaluation.  Although this problem
only showed up in rather obscure cases, the solution to the
problem involved an adjustment of all reference counts involving
objects attached to namespace nodes.

Fixed a problem with Field support in the interpreter where
writing to an aligned field whose length is an exact multiple (2
or greater) of the field access granularity would cause an attempt
to write beyond the end of the field.

The top level AML opcode execution functions within the
interpreter have been renamed with a more meaningful and
consistent naming convention.  The modules exmonad.c and
exdyadic.c were eliminated.  New modules are exoparg1.c,
exoparg2.c, exoparg3.c, and exoparg6.c.

Support for the ACPI 2.0 "Mid" ASL operator has been implemented.

Fixed a problem where the AML debugger was causing some internal
objects to not be deleted during subsystem termination.

Fixed a problem with the external AcpiEvaluateObject interface
where the subsystem would fault if the named object to be
evaluated refered to a constant such as Zero, Ones, etc.

Fixed a problem with IndexFields and BankFields where the
subsystem would fault if the index, data, or bank registers were
not defined in the same scope as the field itself.

Added printf format string checking for compilers that support
this feature.  Corrected more than 50 instances of issues with
format specifiers within invocations of ACPI_DEBUG_PRINT
throughout the core subsystem code.

The ASL "Revision" operator now returns the ACPI support level
implemented in the core - the value "2" since the ACPI 2.0 support
is more than 50% implemented.

Enhanced the output of the AML debugger "dump namespace" command
to output in a more human-readable form.

Current core subsystem library code sizes are shown below.  These

are the code and data sizes for the acpica.lib produced by the
Microsoft Visual C++ 6.0 compiler, and these values do not include
any ACPI driver or OSPM code.  The debug version of the code
includes the full debug trace mechanism -- leading to a much

larger code and data size.  Note that these values will vary
depending on the efficiency of the compiler and the compiler
options used during generation.

     Previous Label (09_20_01):
     Non-Debug Version:    65K Code,     5K Data,     70K Total
     Debug Version:       138K Code,    58K Data,    196K Total

     This Label:

     Non-Debug Version:  63.9K Code,   5.1K Data,   69.0K Total
     Debug Version:     136.7K Code,  57.4K Data,  194.2K Total

Linux:

Implemented a "Bad BIOS Blacklist" to track machines that have
known ASL/AML problems.

Enhanced the /proc interface for the thermal zone driver and added
support for _HOT (the critical suspend trip point).  The 'info'
file now includes threshold/policy information, and allows setting
of _SCP (cooling preference) and _TZP (polling frequency) values
to the 'info' file. Examples: "echo tzp=5 > info" sets the polling
frequency to 5 seconds, and "echo scp=1 > info" sets the cooling
preference to the passive/quiet mode (if supported by the ASL).

Implemented a workaround for a gcc bug that resuted in an OOPs
when loading the control method battery driver.

 ----------------------------------------
Summary of changes for this label: 09_20_01

 ACPI CA Core Subsystem:

The AcpiEnableEvent and AcpiDisableEvent interfaces have been
modified to allow individual GPE levels to be flagged as wake-
enabled (i.e., these GPEs are to remain enabled when the platform
sleeps.)

The AcpiEnterSleepState and AcpiLeaveSleepState interfaces now
support wake-enabled GPEs.  This means that upon entering the
sleep state, all GPEs that are not wake-enabled are disabled.
When leaving the sleep state, these GPEs are reenabled.

A local double-precision divide/modulo module has been added to
enhance portability to OS kernels where a 64-bit math library is
not available.  The new module is "utmath.c".

Several optimizations have been made to reduce the use of CPU
stack.  Originally over 2K, the maximum stack usage is now below
2K at 1860  bytes (1.82k)

Fixed a problem with the AcpiGetFirmwareTable interface where the
root table pointer was not mapped into a logical address properly.

Fixed a problem where a NULL pointer was being dereferenced in the
interpreter code for the ASL Notify operator.

Fixed a problem where the use of the ASL Revision operator
returned an error. This operator now returns the current version
of the ACPI CA core subsystem.

Fixed a problem where objects passed as control method parameters
to AcpiEvaluateObject were always deleted at method termination.
However, these objects may end up being stored into the namespace
by the called method.  The object reference count mechanism was
applied to these objects instead of a force delete.

Fixed a problem where static strings or buffers (contained in the
AML code) that are declared as package elements within the ASL
code could cause a fault because the interpreter would attempt to
delete them.  These objects are now marked with the "static
object" flag to prevent any attempt to delete them.

Implemented an interpreter optimization to use operands directly
from the state object instead of extracting the operands to local
variables.  This reduces stack use and code size, and improves
performance.

The module exxface.c was eliminated as it was an unnecessary extra
layer of code.

Current core subsystem library code sizes are shown below.  These
are the code and data sizes for the acpica.lib produced by the
Microsoft Visual C++ 6.0 compiler, and these values do not include
any ACPI driver or OSPM code.  The debug version of the code
includes the full debug trace mechanism -- leading to a much
larger code and data size.  Note that these values will vary
depending on the efficiency of the compiler and the compiler
options used during generation.

  Non-Debug Version:  65K Code,   5K Data,   70K Total
(Previously 69K)   Debug Version:     138K Code,  58K Data,  196K
Total  (Previously 195K)

Linux:

Support for ACPI 2.0 64-bit integers has been added.   All ACPI
Integer objects are now 64 bits wide

All Acpi data types and structures are now in lower case.  Only
Acpi macros are upper case for differentiation.

 Documentation:

Changes to the external interfaces as described above.

 ----------------------------------------
Summary of changes for this label: 08_31_01

 ACPI CA Core Subsystem:

A bug with interpreter implementation of the ASL Divide operator
was found and fixed.  The implicit function return value (not the
explicit store operands) was returning the remainder instead of
the quotient.  This was a longstanding bug and it fixes several
known outstanding issues on various platforms.

The ACPI_DEBUG_PRINT and function trace entry/exit macros have
been further optimized for size.  There are 700 invocations of the
DEBUG_PRINT macro alone, so each optimization reduces the size of
the debug version of the subsystem significantly.

A stack trace mechanism has been implemented.  The maximum stack
usage is about 2K on 32-bit platforms.  The debugger command "stat
stack" will display the current maximum stack usage.

All public symbols and global variables within the subsystem are
now prefixed with the string "Acpi".  This keeps all of the
symbols grouped together in a kernel map, and avoids conflicts
with other kernel subsystems.

Most of the internal fixed lookup tables have been moved into the
code segment via the const operator.

Several enhancements have been made to the interpreter to both
reduce the code size and improve performance.

Current core subsystem library code sizes are shown below.  These
are the code and data sizes for the acpica.lib produced by the
Microsoft Visual C++ 6.0 compiler, and these values do not include
any ACPI driver or OSPM code.  The debug version of the code
includes the full debug trace mechanism which contains over 700
invocations of the DEBUG_PRINT macro, 500 function entry macro
invocations, and over 900 function exit macro invocations --
leading to a much larger code and data size.  Note that these
values will vary depending on the efficiency of the compiler and
the compiler options used during generation.

        Non-Debug Version:  64K Code,   5K Data,   69K Total
Debug Version:     137K Code,  58K Data,  195K Total

 Linux:

Implemented wbinvd() macro, pending a kernel-wide definition.

Fixed /proc/acpi/event to handle poll() and short reads.

 ASL Compiler, version X2026:

Fixed a problem introduced in the previous label where the AML

code emitted for package objects produced packages with zero
length.

 ----------------------------------------
Summary of changes for this label: 08_16_01

ACPI CA Core Subsystem:

The following ACPI 2.0 ASL operators have been implemented in the
AML interpreter (These are already supported by the Intel ASL
compiler):  ToDecimalString, ToHexString, ToString, ToInteger, and
ToBuffer.  Support for 64-bit AML constants is implemented in the
AML parser, debugger, and disassembler.

The internal memory tracking mechanism (leak detection code) has
been upgraded to reduce the memory overhead (a separate tracking
block is no longer allocated for each memory allocation), and now
supports all of the internal object caches.

The data structures and code for the internal object caches have
been coelesced and optimized so that there is a single cache and
memory list data structure and a single group of functions that
implement generic cache management.  This has reduced the code
size in both the debug and release versions of the subsystem.

The DEBUG_PRINT macro(s) have been optimized for size and replaced
by ACPI_DEBUG_PRINT.  The syntax for this macro is slightly
different, because it generates a single call to an internal
function.  This results in a savings of about 90 bytes per
invocation, resulting in an overall code and data savings of about
16% in the debug version of the subsystem.

 Linux:

Fixed C3 disk corruption problems and re-enabled C3 on supporting
machines.

Integrated low-level sleep code by Patrick Mochel.

Further tweaked source code Linuxization.

Other minor fixes.

 ASL Compiler:

Support for ACPI 2.0 variable length packages is fixed/completed.

Fixed a problem where the optional length parameter for the ACPI
2.0 ToString operator.

Fixed multiple extraneous error messages when a syntax error is
detected within the declaration line of a control method.

 ----------------------------------------
Summary of changes for this label: 07_17_01

ACPI CA Core Subsystem:

Added a new interface named AcpiGetFirmwareTable to obtain any
ACPI table via the ACPI signature.  The interface can be called at
any time during kernel initialization, even before the kernel
virtual memory manager is initialized and paging is enabled.  This
allows kernel subsystems to obtain ACPI tables very early, even
before the ACPI CA subsystem is initialized.

Fixed a problem where Fields defined with the AnyAcc attribute
could be resolved to the incorrect address under the following
conditions: 1) the field width is larger than 8 bits and 2) the
parent operation region is not defined on a DWORD boundary.

Fixed a problem where the interpreter is not being locked during
namespace initialization (during execution of the _INI control
methods), causing an error when an attempt is made to release it
later.

ACPI 2.0 support in the AML Interpreter has begun and will be
ongoing throughout the rest of this year.  In this label, The Mod
operator is implemented.

Added a new data type to contain full PCI addresses named
ACPI_PCI_ID. This structure contains the PCI Segment, Bus, Device,
and Function values.

 Linux:

Enhanced the Linux version of the source code to change most
capitalized ACPI type names to lowercase. For example, all
instances of ACPI_STATUS are changed to acpi_status.  This will
result in a large diff, but the change is strictly cosmetic and
aligns the CA code closer to the Linux coding standard.

OSL Interfaces:

The interfaces to the PCI configuration space have been changed to
add the PCI Segment number and to split the single 32-bit combined
DeviceFunction field into two 16-bit fields.  This was
accomplished by moving the four values that define an address in
PCI configuration space (segment, bus, device, and function) to
the new ACPI_PCI_ID structure.

The changes to the PCI configuration space interfaces led to a
reexamination of the complete set of address space access
interfaces for PCI, I/O, and Memory.  The previously existing 18
interfaces have proven difficult to maintain (any small change
must be propagated across at least 6 interfaces) and do not easily
allow for future expansion to 64 bits if necessary.  Also, on some
systems, it would not be appropriate to demultiplex the access
width (8, 16, 32,or 64) before calling the OSL if the
corresponding native OS interfaces contain a similar access width
parameter.  For these reasons, the 18 address space interfaces
have been replaced by these 6 new ones:

AcpiOsReadPciConfiguration
AcpiOsWritePciConfiguration
AcpiOsReadMemory
AcpiOsWriteMemory
AcpiOsReadPort
AcpiOsWritePort

Added a new interface named AcpiOsGetRootPointer to allow the OSL
to perform the platform and/or OS-specific actions necessary to
obtain the ACPI RSDP table pointer.  On IA-32 platforms, this
interface will simply call down to the CA core to perform the low-
memory search for the table.  On IA-64, the RSDP is obtained from
EFI.  Migrating this interface to the OSL allows the CA core to

remain OS and platform independent.

Added a new interface named AcpiOsSignal to provide a generic
"function code and pointer" interface for various miscellaneous
signals and notifications that must be made to the host OS.   The
first such signals are intended to support the ASL Fatal and
Breakpoint operators.  In the latter case, the AcpiOsBreakpoint
interface has been obsoleted.

The definition of the AcpiFormatException interface has been
changed to simplify its use.  The caller no longer must supply a
buffer to the call; A pointer to a const string is now returned
directly.  This allows the call to be easily used in printf
statements, etc. since the caller does not have to manage a local
buffer.


 ASL Compiler, Version X2025:

The ACPI 2.0 Switch/Case/Default operators have been implemented
and are fully functional.  They will work with all ACPI 1.0
interpreters, since the operators are simply translated to If/Else
pairs.

The ACPI 2.0 ElseIf operator is implemented and will also work
with 1.0 interpreters, for the same reason.

Implemented support for ACPI 2.0 variable-length packages.  These
packages have a separate opcode, and their size is determined by
the interpreter at run-time.

Documentation The ACPI CA Programmer Reference has been updated to
reflect the new interfaces and changes to existing interfaces.

 ------------------------------------------
Summary of changes for this label: 06_15_01

 ACPI CA Core Subsystem:

Fixed a problem where a DWORD-accessed field within a Buffer
object would get its byte address inadvertently rounded down to
the nearest DWORD.  Buffers are always Byte-accessible.

 ASL Compiler, version X2024:

Fixed a problem where the Switch() operator would either fault or
hang the compiler.  Note however, that the AML code for this ACPI
2.0 operator is not yet implemented.

Compiler uses the new AcpiOsGetTimer interface to obtain compile
timings.

Implementation of the CreateField operator automatically converts
a reference to a named field within a resource descriptor from a
byte offset to a bit offset if required.

Added some missing named fields from the resource descriptor
support. These are the names that are automatically created by the
compiler to reference fields within a descriptor.  They are only
valid at compile time and are not passed through to the AML
interpreter.

Resource descriptor named fields are now typed as Integers and
subject to compile-time typechecking when used in expressions.

 ------------------------------------------
Summary of changes for this label: 05_18_01

 ACPI CA Core Subsystem:

Fixed a couple of problems in the Field support code where bits
from adjacent fields could be returned along with the proper field
bits. Restructured the field support code to improve performance,
readability and maintainability.

New DEBUG_PRINTP macro automatically inserts the procedure name
into the output, saving hundreds of copies of procedure name
strings within the source, shrinking the memory footprint of the
debug version of the core subsystem.

 Source Code Structure:

The source code directory tree was restructured to reflect the
current organization of the component architecture.  Some files
and directories have been moved and/or renamed.

 Linux:

Fixed leaking kacpidpc processes.

Fixed queueing event data even when /proc/acpi/event is not
opened.

 ASL Compiler, version X2020:

Memory allocation performance enhancement - over 24X compile time
improvement on large ASL files.  Parse nodes and namestring
buffers are now allocated from a large internal compiler buffer.

The temporary .SRC file is deleted unless the "-s" option is
specified

The "-d" debug output option now sends all output to the .DBG file
instead of the console.

"External" second parameter is now optional

"ElseIf" syntax now properly allows the predicate

Last operand to "Load" now recognized as a Target operand

Debug object can now be used anywhere as a normal object.

ResourceTemplate now returns an object of type BUFFER

EISAID now returns an object of type INTEGER

"Index" now works with a STRING operand

"LoadTable" now accepts optional parameters

"ToString" length parameter is now optional

"Interrupt (ResourceType," parse error fixed.

"Register" with a user-defined region space parse error fixed

Escaped backslash at the end of a string ("\\") scan/parse error
fixed

"Revision" is now an object of type INTEGER.



------------------------------------------
Summary of changes for this label: 05_02_01

Linux:

/proc/acpi/event now blocks properly.

Removed /proc/sys/acpi. You can still dump your DSDT from
/proc/acpi/dsdt.

 ACPI CA Core Subsystem:

Fixed a problem introduced in the previous label where some of the
"small" resource descriptor types were not recognized.

Improved error messages for the case where an ASL Field is outside
the range of the parent operation region.

 ASL Compiler, version X2018:


Added error detection for ASL Fields that extend beyond the length
of the parent operation region (only if the length of the region
is known at compile time.)  This includes fields that have a
minimum access width that is smaller than the parent region, and
individual field units that are partially or entirely beyond the
extent of the parent.



------------------------------------------
Summary of changes for this label: 04_27_01

 ACPI CA Core Subsystem:

Fixed a problem where the namespace mutex could be released at the
wrong time during execution of AcpiRemoveAddressSpaceHandler.

Added optional thread ID output for debug traces, to simplify
debugging of multiple threads.  Added context switch notification
when the debug code realizes that a different thread is now
executing ACPI code.

Some additional external data types have been prefixed with the
string "ACPI_" for consistency.  This may effect existing code.
The data types affected are the external callback typedefs - e.g.,

WALK_CALLBACK becomes ACPI_WALK_CALLBACK.

 Linux:

Fixed an issue with the OSL semaphore implementation where a
thread was waking up with an error from receiving a SIGCHLD
signal.

Linux version of ACPI CA now uses the system C library for string
manipulation routines instead of a local implementation.

Cleaned up comments and removed TBDs.

 ASL Compiler, version X2017:

Enhanced error detection and reporting for all file I/O
operations.

 Documentation:

Programmer Reference updated to version 1.06.



------------------------------------------
Summary of changes for this label: 04_13_01

 ACPI CA Core Subsystem:

Restructured support for BufferFields and RegionFields.
BankFields support is now fully operational.  All known 32-bit
limitations on field sizes have been removed.  Both BufferFields
and (Operation) RegionFields are now supported by the same field
management code.

Resource support now supports QWORD address and IO resources. The
16/32/64 bit address structures and the Extended IRQ structure
have been changed to properly handle Source Resource strings.

A ThreadId of -1 is now used to indicate a "mutex not acquired"
condition internally and must never be returned by AcpiOsThreadId.
This reserved value was changed from 0 since Unix systems allow a
thread ID of 0.

Linux:

Driver code reorganized to enhance portability

Added a kernel configuration option to control ACPI_DEBUG

Fixed the EC driver to honor _GLK.

ASL Compiler, version X2016:

Fixed support for the "FixedHw" keyword.  Previously, the FixedHw
address space was set to 0, not 0x7f as it should be.

 ------------------------------------------
Summary of changes for this label: 03_13_01

 ACPI CA Core Subsystem:

During ACPI initialization, the _SB_._INI method is now run if
present.

Notify handler fix - notifies are deferred until the parent method
completes execution.  This fixes the "mutex already acquired"
issue seen occasionally.

Part of the "implicit conversion" rules in ACPI 2.0 have been
found to cause compatibility problems with existing ASL/AML.  The
convert "result-to-target-type" implementation has been removed
for stores to method Args and Locals.  Source operand conversion
is still fully implemented.  Possible changes to ACPI 2.0
specification pending.

Fix to AcpiRsCalculatePciRoutingTableLength to return correct
length.

Fix for compiler warnings for 64-bit compiles.

 Linux:

/proc output aligned for easier parsing.

Release-version compile problem fixed.

New kernel configuration options documented in Configure.help.

IBM 600E - Fixed Sleep button may generate "Invalid <NULL>
context" message.

 OSPM:

Power resource driver integrated with bus manager.

Fixed kernel fault during active cooling for thermal zones.

Source Code:

The source code tree has been restructured.



------------------------------------------
Summary of changes for this label: 03_02_01

 Linux OS Services Layer (OSL):

Major revision of all Linux-specific code.

Modularized all ACPI-specific drivers.

Added new thermal zone and power resource drivers.

Revamped /proc interface (new functionality is under /proc/acpi).

New kernel configuration options.

 Linux known issues:

New kernel configuration options not documented in Configure.help
yet.


Module dependencies not currently implemented. If used, they
should be loaded in this order: busmgr, power, ec, system,
processor, battery, ac_adapter, button, thermal.

Modules will not load if CONFIG_MODVERSION is set.

IBM 600E - entering S5 may reboot instead of shutting down.

IBM 600E - Sleep button may generate "Invalid <NULL> context"
message.

Some systems may fail with "execution mutex already acquired"
message.

 ACPI CA Core Subsystem:

Added a new OSL Interface, AcpiOsGetThreadId.  This was required
for the  deadlock detection code. Defined to return a non-zero, 32-
bit thread ID for the currently executing thread.  May be a non-
zero constant integer on single-thread systems.

Implemented deadlock detection for internal subsystem mutexes.  We
may add conditional compilation for this code (debug only) later.

ASL/AML Mutex object semantics are now fully supported.  This
includes multiple acquires/releases by owner and support for the

Mutex SyncLevel parameter.

A new "Force Release" mechanism automatically frees all ASL
Mutexes that have been acquired but not released when a thread
exits the interpreter.  This forces conformance to the ACPI spec
("All mutexes must be released when an invocation exits") and
prevents deadlocked ASL threads.  This mechanism can be expanded
(later) to monitor other resource acquisitions if OEM ASL code
continues to misbehave (which it will).

Several new ACPI exception codes have been added for the Mutex
support.

Recursive method calls are now allowed and supported (the ACPI
spec does in fact allow recursive method calls.)  The number of
recursive calls is subject to the restrictions imposed by the
SERIALIZED method keyword and SyncLevel (ACPI 2.0) method
parameter.

Implemented support for the SyncLevel parameter for control
methods (ACPI 2.0 feature)

Fixed a deadlock problem when multiple threads attempted to use
the interpreter.

Fixed a problem where the string length of a String package
element was not always set in a package returned from
AcpiEvaluateObject.

Fixed a problem where the length of a String package element was
not always included in the length of the overall package returned
from AcpiEvaluateObject.

Added external interfaces (Acpi*) to the ACPI debug memory
manager.  This manager keeps a list of all outstanding
allocations, and can therefore detect memory leaks and attempts to
free memory blocks more than once. Useful for code such as the
power manager, etc.  May not be appropriate for device drivers.
Performance with the debug code enabled is slow.

The ACPI Global Lock is now an optional hardware element.

 ASL Compiler Version X2015:

Integrated changes to allow the compiler to be generated on
multiple platforms.

Linux makefile added to generate the compiler on Linux

 Source Code:

All platform-specific headers have been moved to their own
subdirectory, Include/Platform.

New source file added, Interpreter/ammutex.c

New header file, Include/acstruct.h

 Documentation:

The programmer reference has been updated for the following new
interfaces: AcpiOsGetThreadId AcpiAllocate AcpiCallocate AcpiFree

 ------------------------------------------
Summary of changes for this label: 02_08_01

Core ACPI CA Subsystem: Fixed a problem where an error was
incorrectly returned if the return resource buffer was larger than
the actual data (in the resource interfaces).

References to named objects within packages are resolved to the

full pathname string before packages are returned directly (via
the AcpiEvaluateObject interface) or indirectly via the resource
interfaces.

Linux OS Services Layer (OSL):

Improved /proc battery interface.


Added C-state debugging output and other miscellaneous fixes.

ASL Compiler Version X2014:

All defined method arguments can now be used as local variables,
including the ones that are not actually passed in as parameters.
The compiler tracks initialization of the arguments and issues an
exception if they are used without prior assignment (just like
locals).

The -o option now specifies a filename prefix that is used for all
output files, including the AML output file.  Otherwise, the
default behavior is as follows:  1) the AML goes to the file
specified in the DSDT.  2) all other output files use the input
source filename as the base.

 ------------------------------------------
Summary of changes for this label: 01_25_01

Core ACPI CA Subsystem: Restructured the implementation of object
store support within the  interpreter.  This includes support for
the Store operator as well  as any ASL operators that include a
target operand.

Partially implemented support for Implicit Result-to-Target
conversion. This is when a result object is converted on the fly
to the type of  an existing target object.  Completion of this
support is pending  further analysis of the ACPI specification
concerning this matter.

CPU-specific code has been removed from the subsystem (hardware
directory).

New Power Management Timer functions added

Linux OS Services Layer (OSL): Moved system state transition code
to the core, fixed it, and modified  Linux OSL accordingly.

Fixed C2 and C3 latency calculations.


We no longer use the compilation date for the version message on
initialization, but retrieve the version from AcpiGetSystemInfo().

Incorporated for fix Sony VAIO machines.

Documentation:  The Programmer Reference has been updated and
reformatted.


ASL Compiler:  Version X2013: Fixed a problem where the line
numbering and error reporting could get out  of sync in the
presence of multiple include files.

 ------------------------------------------
Summary of changes for this label: 01_15_01

Core ACPI CA Subsystem:

Implemented support for type conversions in the execution of the
ASL  Concatenate operator (The second operand is converted to
match the type  of the first operand before concatenation.)

Support for implicit source operand conversion is partially
implemented.   The ASL source operand types Integer, Buffer, and
String are freely  interchangeable for most ASL operators and are
converted by the interpreter  on the fly as required.  Implicit
Target operand conversion (where the  result is converted to the
target type before storing) is not yet implemented.

Support for 32-bit and 64-bit BCD integers is implemented.

Problem fixed where a field read on an aligned field could cause a
read  past the end of the field.

New exception, AE_AML_NO_RETURN_VALUE, is returned when a method
does not return a value, but the caller expects one.  (The ASL
compiler flags this as a warning.)

ASL Compiler:

Version X2011:
1. Static typechecking of all operands is implemented. This
prevents the use of invalid objects (such as using a Package where
an Integer is required) at compile time instead of at interpreter
run-time.
2. The ASL source line is printed with ALL errors and warnings.
3. Bug fix for source EOF without final linefeed.
4. Debug option is split into a parse trace and a namespace trace.
5. Namespace output option (-n) includes initial values for
integers and strings.
6. Parse-only option added for quick syntax checking.
7. Compiler checks for duplicate ACPI name declarations

Version X2012:
1. Relaxed typechecking to allow interchangeability between
strings, integers, and buffers.  These types are now converted by
the interpreter at runtime.
2. Compiler reports time taken by each internal subsystem in the
debug         output file.


 ------------------------------------------
Summary of changes for this label: 12_14_00

ASL Compiler:

This is the first official release of the compiler. Since the
compiler requires elements of the Core Subsystem, this label
synchronizes everything.

------------------------------------------
Summary of changes for this label: 12_08_00


Fixed a problem where named references within the ASL definition
of both OperationRegions and CreateXXXFields did not work
properly.  The symptom was an AE_AML_OPERAND_TYPE during
initialization of the region/field. This is similar (but not
related internally) to the problem that was fixed in the last
label.

Implemented both 32-bit and 64-bit support for the BCD ASL
functions ToBCD and FromBCD.

Updated all legal headers to include "2000" in the copyright
years.

 ------------------------------------------
Summary of changes for this label: 12_01_00

Fixed a problem where method invocations within the ASL definition
of both OperationRegions and CreateXXXFields did not work
properly.  The symptom was an AE_AML_OPERAND_TYPE during
initialization of the region/field:

  nsinit-0209: AE_AML_OPERAND_TYPE while getting region arguments
[DEBG]   ammonad-0284: Exec_monadic2_r/Not: bad operand(s)
(0x3005)

Fixed a problem where operators with more than one nested
subexpression would fail.  The symptoms were varied, by mostly
AE_AML_OPERAND_TYPE errors.  This was actually a rather serious
problem that has gone unnoticed until now.

  Subtract (Add (1,2), Multiply (3,4))

Fixed a problem where AcpiGetHandle didn't quite get fixed in the
previous build (The prefix part of a relative path was handled
incorrectly).

Fixed a problem where Operation Region initialization failed if
the operation region name was a "namepath" instead of a simple
"nameseg". Symptom was an AE_NO_OPERAND error.

Fixed a problem where an assignment to a local variable via the
indirect RefOf mechanism only worked for the first such
assignment.  Subsequent assignments were ignored.

 ------------------------------------------
Summary of changes for this label: 11_15_00

ACPI 2.0 table support with backwards support for ACPI 1.0 and the
0.71 extensions.  Note: although we can read ACPI 2.0 BIOS tables,
the AML  interpreter does NOT have support for the new 2.0 ASL
grammar terms at this time.

All ACPI hardware access is via the GAS structures in the ACPI 2.0
FADT.

All physical memory addresses across all platforms are now 64 bits
wide. Logical address width remains dependent on the platform
(i.e., "void *").

AcpiOsMapMemory interface changed to a 64-bit physical address.

The AML interpreter integer size is now 64 bits, as per the ACPI
2.0 specification.

For backwards compatibility with ACPI 1.0, ACPI tables with a
revision number less than 2 use 32-bit integers only.

Fixed a problem where the evaluation of OpRegion operands did not
always resolve them to numbers properly.

------------------------------------------
Summary of changes for this label: 10_20_00

Fix for CBN_._STA issue.  This fix will allow correct access to
CBN_ OpRegions when the _STA returns 0x8.

Support to convert ACPI constants (Ones, Zeros, One) to actual
values before a package object is returned

Fix for method call as predicate to if/while construct causing
incorrect if/while behavior

Fix for Else block package lengths sometimes calculated wrong (if
block > 63 bytes)

Fix for Processor object length field, was always zero

Table load abort if FACP sanity check fails

Fix for problem with Scope(name) if name already exists

Warning emitted if a named object referenced cannot be found
(resolved) during method execution.





------------------------------------------
Summary of changes for this label: 9_29_00

New table initialization interfaces: AcpiInitializeSubsystem no
longer has any parameters AcpiFindRootPointer - Find the RSDP (if
necessary) AcpiLoadTables (RSDP) - load all tables found at RSDP-
>RSDT Obsolete Interfaces AcpiLoadFirmwareTables - replaced by
AcpiLoadTables

Note: These interface changes require changes to all existing OSDs

The PCI_Config default address space handler is always installed
at the root namespace object.

-------------------------------------------
Summary of changes for this label: 09_15_00

The new initialization architecture is implemented.  New
interfaces are: AcpiInitializeSubsystem (replaces AcpiInitialize)
AcpiEnableSubsystem Obsolete Interfaces: AcpiLoadNamespace

(Namespace is automatically loaded when a table is loaded)

The ACPI_OPERAND_OBJECT has been optimized to shrink its size from
52 bytes to 32 bytes.  There is usually one of these for every
namespace object, so the memory savings is significant.

Implemented just-in-time evaluation of the CreateField operators.

Bug fixes for IA-64 support have been integrated.

Additional code review comments have been implemented

The so-called "third pass parse" has been replaced by a final walk
through the namespace to initialize all operation regions (address
spaces) and fields that have not yet been initialized during the
execution of the various _INI and REG methods.

New file - namespace/nsinit.c

-------------------------------------------
Summary of changes for this label: 09_01_00

Namespace manager data structures have been reworked to change the
primary  object from a table to a single object.  This has
resulted in dynamic memory  savings of 3X within the namespace and
2X overall in the ACPI CA subsystem.

Fixed problem where the call to AcpiEvFindPciRootBuses was
inadvertently left  commented out.

Reduced the warning count when generating the source with the GCC
compiler.

Revision numbers added to each module header showing the
SourceSafe version of the file.  Please refer to this version
number when giving us feedback or comments on individual modules.

The main object types within the subsystem have been renamed to
clarify their  purpose:

ACPI_INTERNAL_OBJECT -> ACPI_OPERAND_OBJECT
ACPI_GENERIC_OP -> ACPI_PARSE_OBJECT
ACPI_NAME_TABLE_ENTRY -> ACPI_NAMESPACE_NODE

NOTE: no changes to the initialization sequence are included in
this label.

-------------------------------------------
Summary of changes for this label: 08_23_00

Fixed problem where TerminateControlMethod was being called
multiple times per  method

Fixed debugger problem where single stepping caused a semaphore to
be  oversignalled

Improved performance through additional parse object caching -
added  ACPI_EXTENDED_OP type

-------------------------------------------
Summary of changes for this label: 08_10_00

Parser/Interpreter integration:  Eliminated the creation of
complete parse trees  for ACPI tables and control methods.
Instead, parse subtrees are created and  then deleted as soon as
they are processed (Either entered into the namespace or  executed
by the interpreter).  This reduces the use of dynamic kernel
memory  significantly. (about 10X)

Exception codes broken into classes and renumbered.  Be sure to
recompile all  code that includes acexcep.h.  Hopefully we won't
have to renumber the codes  again now that they are split into
classes (environment, programmer, AML code,  ACPI table, and
internal).

Fixed some additional alignment issues in the Resource Manager
subcomponent

Implemented semaphore tracking in the AcpiExec utility, and fixed
several places  where mutexes/semaphores were being unlocked
without a corresponding lock  operation.  There are no known
semaphore or mutex "leaks" at this time.

Fixed the case where an ASL Return operator is used to return an
unnamed  package.

-------------------------------------------
Summary of changes for this label: 07_28_00

Fixed a problem with the way addresses were calculated in
AcpiAmlReadFieldData()  and AcpiAmlWriteFieldData(). This problem
manifested itself when a Field was  created with WordAccess or
DwordAccess, but the field unit defined within the  Field was less

than a Word or Dword.

Fixed a problem in AmlDumpOperands() module's loop to pull
operands off of the  operand stack to display information. The
problem manifested itself as a TLB  error on 64-bit systems when
accessing an operand stack with two or more  operands.

Fixed a problem with the PCI configuration space handlers where
context was  getting confused between accesses. This required a
change to the generic address  space handler and address space
setup definitions. Handlers now get both a  global handler context
(this is the one passed in by the user when executing
AcpiInstallAddressSpaceHandler() and a specific region context
that is unique to  each region (For example, the _ADR, _SEG and
_BBN values associated with a  specific region). The generic
function definitions have changed to the  following:

typedef ACPI_STATUS (*ADDRESS_SPACE_HANDLER) ( UINT32 Function,
UINT32 Address, UINT32 BitWidth, UINT32 *Value, void
*HandlerContext, // This used to be void *Context void
*RegionContext); // This is an additional parameter

typedef ACPI_STATUS (*ADDRESS_SPACE_SETUP) ( ACPI_HANDLE
RegionHandle, UINT32 Function, void *HandlerContext,  void
**RegionContext); // This used to be **ReturnContext

-------------------------------------------
Summary of changes for this label: 07_21_00

Major file consolidation and rename.  All files within the
interpreter have been  renamed as well as most header files.  This
was done to prevent collisions with  existing files in the host
OSs -- filenames such as "config.h" and "global.h"  seem to be
quite common.  The VC project files have been updated.  All
makefiles  will require modification.

The parser/interpreter integration continues in Phase 5 with the
implementation  of a complete 2-pass parse (the AML is parsed
twice) for each table;  This  avoids the construction of a huge
parse tree and therefore reduces the amount of  dynamic memory
required by the subsystem.  Greater use of the parse object cache
means that performance is unaffected.

Many comments from the two code reviews have been rolled in.

The 64-bit alignment support is complete.

-------------------------------------------
Summary of changes for this label: 06_30_00

With a nod and a tip of the hat to the technology of yesteryear,
we've added  support in the source code for 80 column output
devices.  The code is now mostly  constrained to 80 columns or
less to support environments and editors that 1)  cannot display
or print more than 80 characters on a single line, and 2) cannot
disable line wrapping.

A major restructuring of the namespace data structure has been
completed.  The  result is 1) cleaner and more
understandable/maintainable code, and 2) a  significant reduction
in the dynamic memory requirement for each named ACPI  object
(almost half).

-------------------------------------------
Summary of changes for this label: 06_23_00

Linux support has been added.  In order to obtain approval to get
the ACPI CA  subsystem into the Linux kernel, we've had to make
quite a few changes to the  base subsystem that will affect all
users (all the changes are generic and OS- independent).  The
effects of these global changes have been somewhat far  reaching.
Files have been merged and/or renamed and interfaces have been
renamed.   The major changes are described below.

Osd* interfaces renamed to AcpiOs* to eliminate namespace
pollution/confusion  within our target kernels.  All OSD
interfaces must be modified to match the new  naming convention.

Files merged across the subsystem.  A number of the smaller source
and header  files have been merged to reduce the file count and
increase the density of the  existing files.  There are too many
to list here.  In general, makefiles that  call out individual
files will require rebuilding.

Interpreter files renamed.  All interpreter files now have the
prefix am*  instead of ie* and is*.

Header files renamed:  The acapi.h file is now acpixf.h.  The
acpiosd.h file is  now acpiosxf.h.  We are removing references to
the acronym "API" since it is  somewhat windowsy. The new name is
"external interface" or xface or xf in the  filenames.j


All manifest constants have been forced to upper case (some were
mixed case.)   Also, the string "ACPI_" has been prepended to many
(not all) of the constants,  typedefs, and structs.

The globals "DebugLevel" and "DebugLayer" have been renamed
"AcpiDbgLevel" and  "AcpiDbgLayer" respectively.

All other globals within the subsystem are now prefixed with
"AcpiGbl_" Internal procedures within the subsystem are now
prefixed with "Acpi" (with only  a few exceptions).  The original
two-letter abbreviation for the subcomponent  remains after "Acpi"
- for example, CmCallocate became AcpiCmCallocate.

Added a source code translation/conversion utility.  Used to
generate the Linux  source code, it can be modified to generate
other types of source as well. Can  also be used to cleanup
existing source by removing extraneous spaces and blank  lines.
Found in tools/acpisrc/*

OsdUnMapMemory was renamed to OsdUnmapMemory and then
AcpiOsUnmapMemory.  (UnMap  became Unmap).

A "MaxUnits" parameter has been added to AcpiOsCreateSemaphore.
When set to  one, this indicates that the caller wants to use the

semaphore as a mutex, not a  counting semaphore.  ACPI CA uses
both types.  However, implementers of this  call may want to use
different OS primitives depending on the type of semaphore
requested.  For example, some operating systems provide separate

"mutex" and  "semaphore" interfaces - where the mutex interface is
much faster because it  doesn't have all the overhead of a full
semaphore implementation.

Fixed a deadlock problem where a method that accesses the PCI
address space can  block forever if it is the first access to the
space.

-------------------------------------------
Summary of changes for this label: 06_02_00

Support for environments that cannot handle unaligned data
accesses (e.g.  firmware and OS environments devoid of alignment
handler technology namely  SAL/EFI and the IA-64 Linux kernel) has
been added (via configurable macros) in  these three areas: -
Transfer of data from the raw AML byte stream is done via byte
moves instead of    word/dword/qword moves. - External objects are
aligned within the user buffer, including package   elements (sub-
objects). - Conversion of name strings to UINT32 Acpi Names is now
done byte-wise.

The Store operator was modified to mimic Microsoft's
implementation when storing  to a Buffer Field.

Added a check of the BM_STS bit before entering C3.

The methods subdirectory has been obsoleted and removed.  A new
file, cmeval.c  subsumes the functionality.

A 16-bit (DOS) version of AcpiExec has been developed.  The
makefile is under  the acpiexec directory.
