From 7930a661b60d1d7d0e0635a688ce1e8931b97455 Mon Sep 17 00:00:00 2001 From: Al Stone Date: Aug 18 2013 20:10:52 +0000 Subject: Imported Upstream version 20130725 --- diff --git a/changes.txt b/changes.txt index 0eb04f9..83c156b 100755 --- a/changes.txt +++ b/changes.txt @@ -1,4 +1,76 @@ ---------------------------------------- +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: @@ -65,12 +137,14 @@ longer executed properly because of a memory block that was not initialized correctly. ACPICA BZ 1016. Tomasz Nowicki . -Fixed a possible problem with the new extended sleep registers in the ACPI +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 +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 @@ -87,7 +161,8 @@ BZ 1013. 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 +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. @@ -118,7 +193,8 @@ has a much larger code and data size. 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 +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 @@ -152,7 +228,8 @@ iASL: Added control method and package support for the -so option 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 +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. @@ -165,10 +242,13 @@ ACPICA BZ 909. 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 +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 +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. @@ -220,7 +300,8 @@ has a much larger code and data size. 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. +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 @@ -235,7 +316,8 @@ 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 +currently supported display of handlers associated with the root +namespace node. ASL Test Suite: Several test suite errors have been identified and @@ -264,7 +346,8 @@ 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 +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 @@ -287,10 +370,12 @@ has a much larger code and data size. 2) iASL Compiler/Disassembler and Tools: -iASL: Implemented a new option to simplify the development of ACPI-related +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 +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. @@ -324,11 +409,13 @@ names table (above). 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 +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 +(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 @@ -341,13 +428,15 @@ 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 +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 +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 @@ -388,7 +477,8 @@ 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 +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. @@ -405,7 +495,8 @@ 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 +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 @@ -418,8 +509,10 @@ via the -e option. 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 +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. @@ -463,12 +556,15 @@ 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. +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 +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 +(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 @@ -499,7 +595,8 @@ 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 +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 @@ -538,15 +635,18 @@ 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 +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 +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 @@ -566,14 +666,18 @@ been updated. 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 +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.) +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 +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). @@ -607,14 +711,17 @@ carats (^). ACPICA BZ 984. Debugger: Completed a major update for the Disassemble 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 +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 +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: @@ -622,7 +729,8 @@ iASL/Tools: Standardized use of the stream I/O functions: 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. +Improves reliability and maintainability of the code. Bob Moore, Lv +Zheng. ACPICA BZ 981. Disassembler: Prevent duplicate External() statements. During generation @@ -744,7 +852,8 @@ ACPICA BZ 846. Makefiles: Completely removed the obsolete "Linux" makefiles under -acpica/generate/linux. These makefiles are obsolete and have been replaced +acpica/generate/linux. These makefiles are obsolete and have been +replaced by the generic unix makefiles under acpica/generate/unix. @@ -783,7 +892,8 @@ 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. +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. @@ -838,7 +948,8 @@ 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 +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 @@ -853,7 +964,8 @@ 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 +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. @@ -870,14 +982,16 @@ 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 +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. +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 @@ -901,13 +1015,15 @@ much larger code and data size. 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 +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 +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. @@ -925,7 +1041,8 @@ AE_BAD_PARAMETER was always returned. 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 +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, @@ -969,14 +1086,16 @@ 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 +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. +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, @@ -1029,7 +1148,8 @@ 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 +provided by ACPICA for Windows compatibility, and is a workaround for +BIOS AML code errors. See the description of the AcpiSetupGpeForWake interface in the @@ -1068,9 +1188,11 @@ etc.) AcpiSrc: Fixed several long-standing Linux code translation issues. Argument -descriptions in function headers are now translated properly to lower case +descriptions in function headers are now translated properly to lower +case and -underscores. ACPICA BZ 961. Also fixes translation problems such as these: +underscores. ACPICA BZ 961. Also fixes translation problems such as +these: (old -> new) i_aSL -> iASL 00-7_f -> 00-7F @@ -1112,7 +1234,8 @@ 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 +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, @@ -1149,7 +1272,8 @@ 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 +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 @@ -1173,7 +1297,8 @@ 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 +and Warning messages are now correctly recognized for both the source +code browser and the global error and warning counts. ---------------------------------------- @@ -1182,13 +1307,15 @@ browser and the global error and warning counts. 1) ACPICA Core Subsystem: -Implemented support for multiple notify handlers. This change adds support +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 +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 @@ -1229,7 +1356,8 @@ 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 +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. @@ -1250,7 +1378,8 @@ 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 +(error.txt). Send all other iASL output to a logfile (compiler.txt). +Fixed several extraneous "unrecognized operator" messages. ---------------------------------------- @@ -1260,7 +1389,8 @@ several extraneous "unrecognized operator" messages. 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 +(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 @@ -1281,8 +1411,10 @@ 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 +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 @@ -1295,10 +1427,12 @@ 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 +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. +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 @@ -1393,7 +1527,8 @@ 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. +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. @@ -1429,7 +1564,8 @@ 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 +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) @@ -1442,7 +1578,8 @@ features become unavailable: 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. +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 @@ -1493,7 +1630,8 @@ 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 +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 @@ -1551,7 +1689,8 @@ summarized below. Reduced Hardware Support: ------------------------- -This support allows for ACPI systems without the usual ACPI hardware. This +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, @@ -1571,7 +1710,8 @@ 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 +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 */ @@ -1597,7 +1737,8 @@ The new operation region Space IDs are: Resource Descriptors: --------------------- -All new ASL resource descriptors are fully supported by the iASL compiler, +All new ASL resource descriptors are fully supported by the iASL +compiler, the ASL/AML disassembler, and the ACPICA runtime Resource Manager code (including @@ -1615,15 +1756,18 @@ 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 +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 + Connection // Declare Field Connection +attributes AccessAs: AttribBytes (n) // Read/Write N-Bytes Protocol - AccessAs: AttribRawBytes (n) // Raw 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 @@ -1658,7 +1802,8 @@ 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 +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. @@ -1705,7 +1850,8 @@ Non-ACPI 5.0 changes for this release: 1) ACPICA Core Subsystem: -Fix a problem with operation region declarations where a failure can occur +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 @@ -1757,7 +1903,8 @@ now allowed after every 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 +Disassembler: Fix problem with disassembly of the DataTableRegion +operator where an inadvertent "Unhandled deferred opcode" message could be generated. @@ -1785,15 +1932,18 @@ 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. +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 +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 +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 @@ -1806,8 +1956,10 @@ 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 +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 @@ -1829,13 +1981,15 @@ 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- +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 +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 @@ -1844,7 +1998,8 @@ 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 +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 @@ -1875,7 +2030,8 @@ 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 +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 @@ -1887,9 +2043,11 @@ 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 +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 +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 @@ -1935,11 +2093,13 @@ provides the following functionality: 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. + 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 +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. @@ -1972,7 +2132,8 @@ signature. Now, only allow SSDT, OEMx, and a null signature. History: 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 +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. @@ -2039,11 +2200,14 @@ 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 +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 +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, @@ -2082,7 +2246,8 @@ data size. 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 +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 @@ -2108,7 +2273,8 @@ 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 +iASL/DTC: Finish support for expression evaluation. Added a new +expression parser that implements c-style operator precedence and parenthesization. ACPICA bugzilla @@ -2129,10 +2295,12 @@ 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 +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) +iASL: Add a * option to generate all template files (as a synonym for +ALL) as in "iasl -T *" or "iasl -T ALL". @@ -2158,7 +2326,8 @@ 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 +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 @@ -2188,7 +2357,8 @@ header files, disassembler, table compiler, and template generator. Bob Moore, Lin Ming. -AcpiXtract: Correctly handle embedded comments and messages from AcpiDump. +AcpiXtract: Correctly handle embedded comments and messages from +AcpiDump. Apparently some or all versions of acpidump will occasionally emit a comment like @@ -2209,8 +2379,10 @@ for a user-defined address space. This is used by the ASL test suite 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. +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 @@ -2222,15 +2394,18 @@ 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 +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 +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 +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. @@ -2278,7 +2453,8 @@ 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 +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 @@ -2311,7 +2487,8 @@ a single screen, instead of help subcommands. ACPICA Bugzilla 897. 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 +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 @@ -2323,7 +2500,8 @@ 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 +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, @@ -2380,7 +2558,8 @@ much larger code and data size. 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 +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 @@ -2407,15 +2586,18 @@ a handful of new interfaces: 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" +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, +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 +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. @@ -2462,13 +2644,15 @@ 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 +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 +Was 4K, increased to 16K. Also enhanced error messages for debugger +method execution, including the buffer overflow case. ---------------------------------------- @@ -2483,8 +2667,10 @@ 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, +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. @@ -2495,7 +2681,8 @@ 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. +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 @@ -2512,8 +2699,10 @@ much larger code and data size. 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 +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 @@ -2527,8 +2716,10 @@ be filled in at runtime. iASL now allows this as long as there is a 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- +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. @@ -2555,7 +2746,8 @@ 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. +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 @@ -2574,7 +2766,8 @@ 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. +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. @@ -2602,10 +2795,12 @@ much larger code and data size. 2) iASL Compiler/Disassembler and Tools: -iASL/Disassembler: Write ACPI errors to stderr instead of the output file. +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 +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. @@ -2620,7 +2815,8 @@ of size_t on 32-bit versus 64-bit generations. Lin Ming. 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 +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 @@ -2680,13 +2876,15 @@ much larger code and data size. 2) iASL Compiler/Disassembler and Tools: -iASL/Disassembler: Added a new option (-da, "disassemble all") to load the +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 +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. @@ -2715,7 +2913,8 @@ interface. This interface will set or clear individual GPEs for wakeup. interfaces are now used for "runtime" GPEs only. -Changed the behavior of the GPE install/remove handler interfaces. The GPE +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 @@ -2727,10 +2926,13 @@ 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 +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 +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. @@ -2774,7 +2976,8 @@ 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 +Added support for Mac OS X in the Unix OSL used for iASL and AcpiExec. +Use the #define __APPLE__ to enable this support. ---------------------------------------- @@ -2789,8 +2992,10 @@ 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 +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 @@ -2833,7 +3038,8 @@ 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 +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. @@ -2902,9 +3108,12 @@ 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 +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 @@ -2934,10 +3143,12 @@ much larger code and data size. 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 +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 +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. @@ -2954,10 +3165,12 @@ 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 +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 +dynamically loaded via the Load() operator. Also cleaned up output for +the - ta and -tc options. ACPICA BZ 853. @@ -2979,7 +3192,8 @@ 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 +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. @@ -3000,10 +3214,12 @@ 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 +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 +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 @@ -3048,12 +3264,14 @@ 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 +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 +Introduced in commit ae7d6fd: Properly handle externals with parent- +prefix (carat). Fixes a string length allocation calculation. Lin Ming. ---------------------------------------- @@ -3076,7 +3294,8 @@ 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 +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. @@ -3089,7 +3308,8 @@ 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 +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. @@ -3137,7 +3357,8 @@ 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 +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. @@ -3151,16 +3372,19 @@ code was migrated from ACPI 1.0 (with 32-bit AML integers) to ACPI 2.0 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. +for now for compatibility with existing device driver code. ACPICA BZ +824. -Removed the unused UINT32_STRUCT type, and the obsolete Integer64 field in +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 +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 @@ -3185,10 +3409,12 @@ No functional changes for this release. 1) ACPI CA Core Subsystem: -Enhanced automatic data type conversions for predefined name repairs. This +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, +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 @@ -3197,15 +3423,18 @@ 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 +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 +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. @@ -3217,20 +3446,25 @@ 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 +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 +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 +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 @@ -3309,7 +3543,8 @@ 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 +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- @@ -3362,7 +3597,8 @@ 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 +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. @@ -3402,7 +3638,8 @@ much larger code and data size. 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, +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 @@ -3425,10 +3662,12 @@ files. 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 +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 +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 @@ -3443,14 +3682,16 @@ 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 +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 +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 @@ -3479,7 +3720,8 @@ 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 +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 @@ -3489,7 +3731,8 @@ 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 +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 @@ -3507,7 +3750,8 @@ 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 +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. @@ -3526,8 +3770,10 @@ 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 +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. @@ -3540,7 +3786,8 @@ 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 +be repaired: _ALR, _CSD, _HPX, _MLS, _PRT, _PSS, _TRT, and _TSS. ACPICA +BZ 790. Fixed a regression introduced in 20090625 for the AcpiGetDevices @@ -3560,7 +3807,8 @@ 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 +(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 @@ -3601,7 +3849,8 @@ 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 +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. @@ -3612,7 +3861,8 @@ 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 +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. @@ -3620,7 +3870,8 @@ 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 +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. @@ -3629,7 +3880,8 @@ 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 +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 @@ -3639,13 +3891,15 @@ 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 +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 +Fixed a possible memory leak in the predefined validation/repair code +when a buffer is automatically converted to an expected string object. @@ -3681,7 +3935,8 @@ predefined names and control methods (31 total). ACPICA BZ 769. 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 +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 @@ -3705,7 +3960,8 @@ 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. +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 @@ -3721,7 +3977,8 @@ 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 +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 @@ -3768,7 +4025,8 @@ after an invalid sub-table ID. 1) ACPI CA Core Subsystem: -Fixed a compatibility issue with the recently released I/O port protection +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 @@ -3812,7 +4070,8 @@ much larger code and data size. 2) iASL Compiler/Disassembler and Tools: -iASL: Fixed a generation warning from Bison 2.3 and fixed several warnings +iASL: Fixed a generation warning from Bison 2.3 and fixed several +warnings on the 64-bit build. @@ -3824,13 +4083,16 @@ 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 +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 +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 @@ -3897,12 +4159,14 @@ 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 +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, +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. @@ -3940,13 +4204,17 @@ aetables.c 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 +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. +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 +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 @@ -3956,14 +4224,17 @@ 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. +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 +registers. AcpiHwReadMultiple and AcpiHwWriteMultiple. These two +functions +now handle the split registers for PM1 Status, Enable, and Control. +ACPICA BZ 746. @@ -3973,7 +4244,8 @@ 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 +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. @@ -3988,7 +4260,8 @@ 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 +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 @@ -3998,7 +4271,8 @@ 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 +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 @@ -4011,7 +4285,8 @@ 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 +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 @@ -4053,8 +4328,10 @@ 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 +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 @@ -4112,7 +4389,8 @@ 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 +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 @@ -4145,9 +4423,11 @@ much larger code and data size. 2) iASL Compiler/Disassembler and Tools: -iASL: Completed the '-e' option to include additional ACPI tables in order +iASL: Completed the '-e' option to include additional ACPI tables in +order to -aid with disassembly and External statement generation. ACPICA BZ 742. Lin +aid with disassembly and External statement generation. ACPICA BZ 742. +Lin Ming. iASL: Removed the "named object in while loop" error. The compiler cannot @@ -4157,7 +4437,8 @@ Disassembler: Implemented support for FADT revision 2 (MS extension). ACPICA BZ 743. -Disassembler: Updates for several ACPI data tables (HEST, EINJ, and MCFG). +Disassembler: Updates for several ACPI data tables (HEST, EINJ, and +MCFG). ---------------------------------------- 31 October 2008. Summary of changes for version 20081031: @@ -4175,37 +4456,48 @@ 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 +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 +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 +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 +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. +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 +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 +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 @@ -4219,7 +4511,8 @@ 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 +(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 @@ -4261,13 +4554,15 @@ much larger code and data size. iASL: Improved disassembly of external method calls. Added the -e option to -allow the inclusion of additional ACPI tables to help with the disassembly +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 +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 @@ -4298,7 +4593,8 @@ 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 +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 @@ -4315,7 +4611,8 @@ 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 +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. @@ -4351,7 +4648,8 @@ much larger code and data size. 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 +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 @@ -4361,7 +4659,8 @@ 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 +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. @@ -4415,7 +4714,8 @@ 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- +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 @@ -4447,7 +4747,8 @@ 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 +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 @@ -4467,8 +4768,10 @@ 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. +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. @@ -4494,8 +4797,10 @@ much larger code and data size. 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 +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. @@ -4507,15 +4812,18 @@ 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 +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 +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 +pathnames within the Include operator. previously, only relative +pathnames were supported. iASL: Enforce minimum 1 interrupt in interrupt macro and Resource @@ -4576,7 +4884,8 @@ 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 +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 @@ -4637,13 +4946,15 @@ 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 +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. +All of this allows testing of the Load and Unload operators from +AcpiExec. Debugger: update tables command for unloaded tables. Handle unloaded tables @@ -4676,7 +4987,8 @@ pointer. Fixed a problem where the _SST execution status was incorrectly returned to -the caller of AcpiEnterSleepStatePrep. This was a regression introduced in +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 @@ -4782,7 +5094,8 @@ 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 +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. @@ -4790,7 +5103,8 @@ 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 +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. @@ -4799,7 +5113,8 @@ 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 +mostly with UINT32, but also ACPI_SIZE where a type that changes 32/64 +bit on 32/64-bit platforms is required. @@ -4821,7 +5136,8 @@ much larger code and data size. 2) iASL Compiler/Disassembler and Tools: -Implemented ACPI table revision ID validation in the disassembler. Zero is +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. @@ -4832,7 +5148,8 @@ means 32-bit and this is unusual. 2 or greater is 64-bit. 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 +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 @@ -4867,7 +5184,8 @@ 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. +PowerResource objects is no longer allowed, as per the ACPI +specification. (Bob Moore, Zhang Rui) All Reference Objects returned via the AcpiEvaluateObject interface are @@ -4877,9 +5195,11 @@ for NULL objects - either NULL package elements or unresolved named references. -Fixed a problem where an extraneous debug message was produced for package +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 +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 @@ -4889,7 +5209,8 @@ 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 +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 @@ -4907,7 +5228,8 @@ a much larger code and data size. 2) iASL Compiler/Disassembler and Tools: -Fixed a problem with the use of the Switch operator where execution of the +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 @@ -4937,7 +5259,8 @@ 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 +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: @@ -4997,22 +5320,27 @@ 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 +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 +Implemented an enhancement to the interpreter "slack mode". In the +absence of -an explicit return or an implicitly returned object from the last executed +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 +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 @@ -5024,7 +5352,8 @@ 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 +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 @@ -5058,7 +5387,8 @@ 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 +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. @@ -5070,7 +5400,8 @@ 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 +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 @@ -5089,7 +5420,8 @@ 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 +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 @@ -5104,15 +5436,18 @@ 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 +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 +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 +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 @@ -5144,11 +5479,14 @@ 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 +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 +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 @@ -5156,7 +5494,8 @@ 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 +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 @@ -5193,7 +5532,8 @@ 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 +used, causing truncation of the upper 32-bits of these addresses. Lin +Ming and Bob Moore ---------------------------------------- @@ -5202,7 +5542,8 @@ and Bob Moore 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, +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 @@ -5308,12 +5649,14 @@ a much larger code and data size. 2) iASL Compiler/Disassembler: -Implemented support to allow multiple files to be compiled/disassembled in +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. +disassembly and compilation of multiple ACPI tables in a single +directory. ---------------------------------------- 08 May 2007. Summary of changes for version 20070508: @@ -5324,8 +5667,10 @@ 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 +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. @@ -5339,13 +5684,16 @@ 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. +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 +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. @@ -5375,8 +5723,10 @@ a much larger code and data size. 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 +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. @@ -5388,7 +5738,8 @@ 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, +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 @@ -5398,7 +5749,8 @@ 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 +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 @@ -5417,7 +5769,8 @@ 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 +Removed obsolete ACPI_NO_INTEGER64_SUPPORT from two header files. This +was a remnant from the previously discontinued 16-bit support. @@ -5479,7 +5832,8 @@ 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 +Implemented enhancements to the multithreading support within the +debugger to enable improved multithreading debugging and evaluation of the subsystem. (Valery Podrezov) @@ -5514,7 +5868,8 @@ statistics upon subsystem/program termination. (Valery Podrezov) 1) ACPI CA Core Subsystem: -Optimized the Load ASL operator in the case where the source operand is an +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.) @@ -5530,7 +5885,8 @@ 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 +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 @@ -5581,22 +5937,26 @@ 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 +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 +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. +subfunctions in order to reduce CPU stack use and improve +maintainability. (Mikhail Kouzmich) -AcpiGetHandle: Fix for parameter validation to detect invalid combinations +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 @@ -5629,7 +5989,8 @@ 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 +inadvertently created with one unit instead of zero units. (BZ 464) +Fiodor Suietov. Fixed a possible memory leak and fault in AcpiExResolveObjectToValue @@ -5652,13 +6013,15 @@ a much larger code and data size. 2) iASL Compiler/Disassembler and Tools: -Fixed a compilation problem with the pre-defined Resource Descriptor field +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 +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() @@ -5667,7 +6030,8 @@ 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 +Implemented a generic batch command mode for the AcpiExec utility +(execute any AML debugger command) (Valery Podrezov). ---------------------------------------- @@ -5699,8 +6063,10 @@ 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 +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.) @@ -5721,8 +6087,10 @@ a much larger code and data size. 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 +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) @@ -5732,7 +6100,8 @@ 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 +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 @@ -5765,7 +6134,8 @@ 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 +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 @@ -5817,7 +6187,8 @@ New ACPICA interfaces: 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 +- AcpiGetTableByIndex: Allows the host to easily enumerate all ACPI +tables in the RSDT/XSDT. Other ACPICA changes: @@ -5836,7 +6207,8 @@ 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- +- 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 @@ -5857,7 +6229,8 @@ 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 +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 @@ -5902,7 +6275,8 @@ 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 +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 @@ -5920,18 +6294,22 @@ 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 +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 +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 +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- +evaluation. A not-implemented error is now returned (temporarily) for +non- constant values for this parameter. Fixed problem reports (Fiodor Suietov) integrated: @@ -5976,7 +6354,8 @@ 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 +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 @@ -6002,7 +6381,8 @@ Fixed problem reports (Valery Podrezov) integrated: 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) +- AcpiRemoveAddressSpaceHandler: validate Device handle parameter (BZ +375) - Possible memory leak, Notify sub-objects of Processor, Power, ThermalZone (BZ 376) @@ -6043,13 +6423,15 @@ 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 +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 +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 @@ -6060,14 +6442,17 @@ 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 +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 +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 @@ -6075,8 +6460,10 @@ 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 +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 @@ -6102,7 +6489,8 @@ No changes for this release. 1) ACPI CA Core Subsystem: -Converted the locking mutex used for the ACPI hardware to a spinlock. This +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 @@ -6165,7 +6553,8 @@ 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 +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. @@ -6182,7 +6571,8 @@ Fixed problem reports (Valery Podrezov) integrated: - 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) +- 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) @@ -6215,7 +6605,8 @@ a much larger code and data size. 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 +most useful for disassembly/recompilation of existing tables without +parse errors. (With assistance from Thomas Renninger) Disassembler: fixed an incorrect disassembly problem with the @@ -6230,7 +6621,8 @@ disassembly of some Alias operators. 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 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. @@ -6243,12 +6635,14 @@ 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 +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 +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) @@ -6274,14 +6668,17 @@ 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 +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, +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. @@ -6297,7 +6694,8 @@ more readable and likely closer to the original ASL source. 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 +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 @@ -6324,7 +6722,8 @@ 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 +cause a runtime exception when they are actually accessed (will not +affect or abort table loading.) See oswinxf or osunixxf for an example implementation. @@ -6334,11 +6733,13 @@ 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 +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 +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 @@ -6378,12 +6779,16 @@ 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. +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 +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. @@ -6403,13 +6808,15 @@ 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 +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 +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 @@ -6426,7 +6833,8 @@ 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 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 @@ -6475,21 +6883,25 @@ makefile for the AcpiXtract utility. 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 +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, +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 +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" +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 @@ -6502,7 +6914,8 @@ 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 +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 @@ -6521,7 +6934,8 @@ compiler options used during generation. 2) iASL Compiler/Disassembler and Tools: -Implemented an ANSI C version of the acpixtract utility. This version will +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 @@ -6534,11 +6948,13 @@ source/tools/acpixtract) 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 +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. +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. @@ -6554,13 +6970,15 @@ 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() +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 +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 @@ -6580,17 +6998,20 @@ compiler options used during generation. 2) iASL Compiler/Disassembler: Disassembler: implemented support for symbolic resource descriptor -references. If a CreateXxxxField operator references a fixed offset within +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 +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 +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. @@ -6612,7 +7033,8 @@ 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. +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. @@ -6626,7 +7048,8 @@ 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 +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 @@ -6675,7 +7098,8 @@ 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 +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) @@ -6686,14 +7110,16 @@ Podrezov, BZ 5336) Fixed several warnings during the 64-bit code generation. -The AcpiSrc source code conversion tool now inserts one line of whitespace +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 +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 @@ -6720,7 +7146,8 @@ expression for the BankValue parameter. 1) ACPI CA Core Subsystem: -Implemented support in the Resource Manager to allow unresolved namestring +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 @@ -6736,7 +7163,8 @@ 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 +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 @@ -6755,7 +7183,8 @@ 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 +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 @@ -6786,15 +7215,18 @@ 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 +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 +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 +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 @@ -6808,7 +7240,8 @@ 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 +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 @@ -6838,7 +7271,8 @@ www.acpi.info) 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 +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 @@ -6854,7 +7288,8 @@ it is a waste of time to run the _STA method if the _INI does not exist. 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 +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 @@ -6868,7 +7303,8 @@ 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 +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 @@ -6876,7 +7312,8 @@ 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 +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 @@ -6905,12 +7342,15 @@ method call was made from within a Return statement. 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 +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 +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 @@ -6928,7 +7368,8 @@ 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 +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 @@ -6948,7 +7389,8 @@ of the compiler and the compiler options used during generation. Fixed a parse error during compilation of certain Switch/Case constructs. To -simplify the parse, the grammar now allows for multiple Default statements +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 @@ -6983,14 +7425,16 @@ 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 +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 +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. @@ -7005,7 +7449,8 @@ 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 +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 @@ -7043,16 +7488,19 @@ tree. The transformed tree is dumped also. 1) ACPI CA Core Subsystem: -Modified the subsystem initialization sequence to improve GPE support. The +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 +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 +Converted the ACPI internal object disassemble and display code within +the AML debugger to fully table-driven operation, reducing code size and increasing maintainability. @@ -7066,12 +7514,14 @@ These local types include RegionFields, BankFields, IndexFields, Alias, and reference objects. -Moved common AML resource handling code into a new file, "utresrc.c". This +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 +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 @@ -7100,7 +7550,8 @@ 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- +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 @@ -7131,8 +7582,10 @@ 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 +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- @@ -7146,7 +7599,8 @@ 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 +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 @@ -7165,7 +7619,8 @@ of the compiler and the compiler options used during generation. 2) iASL Compiler/Disassembler: -Relaxed a compiler restriction that disallowed a ResourceIndex byte if the +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 @@ -7173,7 +7628,8 @@ 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 +original, breaking code that used fixed offsets into the resource +template buffer. Removed a recent feature of the disassembler to ignore a lone @@ -7210,7 +7666,8 @@ 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 +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 @@ -7221,7 +7678,8 @@ 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 +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 @@ -7234,7 +7692,8 @@ 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 +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 @@ -7279,7 +7738,8 @@ 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 +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 @@ -7297,7 +7757,8 @@ of the compiler and the compiler options used during generation. 2) iASL Compiler/Disassembler: -Updated the disassembler to automatically insert an EndDependentFn() macro +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. @@ -7330,7 +7791,8 @@ 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 +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 @@ -7344,7 +7806,8 @@ 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. +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. @@ -7364,7 +7827,8 @@ and dma lists for the following ASL macros: Dma(), Irq(), IrqNoFlags(), and Interrupt(). -Implemented error checking for the Irq() and IrqNoFlags() macros to detect +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) @@ -7393,7 +7857,8 @@ 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 +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. @@ -7416,7 +7881,8 @@ 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 +length packages when the package length is not specified and the number +of initializer values is greater than 255. @@ -7425,7 +7891,8 @@ initializer values is greater than 255. 1) ACPI CA Core Subsystem: -Implemented support to ignore an attempt to install/load a particular ACPI +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. @@ -7437,7 +7904,8 @@ 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 +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 @@ -7446,7 +7914,8 @@ by default again. Modified the internal functions for debug print support to define the -FunctionName parameter as a (const char *) for compatibility with compiler +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. @@ -7456,7 +7925,8 @@ 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 +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. @@ -7510,8 +7980,10 @@ 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 +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). @@ -7533,7 +8005,8 @@ 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 +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. @@ -7597,7 +8070,8 @@ been updated. 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 +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. @@ -7629,8 +8103,10 @@ original behavior has been restored (a Match() operator is emitted.) 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 +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. @@ -7654,7 +8130,8 @@ 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 +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 @@ -7664,7 +8141,8 @@ 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 +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. @@ -7676,13 +8154,15 @@ 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 +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 +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. @@ -7701,7 +8181,8 @@ the compiler options used during generation. 2) iASL Compiler/Disassembler: -Fixed a regression in the disassembler where if/else/while constructs were +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. @@ -7710,7 +8191,8 @@ 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 +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 @@ -7722,7 +8204,8 @@ errors. 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 +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 @@ -7734,7 +8217,8 @@ 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 +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. @@ -7749,11 +8233,13 @@ 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) +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 +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. @@ -7774,9 +8260,11 @@ the compiler options used during generation. 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 +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 +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 @@ -7821,21 +8309,25 @@ 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 +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 +at name. Specifically, a buffer-to-buffer copy did not delete the +existing buffer. -Replaced "InterruptLevel" with "InterruptNumber" in all GPE interfaces and +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 +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. @@ -7893,7 +8385,8 @@ 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 +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 @@ -7901,11 +8394,13 @@ 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 +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 +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. @@ -7970,7 +8465,8 @@ 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 +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. @@ -8007,23 +8503,28 @@ occurred during the compilation. 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 +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 "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 +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 +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 +Implemented implicit conversion support for the predicate (operand) of +the If, Else, and While operators. String and Buffer arguments are automatically converted to Integers. @@ -8039,7 +8540,8 @@ 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 +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. @@ -8048,16 +8550,19 @@ 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 +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 +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 +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. @@ -8111,7 +8616,8 @@ 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, +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. @@ -8136,7 +8642,8 @@ Disassembler - Comments in output now use "//" instead of "/*" 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 +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 @@ -8165,7 +8672,8 @@ 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 +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. @@ -8184,7 +8692,8 @@ the compiler options used during generation. 2) iASL Compiler/Disassembler: -Fixed a problem with the internal 64-bit String-to-integer conversion with +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() @@ -8214,7 +8723,8 @@ 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 +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 @@ -8247,7 +8757,8 @@ 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 +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. @@ -8285,7 +8796,8 @@ 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 +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 @@ -8308,8 +8820,10 @@ 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 +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 @@ -8317,7 +8831,8 @@ 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 +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. @@ -8338,7 +8853,8 @@ the compiler options used during generation. 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 +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. @@ -8356,7 +8872,8 @@ 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 +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.) @@ -8370,12 +8887,14 @@ 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 +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 +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 @@ -8420,7 +8939,8 @@ 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 +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. @@ -8444,7 +8964,8 @@ ACPI CA core subsystem. 1) ACPI CA Core Subsystem: -Fixed a problem in the ToDecimalString operator where the resulting string +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. @@ -8452,12 +8973,14 @@ 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 +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 +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. @@ -8494,7 +9017,8 @@ 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 +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). @@ -8531,7 +9055,8 @@ 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 +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. @@ -8590,7 +9115,8 @@ 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 +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. @@ -8626,8 +9152,10 @@ 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, +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 @@ -8638,7 +9166,8 @@ 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 +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. @@ -8703,7 +9232,8 @@ 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 +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 @@ -8715,7 +9245,8 @@ 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 +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. @@ -8738,10 +9269,12 @@ the compiler options used during generation. 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 +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 +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. @@ -8758,7 +9291,8 @@ 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 +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. @@ -8770,12 +9304,14 @@ 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 +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 +potentially affected all implicit conversions and also the +ToDecimalString and ToHexString operators. Fixed two problems in the ToString operator. If the length parameter was @@ -8791,7 +9327,8 @@ 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 +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. @@ -8838,7 +9375,8 @@ 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 +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. @@ -8857,7 +9395,8 @@ 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 +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. @@ -8877,11 +9416,13 @@ the compiler options used during generation. 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 +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 +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. @@ -8898,16 +9439,19 @@ either 1) ACPI CA Core Subsystem: - Implemented support for implicit object conversion in the non-numeric -logical operators (LEqual, LGreater, LGreaterEqual, LLess, LLessEqual, and +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 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 +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. @@ -8923,12 +9467,14 @@ 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 +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 +- 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. @@ -8963,10 +9509,12 @@ the compiler options used during generation. 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 +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 +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 @@ -9017,7 +9565,8 @@ increase flexibility of the interfaces. Implemented a "lexicographical compare" for String and Buffer objects within -the logical operators -- LGreater, LLess, LGreaterEqual, and LLessEqual -- +the logical operators -- LGreater, LLess, LGreaterEqual, and LLessEqual - +- as per further clarification to the ACPI specification. Behavior is similar to C library "strcmp". @@ -9076,7 +9625,8 @@ ACPI 1.0 interpreters. -Fixed a problem where complex terms were not supported properly within the +Fixed a problem where complex terms were not supported properly within +the Switch() operator. Eliminated extraneous warning for compiler-emitted reserved names of the @@ -9161,7 +9711,8 @@ 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 +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 @@ -9196,7 +9747,8 @@ the compiler options used during generation. 2) iASL Compiler/Disassembler: -Fixed a generation warning produced by some overly-verbose compilers for a +Fixed a generation warning produced by some overly-verbose compilers for +a 64-bit constant. ---------------------------------------- @@ -9216,7 +9768,8 @@ 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 +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 @@ -9263,7 +9816,8 @@ 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" +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 @@ -9271,13 +9825,15 @@ 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 +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 +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 @@ -9295,7 +9851,8 @@ 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 +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 @@ -9324,13 +9881,15 @@ 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 +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 +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 @@ -9353,8 +9912,10 @@ If _PRW exists: /* This is a control-method button */ 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 +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. @@ -9422,7 +9983,8 @@ the compiler options used during generation. 2) iASL Compiler/Disassembler: -iASL now fully disassembles SSDTs. However, External() statements are not +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. @@ -9433,7 +9995,8 @@ 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 +out automatically so that the resulting file can be recompiled without +any hand editing. ---------------------------------------- @@ -9459,14 +10022,16 @@ 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 +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 +Added a special case for ACPI_ROOT_OBJECT in AcpiUtGetNodeName, +preventing a fault in some cases. @@ -9509,8 +10074,10 @@ 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. +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 @@ -9532,7 +10099,8 @@ 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 +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 @@ -9609,7 +10177,8 @@ 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 +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 @@ -9626,7 +10195,8 @@ functional changes, however. 1) ACPI CA Core Subsystem: -Improved error messages when there is a problem finding one or more of the +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 diff --git a/generate/unix/Makefile.common b/generate/unix/Makefile.common index 21f8786..fe5e46b 100644 --- a/generate/unix/Makefile.common +++ b/generate/unix/Makefile.common @@ -6,7 +6,11 @@ # Get the OS machine architecture. Anything with a "64" in the returned # string will be treated as a 64-bit OS. Otherwise, the default is 32-bit. # +ifeq ($(HOST), _FreeBSD) +HARDWARE_NAME := $(shell uname -p) +else HARDWARE_NAME := $(shell uname -m) +endif # # Main rule will only generate versions that are appropriate for the running diff --git a/generate/unix/Makefile.config b/generate/unix/Makefile.config index 3e4ecd2..3c13f36 100644 --- a/generate/unix/Makefile.config +++ b/generate/unix/Makefile.config @@ -47,14 +47,18 @@ LINKPROG = $(CC) $(OBJECTS) -o $(PROG) $(LDFLAGS) PREFIX ?= /usr INSTALLDIR = $(PREFIX)/bin -ifneq ($(HOST), _APPLE) - INSTALLPROG = install -D ../$(BINDIR)/$(PROG) $(DESTDIR)$(INSTALLDIR)/$(PROG) +ifeq ($(HOST), _APPLE) +INSTALL = cp +INSTALLFLAGS ?= -f else - INSTALLPROG = \ - test -d $(DESTDIR)$(INSTALLDIR) || mkdir -p $(DESTDIR)$(INSTALLDIR); \ - cp -f ../$(BINDIR)/$(PROG) $(DESTDIR)$(INSTALLDIR)/$(PROG) +INSTALL = install +INSTALLFLAGS ?= -m 555 -s endif +INSTALLPROG = \ + mkdir -p $(DESTDIR)$(INSTALLDIR); \ + $(INSTALL) $(INSTALLFLAGS) ../$(BINDIR)/$(PROG) $(DESTDIR)$(INSTALLDIR)/$(PROG) + # # Rename a .exe file if necessary # diff --git a/source/common/dmextern.c b/source/common/dmextern.c index 5baa462..e743117 100644 --- a/source/common/dmextern.c +++ b/source/common/dmextern.c @@ -719,34 +719,54 @@ AcpiDmEmitExternals ( AcpiDmUnresolvedWarning (1); + /* Emit any unresolved method externals in a single text block */ + + NextExternal = AcpiGbl_ExternalList; + while (NextExternal) + { + if ((NextExternal->Type == ACPI_TYPE_METHOD) && + (!NextExternal->Resolved)) + { + AcpiOsPrintf (" External (%s%s", + NextExternal->Path, + AcpiDmGetObjectTypeName (NextExternal->Type)); + + AcpiOsPrintf (") // Warning: Unresolved Method, " + "guessing %u arguments (may be incorrect, see warning above)\n", + NextExternal->Value); + + NextExternal->Emitted = TRUE; + } + + NextExternal = NextExternal->Next; + } + + AcpiOsPrintf ("\n"); + /* * Walk the list of externals (unresolved references) * found during the AML parsing */ while (AcpiGbl_ExternalList) { - AcpiOsPrintf (" External (%s%s", - AcpiGbl_ExternalList->Path, - AcpiDmGetObjectTypeName (AcpiGbl_ExternalList->Type)); - - if (AcpiGbl_ExternalList->Type == ACPI_TYPE_METHOD) + if (!AcpiGbl_ExternalList->Emitted) { - if (AcpiGbl_ExternalList->Resolved) + AcpiOsPrintf (" External (%s%s", + AcpiGbl_ExternalList->Path, + AcpiDmGetObjectTypeName (AcpiGbl_ExternalList->Type)); + + /* For methods, add a comment with the number of arguments */ + + if (AcpiGbl_ExternalList->Type == ACPI_TYPE_METHOD) { AcpiOsPrintf (") // %u Arguments\n", AcpiGbl_ExternalList->Value); } else { - AcpiOsPrintf (") // Warning: unresolved Method, " - "assuming %u arguments (may be incorrect, see warning above)\n", - AcpiGbl_ExternalList->Value); + AcpiOsPrintf (")\n"); } } - else - { - AcpiOsPrintf (")\n"); - } /* Free this external info block and move on to next external */ @@ -931,5 +951,4 @@ AcpiDmUnresolvedWarning ( (AcpiGbl_NumExternalMethods - AcpiGbl_ResolvedExternalMethods)); } } - } diff --git a/source/common/getopt.c b/source/common/getopt.c index f1921ee..4bcf3db 100644 --- a/source/common/getopt.c +++ b/source/common/getopt.c @@ -197,6 +197,26 @@ AcpiGetopt( CurrentCharPtr = 1; } + /* Option has an optional argument? */ + + else if (*OptsPtr == '+') + { + if (argv[AcpiGbl_Optind][(int) (CurrentCharPtr+1)] != '\0') + { + AcpiGbl_Optarg = &argv[AcpiGbl_Optind++][(int) (CurrentCharPtr+1)]; + } + else if (++AcpiGbl_Optind >= argc) + { + AcpiGbl_Optarg = NULL; + } + else + { + AcpiGbl_Optarg = argv[AcpiGbl_Optind++]; + } + + CurrentCharPtr = 1; + } + /* Option has optional single-char arguments? */ else if (*OptsPtr == '^') diff --git a/source/compiler/asloffset.c b/source/compiler/asloffset.c index 25e5b0f..b2fe775 100644 --- a/source/compiler/asloffset.c +++ b/source/compiler/asloffset.c @@ -57,10 +57,12 @@ static void LsEmitOffsetTableEntry ( UINT32 FileId, ACPI_NAMESPACE_NODE *Node, + UINT32 NamepathOffset, UINT32 Offset, char *OpName, UINT64 Value, - UINT8 AmlOpcode); + UINT8 AmlOpcode, + UINT16 ParentOpcode); /******************************************************************************* @@ -94,7 +96,8 @@ LsAmlOffsetWalk ( UINT32 FileId = (UINT32) ACPI_TO_INTEGER (Context); ACPI_NAMESPACE_NODE *Node; UINT32 Length; - UINT32 OffsetOfOpcode; + UINT32 NamepathOffset; + UINT32 DataOffset; ACPI_PARSE_OBJECT *NextOp; @@ -119,8 +122,9 @@ LsAmlOffsetWalk ( if ((Node->Type == ACPI_TYPE_LOCAL_RESOURCE) && (Op->Asl.CompileFlags & NODE_IS_RESOURCE_DESC)) { - LsEmitOffsetTableEntry (FileId, Node, Gbl_CurrentAmlOffset, - Op->Asl.ParseOpName, 0, Op->Asl.Extra); + LsEmitOffsetTableEntry (FileId, Node, 0, Gbl_CurrentAmlOffset, + Op->Asl.ParseOpName, 0, Op->Asl.Extra, AML_BUFFER_OP); + Gbl_CurrentAmlOffset += Op->Asl.FinalAmlLength; return (AE_OK); } @@ -138,22 +142,25 @@ LsAmlOffsetWalk ( } Length = Op->Asl.FinalAmlLength; + NamepathOffset = Gbl_CurrentAmlOffset + Length; /* Get to the NameSeg/NamePath Op (and length of the name) */ Op = Op->Asl.Child; - OffsetOfOpcode = Length + Op->Asl.FinalAmlLength; + + /* Get offset of last nameseg and the actual data */ + + NamepathOffset = Gbl_CurrentAmlOffset + Length + + (Op->Asl.FinalAmlLength - ACPI_NAME_SIZE); + + DataOffset = Gbl_CurrentAmlOffset + Length + + Op->Asl.FinalAmlLength; /* Get actual value associated with the name */ Op = Op->Asl.Next; switch (Op->Asl.AmlOpcode) { - /* - * We are only interested in integer constants that can be changed - * at boot time. Note, the One/Ones/Zero opcodes are considered - * non-changeable, so we ignore them here. - */ case AML_BYTE_OP: case AML_WORD_OP: case AML_DWORD_OP: @@ -161,22 +168,32 @@ LsAmlOffsetWalk ( /* The +1 is to handle the integer size prefix (opcode) */ - LsEmitOffsetTableEntry (FileId, Node, - (Gbl_CurrentAmlOffset + OffsetOfOpcode + 1), + LsEmitOffsetTableEntry (FileId, Node, NamepathOffset, (DataOffset + 1), Op->Asl.ParseOpName, Op->Asl.Value.Integer, - (UINT8) Op->Asl.AmlOpcode); + (UINT8) Op->Asl.AmlOpcode, AML_NAME_OP); + break; + + case AML_ONE_OP: + case AML_ONES_OP: + case AML_ZERO_OP: + + /* For these, offset will point to the opcode */ + + LsEmitOffsetTableEntry (FileId, Node, NamepathOffset, DataOffset, + Op->Asl.ParseOpName, Op->Asl.Value.Integer, + (UINT8) Op->Asl.AmlOpcode, AML_NAME_OP); break; case AML_PACKAGE_OP: case AML_VAR_PACKAGE_OP: + /* Get the package element count */ + NextOp = Op->Asl.Child; - LsEmitOffsetTableEntry (FileId, Node, - (Gbl_CurrentAmlOffset + OffsetOfOpcode), - Op->Asl.ParseOpName, - NextOp->Asl.Value.Integer, - (UINT8) Op->Asl.AmlOpcode); + LsEmitOffsetTableEntry (FileId, Node, NamepathOffset, DataOffset, + Op->Asl.ParseOpName, NextOp->Asl.Value.Integer, + (UINT8) Op->Asl.AmlOpcode, AML_NAME_OP); break; default: @@ -195,7 +212,14 @@ LsAmlOffsetWalk ( /* Get the name/namepath node */ NextOp = Op->Asl.Child; - OffsetOfOpcode = Length + NextOp->Asl.FinalAmlLength + 1; + + /* Get offset of last nameseg and the actual data */ + + NamepathOffset = Gbl_CurrentAmlOffset + Length + + (NextOp->Asl.FinalAmlLength - ACPI_NAME_SIZE); + + DataOffset = Gbl_CurrentAmlOffset + Length + + (NextOp->Asl.FinalAmlLength + 1); /* Get the SpaceId node, then the Offset (address) node */ @@ -214,10 +238,9 @@ LsAmlOffsetWalk ( case AML_DWORD_OP: case AML_QWORD_OP: - LsEmitOffsetTableEntry (FileId, Node, - (Gbl_CurrentAmlOffset + OffsetOfOpcode + 1), + LsEmitOffsetTableEntry (FileId, Node, NamepathOffset, (DataOffset + 1), Op->Asl.ParseOpName, NextOp->Asl.Value.Integer, - (UINT8) NextOp->Asl.AmlOpcode); + (UINT8) NextOp->Asl.AmlOpcode, AML_REGION_OP); Gbl_CurrentAmlOffset += Length; return (AE_OK); @@ -237,15 +260,62 @@ LsAmlOffsetWalk ( NextOp = Op->Asl.Child; - /* Point to the *last* nameseg in the namepath */ + /* Get offset of last nameseg and the actual data (flags byte) */ - OffsetOfOpcode = NextOp->Asl.FinalAmlLength - ACPI_NAME_SIZE; + NamepathOffset = Gbl_CurrentAmlOffset + Length + + (NextOp->Asl.FinalAmlLength - ACPI_NAME_SIZE); - LsEmitOffsetTableEntry (FileId, Node, - (Gbl_CurrentAmlOffset + OffsetOfOpcode + Length), - Op->Asl.ParseOpName, - *((UINT32 *) &NextOp->Asl.Value.Buffer[OffsetOfOpcode]), - (UINT8) Op->Asl.AmlOpcode); + DataOffset = Gbl_CurrentAmlOffset + Length + + NextOp->Asl.FinalAmlLength; + + /* Get the flags byte Op */ + + NextOp = NextOp->Asl.Next; + + LsEmitOffsetTableEntry (FileId, Node, NamepathOffset, DataOffset, + Op->Asl.ParseOpName, NextOp->Asl.Value.Integer, + (UINT8) Op->Asl.AmlOpcode, AML_METHOD_OP); + break; + + case AML_PROCESSOR_OP: + + /* Processor (Namepath, ProcessorId, Address, Length) */ + + Length = Op->Asl.FinalAmlLength; + NextOp = Op->Asl.Child; /* Get Namepath */ + + /* Get offset of last nameseg and the actual data (PBlock address) */ + + NamepathOffset = Gbl_CurrentAmlOffset + Length + + (NextOp->Asl.FinalAmlLength - ACPI_NAME_SIZE); + + DataOffset = Gbl_CurrentAmlOffset + Length + + (NextOp->Asl.FinalAmlLength + 1); + + NextOp = NextOp->Asl.Next; /* Get ProcessorID (BYTE) */ + NextOp = NextOp->Asl.Next; /* Get Address (DWORD) */ + + LsEmitOffsetTableEntry (FileId, Node, NamepathOffset, DataOffset, + Op->Asl.ParseOpName, NextOp->Asl.Value.Integer, + (UINT8) AML_DWORD_OP, AML_PROCESSOR_OP); + break; + + case AML_DEVICE_OP: + case AML_SCOPE_OP: + case AML_THERMAL_ZONE_OP: + + /* Device/Scope/ThermalZone (Namepath) */ + + Length = Op->Asl.FinalAmlLength; + NextOp = Op->Asl.Child; /* Get Namepath */ + + /* Get offset of last nameseg */ + + NamepathOffset = Gbl_CurrentAmlOffset + Length + + (NextOp->Asl.FinalAmlLength - ACPI_NAME_SIZE); + + LsEmitOffsetTableEntry (FileId, Node, NamepathOffset, 0, + Op->Asl.ParseOpName, 0, (UINT8) 0, Op->Asl.AmlOpcode); break; default: @@ -267,6 +337,7 @@ LsAmlOffsetWalk ( * OpName - Name of the AML opcode * Value - Current value of the AML field * AmlOpcode - Opcode associated with the field + * ObjectType - ACPI object type * * RETURN: None * @@ -278,10 +349,12 @@ static void LsEmitOffsetTableEntry ( UINT32 FileId, ACPI_NAMESPACE_NODE *Node, + UINT32 NamepathOffset, UINT32 Offset, char *OpName, UINT64 Value, - UINT8 AmlOpcode) + UINT8 AmlOpcode, + UINT16 ParentOpcode) { ACPI_BUFFER TargetPath; ACPI_STATUS Status; @@ -308,8 +381,9 @@ LsEmitOffsetTableEntry ( * Max Length for Integers is 8 bytes. */ FlPrintFile (FileId, - " {%-29s 0x%8.8X, 0x%2.2X, 0x%8.8X%8.8X}, /* %s */\n", - MsgBuffer, Offset, AmlOpcode, ACPI_FORMAT_UINT64 (Value), OpName); + " {%-29s 0x%4.4X, 0x%8.8X, 0x%2.2X, 0x%8.8X, 0x%8.8X%8.8X}, /* %s */\n", + MsgBuffer, ParentOpcode, NamepathOffset, AmlOpcode, + Offset, ACPI_FORMAT_UINT64 (Value), OpName); } @@ -335,10 +409,12 @@ LsDoOffsetTableHeader ( "#define __AML_OFFSET_TABLE_H\n\n"); FlPrintFile (FileId, "typedef struct {\n" - " char *Pathname;\n" - " unsigned long Offset;\n" - " unsigned char Opcode;\n" - " unsigned long long Value;\n" + " char *Pathname; /* Full pathname (from root) to the object */\n" + " unsigned short ParentOpcode; /* AML opcode for the parent object */\n" + " unsigned long NamesegOffset; /* Offset of last nameseg in the parent namepath */\n" + " unsigned char Opcode; /* AML opcode for the data */\n" + " unsigned long Offset; /* Offset for the data */\n" + " unsigned long long Value; /* Original value of the data (as applicable) */\n" "} AML_OFFSET_TABLE_ENTRY;\n\n"); FlPrintFile (FileId, @@ -346,29 +422,37 @@ LsDoOffsetTableHeader ( FlPrintFile (FileId, "/*\n" - " * Information about supported object types:\n" + " * Information specific to the supported object types:\n" " *\n" " * Integers:\n" - " * Offset points to the actual integer data\n" " * Opcode is the integer prefix, indicates length of the data\n" + " * (One of: BYTE, WORD, DWORD, QWORD, ZERO, ONE, ONES)\n" + " * Offset points to the actual integer data\n" " * Value is the existing value in the AML\n" " *\n" " * Packages:\n" - " * Offset points to the package opcode\n" " * Opcode is the package or var_package opcode\n" - " * Value is the package element cound\n" + " * Offset points to the package opcode\n" + " * Value is the package element count\n" " *\n" " * Operation Regions:\n" - " * Offset points to the region address data\n" " * Opcode is the address integer prefix, indicates length of the data\n" + " * Offset points to the region address\n" " * Value is the existing address value in the AML\n" " *\n" " * Control Methods:\n" - " * Offset points to the first byte of the namepath\n" + " * Offset points to the method flags byte\n" + " * Value is the existing flags value in the AML\n" + " *\n" + " * Processors:\n" + " * Offset points to the first byte of the PBlock Address\n" " *\n" " * Resource Descriptors:\n" - " * Offset points to the start of the descriptor\n" " * Opcode is the descriptor type\n" + " * Offset points to the start of the descriptor\n" + " *\n" + " * Scopes/Devices/ThermalZones:\n" + " * Nameseg offset only\n" " */\n"); FlPrintFile (FileId, @@ -383,6 +467,6 @@ LsDoOffsetTableFooter ( { FlPrintFile (FileId, - " {0,0,0,0} /* Table terminator */\n};\n\n"); + " {NULL,0,0,0,0,0} /* Table terminator */\n};\n\n"); Gbl_CurrentAmlOffset = 0; } diff --git a/source/compiler/asloperands.c b/source/compiler/asloperands.c index deb4bd4..4afbd96 100644 --- a/source/compiler/asloperands.c +++ b/source/compiler/asloperands.c @@ -971,12 +971,15 @@ OpnDoDefinitionBlock ( Gbl_TableId = AcpiOsAllocate (Length + 1); ACPI_STRCPY (Gbl_TableId, Child->Asl.Value.String); + /* + * Convert anything non-alphanumeric to an underscore. This + * allows us to use the TableID to generate unique C symbols. + */ for (i = 0; i < Length; i++) { - if (Gbl_TableId[i] == ' ') + if (!isalnum ((int) Gbl_TableId[i])) { - Gbl_TableId[i] = 0; - break; + Gbl_TableId[i] = '_'; } } } diff --git a/source/compiler/asloptions.c b/source/compiler/asloptions.c index bfb3d75..441dbb3 100644 --- a/source/compiler/asloptions.c +++ b/source/compiler/asloptions.c @@ -68,7 +68,7 @@ AslDoResponseFile ( #define ASL_TOKEN_SEPARATORS " \t\n" -#define ASL_SUPPORTED_OPTIONS "@:b|c|d^D:e:fgh^i|I:l^m:no|p:P^r:s|t|T:G^v^w|x:z" +#define ASL_SUPPORTED_OPTIONS "@:b|c|d^D:e:fgh^i|I:l^m:no|p:P^r:s|t|T+G^v^w|x:z" /******************************************************************************* diff --git a/source/compiler/dttemplate.c b/source/compiler/dttemplate.c index 09e9990..7370855 100644 --- a/source/compiler/dttemplate.c +++ b/source/compiler/dttemplate.c @@ -117,13 +117,21 @@ DtCreateTemplates ( AslInitializeGlobals (); - AcpiUtStrupr (Signature); - /* Create all known templates if requested */ + /* Default (no signature) is DSDT */ + + if (!Signature) + { + Signature = "DSDT"; + goto GetTemplate; + } - if (!ACPI_STRNCMP (Signature, "ALL", 3) || + AcpiUtStrupr (Signature); + if (!ACPI_STRCMP (Signature, "ALL") || !ACPI_STRCMP (Signature, "*")) { + /* Create all available/known templates */ + Status = DtCreateAllTemplates (); return (Status); } @@ -136,7 +144,9 @@ DtCreateTemplates ( */ if (strlen (Signature) != ACPI_NAME_SIZE) { - fprintf (stderr, "%s, Invalid ACPI table signature\n", Signature); + fprintf (stderr, + "%s: Invalid ACPI table signature (length must be 4 characters)\n", + Signature); return (AE_ERROR); } @@ -153,19 +163,20 @@ DtCreateTemplates ( Signature = "FACP"; } +GetTemplate: TableData = AcpiDmGetTableData (Signature); if (TableData) { if (!TableData->Template) { - fprintf (stderr, "%4.4s, No template available\n", Signature); + fprintf (stderr, "%4.4s: No template available\n", Signature); return (AE_ERROR); } } else if (!AcpiUtIsSpecialTable (Signature)) { fprintf (stderr, - "%4.4s, Unrecognized ACPI table signature\n", Signature); + "%4.4s: Unrecognized ACPI table signature\n", Signature); return (AE_ERROR); } diff --git a/source/components/executer/exoparg1.c b/source/components/executer/exoparg1.c index ff8dee2..bcd702a 100644 --- a/source/components/executer/exoparg1.c +++ b/source/components/executer/exoparg1.c @@ -1009,10 +1009,17 @@ AcpiExOpcode_1A_0T_1R ( * add another reference to the referenced object, however. */ ReturnDesc = *(Operand[0]->Reference.Where); - if (ReturnDesc) + if (!ReturnDesc) { - AcpiUtAddReference (ReturnDesc); + /* + * Element is NULL, do not allow the dereference. + * This provides compatibility with other ACPI + * implementations. + */ + return_ACPI_STATUS (AE_AML_UNINITIALIZED_ELEMENT); } + + AcpiUtAddReference (ReturnDesc); break; default: @@ -1030,15 +1037,44 @@ AcpiExOpcode_1A_0T_1R ( ReturnDesc = Operand[0]->Reference.Object; if (ACPI_GET_DESCRIPTOR_TYPE (ReturnDesc) == - ACPI_DESC_TYPE_NAMED) + ACPI_DESC_TYPE_NAMED) { ReturnDesc = AcpiNsGetAttachedObject ( - (ACPI_NAMESPACE_NODE *) ReturnDesc); - } + (ACPI_NAMESPACE_NODE *) ReturnDesc); + if (!ReturnDesc) + { + break; + } - /* Add another reference to the object! */ + /* + * June 2013: + * BufferFields/FieldUnits require additional resolution + */ + switch (ReturnDesc->Common.Type) + { + case ACPI_TYPE_BUFFER_FIELD: + case ACPI_TYPE_LOCAL_REGION_FIELD: + case ACPI_TYPE_LOCAL_BANK_FIELD: + case ACPI_TYPE_LOCAL_INDEX_FIELD: - AcpiUtAddReference (ReturnDesc); + Status = AcpiExReadDataFromField (WalkState, + ReturnDesc, &TempDesc); + if (ACPI_FAILURE (Status)) + { + goto Cleanup; + } + + ReturnDesc = TempDesc; + break; + + default: + + /* Add another reference to the object */ + + AcpiUtAddReference (ReturnDesc); + break; + } + } break; default: diff --git a/source/components/hardware/hwtimer.c b/source/components/hardware/hwtimer.c index 7e4177a..cbfa96b 100644 --- a/source/components/hardware/hwtimer.c +++ b/source/components/hardware/hwtimer.c @@ -115,8 +115,14 @@ AcpiGetTimer ( return_ACPI_STATUS (AE_BAD_PARAMETER); } - Status = AcpiHwRead (Ticks, &AcpiGbl_FADT.XPmTimerBlock); + /* ACPI 5.0A: PM Timer is optional */ + if (!AcpiGbl_FADT.XPmTimerBlock.Address) + { + return_ACPI_STATUS (AE_SUPPORT); + } + + Status = AcpiHwRead (Ticks, &AcpiGbl_FADT.XPmTimerBlock); return_ACPI_STATUS (Status); } @@ -171,6 +177,13 @@ AcpiGetTimerDuration ( return_ACPI_STATUS (AE_BAD_PARAMETER); } + /* ACPI 5.0A: PM Timer is optional */ + + if (!AcpiGbl_FADT.XPmTimerBlock.Address) + { + return_ACPI_STATUS (AE_SUPPORT); + } + /* * Compute Tick Delta: * Handle (max one) timer rollovers on 24-bit versus 32-bit timers. diff --git a/source/components/namespace/nspredef.c b/source/components/namespace/nspredef.c index 7122e7a..7b7e3e3 100644 --- a/source/components/namespace/nspredef.c +++ b/source/components/namespace/nspredef.c @@ -166,6 +166,16 @@ AcpiNsCheckReturnValue ( } /* + * + * 4) If there is no return value and it is optional, just return + * AE_OK (_WAK). + */ + if (!(*ReturnObjectPtr)) + { + goto Exit; + } + + /* * For returned Package objects, check the type of all sub-objects. * Note: Package may have been newly created by call above. */ @@ -293,7 +303,13 @@ TypeErrorExit: AcpiUtGetExpectedReturnTypes (TypeBuffer, ExpectedBtypes); - if (PackageIndex == ACPI_NOT_PACKAGE_ELEMENT) + if (!ReturnObject) + { + ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, + "Expected return object of type %s", + TypeBuffer)); + } + else if (PackageIndex == ACPI_NOT_PACKAGE_ELEMENT) { ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, "Return type mismatch - found %s, expected %s", diff --git a/source/components/namespace/nswalk.c b/source/components/namespace/nswalk.c index 0b25ffd..577b89b 100644 --- a/source/components/namespace/nswalk.c +++ b/source/components/namespace/nswalk.c @@ -165,9 +165,9 @@ AcpiNsGetNextNodeTyped ( * MaxDepth - Depth to which search is to reach * Flags - Whether to unlock the NS before invoking * the callback routine - * PreOrderVisit - Called during tree pre-order visit + * DescendingCallback - Called during tree descent * when an object of "Type" is found - * PostOrderVisit - Called during tree post-order visit + * AscendingCallback - Called during tree ascent * when an object of "Type" is found * Context - Passed to user function(s) above * ReturnValue - from the UserFunction if terminated @@ -195,8 +195,8 @@ AcpiNsWalkNamespace ( ACPI_HANDLE StartNode, UINT32 MaxDepth, UINT32 Flags, - ACPI_WALK_CALLBACK PreOrderVisit, - ACPI_WALK_CALLBACK PostOrderVisit, + ACPI_WALK_CALLBACK DescendingCallback, + ACPI_WALK_CALLBACK AscendingCallback, void *Context, void **ReturnValue) { @@ -274,22 +274,22 @@ AcpiNsWalkNamespace ( } /* - * Invoke the user function, either pre-order or post-order + * Invoke the user function, either descending, ascending, * or both. */ if (!NodePreviouslyVisited) { - if (PreOrderVisit) + if (DescendingCallback) { - Status = PreOrderVisit (ChildNode, Level, + Status = DescendingCallback (ChildNode, Level, Context, ReturnValue); } } else { - if (PostOrderVisit) + if (AscendingCallback) { - Status = PostOrderVisit (ChildNode, Level, + Status = AscendingCallback (ChildNode, Level, Context, ReturnValue); } } diff --git a/source/components/namespace/nsxfeval.c b/source/components/namespace/nsxfeval.c index 6a2649a..e5c1e17 100644 --- a/source/components/namespace/nsxfeval.c +++ b/source/components/namespace/nsxfeval.c @@ -574,9 +574,9 @@ AcpiNsResolveReferences ( * PARAMETERS: Type - ACPI_OBJECT_TYPE to search for * StartObject - Handle in namespace where search begins * MaxDepth - Depth to which search is to reach - * PreOrderVisit - Called during tree pre-order visit + * DescendingCallback - Called during tree descent * when an object of "Type" is found - * PostOrderVisit - Called during tree post-order visit + * AscendingCallback - Called during tree ascent * when an object of "Type" is found * Context - Passed to user function(s) above * ReturnValue - Location where return value of @@ -605,8 +605,8 @@ AcpiWalkNamespace ( ACPI_OBJECT_TYPE Type, ACPI_HANDLE StartObject, UINT32 MaxDepth, - ACPI_WALK_CALLBACK PreOrderVisit, - ACPI_WALK_CALLBACK PostOrderVisit, + ACPI_WALK_CALLBACK DescendingCallback, + ACPI_WALK_CALLBACK AscendingCallback, void *Context, void **ReturnValue) { @@ -620,7 +620,7 @@ AcpiWalkNamespace ( if ((Type > ACPI_TYPE_LOCAL_MAX) || (!MaxDepth) || - (!PreOrderVisit && !PostOrderVisit)) + (!DescendingCallback && !AscendingCallback)) { return_ACPI_STATUS (AE_BAD_PARAMETER); } @@ -655,8 +655,8 @@ AcpiWalkNamespace ( } Status = AcpiNsWalkNamespace (Type, StartObject, MaxDepth, - ACPI_NS_WALK_UNLOCK, PreOrderVisit, - PostOrderVisit, Context, ReturnValue); + ACPI_NS_WALK_UNLOCK, DescendingCallback, + AscendingCallback, Context, ReturnValue); (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); diff --git a/source/components/tables/tbfadt.c b/source/components/tables/tbfadt.c index 6f41c46..eb4e0e5 100644 --- a/source/components/tables/tbfadt.c +++ b/source/components/tables/tbfadt.c @@ -132,7 +132,7 @@ static ACPI_FADT_INFO FadtInfoTable[] = ACPI_FADT_OFFSET (PmTimerBlock), ACPI_FADT_OFFSET (PmTimerLength), ACPI_PM_TIMER_WIDTH, - ACPI_FADT_REQUIRED}, + ACPI_FADT_SEPARATE_LENGTH}, /* ACPI 5.0A: Timer is optional */ {"Gpe0Block", ACPI_FADT_OFFSET (XGpe0Block), @@ -606,7 +606,7 @@ AcpiTbValidateFadt ( if (FadtInfoTable[i].Type & ACPI_FADT_REQUIRED) { /* - * Field is required (PM1aEvent, PM1aControl, PmTimer). + * Field is required (PM1aEvent, PM1aControl). * Both the address and length must be non-zero. */ if (!Address64->Address || !Length) diff --git a/source/components/tables/tbxfroot.c b/source/components/tables/tbxfroot.c index 20cc0fa..fa67781 100644 --- a/source/components/tables/tbxfroot.c +++ b/source/components/tables/tbxfroot.c @@ -51,12 +51,6 @@ #define _COMPONENT ACPI_TABLES ACPI_MODULE_NAME ("tbxfroot") -/* Local prototypes */ - -static ACPI_STATUS -AcpiTbValidateRsdp ( - ACPI_TABLE_RSDP *Rsdp); - /******************************************************************************* * @@ -70,7 +64,7 @@ AcpiTbValidateRsdp ( * ******************************************************************************/ -static ACPI_STATUS +ACPI_STATUS AcpiTbValidateRsdp ( ACPI_TABLE_RSDP *Rsdp) { @@ -81,7 +75,7 @@ AcpiTbValidateRsdp ( * Note: Sometimes there exists more than one RSDP in memory; the valid * RSDP has a valid checksum, all others have an invalid checksum. */ - if (ACPI_STRNCMP ((char *) Rsdp, ACPI_SIG_RSDP, + if (ACPI_STRNCMP ((char *) Rsdp->Signature, ACPI_SIG_RSDP, sizeof (ACPI_SIG_RSDP)-1) != 0) { /* Nope, BAD Signature */ diff --git a/source/components/utilities/utglobal.c b/source/components/utilities/utglobal.c index 83b0526..56c4e06 100644 --- a/source/components/utilities/utglobal.c +++ b/source/components/utilities/utglobal.c @@ -319,7 +319,6 @@ AcpiUtInitGlobals ( AcpiGbl_TraceDbgLayer = 0; AcpiGbl_DebuggerConfiguration = DEBUGGER_THREADING; AcpiGbl_DbOutputFlags = ACPI_DB_CONSOLE_OUTPUT; - AcpiGbl_OsiData = 0; AcpiGbl_OsiMutex = NULL; AcpiGbl_RegMethodsExecuted = FALSE; diff --git a/source/components/utilities/utosi.c b/source/components/utilities/utosi.c index 21fe51b..c376256 100644 --- a/source/components/utilities/utosi.c +++ b/source/components/utilities/utosi.c @@ -81,21 +81,20 @@ static ACPI_INTERFACE_INFO AcpiDefaultSupportedInterfaces[] = /* Feature Group Strings */ - {"Extended Address Space Descriptor", NULL, 0, 0} + {"Extended Address Space Descriptor", NULL, ACPI_OSI_FEATURE, 0}, /* * All "optional" feature group strings (features that are implemented - * by the host) should be dynamically added by the host via - * AcpiInstallInterface and should not be manually added here. - * - * Examples of optional feature group strings: - * - * "Module Device" - * "Processor Device" - * "3.0 Thermal Model" - * "3.0 _SCP Extensions" - * "Processor Aggregator Device" + * by the host) should be dynamically modified to VALID by the host via + * AcpiInstallInterface or AcpiUpdateInterfaces. Such optional feature + * group strings are set as INVALID by default here. */ + + {"Module Device", NULL, ACPI_OSI_OPTIONAL_FEATURE, 0}, + {"Processor Device", NULL, ACPI_OSI_OPTIONAL_FEATURE, 0}, + {"3.0 Thermal Model", NULL, ACPI_OSI_OPTIONAL_FEATURE, 0}, + {"3.0 _SCP Extensions", NULL, ACPI_OSI_OPTIONAL_FEATURE, 0}, + {"Processor Aggregator Device", NULL, ACPI_OSI_OPTIONAL_FEATURE, 0} }; @@ -172,13 +171,26 @@ AcpiUtInterfaceTerminate ( { AcpiGbl_SupportedInterfaces = NextInterface->Next; - /* Only interfaces added at runtime can be freed */ - if (NextInterface->Flags & ACPI_OSI_DYNAMIC) { + /* Only interfaces added at runtime can be freed */ + ACPI_FREE (NextInterface->Name); ACPI_FREE (NextInterface); } + else + { + /* Interface is in static list. Reset it to invalid or valid. */ + + if (NextInterface->Flags & ACPI_OSI_DEFAULT_INVALID) + { + NextInterface->Flags |= ACPI_OSI_INVALID; + } + else + { + NextInterface->Flags &= ~ACPI_OSI_INVALID; + } + } NextInterface = AcpiGbl_SupportedInterfaces; } @@ -307,6 +319,57 @@ AcpiUtRemoveInterface ( /******************************************************************************* * + * FUNCTION: AcpiUtUpdateInterfaces + * + * PARAMETERS: Action - Actions to be performed during the + * update + * + * RETURN: Status + * + * DESCRIPTION: Update _OSI interface strings, disabling or enabling OS vendor + * strings or/and feature group strings. + * Caller MUST hold AcpiGbl_OsiMutex + * + ******************************************************************************/ + +ACPI_STATUS +AcpiUtUpdateInterfaces ( + UINT8 Action) +{ + ACPI_INTERFACE_INFO *NextInterface; + + + NextInterface = AcpiGbl_SupportedInterfaces; + while (NextInterface) + { + if (((NextInterface->Flags & ACPI_OSI_FEATURE) && + (Action & ACPI_FEATURE_STRINGS)) || + (!(NextInterface->Flags & ACPI_OSI_FEATURE) && + (Action & ACPI_VENDOR_STRINGS))) + { + if (Action & ACPI_DISABLE_INTERFACES) + { + /* Mark the interfaces as invalid */ + + NextInterface->Flags |= ACPI_OSI_INVALID; + } + else + { + /* Mark the interfaces as valid */ + + NextInterface->Flags &= ~ACPI_OSI_INVALID; + } + } + + NextInterface = NextInterface->Next; + } + + return (AE_OK); +} + + +/******************************************************************************* + * * FUNCTION: AcpiUtGetInterface * * PARAMETERS: InterfaceName - The interface to find diff --git a/source/components/utilities/utxface.c b/source/components/utilities/utxface.c index 4506980..021a462 100644 --- a/source/components/utilities/utxface.c +++ b/source/components/utilities/utxface.c @@ -499,6 +499,40 @@ ACPI_EXPORT_SYMBOL (AcpiInstallInterfaceHandler) /***************************************************************************** * + * FUNCTION: AcpiUpdateInterfaces + * + * PARAMETERS: Action - Actions to be performed during the + * update + * + * RETURN: Status + * + * DESCRIPTION: Update _OSI interface strings, disabling or enabling OS vendor + * string or/and feature group strings. + * + ****************************************************************************/ + +ACPI_STATUS +AcpiUpdateInterfaces ( + UINT8 Action) +{ + ACPI_STATUS Status; + + + Status = AcpiOsAcquireMutex (AcpiGbl_OsiMutex, ACPI_WAIT_FOREVER); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + Status = AcpiUtUpdateInterfaces (Action); + + AcpiOsReleaseMutex (AcpiGbl_OsiMutex); + return (Status); +} + + +/***************************************************************************** + * * FUNCTION: AcpiCheckAddressRange * * PARAMETERS: SpaceId - Address space ID diff --git a/source/include/acglobal.h b/source/include/acglobal.h index 32ae55f..a453805 100644 --- a/source/include/acglobal.h +++ b/source/include/acglobal.h @@ -140,6 +140,12 @@ UINT8 ACPI_INIT_GLOBAL (AcpiGbl_DisableAutoRepair, FALSE); */ UINT8 ACPI_INIT_GLOBAL (AcpiGbl_DisableSsdtTableLoad, FALSE); +/* + * We keep track of the latest version of Windows that has been requested by + * the BIOS. + */ +UINT8 ACPI_INIT_GLOBAL (AcpiGbl_OsiData, 0); + /* AcpiGbl_FADT is a local copy of the FADT, converted to a common format. */ @@ -290,7 +296,6 @@ ACPI_EXTERN UINT8 AcpiGbl_DebuggerConfiguration; ACPI_EXTERN BOOLEAN AcpiGbl_StepToNextCall; ACPI_EXTERN BOOLEAN AcpiGbl_AcpiHardwarePresent; ACPI_EXTERN BOOLEAN AcpiGbl_EventsInitialized; -ACPI_EXTERN UINT8 AcpiGbl_OsiData; ACPI_EXTERN ACPI_INTERFACE_INFO *AcpiGbl_SupportedInterfaces; ACPI_EXTERN ACPI_ADDRESS_RANGE *AcpiGbl_AddressRangeList[ACPI_ADDRESS_RANGE_MAX]; diff --git a/source/include/aclocal.h b/source/include/aclocal.h index 47e7437..a3569fb 100644 --- a/source/include/aclocal.h +++ b/source/include/aclocal.h @@ -1100,19 +1100,6 @@ typedef struct acpi_bit_register_info /* Structs and definitions for _OSI support and I/O port validation */ -#define ACPI_OSI_WIN_2000 0x01 -#define ACPI_OSI_WIN_XP 0x02 -#define ACPI_OSI_WIN_XP_SP1 0x03 -#define ACPI_OSI_WINSRV_2003 0x04 -#define ACPI_OSI_WIN_XP_SP2 0x05 -#define ACPI_OSI_WINSRV_2003_SP1 0x06 -#define ACPI_OSI_WIN_VISTA 0x07 -#define ACPI_OSI_WINSRV_2008 0x08 -#define ACPI_OSI_WIN_VISTA_SP1 0x09 -#define ACPI_OSI_WIN_VISTA_SP2 0x0A -#define ACPI_OSI_WIN_7 0x0B -#define ACPI_OSI_WIN_8 0x0C - #define ACPI_ALWAYS_ILLEGAL 0x00 typedef struct acpi_interface_info @@ -1126,6 +1113,9 @@ typedef struct acpi_interface_info #define ACPI_OSI_INVALID 0x01 #define ACPI_OSI_DYNAMIC 0x02 +#define ACPI_OSI_FEATURE 0x04 +#define ACPI_OSI_DEFAULT_INVALID 0x08 +#define ACPI_OSI_OPTIONAL_FEATURE (ACPI_OSI_FEATURE | ACPI_OSI_DEFAULT_INVALID | ACPI_OSI_INVALID) typedef struct acpi_port_info { @@ -1221,6 +1211,7 @@ typedef struct acpi_external_list UINT8 Type; UINT8 Flags; BOOLEAN Resolved; + BOOLEAN Emitted; } ACPI_EXTERNAL_LIST; diff --git a/source/include/acnamesp.h b/source/include/acnamesp.h index 1118184..63caba3 100644 --- a/source/include/acnamesp.h +++ b/source/include/acnamesp.h @@ -117,8 +117,8 @@ AcpiNsWalkNamespace ( ACPI_HANDLE StartObject, UINT32 MaxDepth, UINT32 Flags, - ACPI_WALK_CALLBACK PreOrderVisit, - ACPI_WALK_CALLBACK PostOrderVisit, + ACPI_WALK_CALLBACK DescendingCallback, + ACPI_WALK_CALLBACK AscendingCallback, void *Context, void **ReturnValue); diff --git a/source/include/acpixf.h b/source/include/acpixf.h index a334b2d..7dee52a 100644 --- a/source/include/acpixf.h +++ b/source/include/acpixf.h @@ -47,7 +47,7 @@ /* Current ACPICA subsystem version in YYYYMMDD format */ -#define ACPI_CA_VERSION 0x20130626 +#define ACPI_CA_VERSION 0x20130725 #include "acconfig.h" #include "actypes.h" @@ -61,6 +61,7 @@ extern UINT32 AcpiCurrentGpeCount; extern ACPI_TABLE_FADT AcpiGbl_FADT; extern BOOLEAN AcpiGbl_SystemAwakeAndRunning; extern BOOLEAN AcpiGbl_ReducedHardware; /* ACPI 5.0 */ +extern UINT8 AcpiGbl_OsiData; /* Runtime configuration of debug print levels */ @@ -177,6 +178,10 @@ ACPI_STATUS AcpiRemoveInterface ( ACPI_STRING InterfaceName); +ACPI_STATUS +AcpiUpdateInterfaces ( + UINT8 Action); + UINT32 AcpiCheckAddressRange ( ACPI_ADR_SPACE_TYPE SpaceId, @@ -268,8 +273,8 @@ AcpiWalkNamespace ( ACPI_OBJECT_TYPE Type, ACPI_HANDLE StartObject, UINT32 MaxDepth, - ACPI_WALK_CALLBACK PreOrderVisit, - ACPI_WALK_CALLBACK PostOrderVisit, + ACPI_WALK_CALLBACK DescendingCallback, + ACPI_WALK_CALLBACK AscendingCallback, void *Context, void **ReturnValue); diff --git a/source/include/actables.h b/source/include/actables.h index 3452a7b..4295894 100644 --- a/source/include/actables.h +++ b/source/include/actables.h @@ -52,6 +52,10 @@ AcpiAllocateRootTable ( /* * tbxfroot - Root pointer utilities */ +ACPI_STATUS +AcpiTbValidateRsdp ( + ACPI_TABLE_RSDP *Rsdp); + UINT8 * AcpiTbScanMemoryForRsdp ( UINT8 *StartAddress, diff --git a/source/include/actypes.h b/source/include/actypes.h index 09ccfdf..cf98e4b 100644 --- a/source/include/actypes.h +++ b/source/include/actypes.h @@ -1244,4 +1244,32 @@ typedef struct acpi_memory_list } ACPI_MEMORY_LIST; +/* Definitions of _OSI support */ + +#define ACPI_VENDOR_STRINGS 0x01 +#define ACPI_FEATURE_STRINGS 0x02 +#define ACPI_ENABLE_INTERFACES 0x00 +#define ACPI_DISABLE_INTERFACES 0x04 + +#define ACPI_DISABLE_ALL_VENDOR_STRINGS (ACPI_DISABLE_INTERFACES | ACPI_VENDOR_STRINGS) +#define ACPI_DISABLE_ALL_FEATURE_STRINGS (ACPI_DISABLE_INTERFACES | ACPI_FEATURE_STRINGS) +#define ACPI_DISABLE_ALL_STRINGS (ACPI_DISABLE_INTERFACES | ACPI_VENDOR_STRINGS | ACPI_FEATURE_STRINGS) +#define ACPI_ENABLE_ALL_VENDOR_STRINGS (ACPI_ENABLE_INTERFACES | ACPI_VENDOR_STRINGS) +#define ACPI_ENABLE_ALL_FEATURE_STRINGS (ACPI_ENABLE_INTERFACES | ACPI_FEATURE_STRINGS) +#define ACPI_ENABLE_ALL_STRINGS (ACPI_ENABLE_INTERFACES | ACPI_VENDOR_STRINGS | ACPI_FEATURE_STRINGS) + +#define ACPI_OSI_WIN_2000 0x01 +#define ACPI_OSI_WIN_XP 0x02 +#define ACPI_OSI_WIN_XP_SP1 0x03 +#define ACPI_OSI_WINSRV_2003 0x04 +#define ACPI_OSI_WIN_XP_SP2 0x05 +#define ACPI_OSI_WINSRV_2003_SP1 0x06 +#define ACPI_OSI_WIN_VISTA 0x07 +#define ACPI_OSI_WINSRV_2008 0x08 +#define ACPI_OSI_WIN_VISTA_SP1 0x09 +#define ACPI_OSI_WIN_VISTA_SP2 0x0A +#define ACPI_OSI_WIN_7 0x0B +#define ACPI_OSI_WIN_8 0x0C + + #endif /* __ACTYPES_H__ */ diff --git a/source/include/acutils.h b/source/include/acutils.h index c0ea533..c80dd36 100644 --- a/source/include/acutils.h +++ b/source/include/acutils.h @@ -670,6 +670,10 @@ ACPI_STATUS AcpiUtRemoveInterface ( ACPI_STRING InterfaceName); +ACPI_STATUS +AcpiUtUpdateInterfaces ( + UINT8 Action); + ACPI_INTERFACE_INFO * AcpiUtGetInterface ( ACPI_STRING InterfaceName); diff --git a/source/include/platform/acfreebsd.h b/source/include/platform/acfreebsd.h index 92d7382..4b9c203 100644 --- a/source/include/platform/acfreebsd.h +++ b/source/include/platform/acfreebsd.h @@ -49,12 +49,21 @@ #include "acgcc.h" #include -#include + +#ifdef __LP64__ +#define ACPI_MACHINE_WIDTH 64 +#else +#define ACPI_MACHINE_WIDTH 32 +#endif + +#define COMPILER_DEPENDENT_INT64 int64_t +#define COMPILER_DEPENDENT_UINT64 uint64_t #define ACPI_UINTPTR_T uintptr_t #define ACPI_USE_DO_WHILE_0 #define ACPI_USE_LOCAL_CACHE +#define ACPI_USE_NATIVE_DIVIDE #define ACPI_USE_SYSTEM_CLIBRARY #ifdef _KERNEL @@ -63,6 +72,7 @@ #include #include #include +#include #include #include "opt_acpi.h" diff --git a/source/os_specific/service_layers/osfreebsdtbl.c b/source/os_specific/service_layers/osfreebsdtbl.c index 3df4845..9d39bc3 100644 --- a/source/os_specific/service_layers/osfreebsdtbl.c +++ b/source/os_specific/service_layers/osfreebsdtbl.c @@ -964,28 +964,15 @@ OslMapTable ( *Table = MappedTable; - /* Checksum for RSDP */ + /* + * Checksum for RSDP. + * Note: Other checksums are computed during the table dump. + */ - if (!ACPI_STRNCMP (MappedTable->Signature, ACPI_SIG_RSDP, - sizeof (ACPI_SIG_RSDP) - 1)) + if (AcpiTbValidateRsdp (ACPI_CAST_PTR (ACPI_TABLE_RSDP, MappedTable)) == + AE_BAD_CHECKSUM) { - /* Check the standard checksum */ - - if (AcpiTbChecksum ((UINT8 *) MappedTable, ACPI_RSDP_CHECKSUM_LENGTH)) - { - fprintf (stderr, "Warning: wrong checksum for RSDP\n"); - } - - /* Check extended checksum if table version >= 2 */ - - if (MappedTable->Revision) - { - if (AcpiTbChecksum ((UINT8 *) MappedTable, - ACPI_RSDP_XCHECKSUM_LENGTH)) - { - fprintf (stderr, "Warning: wrong checksum for RSDP\n"); - } - } + fprintf (stderr, "Warning: wrong checksum for RSDP\n"); } return (AE_OK); diff --git a/source/os_specific/service_layers/oslinuxtbl.c b/source/os_specific/service_layers/oslinuxtbl.c index 67a5e02..fd593a1 100644 --- a/source/os_specific/service_layers/oslinuxtbl.c +++ b/source/os_specific/service_layers/oslinuxtbl.c @@ -960,26 +960,11 @@ OslMapTable ( * Checksum for RSDP. * Note: Other checksums are computed during the table dump. */ - if (!ACPI_STRNCMP (MappedTable->Signature, ACPI_SIG_RSDP, - sizeof (ACPI_SIG_RSDP) - 1)) - { - /* Check the standard checksum */ - - if (AcpiTbChecksum ((UINT8 *) MappedTable, ACPI_RSDP_CHECKSUM_LENGTH)) - { - fprintf (stderr, "Warning: wrong checksum for RSDP\n"); - } - - /* Check extended checksum if table version >= 2 */ - if (MappedTable->Revision) - { - if (AcpiTbChecksum ((UINT8 *) MappedTable, - ACPI_RSDP_XCHECKSUM_LENGTH)) - { - fprintf (stderr, "Warning: wrong checksum for RSDP\n"); - } - } + if (AcpiTbValidateRsdp (ACPI_CAST_PTR (ACPI_TABLE_RSDP, MappedTable)) == + AE_BAD_CHECKSUM) + { + fprintf (stderr, "Warning: wrong checksum for RSDP\n"); } return (AE_OK); diff --git a/source/tools/acpiexec/aetables.c b/source/tools/acpiexec/aetables.c index 07af796..a32c4c5 100644 --- a/source/tools/acpiexec/aetables.c +++ b/source/tools/acpiexec/aetables.c @@ -81,7 +81,7 @@ static ACPI_TABLE_FADT LocalFADT; */ static ACPI_TABLE_XSDT *LocalXSDT; -#define BASE_XSDT_TABLES 8 +#define BASE_XSDT_TABLES 10 #define BASE_XSDT_SIZE (sizeof (ACPI_TABLE_XSDT) + \ ((BASE_XSDT_TABLES -1) * sizeof (UINT64))) @@ -198,7 +198,12 @@ AeBuildLocalTables ( LocalXSDT->TableOffsetEntry[7] = ACPI_PTR_TO_PHYSADDR (&EcdtCode); - /* + /* Install two UEFIs to test multiple table support */ + + LocalXSDT->TableOffsetEntry[8] = ACPI_PTR_TO_PHYSADDR (&Uefi1Code); + LocalXSDT->TableOffsetEntry[9] = ACPI_PTR_TO_PHYSADDR (&Uefi2Code); + + /* * Install the user tables. The DSDT must be installed in the FADT. * All other tables are installed directly into the XSDT. */ diff --git a/source/tools/acpiexec/aetables.h b/source/tools/acpiexec/aetables.h index 791a749..410d528 100644 --- a/source/tools/acpiexec/aetables.h +++ b/source/tools/acpiexec/aetables.h @@ -214,6 +214,30 @@ unsigned char EcdtCode[] = 0x49,0x30,0x2E,0x45,0x43,0x00 /* 00000048 "I0.EC." */ }; +/* Test for multiple UEFI tables */ + +unsigned char Uefi1Code[] = +{ + 0x55,0x45,0x46,0x49,0x36,0x00,0x00,0x00, /* 00000000 "UEFI6..." */ + 0x01,0x03,0x20,0x49,0x6E,0x74,0x65,0x6C, /* 00000008 ".. Intel" */ + 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ + 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ + 0x26,0x06,0x13,0x20,0x00,0x01,0x02,0x03, /* 00000020 "&.. ...." */ + 0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B, /* 00000028 "........" */ + 0x0C,0x0D,0x0E,0x0F,0x36,0x00 /* 00000030 "....6." */ +}; + +unsigned char Uefi2Code[] = +{ + 0x55,0x45,0x46,0x49,0x36,0x00,0x00,0x00, /* 00000000 "UEFI6..." */ + 0x01,0xEB,0x20,0x49,0x6E,0x74,0x65,0x6C, /* 00000008 ".. Intel" */ + 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ + 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ + 0x26,0x06,0x13,0x20,0x06,0x07,0x08,0x09, /* 00000020 "&.. ...." */ + 0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B, /* 00000028 "........" */ + 0x0C,0x0D,0x0E,0x0F,0x36,0x00 /* 00000030 "....6." */ +}; + /* * Example installable control method @@ -414,6 +438,36 @@ DefinitionBlock ("ssdt4.aml", "SSDT", 2, "Intel", "ssdt4", 0x00000004) [040h 0064 1] GPE Number : 09 [041h 0065 13] Namepath : "\_SB.PCI0.EC" + +/* Test multiple UEFI support */ + +[0004] Signature : "UEFI" [UEFI Boot Optimization Table] +[0004] Table Length : 00000036 +[0001] Revision : 01 +[0001] Checksum : 9B +[0006] Oem ID : " Intel" +[0008] Oem Table ID : "Template" +[0004] Oem Revision : 00000001 +[0004] Asl Compiler ID : "INTL" +[0004] Asl Compiler Revision : 20100528 + +[0016] UUID Identifier : 03020100-0504-0706-0809-0A0B0C0D0E0F +[0002] Data Offset : 0000 + + +[0004] Signature : "UEFI" [UEFI Boot Optimization Table] +[0004] Table Length : 00000036 +[0001] Revision : 01 +[0001] Checksum : 9B +[0006] Oem ID : " Intel" +[0008] Oem Table ID : "Template" +[0004] Oem Revision : 00000001 +[0004] Asl Compiler ID : "INTL" +[0004] Asl Compiler Revision : 20100528 + +[0016] UUID Identifier : 09080706-0504-0706-0809-0A0B0C0D0E0F +[0002] Data Offset : 0000 + #endif #endif /* __AETABLES_H__ */ diff --git a/tests/aslts/src/runtime/collections/bdemo/ACPICA/0153/ToDeviceGlob.asl b/tests/aslts/src/runtime/collections/bdemo/ACPICA/0153/ToDeviceGlob.asl index d86567b..7699125 100644 --- a/tests/aslts/src/runtime/collections/bdemo/ACPICA/0153/ToDeviceGlob.asl +++ b/tests/aslts/src/runtime/collections/bdemo/ACPICA/0153/ToDeviceGlob.asl @@ -85,10 +85,10 @@ Method(md5d) Store (0x61, Index(DeRefof(Local0), 3)) Store(DeRefof(Local0), Local1) - if (LNotEqual(Local1, Buffer() {1,2,3,0x61})) { + if (LNotEqual(Local1, Buffer(32) {1,2,3,0x61})) { err("", zFFF, 0xd04, 0, 0, Local1, Buffer() {1,2,3,0x61}) } - if (LNotEqual(bd00, Buffer() {1,2,3,4})) { + if (LNotEqual(bd00, Buffer(32) {1,2,3,4})) { err("", zFFF, 0xd05, 0, 0, bd00, Buffer() {1,2,3,4}) } } @@ -194,10 +194,10 @@ Method(md61) Store (0x61, Index(DeRefof(Local0), 3)) Store(DeRefof(Local0), Local1) - if (LNotEqual(Local1, Buffer() {1,2,3,0x61})) { + if (LNotEqual(Local1, Buffer(32) {1,2,3,0x61})) { err("", zFFF, 0xd12, 0, 0, Local1, Buffer() {1,2,3,0x61}) } - if (LNotEqual(bd00, Buffer() {1,2,3,4})) { + if (LNotEqual(bd00, Buffer(32) {1,2,3,4})) { err("", zFFF, 0xd13, 0, 0, bd00, Buffer() {1,2,3,4}) } } diff --git a/tests/aslts/src/runtime/collections/bdemo/ACPICA/0170/DECL.asl b/tests/aslts/src/runtime/collections/bdemo/ACPICA/0170/DECL.asl index ab474c5..cdb30e0 100644 --- a/tests/aslts/src/runtime/collections/bdemo/ACPICA/0170/DECL.asl +++ b/tests/aslts/src/runtime/collections/bdemo/ACPICA/0170/DECL.asl @@ -45,7 +45,7 @@ err("", zFFF, 0x000, 0, 0, Local0, 14) } else { - CopyObject(0x9999992b, bf90) + Store(0x9999992b, bf90) Store(ObjectType(bf90), Local1) diff --git a/tests/aslts/src/runtime/collections/bdemo/ACPICA/0194/DECL.asl b/tests/aslts/src/runtime/collections/bdemo/ACPICA/0194/DECL.asl index c65eb31..a722e33 100644 --- a/tests/aslts/src/runtime/collections/bdemo/ACPICA/0194/DECL.asl +++ b/tests/aslts/src/runtime/collections/bdemo/ACPICA/0194/DECL.asl @@ -31,6 +31,27 @@ * * SUMMARY: Incorrect length of result of ToBuffer in case it is stored into a Named Buffer */ +Method (bcmp, 2) +{ + Store(Sizeof(Arg0), Local0) + Store(Sizeof(Arg1), Local1) + + if (LGreater(Local0, Local1)) + { + Store(Local1, Local0) + } + while(Local0) { + Decrement(Local0) + Store(Local0, Debug) + Store(DerefOf(Index(Arg0, Local0)), Local1) + Store(DerefOf(Index(Arg1, Local0)), Local2) + if (LNotEqual(Local1, Local2)) + { + return (0) + } + } + return (1) +} Method(mfa7, 1) { @@ -43,13 +64,13 @@ Method(mfa7, 1) if (arg0) { Store("ToBuffer(b001, b000)", Debug) ToBuffer(b001, b000) - if (LNotEqual(b000, bb01)) { + if (LNot(bcmp(b000, bb01))) { err("", zFFF, 0x000, 0, 0, b000, bb01) } } else { Store("ToBuffer(b000, b001)", Debug) ToBuffer(b000, b001) - if (LNotEqual(b001, bb00)) { + if (Lnot(bcmp(b001, bb00))) { err("", zFFF, 0x000, 0, 0, b001, bb00) } } diff --git a/tests/aslts/src/runtime/collections/bdemo/ACPICA/0241/DECL.asl b/tests/aslts/src/runtime/collections/bdemo/ACPICA/0241/DECL.asl index c798e89..3971bbd 100644 --- a/tests/aslts/src/runtime/collections/bdemo/ACPICA/0241/DECL.asl +++ b/tests/aslts/src/runtime/collections/bdemo/ACPICA/0241/DECL.asl @@ -33,6 +33,7 @@ * AcpiExReadDataFromField called from AcpiExResolveObjectToValue * * Note. The crash occurred when acpiexec is compiled in DEBUG mode. + * July 2013: Problem is fixed with change for DeRefOf operator with FieldUnits. */ Method(m129) @@ -53,7 +54,15 @@ Method(m129) // Read, Access out of OpRegion Store(DeRefof(Local2), Local0) - CH04("", 0, 53, 0, 0x001, 0, 0) // AE_AML_REGION_LIMIT + /* Store above should cause 2 errors: + * 1) AE_AML_REGION_LIMIT + * 2) AE_AML_NO_RETURN_VALUE + */ + if (LEqual (EXC0, 2)) + { + Store (1, EXC0) + } + CH04("", 0, 62, 0, 0x001, 0, 0) // AE_AML_NO_RETURN_VALUE } m000(0x100) diff --git a/tests/aslts/src/runtime/collections/bdemo/ACPICA/0243/DECL.asl b/tests/aslts/src/runtime/collections/bdemo/ACPICA/0243/DECL.asl index cf4a44c..ad8c596 100644 --- a/tests/aslts/src/runtime/collections/bdemo/ACPICA/0243/DECL.asl +++ b/tests/aslts/src/runtime/collections/bdemo/ACPICA/0243/DECL.asl @@ -102,7 +102,7 @@ Method(m02f) /* (7) */ Store("Releasing mutex of level 5: T500 (Level 5, index 0)", Debug) Release(T500) - CH04("", 0, 65, 0, 0x007, 0, 0) // AE_AML_MUTEX_NOT_ACQUIRED + CH03("", 0, 0x007, 0, 0) } Method(mm00) diff --git a/tests/aslts/src/runtime/collections/bdemo/ACPICA/0271/DECL.asl b/tests/aslts/src/runtime/collections/bdemo/ACPICA/0271/DECL.asl index aeecc02..6cece5f 100644 --- a/tests/aslts/src/runtime/collections/bdemo/ACPICA/0271/DECL.asl +++ b/tests/aslts/src/runtime/collections/bdemo/ACPICA/0271/DECL.asl @@ -68,23 +68,5 @@ Method(m021) err("", zFFF, 0x003, 0, 0, Local0, c009) } CH03("", 0, 0x004, 0, 0) - - /* - * This bdemo shows only 'Outstanding allocations': - * - q - * 004790B8 Len 0028 utcache-414 [Node] D000 - * 00479178 Len 0028 utcache-414 [Node] D000 - * 004798E8 Len 0028 utcache-414 [Node] D000 - * ACPI Error (uttrack-0719): 3(3) Outstanding allocations [20060040] - * - * Check error manually, - * and when the cause is fixed remove call to err() below. - */ - - Store("Have no method to detect presence of error, only 'Outstanding allocations',", Debug) - Store("so, force unconditional error message.", Debug) - - // Report error message - m02a() } diff --git a/tests/aslts/src/runtime/collections/bdemo/ACPICA/0272/DECL.asl b/tests/aslts/src/runtime/collections/bdemo/ACPICA/0272/DECL.asl index 2722f89..f7e788c 100644 --- a/tests/aslts/src/runtime/collections/bdemo/ACPICA/0272/DECL.asl +++ b/tests/aslts/src/runtime/collections/bdemo/ACPICA/0272/DECL.asl @@ -68,23 +68,5 @@ Method(m020) err("", zFFF, 0x003, 0, 0, Local0, c009) } CH03("", 0, 0x004, 0, 0) - - /* - * This bdemo shows only 'Outstanding allocations': - * - q - * 004790B8 Len 0028 utcache-414 [Node] TZ00 - * 00479178 Len 0028 utcache-414 [Node] TZ00 - * 004798E8 Len 0028 utcache-414 [Node] TZ00 - * ACPI Error (uttrack-0719): 3(3) Outstanding allocations [20060040] - * - * Check error manually, - * and when the cause is fixed remove call to err() below. - */ - - Store("Have no method to detect presence of error, only 'Outstanding allocations',", Debug) - Store("so, force unconditional error message.", Debug) - - // Report error message - m02a() } diff --git a/tests/aslts/src/runtime/collections/bdemo/ACPICA/common/proc.asl b/tests/aslts/src/runtime/collections/bdemo/ACPICA/common/proc.asl index 22cfd91..7988717 100644 --- a/tests/aslts/src/runtime/collections/bdemo/ACPICA/common/proc.asl +++ b/tests/aslts/src/runtime/collections/bdemo/ACPICA/common/proc.asl @@ -165,7 +165,7 @@ Method(md6a, 7) Store(Index(arg0, arg2), Local0) CH03("", 0, 0x100, 0, 0) Store(DerefOf(Local0), Local1) - CH04("", 0, 62, 0, 0x101, 0, 0) // AE_AML_NO_RETURN_VALUE + CH04("", 1, 51, 0, 0x101, 0, 0) // AE_AML_UNINITIALIZED_ELEMENT // Just before written area @@ -174,7 +174,7 @@ Method(md6a, 7) Store(Index(arg0, Local1), Local0) CH03("", 0, 0x102, 0, 0) Store(DerefOf(Local0), Local1) - CH04("", 0, 62, 0, 0x103, 0, 0) // AE_AML_NO_RETURN_VALUE + CH04("", 1, 51, 0, 0x103, 0, 0) // AE_AML_UNINITIALIZED_ELEMENT } // Just after pre-initialized and written areas @@ -189,7 +189,7 @@ Method(md6a, 7) Store(Index(arg0, Local7), Local0) CH03("", 0, 0x104, 0, 0) Store(DerefOf(Local0), Local1) - CH04("", 0, 62, 0, 0x105, 0, 0) // AE_AML_NO_RETURN_VALUE + CH04("", 1, 51, 0, 0x105, 0, 0) // AE_AML_UNINITIALIZED_ELEMENT // Last element of Package @@ -198,7 +198,7 @@ Method(md6a, 7) Store(Index(arg0, Local1), Local0) CH03("", 0, 0x106, 0, 0) Store(DerefOf(Local0), Local1) - CH04("", 0, 62, 0, 0x107, 0, 0) // AE_AML_NO_RETURN_VALUE + CH04("", 1, 51, 0, 0x107, 0, 0) // AE_AML_UNINITIALIZED_ELEMENT } } else { // Just after pre-initialized area @@ -207,7 +207,7 @@ Method(md6a, 7) Store(Index(arg0, arg2), Local0) CH03("", 0, 0x108, 0, 0) Store(DerefOf(Local0), Local1) - CH04("", 0, 62, 0, 0x109, 0, 0) // AE_AML_NO_RETURN_VALUE + CH04("", 1, 51, 0, 0x109, 0, 0) // AE_AML_UNINITIALIZED_ELEMENT // Last element of Package @@ -216,7 +216,7 @@ Method(md6a, 7) Store(Index(arg0, Local1), Local0) CH03("", 0, 0x10a, 0, 0) Store(DerefOf(Local0), Local1) - CH04("", 0, 62, 0, 0x10b, 0, 0) // AE_AML_NO_RETURN_VALUE + CH04("", 1, 51, 0, 0x10b, 0, 0) // AE_AML_UNINITIALIZED_ELEMENT } } @@ -296,7 +296,7 @@ Method(md6b, 6) Store(Index(arg0, arg5), Local0) CH03("", 0, 0x114, 0, 0) Store(DerefOf(Local0), Local1) - CH04("", 0, 62, 0, 0x115, 0, 0) // AE_AML_NO_RETURN_VALUE + CH04("", 1, 51, 0, 0x115, 0, 0) // AE_AML_UNINITIALIZED_ELEMENT } else { diff --git a/tests/aslts/src/runtime/collections/exceptions/exc/exc.asl b/tests/aslts/src/runtime/collections/exceptions/exc/exc.asl index 08763cb..a6ff754 100644 --- a/tests/aslts/src/runtime/collections/exceptions/exc/exc.asl +++ b/tests/aslts/src/runtime/collections/exceptions/exc/exc.asl @@ -617,7 +617,11 @@ Method(m151) * Updated according to Bug 85 fix: no exception is expected * since the value is not processed. */ - CH04(ts, 0, 62, z058, 89, 0, 0) + /* + * OBSOLETE July 2013. DerefOf on an empty package element now causes error + * CH04(ts, 0, 62, z058, 89, 0, 0) + */ + CH04(ts, 1, 51, z058, 89, 0, 0) // AE_AML_UNINITIALIZED_ELEMENT Add(DeRefOf(Index(p000, 3)), 1, Local5) @@ -1265,7 +1269,16 @@ Method(m708) // Read Store(DeRefof(Local2), Local4) - CH04(ts, 0, 53, z058, Add(183, Local1), 0, 0) // AE_AML_REGION_LIMIT + /* July 2013 + * + * The Store above should actually cause two errors + * 1) AE_AML_REGION_LIMIT + * 2) AE_AML_NO_RETURN_VALUE + * + * Indicate we only care about the first by placing a 1 + * in the second argument + */ + CH04(ts, 1, 53, z058, Add(183, Local1), 0, 0) // AE_AML_REGION_LIMIT Decrement(Local0) Increment(Local1) diff --git a/tests/aslts/src/runtime/collections/exceptions/exc_operand/exc_operand2/exc_00_undef.asl b/tests/aslts/src/runtime/collections/exceptions/exc_operand/exc_operand2/exc_00_undef.asl index 9de5f39..7c847a8 100644 --- a/tests/aslts/src/runtime/collections/exceptions/exc_operand/exc_operand2/exc_00_undef.asl +++ b/tests/aslts/src/runtime/collections/exceptions/exc_operand/exc_operand2/exc_00_undef.asl @@ -415,7 +415,7 @@ Method(m4b0, 1) // DeRefOf(Index(Package, Ind)) Store (DeRefOf(Index(p000, 0)), Local1) - CH04(ts, 0, 62, z092, 4, 0, 0) + CH04(ts, 1, 51, z092, 4, 0, 0) // CondRefOf diff --git a/tests/aslts/src/runtime/collections/functional/region/opregions.asl b/tests/aslts/src/runtime/collections/functional/region/opregions.asl index a108c0b..d79d8db 100644 --- a/tests/aslts/src/runtime/collections/functional/region/opregions.asl +++ b/tests/aslts/src/runtime/collections/functional/region/opregions.asl @@ -580,6 +580,7 @@ Method(m70c, 3) m70d(arg2, b000) if (LEqual(Local3, 0x02 /* PCI_Config */)) {} + elseif (LEqual(Local3, 0x03 /* EmbbededControl */)) {} elseif (LEqual(Local3, 0x04 /* SMBus */)) {} elseif (LEqual(Local3, 0x05 /* SystemCMOS */)) {} elseif (LEqual(Local3, 0x06 /* PciBarTarget */)) {} @@ -591,7 +592,7 @@ Method(m70c, 3) CH03(arg0, z141, 24, arg2, Local3) Store(ObjectType(Derefof(Local6)), Local0) - Store(c00d, Local1) + Store(c00b, Local1) if (LNotEqual(Local0, Local1)) { err(arg0, z141, 25, 0, 0, Local0, Local1) } else {