Sync ACPICA with Intel's version 20150619.
authorSascha Wildner <saw@online.de>
Sun, 21 Jun 2015 22:10:12 +0000 (00:10 +0200)
committerSascha Wildner <saw@online.de>
Sun, 21 Jun 2015 23:09:03 +0000 (01:09 +0200)
* Replace various macros like ACPI_STRLEN with the standard C library
  functions across the tree.

* Add support for OSDT table, to override existing namespace objects
  from DSDT/SSDTs.

* Handle systems with two FACS tables better.

* Add a feature to allow for systems that do not contain an FACS.

* Fix wrong GUID strings for NFIT tables.

* Support for _CLS in AcpiGetObjectInfo().

* Update TCPA and TPM2 table definitions to a more recent TCG ACPI spec.

* Add definitions for the ACPI 6.0 GIC version field in MADT.

* Various fixes and enhancements in the tools.

For a more detailed list, please see sys/contrib/dev/acpica/changes.txt.

180 files changed:
share/man/man4/acpi.4
sys/contrib/dev/acpica/changes.txt
sys/contrib/dev/acpica/source/common/adisasm.c
sys/contrib/dev/acpica/source/common/ahids.c
sys/contrib/dev/acpica/source/common/ahpredef.c
sys/contrib/dev/acpica/source/common/ahuuids.c
sys/contrib/dev/acpica/source/common/dmextern.c
sys/contrib/dev/acpica/source/common/dmrestag.c
sys/contrib/dev/acpica/source/common/dmtable.c
sys/contrib/dev/acpica/source/common/dmtbdump.c
sys/contrib/dev/acpica/source/common/dmtbinfo.c
sys/contrib/dev/acpica/source/common/getopt.c
sys/contrib/dev/acpica/source/compiler/aslanalyze.c
sys/contrib/dev/acpica/source/compiler/aslascii.c
sys/contrib/dev/acpica/source/compiler/aslcodegen.c
sys/contrib/dev/acpica/source/compiler/aslcompile.c
sys/contrib/dev/acpica/source/compiler/aslcompiler.h
sys/contrib/dev/acpica/source/compiler/aslcompiler.l
sys/contrib/dev/acpica/source/compiler/asldefine.h
sys/contrib/dev/acpica/source/compiler/aslerror.c
sys/contrib/dev/acpica/source/compiler/aslfileio.c
sys/contrib/dev/acpica/source/compiler/aslfiles.c
sys/contrib/dev/acpica/source/compiler/aslfold.c
sys/contrib/dev/acpica/source/compiler/aslglobal.h
sys/contrib/dev/acpica/source/compiler/asllookup.c
sys/contrib/dev/acpica/source/compiler/aslmain.c
sys/contrib/dev/acpica/source/compiler/aslmapenter.c
sys/contrib/dev/acpica/source/compiler/aslmapoutput.c
sys/contrib/dev/acpica/source/compiler/aslmessages.c
sys/contrib/dev/acpica/source/compiler/aslmessages.h
sys/contrib/dev/acpica/source/compiler/aslmethod.c
sys/contrib/dev/acpica/source/compiler/aslopcodes.c
sys/contrib/dev/acpica/source/compiler/asloperands.c
sys/contrib/dev/acpica/source/compiler/aslopt.c
sys/contrib/dev/acpica/source/compiler/asloptions.c
sys/contrib/dev/acpica/source/compiler/aslprintf.c
sys/contrib/dev/acpica/source/compiler/aslstartup.c
sys/contrib/dev/acpica/source/compiler/aslsupport.l
sys/contrib/dev/acpica/source/compiler/asltypes.h
sys/contrib/dev/acpica/source/compiler/aslutils.c
sys/contrib/dev/acpica/source/compiler/asluuid.c
sys/contrib/dev/acpica/source/compiler/aslxref.c
sys/contrib/dev/acpica/source/compiler/dtcompile.c
sys/contrib/dev/acpica/source/compiler/dtcompiler.h
sys/contrib/dev/acpica/source/compiler/dtexpress.c
sys/contrib/dev/acpica/source/compiler/dtfield.c
sys/contrib/dev/acpica/source/compiler/dtio.c
sys/contrib/dev/acpica/source/compiler/dtparser.y
sys/contrib/dev/acpica/source/compiler/dtsubtable.c
sys/contrib/dev/acpica/source/compiler/dttable.c
sys/contrib/dev/acpica/source/compiler/dttemplate.c
sys/contrib/dev/acpica/source/compiler/dttemplate.h
sys/contrib/dev/acpica/source/compiler/dtutils.c
sys/contrib/dev/acpica/source/compiler/prparser.y
sys/contrib/dev/acpica/source/compiler/prscan.c
sys/contrib/dev/acpica/source/compiler/prutils.c
sys/contrib/dev/acpica/source/components/debugger/dbcmds.c
sys/contrib/dev/acpica/source/components/debugger/dbconvert.c
sys/contrib/dev/acpica/source/components/debugger/dbdisply.c
sys/contrib/dev/acpica/source/components/debugger/dbexec.c
sys/contrib/dev/acpica/source/components/debugger/dbfileio.c
sys/contrib/dev/acpica/source/components/debugger/dbhistry.c
sys/contrib/dev/acpica/source/components/debugger/dbinput.c
sys/contrib/dev/acpica/source/components/debugger/dbmethod.c
sys/contrib/dev/acpica/source/components/debugger/dbnames.c
sys/contrib/dev/acpica/source/components/debugger/dbtest.c
sys/contrib/dev/acpica/source/components/debugger/dbutils.c
sys/contrib/dev/acpica/source/components/debugger/dbxface.c
sys/contrib/dev/acpica/source/components/disassembler/dmbuffer.c
sys/contrib/dev/acpica/source/components/disassembler/dmcstyle.c
sys/contrib/dev/acpica/source/components/disassembler/dmopcode.c
sys/contrib/dev/acpica/source/components/dispatcher/dsfield.c
sys/contrib/dev/acpica/source/components/dispatcher/dsinit.c
sys/contrib/dev/acpica/source/components/dispatcher/dsobject.c
sys/contrib/dev/acpica/source/components/dispatcher/dsutils.c
sys/contrib/dev/acpica/source/components/dispatcher/dswload.c
sys/contrib/dev/acpica/source/components/events/evgpe.c
sys/contrib/dev/acpica/source/components/events/evgpeinit.c
sys/contrib/dev/acpica/source/components/executer/exconfig.c
sys/contrib/dev/acpica/source/components/executer/exconvrt.c
sys/contrib/dev/acpica/source/components/executer/exdebug.c
sys/contrib/dev/acpica/source/components/executer/exdump.c
sys/contrib/dev/acpica/source/components/executer/exfield.c
sys/contrib/dev/acpica/source/components/executer/exfldio.c
sys/contrib/dev/acpica/source/components/executer/exmisc.c
sys/contrib/dev/acpica/source/components/executer/exnames.c
sys/contrib/dev/acpica/source/components/executer/exoparg2.c
sys/contrib/dev/acpica/source/components/executer/exoparg3.c
sys/contrib/dev/acpica/source/components/executer/exregion.c
sys/contrib/dev/acpica/source/components/executer/exstorob.c
sys/contrib/dev/acpica/source/components/executer/exutils.c
sys/contrib/dev/acpica/source/components/hardware/hwgpe.c
sys/contrib/dev/acpica/source/components/hardware/hwxfsleep.c
sys/contrib/dev/acpica/source/components/namespace/nsaccess.c
sys/contrib/dev/acpica/source/components/namespace/nsconvert.c
sys/contrib/dev/acpica/source/components/namespace/nsdump.c
sys/contrib/dev/acpica/source/components/namespace/nseval.c
sys/contrib/dev/acpica/source/components/namespace/nsinit.c
sys/contrib/dev/acpica/source/components/namespace/nsparse.c
sys/contrib/dev/acpica/source/components/namespace/nsrepair2.c
sys/contrib/dev/acpica/source/components/namespace/nssearch.c
sys/contrib/dev/acpica/source/components/namespace/nsutils.c
sys/contrib/dev/acpica/source/components/namespace/nsxfeval.c
sys/contrib/dev/acpica/source/components/namespace/nsxfname.c
sys/contrib/dev/acpica/source/components/parser/psutils.c
sys/contrib/dev/acpica/source/components/resources/rscreate.c
sys/contrib/dev/acpica/source/components/resources/rsmisc.c
sys/contrib/dev/acpica/source/components/resources/rsutils.c
sys/contrib/dev/acpica/source/components/resources/rsxface.c
sys/contrib/dev/acpica/source/components/tables/tbdata.c
sys/contrib/dev/acpica/source/components/tables/tbfadt.c
sys/contrib/dev/acpica/source/components/tables/tbfind.c
sys/contrib/dev/acpica/source/components/tables/tbinstal.c
sys/contrib/dev/acpica/source/components/tables/tbprint.c
sys/contrib/dev/acpica/source/components/tables/tbutils.c
sys/contrib/dev/acpica/source/components/tables/tbxface.c
sys/contrib/dev/acpica/source/components/tables/tbxfload.c
sys/contrib/dev/acpica/source/components/utilities/utalloc.c
sys/contrib/dev/acpica/source/components/utilities/utbuffer.c
sys/contrib/dev/acpica/source/components/utilities/utcache.c
sys/contrib/dev/acpica/source/components/utilities/utclib.c
sys/contrib/dev/acpica/source/components/utilities/utcopy.c
sys/contrib/dev/acpica/source/components/utilities/utids.c
sys/contrib/dev/acpica/source/components/utilities/utmisc.c
sys/contrib/dev/acpica/source/components/utilities/utosi.c
sys/contrib/dev/acpica/source/components/utilities/utpredef.c
sys/contrib/dev/acpica/source/components/utilities/utprint.c
sys/contrib/dev/acpica/source/components/utilities/utstring.c
sys/contrib/dev/acpica/source/components/utilities/uttrack.c
sys/contrib/dev/acpica/source/components/utilities/utxface.c
sys/contrib/dev/acpica/source/components/utilities/utxfinit.c
sys/contrib/dev/acpica/source/include/acclib.h [new file with mode: 0644]
sys/contrib/dev/acpica/source/include/accommon.h
sys/contrib/dev/acpica/source/include/acglobal.h
sys/contrib/dev/acpica/source/include/acinterp.h
sys/contrib/dev/acpica/source/include/aclocal.h
sys/contrib/dev/acpica/source/include/acnames.h
sys/contrib/dev/acpica/source/include/acnamesp.h
sys/contrib/dev/acpica/source/include/acobject.h
sys/contrib/dev/acpica/source/include/acoutput.h
sys/contrib/dev/acpica/source/include/acpixf.h
sys/contrib/dev/acpica/source/include/acstruct.h
sys/contrib/dev/acpica/source/include/actbl.h
sys/contrib/dev/acpica/source/include/actbl1.h
sys/contrib/dev/acpica/source/include/actbl2.h
sys/contrib/dev/acpica/source/include/actbl3.h
sys/contrib/dev/acpica/source/include/actypes.h
sys/contrib/dev/acpica/source/include/acutils.h
sys/contrib/dev/acpica/source/include/acuuid.h
sys/contrib/dev/acpica/source/include/platform/acefi.h
sys/contrib/dev/acpica/source/include/platform/acefiex.h [new file with mode: 0644]
sys/contrib/dev/acpica/source/include/platform/acenv.h
sys/contrib/dev/acpica/source/include/platform/acenvex.h
sys/contrib/dev/acpica/source/include/platform/acgcc.h
sys/contrib/dev/acpica/source/include/platform/acmsvc.h
sys/contrib/dev/acpica/source/os_specific/service_layers/osbsdtbl.c
sys/contrib/dev/acpica/source/os_specific/service_layers/osefitbl.c
sys/contrib/dev/acpica/source/os_specific/service_layers/osefixf.c
sys/contrib/dev/acpica/source/os_specific/service_layers/oslinuxtbl.c
sys/contrib/dev/acpica/source/os_specific/service_layers/oswintbl.c
sys/contrib/dev/acpica/source/tools/acpidump/acpidump.h
sys/contrib/dev/acpica/source/tools/acpidump/apdump.c
sys/contrib/dev/acpica/source/tools/acpidump/apfiles.c
sys/contrib/dev/acpica/source/tools/acpidump/apmain.c
sys/contrib/dev/acpica/source/tools/acpiexec/aeexec.c
sys/contrib/dev/acpica/source/tools/acpiexec/aehandlers.c
sys/contrib/dev/acpica/source/tools/acpiexec/aeinitfile.c
sys/contrib/dev/acpica/source/tools/acpiexec/aeregion.c
sys/contrib/dev/acpica/source/tools/acpiexec/aetables.c
sys/contrib/dev/acpica/source/tools/acpihelp/ahamlops.c
sys/contrib/dev/acpica/source/tools/acpihelp/ahdecode.c
sys/contrib/dev/acpica/source/tools/acpinames/antables.c
sys/contrib/dev/acpica/source/tools/acpisrc/acpisrc.h
sys/contrib/dev/acpica/source/tools/acpisrc/asconvrt.c
sys/contrib/dev/acpica/source/tools/acpisrc/asfile.c
sys/contrib/dev/acpica/source/tools/acpisrc/asremove.c
sys/contrib/dev/acpica/source/tools/acpisrc/astable.c
sys/contrib/dev/acpica/source/tools/acpisrc/asutils.c
sys/dev/acpica/acpi.c
usr.sbin/acpi/acpidump/acpidump.8

index 88379c5..52dc9e5 100644 (file)
@@ -25,7 +25,7 @@
 .\"
 .\" $FreeBSD: src/share/man/man4/acpi.4,v 1.61.8.1 2009/04/15 03:14:26 kensmith Exp $
 .\"
-.Dd November 29, 2014
+.Dd June 21, 2015
 .Dt ACPI 4
 .Os
 .Sh NAME
@@ -231,6 +231,8 @@ debugging purposes.
 .It Va debug.acpi.enabled
 Selectively enables portions of ACPI that are disabled by default, for
 debugging purposes.
+.It Va debug.acpi.facs_addr32
+Favor 32-bit FACS table addresses over the 64-bit addresses.
 .It Va debug.acpi.fadt_addr32
 Favor 32-bit FADT register addresses over the 64-bit addresses.
 .It Va debug.acpi.ignore_xsdt
index 511652f..9abe735 100644 (file)
@@ -1,5 +1,130 @@
 ----------------------------------------
-08 April 2015. Summary of changes for version 20150515:
+19 June 2015. Summary of changes for version 20150619:
+
+Two regressions in version 20150616 have been addressed:
+
+Fixes some problems/issues with the C library macro removal (ACPI_STRLEN, 
+etc.) This update changes ACPICA to only use the standard headers for 
+functions, or the prototypes for the local versions of the C library 
+functions. Across the source code, this required some additional casts 
+for some Clib invocations for portability. Moved all local prototypes to 
+a new file, acclib.h
+
+Fixes several problems with recent changes to the handling of the FACS 
+table that could cause some systems not to boot.
+
+
+----------------------------------------
+16 June 2015. Summary of changes for version 20150616:
+
+
+1) ACPICA kernel-resident subsystem:
+
+Across the entire ACPICA source code base, the various macros for the C 
+library functions (such as ACPI_STRLEN, etc.) have been removed and 
+replaced by the standard C library names (strlen, etc.) The original 
+purpose for these macros is no longer applicable. This simplification 
+reduces the number of macros used in the ACPICA source code 
+significantly, improving readability and maintainability.
+
+Implemented support for a new ACPI table, the OSDT. This table, the 
+"override" SDT, can be loaded directly by the host OS at boot time. It 
+enables the replacement of existing namespace objects that were installed 
+via the DSDT and/or SSDTs. The primary purpose for this is to replace 
+buggy or incorrect ASL/AML code obtained via the BIOS. The OSDT is slated 
+for inclusion in a future version of the ACPI Specification. Lv Zheng/Bob 
+Moore.
+
+Added support for systems with (improperly) two FACS tables -- a "32-bit" 
+table (via FADT 32-bit legacy field) and a "64-bit" table (via the 64-bit 
+X field). This change will support both automatically. There continues to 
+be systems found with this issue. This support requires a change to the 
+AcpiSetFirmwareWakingVector interface. Also, a public global variable has 
+been added to allow the host to select which FACS is desired 
+(AcpiGbl_Use32BitFacsAddresses). See the ACPICA reference for more 
+details Lv Zheng.
+
+Added a new feature to allow for systems that do not contain an FACS. 
+Although this is already supported on hardware-reduced platforms, the 
+feature has been extended for all platforms. The reasoning is that we do 
+not want to abort the entire ACPICA initialization just because the 
+system is seriously buggy and has no FACS.
+
+Fixed a problem where the GUID strings for NFIT tables (in acuuid.h) were 
+not correctly transcribed from the ACPI specification in ACPICA version 
+20150515.
+
+Implemented support for the _CLS object in the AcpiGetObjectInfo external 
+interface.
+
+Updated the definitions of the TCPA and TPM2 ACPI tables to the more 
+recent TCG ACPI Specification, December 14, 2014. Table disassembler and 
+compiler also updated. Note: The TCPA "server" table is not supported by 
+the disassembler/table-compiler at this time.
+
+ACPI 6.0: Added definitions for the new GIC version field in the MADT.
+
+Example Code and Data Size: These are the sizes for the OS-independent 
+acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
+debug version of the code includes the debug output trace mechanism and 
+has a much larger code and data size.
+
+  Current Release:
+    Non-Debug Version: 100.6K Code, 27.6K Data, 128.2K Total
+    Debug Version:     196.2K Code, 81.0K Data, 277.2K Total
+  Previous Release:
+    Non-Debug Version:  99.9K Code, 27.5K Data, 127.4K Total
+    Debug Version:     195.2K Code, 80.8K Data, 276.0K Total
+
+
+2) iASL Compiler/Disassembler and Tools:
+
+Disassembler: Fixed a problem with the new symbolic operator disassembler 
+where incorrect ASL code could be emitted in some cases for the "non-
+commutative" operators -- Subtract, Divide, Modulo, ShiftLeft, and 
+ShiftRight. The actual problem cases seem to be rather unusual in common 
+ASL code, however. David Box.
+
+Modified the linux version of acpidump to obtain ACPI tables from not 
+just /dev/mem (which may not exist) and /sys/firmware/acpi/tables. Lv 
+Zheng.
+
+iASL: Fixed a problem where the user preprocessor output file (.i) 
+contained extra data that was not expected. The compiler was using this 
+file as a temporary file and passed through #line directives in order to 
+keep compiler error messages in sync with the input file and line number 
+across multiple include files. The (.i) is no longer a temporary file as 
+the compiler uses a new, different file for the original purpose.
+
+iASL: Fixed a problem where comments within the original ASL source code 
+file were not passed through to the preprocessor output file, nor any 
+listing files.
+
+iASL: Fixed some issues for the handling of the "#include" preprocessor 
+directive and the similar (but not the same) "Include" ASL operator.
+
+iASL: Add support for the new OSDT in both the disassembler and compiler.
+
+iASL: Fixed a problem with the constant folding support where a Buffer 
+object could be incorrectly generated (incorrectly formed) during a 
+conversion to a Store() operator.
+
+AcpiHelp: Updated for new NFIT GUIDs, "External" AML opcode, and new 
+description text for the _REV predefined name. _REV now permanently 
+returns 2, as per the ACPI 6.0 specification.
+
+Debugger: Enhanced the output of the Debug ASL object for references 
+produced by the Index operator. For Buffers and strings, only output the 
+actual byte pointed to by the index. For packages, only print the single 
+package element decoded by the index. Previously, the entire 
+buffer/string/package was emitted.
+
+iASL/Table-compiler: Fixed a regression where the "generic" data types 
+were no longer recognized, causing errors.
+
+
+----------------------------------------
+15 May 2015. Summary of changes for version 20150515:
 
 This release implements most of ACPI 6.0 as described below.
 
@@ -34,7 +159,7 @@ iASL disassembler and table compiler: Added ACPI 6.0 changes to existing
 tables: FADT, MADT.
 
 iASL preprocessor: Added a new directive to enable inclusion of binary 
-blobs into ASL code. The new directive is #includebinary. It takes a 
+blobs into ASL code. The new directive is #includebuffer. It takes a 
 binary file as input and emits a named ascii buffer object into the ASL 
 code.
 
index a092923..1fe6e06 100644 (file)
@@ -243,7 +243,7 @@ AdAmlDisassemble (
         while (ExternalFileList)
         {
             ExternalFilename = ExternalFileList->Path;
-            if (!ACPI_STRCMP (ExternalFilename, Filename))
+            if (!strcmp (ExternalFilename, Filename))
             {
                 /* Next external file */
 
index f2f1786..0c0fc41 100644 (file)
@@ -230,7 +230,7 @@ AcpiAhMatchHardwareId (
 
     for (Info = AslDeviceIds; Info->Name; Info++)
     {
-        if (!ACPI_STRCMP (HardwareId, Info->Name))
+        if (!strcmp (HardwareId, Info->Name))
         {
             return (Info);
         }
index e728c64..8518249 100644 (file)
@@ -249,7 +249,7 @@ const AH_PREDEFINED_NAME    AslPredefinedInfo[] =
     AH_PREDEF ("_RBW",    "Register Bit Width", "Resource Descriptor field"),
     AH_PREDEF ("_RDI",    "Resource Dependencies for Idle", "Returns a list of dependencies for idle states"),
     AH_PREDEF ("_REG",    "Region Availability", "Inform AML code of an operation region availability change"),
-    AH_PREDEF ("_REV",    "Supported ACPI Revision", "Returns the revision of the ACPI specification that is implemented"),
+    AH_PREDEF ("_REV",    "Supported Integer Width", "Returns the supported integer width (<= 1: 32 bits only, >=2: both 32 and 64 bits"),
     AH_PREDEF ("_RMV",    "Removal Status", "Returns a device's removal ability status (docking)"),
     AH_PREDEF ("_RNG",    "Range", "Memory range type, Resource Descriptor field"),
     AH_PREDEF ("_RST",    "Device Reset", "Executes a reset on a device"),
index 929e3d6..d48ea40 100644 (file)
@@ -43,6 +43,7 @@
 
 #include "acpi.h"
 #include "accommon.h"
+#include "acuuid.h"
 
 #define _COMPONENT          ACPI_UTILITIES
         ACPI_MODULE_NAME    ("ahuuids")
  */
 const AH_UUID  AcpiUuids[] =
 {
-    {"PCI Host Bridge Device",
-        "33db4d5b-1ff7-401c-9657-7441c03dd766"},
-
-    {"Platform-wide Capabilities",
-        "0811b06e-4a27-44f9-8d60-3cbbc22e7b48"},
-
-    {"Dynamic Enumeration",
-        "d8c1a3a6-be9b-4c9b-91bf-c3cb81fc5daf"},
-
-    {"GPIO Controller",
-        "4f248f40-d5e2-499f-834c-27758ea1cd3f"},
-
-    {"Battery Thermal Limit",
-        "4c2067e3-887d-475c-9720-4af1d3ed602e"},
-
-    {"Thermal Extensions",
-        "14d399cd-7a27-4b18-8fb4-7cb7b9f4e500"},
-
-    {"USB Controller",
-        "ce2ee385-00e6-48cb-9f05-2edb927c4899"},
-
-    {"HID I2C Device",
-        "3cdff6f7-4267-4555-ad05-b30a3d8938de"},
-
-    {"Power Button Device",
-        "dfbcf3c5-e7a5-44e6-9c1f-29c76f6e059c"},
-
-    {"Device Labeling Interface",
-        "e5c937d0-3553-4d7a-9117-ea4d19c3434d"},
-
-    {"SATA Controller",
-        "e4db149b-fcfe-425b-a6d8-92357d78fc7f"},
-
-    {"Physical Presence Interface",
-        "3dddfaa6-361b-4eb4-a424-8d10089d1653"},
-
-    {"Device Properties for _DSD",
-        "daffd814-6eba-4d8c-8a91-bc9bbf4aa301"},
+    {"[Controllers]",               NULL},
+    {"GPIO Controller",             UUID_GPIO_CONTROLLER},
+    {"USB Controller",              UUID_USB_CONTROLLER},
+    {"SATA Controller",             UUID_SATA_CONTROLLER},
+
+    {"[Devices]",                   NULL},
+    {"PCI Host Bridge Device",      UUID_PCI_HOST_BRIDGE},
+    {"HID I2C Device",              UUID_I2C_DEVICE},
+    {"Power Button Device",         UUID_POWER_BUTTON},
+
+    {"[Interfaces]",                NULL},
+    {"Device Labeling Interface",   UUID_DEVICE_LABELING},
+    {"Physical Presence Interface", UUID_PHYSICAL_PRESENCE},
+
+    {"[Non-volatile DIMM and NFIT table]",       NULL},
+    {"Volatile Memory Region",      UUID_VOLATILE_MEMORY},
+    {"Persistent Memory Region",    UUID_PERSISTENT_MEMORY},
+    {"NVDIMM Control Region",       UUID_CONTROL_REGION},
+    {"NVDIMM Data Region",          UUID_DATA_REGION},
+    {"Volatile Virtual Disk",       UUID_VOLATILE_VIRTUAL_DISK},
+    {"Volatile Virtual CD",         UUID_VOLATILE_VIRTUAL_CD},
+    {"Persistent Virtual Disk",     UUID_PERSISTENT_VIRTUAL_DISK},
+    {"Persistent Virtual CD",       UUID_PERSISTENT_VIRTUAL_CD},
+
+    {"[Miscellaneous]",             NULL},
+    {"Platform-wide Capabilities",  UUID_PLATFORM_CAPABILITIES},
+    {"Dynamic Enumeration",         UUID_DYNAMIC_ENUMERATION},
+    {"Battery Thermal Limit",       UUID_BATTERY_THERMAL_LIMIT},
+    {"Thermal Extensions",          UUID_THERMAL_EXTENSIONS},
+    {"Device Properties for _DSD",  UUID_DEVICE_PROPERTIES},
 
     {NULL, NULL}
 };
@@ -120,9 +113,16 @@ AcpiAhMatchUuid (
 
     for (Info = AcpiUuids; Info->Description; Info++)
     {
+        /* Null string means desciption is a UUID class */
+
+        if (!Info->String)
+        {
+            continue;
+        }
+
         AcpiUtConvertStringToUuid (Info->String, UuidBuffer);
 
-        if (!ACPI_MEMCMP (Data, UuidBuffer, UUID_BUFFER_LENGTH))
+        if (!memcmp (Data, UuidBuffer, UUID_BUFFER_LENGTH))
         {
             return (Info->Description);
         }
index a24ce0b..30beba3 100644 (file)
@@ -224,7 +224,7 @@ AcpiDmNormalizeParentPrefix (
         return (NULL);
     }
 
-    Length = (ACPI_STRLEN (ParentPath) + ACPI_STRLEN (Path) + 1);
+    Length = (strlen (ParentPath) + strlen (Path) + 1);
     if (ParentPath[1])
     {
         /*
@@ -253,7 +253,7 @@ AcpiDmNormalizeParentPrefix (
      *
      * Copy the parent path
      */
-    ACPI_STRCPY (Fullpath, &ParentPath[Index]);
+    strcpy (Fullpath, &ParentPath[Index]);
 
     /*
      * Add dot separator
@@ -261,12 +261,12 @@ AcpiDmNormalizeParentPrefix (
      */
     if (ParentPath[1])
     {
-        ACPI_STRCAT (Fullpath, ".");
+        strcat (Fullpath, ".");
     }
 
     /* Copy child path (carat parent prefix(es) were skipped above) */
 
-    ACPI_STRCAT (Fullpath, Path);
+    strcat (Fullpath, Path);
 
 Cleanup:
     ACPI_FREE (ParentPath);
@@ -648,13 +648,13 @@ AcpiDmAddNodeToExternalList (
 
     if ((*ExternalPath == AML_ROOT_PREFIX) && (ExternalPath[1]))
     {
-        Temp = ACPI_ALLOCATE_ZEROED (ACPI_STRLEN (ExternalPath) + 1);
+        Temp = ACPI_ALLOCATE_ZEROED (strlen (ExternalPath) + 1);
         if (!Temp)
         {
             return_VOID;
         }
 
-        ACPI_STRCPY (Temp, &ExternalPath[1]);
+        strcpy (Temp, &ExternalPath[1]);
         ACPI_FREE (ExternalPath);
         ExternalPath = Temp;
     }
@@ -806,7 +806,7 @@ AcpiDmCreateNewExternal (
     NextExternal = AcpiGbl_ExternalList;
     while (NextExternal)
     {
-        if (!ACPI_STRCMP (ExternalPath, NextExternal->Path))
+        if (!strcmp (ExternalPath, NextExternal->Path))
         {
             /* Duplicate method, check that the Value (ArgCount) is the same */
 
@@ -849,7 +849,7 @@ AcpiDmCreateNewExternal (
     NewExternal->Value = Value;
     NewExternal->Path = ExternalPath;
     NewExternal->Type = Type;
-    NewExternal->Length = (UINT16) ACPI_STRLEN (ExternalPath);
+    NewExternal->Length = (UINT16) strlen (ExternalPath);
     NewExternal->InternalPath = InternalPath;
 
     /* Link the new descriptor into the global list, alphabetically ordered */
index 689240a..c10c364 100644 (file)
@@ -679,10 +679,10 @@ AcpiGetTagPathname (
      * end up in the final compiled AML, it's just an appearance issue for the
      * disassembled code.
      */
-    Pathname[ACPI_STRLEN (Pathname) - ACPI_NAME_SIZE] = 0;
-    ACPI_STRNCAT (Pathname, ResourceNode->Name.Ascii, ACPI_NAME_SIZE);
-    ACPI_STRCAT (Pathname, ".");
-    ACPI_STRNCAT (Pathname, Tag, ACPI_NAME_SIZE);
+    Pathname[strlen (Pathname) - ACPI_NAME_SIZE] = 0;
+    strncat (Pathname, ResourceNode->Name.Ascii, ACPI_NAME_SIZE);
+    strcat (Pathname, ".");
+    strncat (Pathname, Tag, ACPI_NAME_SIZE);
 
     /* Internalize the namepath to AML format */
 
index 125bd18..91fd6be 100644 (file)
@@ -528,7 +528,7 @@ AcpiDmDumpDataTable (
         TableData = AcpiDmGetTableData (Table->Signature);
         if (!TableData)
         {
-            if (!ACPI_STRNCMP (Table->Signature, "OEM", 3))
+            if (!strncmp (Table->Signature, "OEM", 3))
             {
                 AcpiOsPrintf ("\n**** OEM-defined ACPI table [%4.4s], unknown contents\n\n",
                     Table->Signature);
@@ -856,7 +856,7 @@ AcpiDmDumpTable (
 
         case ACPI_DMT_STRING:
 
-            ByteLength = ACPI_STRLEN (ACPI_CAST_PTR (char, Target)) + 1;
+            ByteLength = strlen (ACPI_CAST_PTR (char, Target)) + 1;
             break;
 
         case ACPI_DMT_GAS:
index af69f56..4711b68 100644 (file)
@@ -155,7 +155,7 @@ AcpiDmDumpUnicode (
 
     for (i = 0; i < Length; i += 2)
     {
-        if (!ACPI_IS_PRINT (Buffer[i]))
+        if (!isprint (Buffer[i]))
         {
             goto DumpRawBuffer;
         }
@@ -1701,7 +1701,7 @@ AcpiDmDumpIort (
             InfoTable = AcpiDmTableInfoIort1;
             Length = ACPI_OFFSET (ACPI_IORT_NAMED_COMPONENT, DeviceName);
             String = ACPI_ADD_PTR (char, IortNode, NodeOffset + Length);
-            Length += ACPI_STRLEN (String) + 1;
+            Length += strlen (String) + 1;
             break;
 
         case ACPI_IORT_NODE_PCI_ROOT_COMPLEX:
@@ -3344,7 +3344,7 @@ AcpiDmDumpStao (
     while (Offset < Table->Length)
     {
         Namepath = ACPI_ADD_PTR (char, Table, Offset);
-        StringLength = ACPI_STRLEN (Namepath) + 1;
+        StringLength = strlen (Namepath) + 1;
 
         AcpiDmLineHeader (Offset, StringLength, "Namestring");
         AcpiOsPrintf ("\"%s\"\n", Namepath);
index 446e984..50a1ee0 100644 (file)
 #define ACPI_SPMI_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SPMI,f)
 #define ACPI_SRAT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SRAT,f)
 #define ACPI_STAO_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_STAO,f)
-#define ACPI_TCPA_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA,f)
+#define ACPI_TCPA_CLIENT_OFFSET(f)      (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_CLIENT,f)
 #define ACPI_TPM2_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_TPM2,f)
 #define ACPI_UEFI_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_UEFI,f)
 #define ACPI_WAET_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_WAET,f)
@@ -2611,15 +2611,15 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoStaoStr[] =
 
 /*******************************************************************************
  *
- * TCPA - Trusted Computing Platform Alliance table
+ * TCPA - Trusted Computing Platform Alliance table (Client)
  *
  ******************************************************************************/
 
 ACPI_DMTABLE_INFO           AcpiDmTableInfoTcpa[] =
 {
-    {ACPI_DMT_UINT16,   ACPI_TCPA_OFFSET (Reserved),                "Reserved", 0},
-    {ACPI_DMT_UINT32,   ACPI_TCPA_OFFSET (MaxLogLength),            "Max Event Log Length", 0},
-    {ACPI_DMT_UINT64,   ACPI_TCPA_OFFSET (LogAddress),              "Event Log Address", 0},
+    {ACPI_DMT_UINT16,   ACPI_TCPA_CLIENT_OFFSET (PlatformClass),    "Platform Class", 0},
+    {ACPI_DMT_UINT32,   ACPI_TCPA_CLIENT_OFFSET (MinimumLogLength), "Min Event Log Length", 0},
+    {ACPI_DMT_UINT64,   ACPI_TCPA_CLIENT_OFFSET (LogAddress),       "Event Log Address", 0},
     ACPI_DMT_TERMINATOR
 };
 
@@ -2632,7 +2632,8 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoTcpa[] =
 
 ACPI_DMTABLE_INFO           AcpiDmTableInfoTpm2[] =
 {
-    {ACPI_DMT_UINT32,   ACPI_TPM2_OFFSET (Flags),                   "Flags", 0},
+    {ACPI_DMT_UINT16,   ACPI_TPM2_OFFSET (PlatformClass),           "Platform Class", 0},
+    {ACPI_DMT_UINT16,   ACPI_TPM2_OFFSET (Reserved),                "Reserved", 0},
     {ACPI_DMT_UINT64,   ACPI_TPM2_OFFSET (ControlAddress),          "Control Address", 0},
     {ACPI_DMT_UINT32,   ACPI_TPM2_OFFSET (StartMethod),             "Start Method", 0},
     ACPI_DMT_TERMINATOR
index 276a83c..df06972 100644 (file)
@@ -145,7 +145,7 @@ AcpiGetopt(
         {
             return (ACPI_OPT_END);
         }
-        else if (ACPI_STRCMP (argv[AcpiGbl_Optind], "--") == 0)
+        else if (strcmp (argv[AcpiGbl_Optind], "--") == 0)
         {
             AcpiGbl_Optind++;
             return (ACPI_OPT_END);
@@ -159,7 +159,7 @@ AcpiGetopt(
     /* Make sure that the option is legal */
 
     if (CurrentChar == ':' ||
-       (OptsPtr = ACPI_STRCHR (opts, CurrentChar)) == NULL)
+       (OptsPtr = strchr (opts, CurrentChar)) == NULL)
     {
         ACPI_OPTION_ERROR ("Illegal option: -", CurrentChar);
 
index 705cccf..45c4431 100644 (file)
@@ -67,8 +67,8 @@ AnIsInternalMethod (
     ACPI_PARSE_OBJECT       *Op)
 {
 
-    if ((!ACPI_STRCMP (Op->Asl.ExternalName, "\\_OSI")) ||
-        (!ACPI_STRCMP (Op->Asl.ExternalName, "_OSI")))
+    if ((!strcmp (Op->Asl.ExternalName, "\\_OSI")) ||
+        (!strcmp (Op->Asl.ExternalName, "_OSI")))
     {
         return (TRUE);
     }
@@ -94,8 +94,8 @@ AnGetInternalMethodReturnType (
     ACPI_PARSE_OBJECT       *Op)
 {
 
-    if ((!ACPI_STRCMP (Op->Asl.ExternalName, "\\_OSI")) ||
-        (!ACPI_STRCMP (Op->Asl.ExternalName, "_OSI")))
+    if ((!strcmp (Op->Asl.ExternalName, "\\_OSI")) ||
+        (!strcmp (Op->Asl.ExternalName, "_OSI")))
     {
         return (ACPI_BTYPE_STRING);
     }
@@ -462,7 +462,7 @@ ApCheckForGpeNameConflict (
 
     /* Verify 3rd/4th chars are a valid hex value */
 
-    GpeNumber = ACPI_STRTOUL (&Name[2], NULL, 16);
+    GpeNumber = strtoul (&Name[2], NULL, 16);
     if (GpeNumber == ACPI_UINT32_MAX)
     {
         return;
index 90abef2..7ff1c4a 100644 (file)
@@ -226,7 +226,7 @@ FlCheckForAscii (
 
         /* Ensure character is either printable or a "space" char */
 
-        else if (!ACPI_IS_PRINT (Byte) && !ACPI_IS_SPACE (Byte))
+        else if (!isprint (Byte) && !isspace (Byte))
         {
             if ((BadBytes < 10) && (DisplayErrors))
             {
index 38bf9cf..dc8b7d5 100644 (file)
@@ -110,7 +110,7 @@ CgGenerateAmlOutput (
 
     DbgPrint (ASL_TREE_OUTPUT,
         "%*s Value    P_Op A_Op OpLen PByts Len  SubLen PSubLen OpPtr"
-        "    Parent   Child    Next     Flags    AcTyp    Final Col L\n",
+        "    Parent   Child    Next     Flags    AcTyp    Final Col L#  EL#  LL#  ELL#\n",
         76, " ");
 
     CgCloseTable ();
@@ -145,7 +145,7 @@ CgAmlWriteWalk (
             "Final parse tree used for AML output:\n");
         DbgPrint (ASL_TREE_OUTPUT,
             "%*s Value    P_Op A_Op OpLen PByts Len  SubLen PSubLen OpPtr"
-            "    Parent   Child    Next     Flags    AcTyp    Final Col L\n",
+            "    Parent   Child    Next     Flags    AcTyp    Final Col L#  EL#  LL#  ELL#\n",
             76, " ");
     }
 
@@ -169,7 +169,7 @@ CgAmlWriteWalk (
 
     DbgPrint (ASL_TREE_OUTPUT,
     "%08X %04X %04X %01X     %04X  %04X %04X   %04X    "
-    "%08X %08X %08X %08X %08X %08X %04X  %02d  %02d\n",
+    "%08X %08X %08X %08X %08X %08X %04X  %02d  %02d   %02d   %02d   %02d\n",
             /* 1  */ (UINT32) Op->Asl.Value.Integer,
             /* 2  */ Op->Asl.ParseOpcode,
             /* 3  */ Op->Asl.AmlOpcode,
@@ -186,7 +186,10 @@ CgAmlWriteWalk (
             /* 14 */ Op->Asl.AcpiBtype,
             /* 15 */ Op->Asl.FinalAmlLength,
             /* 16 */ Op->Asl.Column,
-            /* 17 */ Op->Asl.LineNumber);
+            /* 17 */ Op->Asl.LineNumber,
+            /* 18 */ Op->Asl.EndLine,
+            /* 19 */ Op->Asl.LogicalLineNumber,
+            /* 20 */ Op->Asl.EndLogicalLine);
 
     /* Generate the AML for this node */
 
index 47f92b4..afc004d 100644 (file)
@@ -103,6 +103,9 @@ CmDoCompile (
         /* Preprocessor */
 
         PrDoPreprocess ();
+        Gbl_CurrentLineNumber = 1;
+        Gbl_LogicalLineNumber = 1;
+
         if (Gbl_PreprocessOnly)
         {
             UtEndEvent (Event);
@@ -112,6 +115,7 @@ CmDoCompile (
     }
     UtEndEvent (Event);
 
+
     /* Build the parse tree */
 
     Event = UtBeginEvent ("Parse source code and build parse tree");
@@ -708,7 +712,7 @@ CmCleanupAndExit (
     /* Close all open files */
 
     /*
-     * Take care with the preprocessor file (.i), it might be the same
+     * Take care with the preprocessor file (.pre), it might be the same
      * as the "input" file, depending on where the compiler has terminated
      * or aborted. Prevent attempt to close the same file twice in
      * loop below.
@@ -733,10 +737,9 @@ CmCleanupAndExit (
         FlDeleteFile (ASL_FILE_AML_OUTPUT);
     }
 
-    /* Delete the preprocessor output file (.i) unless -li flag is set */
+    /* Delete the preprocessor temp file unless full debug was specified */
 
-    if (!Gbl_PreprocessorOutputFlag &&
-        Gbl_PreprocessFlag)
+    if (Gbl_PreprocessFlag && !Gbl_KeepPreprocessorTempFile)
     {
         FlDeleteFile (ASL_FILE_PREPROCESSOR);
     }
@@ -752,8 +755,6 @@ CmCleanupAndExit (
      * Note: Handles are cleared by FlCloseFile above, so we look at the
      * filename instead, to determine if the .SRC file was actually
      * created.
-     *
-     * TBD: SourceOutput should be .TMP, then rename if we want to keep it?
      */
     if (!Gbl_SourceOutputFlag)
     {
index 0156961..dfe80c1 100644 (file)
@@ -1003,7 +1003,7 @@ UtDoConstant (
     char                    *String);
 
 ACPI_STATUS
-UtStrtoul64 (
+stroul64 (
     char                    *String,
     UINT32                  Base,
     UINT64                  *RetInteger);
index 9da55bd..e0b2423 100644 (file)
@@ -709,7 +709,7 @@ NamePathTail                [.]{NameSeg}
                                 return (PARSEOP_NAMESTRING); }
 
 .                           { count (1);
-                                if (ACPI_IS_PRINT (*AslCompilertext))
+                                if (isprint ((int) *AslCompilertext))
                                 {
                                     sprintf (MsgBuffer,
                                         "Invalid character (%c), expecting ASL keyword or name",
index 0697276..0b5f614 100644 (file)
 
 /* filename suffixes for output files */
 
-#define FILE_SUFFIX_PREPROCESSOR    "i"
+#define FILE_SUFFIX_PREPROC_USER    "i  "
+#define FILE_SUFFIX_PREPROCESSOR    "pre"
 #define FILE_SUFFIX_AML_CODE        "aml"
 #define FILE_SUFFIX_MAP             "map"
 #define FILE_SUFFIX_LISTING         "lst"
 #define ASL_ABORT                   TRUE
 #define ASL_NO_ABORT                FALSE
 #define ASL_EOF                     ACPI_UINT32_MAX
+#define ASL_WITHIN_COMMENT          (ACPI_UINT32_MAX -1)
+#define ASL_BLANK_LINE              (ACPI_UINT32_MAX -1)
 
 
 /* Listings */
index 75c6d75..4f430d1 100644 (file)
@@ -561,11 +561,11 @@ AslCommonError2 (
 
         /* Keep a copy of the extra message */
 
-        ACPI_STRCPY (MessageBuffer, ExtraMessage);
+        strcpy (MessageBuffer, ExtraMessage);
     }
 
     LineBuffer = UtLocalCalloc (strlen (SourceLine) + 1);
-    ACPI_STRCPY (LineBuffer, SourceLine);
+    strcpy (LineBuffer, SourceLine);
 
     /* Initialize the error node */
 
@@ -647,7 +647,7 @@ AslCommonError (
 
         /* Keep a copy of the extra message */
 
-        ACPI_STRCPY (MessageBuffer, ExtraMessage);
+        strcpy (MessageBuffer, ExtraMessage);
     }
 
     /* Initialize the error node */
index c7d398d..4db97a6 100644 (file)
@@ -218,6 +218,19 @@ FlWriteFile (
         FlFileError (FileId, ASL_MSG_WRITE);
         AslAbort ();
     }
+
+    if ((FileId == ASL_FILE_PREPROCESSOR) && Gbl_PreprocessorOutputFlag)
+    {
+        /* Duplicate the output to the user preprocessor (.i) file */
+
+        Actual = fwrite ((char *) Buffer, 1, Length,
+            Gbl_Files[ASL_FILE_PREPROCESSOR_USER].Handle);
+        if (Actual != Length)
+        {
+            FlFileError (FileId, ASL_MSG_WRITE);
+            AslAbort ();
+        }
+    }
 }
 
 
@@ -247,7 +260,6 @@ FlPrintFile (
 
 
     va_start (Args, Format);
-
     Actual = vfprintf (Gbl_Files[FileId].Handle, Format, Args);
     va_end (Args);
 
@@ -256,6 +268,30 @@ FlPrintFile (
         FlFileError (FileId, ASL_MSG_WRITE);
         AslAbort ();
     }
+
+    if ((FileId == ASL_FILE_PREPROCESSOR) && Gbl_PreprocessorOutputFlag)
+    {
+        /*
+         * Duplicate the output to the user preprocessor (.i) file,
+         * except: no #line directives.
+         */
+        if (!strncmp (Format, "#line", 5))
+        {
+            return;
+        }
+
+        va_start (Args, Format);
+        Actual = vfprintf (Gbl_Files[ASL_FILE_PREPROCESSOR_USER].Handle,
+            Format, Args);
+        va_end (Args);
+
+        if (Actual == -1)
+        {
+            FlFileError (FileId, ASL_MSG_WRITE);
+            AslAbort ();
+        }
+    }
+
 }
 
 
index c24b074..2ad62ec 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-#ifdef __DragonFly__
-#include <unistd.h>
-#endif
-
 #include "aslcompiler.h"
 #include "acapps.h"
+#include "dtcompiler.h"
 
 #define _COMPONENT          ACPI_COMPILER
         ACPI_MODULE_NAME    ("aslfiles")
@@ -88,7 +85,6 @@ FlSetLineNumber (
          LineNumber, Gbl_LogicalLineNumber);
 
     Gbl_CurrentLineNumber = LineNumber;
-    Gbl_LogicalLineNumber = LineNumber;
 }
 
 
@@ -307,6 +303,7 @@ FlOpenIncludeWithPrefix (
 {
     FILE                    *IncludeFile;
     char                    *Pathname;
+    UINT32                  OriginalLineNumber;
 
 
     /* Build the full pathname to the file */
@@ -326,13 +323,20 @@ FlOpenIncludeWithPrefix (
         return (NULL);
     }
 
-#ifdef _MUST_HANDLE_COMMENTS
     /*
-     * Check entire include file for any # preprocessor directives.
+     * Check the entire include file for any # preprocessor directives.
      * This is because there may be some confusion between the #include
-     * preprocessor directive and the ASL Include statement.
+     * preprocessor directive and the ASL Include statement. A file included
+     * by the ASL include cannot contain preprocessor directives because
+     * the preprocessor has already run by the time the ASL include is
+     * recognized (by the compiler, not the preprocessor.)
+     *
+     * Note: DtGetNextLine strips/ignores comments.
+     * Save current line number since DtGetNextLine modifies it.
      */
-    while (fgets (Gbl_CurrentLineBuffer, Gbl_LineBufferSize, IncludeFile))
+    Gbl_CurrentLineNumber--;
+    OriginalLineNumber = Gbl_CurrentLineNumber;
+    while (DtGetNextLine (IncludeFile, DT_ALLOW_MULTILINE_QUOTES) != ASL_EOF)
     {
         if (Gbl_CurrentLineBuffer[0] == '#')
         {
@@ -340,7 +344,7 @@ FlOpenIncludeWithPrefix (
                 Op, "use #include instead");
         }
     }
-#endif
+    Gbl_CurrentLineNumber = OriginalLineNumber;
 
     /* Must seek back to the start of the file */
 
@@ -583,43 +587,22 @@ FlOpenMiscOutputFiles (
 
         /* Open the debug file as STDERR, text mode */
 
-        /* TBD: hide this behind a FlReopenFile function */
-
         Gbl_Files[ASL_FILE_DEBUG_OUTPUT].Filename = Filename;
         Gbl_Files[ASL_FILE_DEBUG_OUTPUT].Handle =
             freopen (Filename, "w+t", stderr);
 
         if (!Gbl_Files[ASL_FILE_DEBUG_OUTPUT].Handle)
         {
-#ifdef __DragonFly__
-            int temp_fd;
-#endif
-
             /*
-             * A problem with freopen is that on error,
-             * we no longer have stderr.
+             * A problem with freopen is that on error, we no longer
+             * have stderr and cannot emit normal error messages.
+             * Emit error to stdout, close files, and exit.
              */
-            Gbl_DebugFlag = FALSE;
-#ifdef __DragonFly__
-            stderr = NULL;
-            temp_fd = dup(STDERR_FILENO);
-            if (temp_fd >= 0) {
-                stderr = fdopen(temp_fd, "w");
-                if (stderr != NULL)
-                    setvbuf(stderr, NULL, _IONBF, 0);
-                else
-                    close(temp_fd);
-            }
-            if (stderr == NULL) {
-                /* This is wrong, but better than nothing */
-                stderr = stdout;
-            }
-#else
-            /* WTF */
-            memcpy (stderr, stdout, sizeof (FILE));
-#endif
-            FlFileError (ASL_FILE_DEBUG_OUTPUT, ASL_MSG_DEBUG_FILENAME);
-            AslAbort ();
+            fprintf (stdout,
+                "\nCould not open debug output file: %s\n\n", Filename);
+
+            CmCleanupAndExit ();
+            exit (1);
         }
 
         AslCompilerSignon (ASL_FILE_DEBUG_OUTPUT);
@@ -646,7 +629,7 @@ FlOpenMiscOutputFiles (
         AslCompilerFileHeader (ASL_FILE_LISTING_OUTPUT);
     }
 
-    /* Create the preprocessor output file if preprocessor enabled */
+    /* Create the preprocessor output temp file if preprocessor enabled */
 
     if (Gbl_PreprocessFlag)
     {
@@ -661,6 +644,23 @@ FlOpenMiscOutputFiles (
         FlOpenFile (ASL_FILE_PREPROCESSOR, Filename, "w+t");
     }
 
+    /*
+     * Create the "user" preprocessor output file if -li flag set.
+     * Note, this file contains no embedded #line directives.
+     */
+    if (Gbl_PreprocessorOutputFlag)
+    {
+        Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_PREPROC_USER);
+        if (!Filename)
+        {
+            AslCommonError (ASL_ERROR, ASL_MSG_PREPROCESSOR_FILENAME,
+                0, 0, 0, 0, NULL, NULL);
+            return (AE_ERROR);
+        }
+
+        FlOpenFile (ASL_FILE_PREPROCESSOR_USER, Filename, "w+t");
+    }
+
     /* All done for data table compiler */
 
     if (Gbl_FileType == ASL_INPUT_TYPE_ASCII_DATA)
index 8c11860..0b3ef8d 100644 (file)
@@ -236,6 +236,8 @@ OpcAmlCheckForConstant (
      */
     if (WalkState->Opcode == AML_BUFFER_OP)
     {
+        DbgPrint (ASL_PARSE_OUTPUT,
+            "\nBuffer+Buffer->Buffer constant reduction is not supported yet");
         Status = AE_TYPE;
         goto CleanupAndExit;
     }
@@ -380,10 +382,12 @@ TrSimpleConstantReduction (
         return (Status);
     }
 
+    /* Disconnect any existing children, install new constant */
+
+    Op->Asl.Child = NULL;
     TrInstallReducedConstant (Op, ObjDesc);
 
     UtSetParseOpName (Op);
-    Op->Asl.Child = NULL;
     return (AE_OK);
 }
 
@@ -494,6 +498,10 @@ TrTransformToStoreOp (
         goto EvalError;
     }
 
+    /* Truncate any subtree expressions, they have been evaluated */
+
+    Child1->Asl.Child = NULL;
+
     /* Folded constant is in ObjDesc, store into Child1 */
 
     TrInstallReducedConstant (Child1, ObjDesc);
@@ -505,11 +513,6 @@ TrTransformToStoreOp (
     UtSetParseOpName (Op);
     Op->Common.Parent = OriginalParent;
 
-    /* Truncate any subtree expressions, they have been evaluated */
-
-    Child1->Asl.Child = NULL;
-    Child2->Asl.Child = NULL;
-
     /* First child is the folded constant */
 
     /* Second child will be the target */
@@ -547,7 +550,8 @@ TrInstallReducedConstant (
     ACPI_PARSE_OBJECT       *Op,
     ACPI_OPERAND_OBJECT     *ObjDesc)
 {
-    ACPI_PARSE_OBJECT       *RootOp;
+    ACPI_PARSE_OBJECT       *LengthOp;
+    ACPI_PARSE_OBJECT       *DataOp;
 
 
     TotalFolds++;
@@ -574,17 +578,22 @@ TrInstallReducedConstant (
 
         Op->Asl.ParseOpcode = PARSEOP_STRING_LITERAL;
         Op->Common.AmlOpcode = AML_STRING_OP;
-        Op->Asl.AmlLength = ACPI_STRLEN (ObjDesc->String.Pointer) + 1;
+        Op->Asl.AmlLength = strlen (ObjDesc->String.Pointer) + 1;
         Op->Common.Value.String = ObjDesc->String.Pointer;
 
         DbgPrint (ASL_PARSE_OUTPUT,
             "Constant expression reduced to (STRING) %s\n\n",
             Op->Common.Value.String);
-
         break;
 
     case ACPI_TYPE_BUFFER:
-
+        /*
+         * Create a new parse subtree of the form:
+         *
+         * BUFFER (Buffer AML opcode)
+         *    INTEGER (Buffer length in bytes)
+         *    RAW_DATA (Buffer byte data)
+         */
         Op->Asl.ParseOpcode = PARSEOP_BUFFER;
         Op->Common.AmlOpcode = AML_BUFFER_OP;
         Op->Asl.CompileFlags = NODE_AML_PACKAGE;
@@ -592,28 +601,24 @@ TrInstallReducedConstant (
 
         /* Child node is the buffer length */
 
-        RootOp = TrAllocateNode (PARSEOP_INTEGER);
+        LengthOp = TrAllocateNode (PARSEOP_INTEGER);
 
-        RootOp->Asl.AmlOpcode = AML_DWORD_OP;
-        RootOp->Asl.Value.Integer = ObjDesc->Buffer.Length;
-        RootOp->Asl.Parent = Op;
+        LengthOp->Asl.AmlOpcode = AML_DWORD_OP;
+        LengthOp->Asl.Value.Integer = ObjDesc->Buffer.Length;
+        LengthOp->Asl.Parent = Op;
+        (void) OpcSetOptimalIntegerSize (LengthOp);
 
-        (void) OpcSetOptimalIntegerSize (RootOp);
-
-        Op->Asl.Child = RootOp;
-        Op = RootOp;
-        UtSetParseOpName (Op);
+        Op->Asl.Child = LengthOp;
 
-        /* Peer to the child is the raw buffer data */
+        /* Next child is the raw buffer data */
 
-        RootOp = TrAllocateNode (PARSEOP_RAW_DATA);
-        RootOp->Asl.AmlOpcode = AML_RAW_DATA_BUFFER;
-        RootOp->Asl.AmlLength = ObjDesc->Buffer.Length;
-        RootOp->Asl.Value.String = (char *) ObjDesc->Buffer.Pointer;
-        RootOp->Asl.Parent = Op->Asl.Parent;
+        DataOp = TrAllocateNode (PARSEOP_RAW_DATA);
+        DataOp->Asl.AmlOpcode = AML_RAW_DATA_BUFFER;
+        DataOp->Asl.AmlLength = ObjDesc->Buffer.Length;
+        DataOp->Asl.Value.String = (char *) ObjDesc->Buffer.Pointer;
+        DataOp->Asl.Parent = Op;
 
-        Op->Asl.Next = RootOp;
-        Op = RootOp;
+        LengthOp->Asl.Next = DataOp;
 
         DbgPrint (ASL_PARSE_OUTPUT,
             "Constant expression reduced to (BUFFER) length %X\n\n",
index c61b8ff..0696b67 100644 (file)
@@ -73,6 +73,7 @@ ASL_FILE_INFO                       Gbl_Files [ASL_NUM_FILES] =
     {NULL, NULL, "Binary Output:", "AML Output"},
     {NULL, NULL, "Source Output:", "Source Output"},
     {NULL, NULL, "Preprocessor: ", "Preprocessor Output"},
+    {NULL, NULL, "Preprocessor: ", "Preprocessor Temp File"},
     {NULL, NULL, "Listing File: ", "Listing Output"},
     {NULL, NULL, "Hex Dump:     ", "Hex Table Output"},
     {NULL, NULL, "Namespace:    ", "Namespace Output"},
@@ -123,10 +124,10 @@ ASL_EXTERN char                     ASL_INIT_GLOBAL (*Gbl_CurrentLineBuffer, NUL
 ASL_EXTERN char                     ASL_INIT_GLOBAL (*Gbl_LineBufPtr, NULL);
 ASL_EXTERN UINT32                   ASL_INIT_GLOBAL (Gbl_LineBufferSize, ASL_DEFAULT_LINE_BUFFER_SIZE);
 ASL_EXTERN UINT32                   ASL_INIT_GLOBAL (Gbl_CurrentColumn, 0);
-ASL_EXTERN UINT32                   ASL_INIT_GLOBAL (Gbl_PreviousLineNumber, 0);
 ASL_EXTERN UINT32                   ASL_INIT_GLOBAL (Gbl_CurrentLineNumber, 1);
 ASL_EXTERN UINT32                   ASL_INIT_GLOBAL (Gbl_LogicalLineNumber, 1);
 ASL_EXTERN UINT32                   ASL_INIT_GLOBAL (Gbl_CurrentLineOffset, 0);
+ASL_EXTERN UINT32                   ASL_INIT_GLOBAL (Gbl_OriginalInputFileSize, 0);
 ASL_EXTERN UINT8                    ASL_INIT_GLOBAL (Gbl_SyntaxError, 0);
 
 /* Exception reporting */
@@ -146,6 +147,7 @@ ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_UseDefaultAmlFilename,
 ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_MapfileFlag, FALSE);
 ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_NsOutputFlag, FALSE);
 ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_PreprocessorOutputFlag, FALSE);
+ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_KeepPreprocessorTempFile, FALSE);
 ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_DebugFlag, FALSE);
 ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_AsmOutputFlag, FALSE);
 ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_C_OutputFlag, FALSE);
index 6114822..9c25a6e 100644 (file)
@@ -109,6 +109,13 @@ LkFindUnreferencedObjects (
  *              if they are not referenced.
  *
  ******************************************************************************/
+typedef struct asl_method_local
+{
+    UINT32                  Flags;
+    ACPI_PARSE_OBJECT       *Op;
+
+} ASL_METHOD_LOCAL;
+
 
 static ACPI_STATUS
 LkIsObjectUsed (
@@ -119,6 +126,8 @@ LkIsObjectUsed (
 {
     ACPI_NAMESPACE_NODE     *Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjHandle);
     ACPI_NAMESPACE_NODE     *Next;
+    ASL_METHOD_LOCAL        *MethodLocals;
+    UINT32                  i;
 
 
     /* Referenced flag is set during the namespace xref */
@@ -145,6 +154,24 @@ LkIsObjectUsed (
 
         return (AE_OK);
 
+    case ACPI_TYPE_METHOD:
+
+        /* Check for Locals that are set but never used */
+
+        MethodLocals = (ASL_METHOD_LOCAL *) Node->Object;
+        for (i = 0; i < ACPI_METHOD_NUM_LOCALS; i++)
+        {
+            if (MethodLocals[i].Flags & ANOBJ_IS_REFERENCED)
+            {
+                sprintf (MsgBuffer, "Local%u",
+                    i);
+
+                AslError (ASL_REMARK, ASL_MSG_LOCAL_NOT_USED,
+                    MethodLocals[i].Op, MsgBuffer);
+            }
+        }
+        break;
+
     default:
 
         break;
index 447b8cb..bbb9076 100644 (file)
@@ -261,7 +261,7 @@ AslSignalHandler (
 
     /* Close all open files */
 
-    Gbl_Files[ASL_FILE_PREPROCESSOR].Handle = NULL; /* the .i file is same as source file */
+    Gbl_Files[ASL_FILE_PREPROCESSOR].Handle = NULL; /* the .pre file is same as source file */
 
     for (i = ASL_FILE_INPUT; i < ASL_MAX_FILE_TYPE; i++)
     {
index 652871d..8ab3e62 100644 (file)
@@ -239,7 +239,7 @@ MpCreateGpioInfo (
     /* Sort on source DeviceName first */
 
     while (NextGpio &&
-            (ACPI_STRCMP (DeviceName, NextGpio->DeviceName) > 0))
+            (strcmp (DeviceName, NextGpio->DeviceName) > 0))
     {
         PrevGpio = NextGpio;
         NextGpio = NextGpio->Next;
@@ -249,7 +249,7 @@ MpCreateGpioInfo (
 
     while (NextGpio &&
             (NextGpio->PinNumber < PinNumber) &&
-            !ACPI_STRCMP (DeviceName, NextGpio->DeviceName))
+            !strcmp (DeviceName, NextGpio->DeviceName))
     {
         PrevGpio = NextGpio;
         NextGpio = NextGpio->Next;
@@ -316,7 +316,7 @@ MpCreateSerialInfo (
     /* Sort on source DeviceName */
 
     while (NextSerial &&
-        (ACPI_STRCMP (DeviceName, NextSerial->DeviceName) > 0))
+        (strcmp (DeviceName, NextSerial->DeviceName) > 0))
     {
         PrevSerial = NextSerial;
         NextSerial = NextSerial->Next;
@@ -326,7 +326,7 @@ MpCreateSerialInfo (
 
     while (NextSerial &&
         (NextSerial->Address < Address) &&
-        !ACPI_STRCMP (DeviceName, NextSerial->DeviceName))
+        !strcmp (DeviceName, NextSerial->DeviceName))
     {
         PrevSerial = NextSerial;
         NextSerial = NextSerial->Next;
index c8d8c68..07ed89a 100644 (file)
@@ -207,7 +207,7 @@ MpEmitGpioInfo (
         /* Print header info for the controller itself */
 
         if (!PrevDeviceName ||
-            ACPI_STRCMP (PrevDeviceName, Info->DeviceName))
+            strcmp (PrevDeviceName, Info->DeviceName))
         {
             FlPrintFile (ASL_FILE_MAP_OUTPUT,
                 "\n\nGPIO Controller:  %-8s  %-28s",
@@ -360,7 +360,7 @@ MpEmitSerialInfo (
         /* Print header info for the controller itself */
 
         if (!PrevDeviceName ||
-            ACPI_STRCMP (PrevDeviceName, Info->DeviceName))
+            strcmp (PrevDeviceName, Info->DeviceName))
         {
             FlPrintFile (ASL_FILE_MAP_OUTPUT, "\n\n%s Controller:  ",
                 Type);
index 520ebe0..2b837bf 100644 (file)
@@ -235,7 +235,10 @@ const char                      *AslCompilerMsgs [] =
 /*    ASL_MSG_BUFFER_ALLOCATION */          "Could not allocate line buffer",
 /*    ASL_MSG_MISSING_DEPENDENCY */         "Missing dependency",
 /*    ASL_MSG_ILLEGAL_FORWARD_REF */        "Illegal forward reference within a method",
-/*    ASL_MSG_ILLEGAL_METHOD_REF */         "Illegal reference across two methods"
+/*    ASL_MSG_ILLEGAL_METHOD_REF */         "Illegal reference across two methods",
+/*    ASL_MSG_LOCAL_NOT_USED */             "Method Local is set but never used",
+/*    ASL_MSG_ARG_NOT_USED */               "Method Arg is never accessed"
+
 };
 
 /* Table compiler */
index 9837d54..c77e42f 100644 (file)
@@ -238,6 +238,8 @@ typedef enum
     ASL_MSG_MISSING_DEPENDENCY,
     ASL_MSG_ILLEGAL_FORWARD_REF,
     ASL_MSG_ILLEGAL_METHOD_REF,
+    ASL_MSG_LOCAL_NOT_USED,
+    ASL_MSG_ARG_NOT_USED,
 
     /* These messages are used by the Data Table compiler only */
 
index 6ed0f62..6d53cec 100644 (file)
@@ -430,7 +430,7 @@ MtMethodAnalysisWalkBegin (
 
         /* Special typechecking for _HID */
 
-        if (!ACPI_STRCMP (METHOD_NAME__HID, Op->Asl.NameSeg))
+        if (!strcmp (METHOD_NAME__HID, Op->Asl.NameSeg))
         {
             Next = Op->Asl.Child->Asl.Next;
             AnCheckId (Next, ASL_TYPE_HID);
@@ -438,7 +438,7 @@ MtMethodAnalysisWalkBegin (
 
         /* Special typechecking for _CID */
 
-        else if (!ACPI_STRCMP (METHOD_NAME__CID, Op->Asl.NameSeg))
+        else if (!strcmp (METHOD_NAME__CID, Op->Asl.NameSeg))
         {
             Next = Op->Asl.Child->Asl.Next;
 
index 0a22b79..fa3d1fc 100644 (file)
@@ -636,7 +636,7 @@ OpcDoEisaId (
      * The EISAID string must be exactly 7 characters and of the form
      * "UUUXXXX" -- 3 uppercase letters and 4 hex digits (e.g., "PNP0001")
      */
-    if (ACPI_STRLEN (InString) != 7)
+    if (strlen (InString) != 7)
     {
         Status = AE_BAD_PARAMETER;
     }
@@ -855,7 +855,7 @@ OpcFindName (
 
     for (i = 0, Str = List[0]; Str; i++, Str = List[i])
     {
-        if (!(ACPI_STRNCMP (Str, Name, ACPI_STRLEN (Name))))
+        if (!(strncmp (Str, Name, strlen (Name))))
         {
             *Index = i;
             return (TRUE);
@@ -907,7 +907,7 @@ OpcDoPld (
         return;
     }
 
-    ACPI_MEMSET (&PldInfo, 0, sizeof (ACPI_PLD_INFO));
+    memset (&PldInfo, 0, sizeof (ACPI_PLD_INFO));
 
     Node = Op->Asl.Child;
     while (Node)
index 2670670..174a53a 100644 (file)
@@ -932,7 +932,7 @@ OpnDoDefinitionBlock (
     if (Child->Asl.Value.String)
     {
         Gbl_TableSignature = Child->Asl.Value.String;
-        if (ACPI_STRLEN (Gbl_TableSignature) != 4)
+        if (strlen (Gbl_TableSignature) != 4)
         {
             AslError (ASL_ERROR, ASL_MSG_TABLE_SIGNATURE, Child,
                 "Length not exactly 4");
@@ -967,9 +967,9 @@ OpnDoDefinitionBlock (
     Child->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG;
     if (Child->Asl.Value.String)
     {
-        Length = ACPI_STRLEN (Child->Asl.Value.String);
+        Length = strlen (Child->Asl.Value.String);
         Gbl_TableId = UtStringCacheCalloc (Length + 1);
-        ACPI_STRCPY (Gbl_TableId, Child->Asl.Value.String);
+        strcpy (Gbl_TableId, Child->Asl.Value.String);
 
         /*
          * Convert anything non-alphanumeric to an underscore. This
index 77b185e..7770f3e 100644 (file)
@@ -168,9 +168,9 @@ OptSearchToRoot (
     /* We must allocate a new string for the name (TargetPath gets deleted) */
 
     *NewPath = UtStringCacheCalloc (ACPI_NAME_SIZE + 1);
-    ACPI_STRCPY (*NewPath, Path);
+    strcpy (*NewPath, Path);
 
-    if (ACPI_STRNCMP (*NewPath, "_T_", 3))
+    if (strncmp (*NewPath, "_T_", 3))
     {
         AslError (ASL_OPTIMIZATION, ASL_MSG_SINGLE_NAME_OPTIMIZATION, Op,
                 *NewPath);
@@ -341,7 +341,7 @@ OptBuildShortestPath (
         Index = TargetPath->Length;
     }
 
-    ACPI_STRCPY (&NewPathExternal[i], &((char *) TargetPath->Pointer)[Index]);
+    strcpy (&NewPathExternal[i], &((char *) TargetPath->Pointer)[Index]);
     ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, " %-24s", NewPathExternal));
 
     /*
@@ -358,11 +358,11 @@ OptBuildShortestPath (
         return (Status);
     }
 
-    if (ACPI_STRLEN (NewPath) >= AmlNameStringLength)
+    if (strlen (NewPath) >= AmlNameStringLength)
     {
         ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS,
             " NOT SHORTER (New %u old %u)",
-            (UINT32) ACPI_STRLEN (NewPath), (UINT32) AmlNameStringLength));
+            (UINT32) strlen (NewPath), (UINT32) AmlNameStringLength));
         ACPI_FREE (NewPathExternal);
         return (AE_NOT_FOUND);
     }
@@ -597,7 +597,7 @@ OptOptimizeNamePath (
      * The original path must be longer than one NameSeg (4 chars) for there
      * to be any possibility that it can be optimized to a shorter string
      */
-    AmlNameStringLength = ACPI_STRLEN (AmlNameString);
+    AmlNameStringLength = strlen (AmlNameString);
     if (AmlNameStringLength <= ACPI_NAME_SIZE)
     {
         ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS,
@@ -745,7 +745,7 @@ OptOptimizeNamePath (
      */
     if (ACPI_SUCCESS (Status))
     {
-        HowMuchShorter = (AmlNameStringLength - ACPI_STRLEN (NewPath));
+        HowMuchShorter = (AmlNameStringLength - strlen (NewPath));
         OptTotal += HowMuchShorter;
 
         ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS,
@@ -761,12 +761,12 @@ OptOptimizeNamePath (
                  * (alias name) is the second operand
                  */
                 Op->Asl.Child->Asl.Next->Asl.Value.String = NewPath;
-                Op->Asl.Child->Asl.Next->Asl.AmlLength = ACPI_STRLEN (NewPath);
+                Op->Asl.Child->Asl.Next->Asl.AmlLength = strlen (NewPath);
             }
             else
             {
                 Op->Asl.Child->Asl.Value.String = NewPath;
-                Op->Asl.Child->Asl.AmlLength = ACPI_STRLEN (NewPath);
+                Op->Asl.Child->Asl.AmlLength = strlen (NewPath);
             }
         }
         else if (Flags & AML_CREATE)
@@ -781,14 +781,14 @@ OptOptimizeNamePath (
             /* Update the parse node with the new NamePath */
 
             NextOp->Asl.Value.String = NewPath;
-            NextOp->Asl.AmlLength = ACPI_STRLEN (NewPath);
+            NextOp->Asl.AmlLength = strlen (NewPath);
         }
         else
         {
             /* Update the parse node with the new NamePath */
 
             Op->Asl.Value.String = NewPath;
-            Op->Asl.AmlLength = ACPI_STRLEN (NewPath);
+            Op->Asl.AmlLength = strlen (NewPath);
         }
     }
     else
index 51aae7a..57bb12b 100644 (file)
@@ -194,6 +194,7 @@ AslDoOptions (
             DtParserdebug = 1;
             PrParserdebug = 1;
             Gbl_DebugFlag = TRUE;
+            Gbl_KeepPreprocessorTempFile = TRUE;
             break;
 
         case 'p':   /* Prune ASL parse tree */
index 9acc94b..fc32d0f 100644 (file)
@@ -186,7 +186,7 @@ OpcParsePrintf (
         if (StringToProcess)
         {
             NewString = UtStringCacheCalloc (StringLength + 1);
-            ACPI_STRNCPY (NewString, StartPosition, StringLength);
+            strncpy (NewString, StartPosition, StringLength);
 
             NewOp = TrAllocateNode (PARSEOP_STRING_LITERAL);
             NewOp->Asl.Value.String = NewString;
@@ -275,7 +275,7 @@ OpcParsePrintf (
     if (StringToProcess)
     {
         NewString = UtStringCacheCalloc (StringLength + 1);
-        ACPI_STRNCPY (NewString, StartPosition, StringLength);
+        strncpy (NewString, StartPosition, StringLength);
 
         NewOp = TrAllocateNode (PARSEOP_STRING_LITERAL);
         NewOp->Asl.Value.String = NewString;
index 7cee85c..1ec9a35 100644 (file)
@@ -359,6 +359,8 @@ AslDoOneFile (
         return (AE_ERROR);
     }
 
+    Gbl_OriginalInputFileSize = FlGetFileSize (ASL_FILE_INPUT);
+
     /* Determine input file type */
 
     Gbl_FileType = AslDetectSourceFileType (&Gbl_Files[ASL_FILE_INPUT]);
index b3149cf..0016626 100644 (file)
@@ -113,6 +113,7 @@ AslDoLineDirective (
     char                    *Filename;
     UINT32                  i;
 
+   Gbl_HasIncludeFiles = TRUE;
 
     /* Eat the entire line that contains the #line directive */
 
@@ -713,7 +714,7 @@ DoCharacter:
                  * string and resume processing of the next character
                  */
                 ConvertBuffer[i] = 0;
-                Digit = (UINT8) ACPI_STRTOUL (ConvertBuffer, NULL, 8);
+                Digit = (UINT8) strtoul (ConvertBuffer, NULL, 8);
 
                 /* Check for NULL or non-ascii character (ignore if so) */
 
@@ -749,7 +750,7 @@ DoCharacter:
 
             /* Up to two hex digits allowed */
 
-            if (!ACPI_IS_XDIGIT (StringChar) ||
+            if (!isxdigit (StringChar) ||
                 (i > 1))
             {
                 /*
@@ -757,7 +758,7 @@ DoCharacter:
                  * string and resume processing of the next character
                  */
                 ConvertBuffer[i] = 0;
-                Digit = (UINT8) ACPI_STRTOUL (ConvertBuffer, NULL, 16);
+                Digit = (UINT8) strtoul (ConvertBuffer, NULL, 16);
 
                 /* Check for NULL or non-ascii character (ignore if so) */
 
@@ -830,7 +831,7 @@ CompletedString:
         return (FALSE);
     }
 
-    ACPI_STRCPY (CleanString, MsgBuffer);
+    strcpy (CleanString, MsgBuffer);
     AslCompilerlval.s = CleanString;
     return (TRUE);
 
index 4bd24da..343c364 100644 (file)
@@ -148,32 +148,56 @@ typedef struct asl_file_status
 /*
  * File types. Note: Any changes to this table must also be reflected
  * in the Gbl_Files array.
+ *
+ * Corresponding filename suffixes are in comments
+ *
+ * NOTE: Don't move the first 4 file types
  */
 typedef enum
 {
     ASL_FILE_STDOUT             = 0,
     ASL_FILE_STDERR,
-    ASL_FILE_INPUT,
-    ASL_FILE_AML_OUTPUT,        /* Don't move these first 4 file types */
-    ASL_FILE_SOURCE_OUTPUT,
-    ASL_FILE_PREPROCESSOR,
-    ASL_FILE_LISTING_OUTPUT,
-    ASL_FILE_HEX_OUTPUT,
-    ASL_FILE_NAMESPACE_OUTPUT,
-    ASL_FILE_DEBUG_OUTPUT,
-    ASL_FILE_ASM_SOURCE_OUTPUT,
-    ASL_FILE_C_SOURCE_OUTPUT,
-    ASL_FILE_ASM_INCLUDE_OUTPUT,
-    ASL_FILE_C_INCLUDE_OUTPUT,
-    ASL_FILE_C_OFFSET_OUTPUT,
-    ASL_FILE_MAP_OUTPUT
+    ASL_FILE_INPUT,             /* .asl */
+    ASL_FILE_AML_OUTPUT,        /* .aml */
+    ASL_FILE_SOURCE_OUTPUT,     /* .src */
+    ASL_FILE_PREPROCESSOR,      /* .pre */
+    ASL_FILE_PREPROCESSOR_USER, /* .i   */
+    ASL_FILE_LISTING_OUTPUT,    /* .lst */
+    ASL_FILE_HEX_OUTPUT,        /* .hex */
+    ASL_FILE_NAMESPACE_OUTPUT,  /* .nsp */
+    ASL_FILE_DEBUG_OUTPUT,      /* .txt */
+    ASL_FILE_ASM_SOURCE_OUTPUT, /* .asm */
+    ASL_FILE_C_SOURCE_OUTPUT,   /* .c   */
+    ASL_FILE_ASM_INCLUDE_OUTPUT,/* .inc */
+    ASL_FILE_C_INCLUDE_OUTPUT,  /* .h   */
+    ASL_FILE_C_OFFSET_OUTPUT,   /* offset.h */
+    ASL_FILE_MAP_OUTPUT         /* .map */
 
 } ASL_FILE_TYPES;
 
 
-#define ASL_MAX_FILE_TYPE       15
+#define ASL_MAX_FILE_TYPE       16
 #define ASL_NUM_FILES           (ASL_MAX_FILE_TYPE + 1)
 
+/* filename suffixes for output files */
+
+#define FILE_SUFFIX_PREPROC_USER    "i  "
+#define FILE_SUFFIX_PREPROCESSOR    "pre"
+#define FILE_SUFFIX_AML_CODE        "aml"
+#define FILE_SUFFIX_MAP             "map"
+#define FILE_SUFFIX_LISTING         "lst"
+#define FILE_SUFFIX_HEX_DUMP        "hex"
+#define FILE_SUFFIX_DEBUG           "txt"
+#define FILE_SUFFIX_SOURCE          "src"
+#define FILE_SUFFIX_NAMESPACE       "nsp"
+#define FILE_SUFFIX_ASM_SOURCE      "asm"
+#define FILE_SUFFIX_C_SOURCE        "c"
+#define FILE_SUFFIX_DISASSEMBLY     "dsl"
+#define FILE_SUFFIX_ASM_INCLUDE     "inc"
+#define FILE_SUFFIX_C_INCLUDE       "h"
+#define FILE_SUFFIX_ASL_CODE        "asl"
+#define FILE_SUFFIX_C_OFFSET        "offset.h"
+
 
 /* Cache block structure for ParseOps and Strings */
 
index 6b94d28..8b77c8e 100644 (file)
@@ -441,17 +441,20 @@ UtDisplaySummary (
             "%-14s %s - %u lines, %u bytes, %u keywords\n",
             "ASL Input:",
             Gbl_Files[ASL_FILE_INPUT].Filename, Gbl_CurrentLineNumber,
-            Gbl_InputByteCount, TotalKeywords);
+            Gbl_OriginalInputFileSize, TotalKeywords);
 
         /* AML summary */
 
         if ((Gbl_ExceptionCount[ASL_ERROR] == 0) || (Gbl_IgnoreErrors))
         {
-            FlPrintFile (FileId,
-                "%-14s %s - %u bytes, %u named objects, %u executable opcodes\n",
-                "AML Output:",
-                Gbl_Files[ASL_FILE_AML_OUTPUT].Filename, Gbl_TableLength,
-                TotalNamedObjects, TotalExecutableOpcodes);
+            if (Gbl_Files[ASL_FILE_AML_OUTPUT].Handle)
+            {
+                FlPrintFile (FileId,
+                    "%-14s %s - %u bytes, %u named objects, %u executable opcodes\n",
+                    "AML Output:",
+                    Gbl_Files[ASL_FILE_AML_OUTPUT].Filename, Gbl_TableLength,
+                    TotalNamedObjects, TotalExecutableOpcodes);
+            }
         }
     }
 
@@ -471,9 +474,9 @@ UtDisplaySummary (
             continue;
         }
 
-        /* .I is a temp file unless specifically requested */
+        /* .PRE is the preprocessor intermediate file */
 
-        if ((i == ASL_FILE_PREPROCESSOR) && (!Gbl_PreprocessorOutputFlag))
+        if ((i == ASL_FILE_PREPROCESSOR)  && (!Gbl_KeepPreprocessorTempFile))
         {
             continue;
         }
@@ -932,7 +935,7 @@ UtDoConstant (
     char                    ErrBuf[64];
 
 
-    Status = UtStrtoul64 (String, 0, &Converted);
+    Status = stroul64 (String, 0, &Converted);
     if (ACPI_FAILURE (Status))
     {
         sprintf (ErrBuf, "%s %s\n", "Conversion error:",
@@ -948,7 +951,7 @@ UtDoConstant (
 
 /*******************************************************************************
  *
- * FUNCTION:    UtStrtoul64
+ * FUNCTION:    stroul64
  *
  * PARAMETERS:  String              - Null terminated string
  *              Terminater          - Where a pointer to the terminating byte
@@ -962,7 +965,7 @@ UtDoConstant (
  ******************************************************************************/
 
 ACPI_STATUS
-UtStrtoul64 (
+stroul64 (
     char                    *String,
     UINT32                  Base,
     UINT64                  *RetInteger)
index 46cb526..86ca83a 100644 (file)
@@ -69,7 +69,7 @@ AuValidateUuid (
     UINT32                  i;
 
 
-    if (!InString || (ACPI_STRLEN (InString) != UUID_STRING_LENGTH))
+    if (!InString || (strlen (InString) != UUID_STRING_LENGTH))
     {
         return (AE_BAD_PARAMETER);
     }
index 8ffe5ad..370e2e5 100644 (file)
@@ -455,6 +455,14 @@ XfCheckIllegalReference (
 #endif
 
 
+typedef struct asl_method_local
+{
+    UINT32                  Flags;
+    ACPI_PARSE_OBJECT       *Op;
+
+} ASL_METHOD_LOCAL;
+
+
 /*******************************************************************************
  *
  * FUNCTION:    XfNamespaceLocateBegin
@@ -496,6 +504,7 @@ XfNamespaceLocateBegin (
     UINT8                   Message = 0;
     const ACPI_OPCODE_INFO  *OpInfo;
     UINT32                  Flags;
+    ASL_METHOD_LOCAL        *MethodLocals;
 
 
     ACPI_FUNCTION_TRACE_PTR (XfNamespaceLocateBegin, Op);
@@ -516,6 +525,56 @@ XfNamespaceLocateBegin (
 
     OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode);
 
+
+    if (OpInfo->Type == AML_TYPE_LOCAL_VARIABLE)
+    {
+        if (!(Op->Asl.CompileFlags & NODE_IS_TARGET))
+        {
+            return_ACPI_STATUS (AE_OK);
+        }
+
+        /* Find parent method Op */
+
+        NextOp = Op->Asl.Parent;
+        while (NextOp)
+        {
+            if (NextOp->Asl.AmlOpcode == AML_METHOD_OP)
+            {
+                break;
+            }
+            NextOp = NextOp->Asl.Parent;
+        }
+
+        if (!NextOp)
+        {
+            return_ACPI_STATUS (AE_OK);
+        }
+
+        /* Get method node */
+
+        Node = NextOp->Asl.Node;
+
+        /* Create local/arg object and install in method node */
+
+        if (!Node->Object)
+        {
+            MethodLocals = UtLocalCalloc (sizeof (ASL_METHOD_LOCAL) * ACPI_METHOD_NUM_LOCALS);
+            Node->Object = (ACPI_OPERAND_OBJECT *) MethodLocals;
+
+            /* Mark this Local as referenced */
+
+            MethodLocals[Op->Asl.AmlOpcode & 0x0007].Flags = ANOBJ_IS_REFERENCED;
+            MethodLocals[Op->Asl.AmlOpcode & 0x0007].Op = Op;
+        }
+
+        return_ACPI_STATUS (AE_OK);
+    }
+
+    if (OpInfo->Type == AML_TYPE_METHOD_ARGUMENT)
+    {
+        return_ACPI_STATUS (AE_OK);
+    }
+
     if ((!(OpInfo->Flags & AML_NAMED)) &&
         (!(OpInfo->Flags & AML_CREATE)) &&
         (Op->Asl.ParseOpcode != PARSEOP_NAMESTRING) &&
index 8279055..58e749f 100644 (file)
@@ -302,7 +302,7 @@ DtCompileDataTable (
         return (AE_ERROR);
     }
 
-    Gbl_Signature = UtStringCacheCalloc (ACPI_STRLEN (Signature) + 1);
+    Gbl_Signature = UtStringCacheCalloc (strlen (Signature) + 1);
     strcpy (Gbl_Signature, Signature);
 
     /*
@@ -358,6 +358,8 @@ DtCompileDataTable (
     TableData = AcpiDmGetTableData (Signature);
     if (!TableData || Gbl_CompileGeneric)
     {
+        /* Unknown table signature and/or force generic compile */
+
         DtCompileGeneric ((void **) FieldList, NULL, NULL);
         goto FinishHeader;
     }
@@ -454,7 +456,7 @@ DtCompileTable (
     /* Ignore optional subtable if name does not match */
 
     if ((Info->Flags & DT_OPTIONAL) &&
-        ACPI_STRCMP ((*Field)->Name, Info->Name))
+        strcmp ((*Field)->Name, Info->Name))
     {
         *RetSubtable = NULL;
         return (AE_OK);
@@ -591,7 +593,7 @@ DtCompileTable (
 
             DtSetSubtableLength (InlineSubtable);
 
-            ACPI_MEMCPY (Buffer, InlineSubtable->Buffer, FieldLength);
+            memcpy (Buffer, InlineSubtable->Buffer, FieldLength);
             LocalField = *Field;
             break;
 
index 765e61c..44fc56d 100644 (file)
@@ -181,7 +181,13 @@ DtCompilePadding (
 
 UINT32
 DtGetNextLine (
-    FILE                    *Handle);
+    FILE                    *Handle,
+    UINT32                  Flags);
+
+/* Flags for DtGetNextLine */
+
+#define DT_ALLOW_MULTILINE_QUOTES   0x01
+
 
 DT_FIELD *
 DtScanFile (
index bf92795..97d0115 100644 (file)
@@ -413,7 +413,7 @@ DtLookupLabel (
     LabelField = Gbl_LabelList;
     while (LabelField)
     {
-        if (!ACPI_STRCMP (Name, LabelField->Value))
+        if (!strcmp (Name, LabelField->Value))
         {
             return (LabelField);
         }
index 4a6f1bb..f083f05 100644 (file)
@@ -166,7 +166,7 @@ DtCompileString (
     UINT32                  Length;
 
 
-    Length = ACPI_STRLEN (Field->Value);
+    Length = strlen (Field->Value);
 
     /* Check if the string is too long for the field */
 
@@ -177,7 +177,7 @@ DtCompileString (
         Length = ByteLength;
     }
 
-    ACPI_MEMCPY (Buffer, Field->Value, Length);
+    memcpy (Buffer, Field->Value, Length);
 }
 
 
@@ -212,7 +212,7 @@ DtCompileUnicode (
 
     AsciiString = Field->Value;
     UnicodeString = (UINT16 *) Buffer;
-    Count = ACPI_STRLEN (AsciiString) + 1;
+    Count = strlen (AsciiString) + 1;
 
     /* Convert to Unicode string (including null terminator) */
 
@@ -318,7 +318,7 @@ DtCompileInteger (
 
     /* TBD: Should use a flag rather than compare "Reserved" */
 
-    if (!ACPI_STRCMP (Field->Name, "Reserved"))
+    if (!strcmp (Field->Name, "Reserved"))
     {
         if (Flags & DT_NON_ZERO)
         {
@@ -359,7 +359,7 @@ DtCompileInteger (
         DtError (ASL_ERROR, ASL_MSG_INTEGER_SIZE, Field, MsgBuffer);
     }
 
-    ACPI_MEMCPY (Buffer, &Value, ByteLength);
+    memcpy (Buffer, &Value, ByteLength);
     return;
 }
 
@@ -391,7 +391,7 @@ DtNormalizeBuffer (
     char                    c;
 
 
-    NewBuffer = UtLocalCalloc (ACPI_STRLEN (Buffer) + 1);
+    NewBuffer = UtLocalCalloc (strlen (Buffer) + 1);
     TmpBuffer = NewBuffer;
 
     while ((c = *Buffer++))
index a42ca2d..41b46b5 100644 (file)
@@ -129,7 +129,7 @@ DtTrim (
 
     /* Skip lines that start with a space */
 
-    if (!ACPI_STRCMP (String, " "))
+    if (!strcmp (String, " "))
     {
         ReturnString = UtStringCacheCalloc (1);
         return (ReturnString);
@@ -138,7 +138,7 @@ DtTrim (
     /* Setup pointers to start and end of input string */
 
     Start = String;
-    End = String + ACPI_STRLEN (String) - 1;
+    End = String + strlen (String) - 1;
 
     /* Find first non-whitespace character */
 
@@ -180,9 +180,9 @@ DtTrim (
 
     Length = ACPI_PTR_DIFF (End, Start) + 1;
     ReturnString = UtStringCacheCalloc (Length + 1);
-    if (ACPI_STRLEN (Start))
+    if (strlen (Start))
     {
-        ACPI_STRNCPY (ReturnString, Start, Length);
+        strncpy (ReturnString, Start, Length);
     }
 
     ReturnString[Length] = 0;
@@ -313,7 +313,7 @@ DtParseLine (
     Length = ACPI_PTR_DIFF (End, Start);
 
     TmpName = UtLocalCalloc (Length + 1);
-    ACPI_STRNCPY (TmpName, Start, Length);
+    strncpy (TmpName, Start, Length);
     Name = DtTrim (TmpName);
     ACPI_FREE (TmpName);
 
@@ -360,7 +360,7 @@ DtParseLine (
     Length = ACPI_PTR_DIFF (End, Start);
     TmpValue = UtLocalCalloc (Length + 1);
 
-    ACPI_STRNCPY (TmpValue, Start, Length);
+    strncpy (TmpValue, Start, Length);
     Value = DtTrim (TmpValue);
     ACPI_FREE (TmpValue);
 
@@ -406,7 +406,8 @@ DtParseLine (
 
 UINT32
 DtGetNextLine (
-    FILE                    *Handle)
+    FILE                    *Handle,
+    UINT32                  Flags)
 {
     BOOLEAN                 LineNotAllBlanks = FALSE;
     UINT32                  State = DT_NORMAL_TEXT;
@@ -415,7 +416,7 @@ DtGetNextLine (
     int                     c;
 
 
-    ACPI_MEMSET (Gbl_CurrentLineBuffer, 0, Gbl_LineBufferSize);
+    memset (Gbl_CurrentLineBuffer, 0, Gbl_LineBufferSize);
     for (i = 0; ;)
     {
         /*
@@ -550,9 +551,12 @@ DtGetNextLine (
 
             case '\n':
 
-                AcpiOsPrintf ("ERROR at line %u: Unterminated quoted string\n",
-                    Gbl_CurrentLineNumber++);
-                State = DT_NORMAL_TEXT;
+                if (!(Flags & DT_ALLOW_MULTILINE_QUOTES))
+                {
+                    AcpiOsPrintf ("ERROR at line %u: Unterminated quoted string\n",
+                        Gbl_CurrentLineNumber++);
+                    State = DT_NORMAL_TEXT;
+                }
                 break;
 
             default:    /* Get next character */
@@ -746,7 +750,7 @@ DtScanFile (
 
     /* Scan line-by-line */
 
-    while ((Offset = DtGetNextLine (Handle)) != ASL_EOF)
+    while ((Offset = DtGetNextLine (Handle, 0)) != ASL_EOF)
     {
         ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Line %2.2u/%4.4X - %s",
             Gbl_CurrentLineNumber, Offset, Gbl_CurrentLineBuffer));
@@ -897,7 +901,7 @@ DtDumpBuffer (
             }
 
             BufChar = Buffer[(ACPI_SIZE) i + j];
-            if (ACPI_IS_PRINT (BufChar))
+            if (isprint (BufChar))
             {
                 FlPrintFile (FileId, "%c", BufChar);
             }
index fca1e90..f8bafbb 100644 (file)
 #define _COMPONENT          DT_COMPILER
         ACPI_MODULE_NAME    ("dtparser")
 
+void *                      AslLocalAllocate (unsigned int Size);
+
+/* Bison/yacc configuration */
+
+#undef alloca
+#define alloca              AslLocalAllocate
+
 int                         DtParserlex (void);
 int                         DtParserparse (void);
 void                        DtParsererror (char const *msg);
@@ -162,15 +169,15 @@ Expression
 
       /* Default base for a non-prefixed integer is 16 */
 
-    | EXPOP_NUMBER                                  { UtStrtoul64 (DtParsertext, 16, &$$);}
+    | EXPOP_NUMBER                                  { stroul64 (DtParsertext, 16, &$$);}
 
       /* Standard hex number (0x1234) */
 
-    | EXPOP_HEX_NUMBER                              { UtStrtoul64 (DtParsertext, 16, &$$);}
+    | EXPOP_HEX_NUMBER                              { stroul64 (DtParsertext, 16, &$$);}
 
-      /* TBD: Decimal number with prefix (0d1234) - Not supported by UtStrtoul64 at this time */
+      /* TBD: Decimal number with prefix (0d1234) - Not supported by stroul64 at this time */
 
-    | EXPOP_DECIMAL_NUMBER                          { UtStrtoul64 (DtParsertext, 10, &$$);}
+    | EXPOP_DECIMAL_NUMBER                          { stroul64 (DtParsertext, 10, &$$);}
     ;
 %%
 
index d7e4eff..0d77483 100644 (file)
@@ -80,7 +80,7 @@ DtCreateSubtable (
 
     String = UtStringCacheCalloc (Length);
     Subtable->Buffer = ACPI_CAST_PTR (UINT8, String);
-    ACPI_MEMCPY (Subtable->Buffer, Buffer, Length);
+    memcpy (Subtable->Buffer, Buffer, Length);
 
     Subtable->Length = Length;
     Subtable->TotalLength = Length;
@@ -379,6 +379,6 @@ DtSetSubtableLength (
         return;
     }
 
-    ACPI_MEMCPY (Subtable->LengthField, &Subtable->TotalLength,
+    memcpy (Subtable->LengthField, &Subtable->TotalLength,
         Subtable->SizeOfLengthField);
 }
index d7b2e90..22b4c9c 100644 (file)
@@ -1824,7 +1824,7 @@ DtCompileIvrs (
         if (IvrsHeader->Type == ACPI_IVRS_TYPE_HARDWARE)
         {
             while (*PFieldList &&
-                    !ACPI_STRCMP ((*PFieldList)->Name, "Entry Type"))
+                    !strcmp ((*PFieldList)->Name, "Entry Type"))
             {
                 SubtableStart = *PFieldList;
                 DtCompileInteger (&EntryType, *PFieldList, 1, 0);
@@ -3403,13 +3403,13 @@ DtCompileGeneric (
 
     /* Now we can actually compile the parse tree */
 
-    if (*Length)
+    if (Length && *Length)
     {
         *Length = 0;
     }
     while (*PFieldList)
     {
-        if (Name && !ACPI_STRCMP ((*PFieldList)->Name, Name))
+        if (Name && !strcmp ((*PFieldList)->Name, Name))
         {
             break;
         }
index 70dfe2d..3da0692 100644 (file)
@@ -85,6 +85,7 @@ AcpiUtIsSpecialTable (
 {
 
     if (ACPI_COMPARE_NAME (Signature, ACPI_SIG_DSDT) ||
+        ACPI_COMPARE_NAME (Signature, ACPI_SIG_OSDT) ||
         ACPI_COMPARE_NAME (Signature, ACPI_SIG_SSDT) ||
         ACPI_COMPARE_NAME (Signature, ACPI_SIG_FACS) ||
         ACPI_COMPARE_NAME (Signature, ACPI_RSDP_NAME))
@@ -127,8 +128,8 @@ DtCreateTemplates (
     }
 
     AcpiUtStrupr (Signature);
-    if (!ACPI_STRCMP (Signature, "ALL") ||
-        !ACPI_STRCMP (Signature, "*"))
+    if (!strcmp (Signature, "ALL") ||
+        !strcmp (Signature, "*"))
     {
         /* Create all available/known templates */
 
@@ -327,7 +328,7 @@ DtCreateOneTemplate (
     AcpiOsPrintf ("/*\n");
     AcpiOsPrintf (ACPI_COMMON_HEADER ("iASL Compiler/Disassembler", " * "));
 
-    AcpiOsPrintf (" * Template for [%4.4s] ACPI Table\n",
+    AcpiOsPrintf (" * Template for [%4.4s] ACPI Table",
         Signature);
 
     /* Dump the actual ACPI table */
@@ -336,6 +337,8 @@ DtCreateOneTemplate (
     {
         /* Normal case, tables that appear in AcpiDmTableData */
 
+        AcpiOsPrintf (" (static data table)\n");
+
         if (Gbl_VerboseTemplates)
         {
             AcpiOsPrintf (" * Format: [HexOffset DecimalOffset ByteLength]"
@@ -344,7 +347,7 @@ DtCreateOneTemplate (
         else
         {
             AcpiOsPrintf (" * Format: [ByteLength]"
-                "  FieldName : HexFieldValue\n */\n\n");
+                "  FieldName : HexFieldValue\n */\n");
         }
 
         AcpiDmDumpDataTable (ACPI_CAST_PTR (ACPI_TABLE_HEADER,
@@ -352,9 +355,11 @@ DtCreateOneTemplate (
     }
     else
     {
-        /* Special ACPI tables - DSDT, SSDT, FADT, RSDP */
+        /* Special ACPI tables - DSDT, SSDT, OSDT, FADT, RSDP */
+
+        AcpiOsPrintf (" (AML byte code table)\n");
 
-        AcpiOsPrintf (" */\n\n");
+        AcpiOsPrintf (" */\n");
         if (ACPI_COMPARE_NAME (Signature, ACPI_SIG_DSDT))
         {
             Actual = fwrite (TemplateDsdt, 1, sizeof (TemplateDsdt) -1, File);
@@ -377,6 +382,17 @@ DtCreateOneTemplate (
                 goto Cleanup;
             }
         }
+        else if (ACPI_COMPARE_NAME (Signature, ACPI_SIG_OSDT))
+        {
+            Actual = fwrite (TemplateOsdt, 1, sizeof (TemplateOsdt) -1, File);
+            if (Actual != sizeof (TemplateOsdt) -1)
+            {
+                fprintf (stderr,
+                    "Could not write to output file %s\n", DisasmFilename);
+                Status = AE_ERROR;
+                goto Cleanup;
+            }
+        }
         else if (ACPI_COMPARE_NAME (Signature, ACPI_SIG_FACS)) /* FADT */
         {
             AcpiDmDumpDataTable (ACPI_CAST_PTR (ACPI_TABLE_HEADER,
index 1b27b4e..6d76f4d 100644 (file)
@@ -45,7 +45,7 @@
 #define __DTTEMPLATE_H
 
 
-/* Special templates for DSDT and SSDT (AML byte-code tables) */
+/* Special templates for the ASL/AML tables: DSDT, SSDT, and OSDT */
 
 const char TemplateDsdt[] =
     "DefinitionBlock (\"dsdt.aml\", \"DSDT\", 2, \"Intel\", \"Template\", 0x00000001)\n"
@@ -65,6 +65,15 @@ const char TemplateSsdt[] =
     "    }\n"
     "}\n\n";
 
+const char TemplateOsdt[] =
+    "DefinitionBlock (\"osdt.aml\", \"OSDT\", 2, \"Intel\", \"Template\", 0x00000001)\n"
+    "{\n"
+    "    Method (MAIN, 0, NotSerialized)\n"
+    "    {\n"
+    "        Return (Zero)\n"
+    "    }\n"
+    "}\n\n";
+
 
 /* Templates for ACPI data tables */
 
index 5b88d11..95f005d 100644 (file)
@@ -241,7 +241,7 @@ DtStrtoul64 (
 
     while (*ThisChar)
     {
-        if (ACPI_IS_DIGIT (*ThisChar))
+        if (isdigit ((int) *ThisChar))
         {
             /* Convert ASCII 0-9 to Decimal value */
 
@@ -249,8 +249,8 @@ DtStrtoul64 (
         }
         else /* Letter */
         {
-            ThisDigit = (UINT32) ACPI_TOUPPER (*ThisChar);
-            if (!ACPI_IS_XDIGIT ((char) ThisDigit))
+            ThisDigit = (UINT32) toupper ((int) *ThisChar);
+            if (!isxdigit ((int) ThisDigit))
             {
                 /* Not A-F */
 
@@ -568,7 +568,7 @@ DtGetFieldLength (
         Value = DtGetFieldValue (Field);
         if (Value)
         {
-            ByteLength = ACPI_STRLEN (Value) + 1;
+            ByteLength = strlen (Value) + 1;
         }
         else
         {   /* At this point, this is a fatal error */
@@ -633,7 +633,7 @@ DtGetFieldLength (
 
         /* TBD: error if Value is NULL? (as below?) */
 
-        ByteLength = (ACPI_STRLEN (Value) + 1) * sizeof(UINT16);
+        ByteLength = (strlen (Value) + 1) * sizeof(UINT16);
         break;
 
     default:
index f761233..6758733 100644 (file)
 #define _COMPONENT          ASL_PREPROCESSOR
         ACPI_MODULE_NAME    ("prparser")
 
+void *                      AslLocalAllocate (unsigned int Size);
+
+/* Bison/yacc configuration */
+
+#undef alloca
+#define alloca              AslLocalAllocate
+
 int                         PrParserlex (void);
 int                         PrParserparse (void);
 void                        PrParsererror (char const *msg);
@@ -175,11 +182,11 @@ Expression
 
       /* Default base for a non-prefixed integer is 10 */
 
-    | EXPOP_NUMBER                                  { UtStrtoul64 (PrParsertext, 10, &$$);}
+    | EXPOP_NUMBER                                  { stroul64 (PrParsertext, 10, &$$);}
 
       /* Standard hex number (0x1234) */
 
-    | EXPOP_HEX_NUMBER                              { UtStrtoul64 (PrParsertext, 16, &$$);}
+    | EXPOP_HEX_NUMBER                              { stroul64 (PrParsertext, 16, &$$);}
     ;
 %%
 
index 47f772f..393d801 100644 (file)
@@ -67,6 +67,14 @@ PrDoDirective (
     char                    *DirectiveToken,
     char                    **Next);
 
+static void
+PrGetNextLineInit (
+    void);
+
+static UINT32
+PrGetNextLine (
+    FILE                    *Handle);
+
 static int
 PrMatchDirective (
     char                    *Directive);
@@ -186,7 +194,7 @@ PrInitializeGlobals (
     /* Init globals */
 
     Gbl_InputFileList = NULL;
-    Gbl_CurrentLineNumber = 0;
+    Gbl_CurrentLineNumber = 1;
     Gbl_PreprocessorLineNumber = 1;
     Gbl_PreprocessorError = FALSE;
 
@@ -271,7 +279,7 @@ PrDoPreprocess (
 
     } while (MoreInputFiles);
 
-    /* Point compiler input to the new preprocessor output file (.i) */
+    /* Point compiler input to the new preprocessor output file (.pre) */
 
     FlCloseFile (ASL_FILE_INPUT);
     Gbl_Files[ASL_FILE_INPUT].Handle = Gbl_Files[ASL_FILE_PREPROCESSOR].Handle;
@@ -280,7 +288,10 @@ PrDoPreprocess (
     /* Reset globals to allow compiler to run */
 
     FlSeekFile (ASL_FILE_INPUT, 0);
-    Gbl_CurrentLineNumber = 1;
+    if (!Gbl_PreprocessOnly)
+    {
+        Gbl_CurrentLineNumber = 0;
+    }
 
     DbgPrint (ASL_DEBUG_OUTPUT, "Preprocessing phase complete \n\n");
 }
@@ -297,7 +308,8 @@ PrDoPreprocess (
  * DESCRIPTION: Preprocess one entire file, line-by-line.
  *
  * Input:  Raw user ASL from ASL_FILE_INPUT
- * Output: Preprocessed file written to ASL_FILE_PREPROCESSOR
+ * Output: Preprocessed file written to ASL_FILE_PREPROCESSOR and
+ *         (optionally) ASL_FILE_PREPROCESSOR_USER
  *
  ******************************************************************************/
 
@@ -305,7 +317,7 @@ static void
 PrPreprocessInputFile (
     void)
 {
-    UINT32                  Offset;
+    UINT32                  Status;
     char                    *Token;
     char                    *ReplaceString;
     PR_DEFINE_INFO          *DefineInfo;
@@ -314,10 +326,21 @@ PrPreprocessInputFile (
     int                     OffsetAdjust;
 
 
+    PrGetNextLineInit ();
+
     /* Scan line-by-line. Comments and blank lines are skipped by this function */
 
-    while ((Offset = DtGetNextLine (Gbl_Files[ASL_FILE_INPUT].Handle)) != ASL_EOF)
+    while ((Status = PrGetNextLine (Gbl_Files[ASL_FILE_INPUT].Handle)) != ASL_EOF)
     {
+        Gbl_CurrentLineNumber++;
+        Gbl_LogicalLineNumber++;
+
+        if ((Status == ASL_WITHIN_COMMENT) ||
+            (Status == ASL_BLANK_LINE))
+        {
+            goto WriteEntireLine;
+        }
+
         /* Need a copy of the input line for strok() */
 
         strcpy (Gbl_MainTokenBuffer, Gbl_CurrentLineBuffer);
@@ -397,24 +420,13 @@ PrPreprocessInputFile (
             Token = PrGetNextToken (NULL, PR_TOKEN_SEPARATORS, &Next);
         }
 
-        /*
-         * Emit a #line directive if necessary, to keep the line numbers in
-         * the (.i) file synchronized with the original source code file, so
-         * that the correct line number appears in any error messages
-         * generated by the actual compiler.
-         */
-        if (Gbl_CurrentLineNumber > (Gbl_PreviousLineNumber + 1))
-        {
-            FlPrintFile (ASL_FILE_PREPROCESSOR, "#line %u\n",
-                Gbl_CurrentLineNumber);
-        }
-
-        Gbl_PreviousLineNumber = Gbl_CurrentLineNumber;
         Gbl_PreprocessorLineNumber++;
 
+
+WriteEntireLine:
         /*
          * Now we can write the possibly modified source line to the
-         * preprocessor (.i) file
+         * preprocessor file(s).
          */
         FlWriteFile (ASL_FILE_PREPROCESSOR, Gbl_CurrentLineBuffer,
             strlen (Gbl_CurrentLineBuffer));
@@ -654,7 +666,7 @@ PrDoDirective (
         {
 #ifndef MACROS_SUPPORTED
             AcpiOsPrintf ("%s ERROR - line %u: #define macros are not supported yet\n",
-                Gbl_CurrentLineBuffer, Gbl_CurrentLineNumber);
+                Gbl_CurrentLineBuffer, Gbl_LogicalLineNumber);
             exit(1);
 #else
             PrAddMacro (Token, Next);
@@ -691,7 +703,7 @@ PrDoDirective (
 #endif
             DbgPrint (ASL_PARSE_OUTPUT, PR_PREFIX_ID
                 "New #define: %s->%s\n",
-                Gbl_CurrentLineNumber, Token, Token2);
+                Gbl_LogicalLineNumber, Token, Token2);
 
             PrAddDefine (Token, Token2, FALSE);
         }
@@ -760,10 +772,7 @@ PrDoDirective (
             "User #line invocation %s\n", Gbl_CurrentLineNumber,
             Token);
 
-        /* Update local line numbers */
-
         Gbl_CurrentLineNumber = (UINT32) Value;
-        Gbl_PreviousLineNumber = 0;
 
         /* Emit #line into the preprocessor file */
 
@@ -837,6 +846,107 @@ SyntaxError:
 }
 
 
+/*******************************************************************************
+ *
+ * FUNCTION:    PrGetNextLine, PrGetNextLineInit
+ *
+ * PARAMETERS:  Handle              - Open file handle for the source file
+ *
+ * RETURN:      Status of the GetLine operation:
+ *              AE_OK               - Normal line, OK status
+ *              ASL_WITHIN_COMMENT  - Line is part of a multi-line comment
+ *              ASL_EOF             - End-of-file reached
+ *
+ * DESCRIPTION: Get the next text line from the input file. Does not strip
+ *              comments.
+ *
+ ******************************************************************************/
+
+#define PR_NORMAL_TEXT          0
+#define PR_WITHIN_COMMENT       1
+
+static UINT8                    AcpiGbl_LineScanState = PR_NORMAL_TEXT;
+
+static void
+PrGetNextLineInit (
+    void)
+{
+    AcpiGbl_LineScanState = 0;
+}
+
+static UINT32
+PrGetNextLine (
+    FILE                    *Handle)
+{
+    UINT32                  i;
+    int                     c = 0;
+    int                     PreviousChar;
+
+
+    /* Always clear the global line buffer */
+
+    memset (Gbl_CurrentLineBuffer, 0, Gbl_LineBufferSize);
+    for (i = 0; ;)
+    {
+        /*
+         * If line is too long, expand the line buffers. Also increases
+         * Gbl_LineBufferSize.
+         */
+        if (i >= Gbl_LineBufferSize)
+        {
+            UtExpandLineBuffers ();
+        }
+
+        PreviousChar = c;
+        c = getc (Handle);
+        if (c == EOF)
+        {
+            return (ASL_EOF);
+        }
+
+        /* We need to worry about multi-line slash-asterisk comments */
+
+        /* Check for comment open */
+
+        if ((AcpiGbl_LineScanState == PR_NORMAL_TEXT) &&
+            (PreviousChar == '/') && (c == '*'))
+        {
+            AcpiGbl_LineScanState = PR_WITHIN_COMMENT;
+        }
+
+        /* Check for comment close */
+
+        if ((AcpiGbl_LineScanState == PR_WITHIN_COMMENT) &&
+            (PreviousChar == '*') && (c == '/'))
+        {
+            AcpiGbl_LineScanState = PR_NORMAL_TEXT;
+        }
+
+        /* Always copy the character into line buffer */
+
+        Gbl_CurrentLineBuffer[i] = (char) c;
+        i++;
+
+        /* Always exit on end-of-line */
+
+        if (c == '\n')
+        {
+            /* Handle multi-line comments */
+
+            if (AcpiGbl_LineScanState == PR_WITHIN_COMMENT)
+            {
+                return (ASL_WITHIN_COMMENT);
+            }
+            if (i == 1)
+            {
+                return (ASL_BLANK_LINE);
+            }
+            return (AE_OK);
+        }
+    }
+}
+
+
 /*******************************************************************************
  *
  * FUNCTION:    PrMatchDirective
index a802fcf..d967e5c 100644 (file)
@@ -382,6 +382,8 @@ PrPushInputFileStack (
     PR_FILE_NODE            *Fnode;
 
 
+    Gbl_HasIncludeFiles = TRUE;
+
     /* Save the current state in an Fnode */
 
     Fnode = UtLocalCalloc (sizeof (PR_FILE_NODE));
@@ -406,11 +408,11 @@ PrPushInputFileStack (
     strcpy (Gbl_Files[ASL_FILE_INPUT].Filename, Filename);
 
     Gbl_Files[ASL_FILE_INPUT].Handle = InputFile;
-    Gbl_PreviousLineNumber = 0;
-    Gbl_CurrentLineNumber = 0;
+    Gbl_CurrentLineNumber = 1;
 
     /* Emit a new #line directive for the include file */
 
+    Gbl_CurrentLineNumber = 1;
     FlPrintFile (ASL_FILE_PREPROCESSOR, "#line %u \"%s\"\n", 1, Filename);
 }
 
@@ -460,12 +462,11 @@ PrPopInputFileStack (
     Gbl_Files[ASL_FILE_INPUT].Filename = Fnode->Filename;
     Gbl_Files[ASL_FILE_INPUT].Handle = Fnode->File;
     Gbl_CurrentLineNumber = Fnode->CurrentLineNumber;
-    Gbl_PreviousLineNumber = 0;
 
     /* Emit a new #line directive after the include file */
 
     FlPrintFile (ASL_FILE_PREPROCESSOR, "#line %u \"%s\"\n",
-        Gbl_CurrentLineNumber + 1, Fnode->Filename);
+        Gbl_CurrentLineNumber, Fnode->Filename);
 
     /* All done with this node */
 
index 8316773..4a2c4e8 100644 (file)
@@ -111,7 +111,7 @@ AcpiDbConvertToNode (
     {
         /* Numeric argument, convert */
 
-        Address = ACPI_STRTOUL (InString, NULL, 16);
+        Address = strtoul (InString, NULL, 16);
         Node = ACPI_TO_POINTER (Address);
         if (!AcpiOsReadable (Node, sizeof (ACPI_NAMESPACE_NODE)))
         {
@@ -189,7 +189,7 @@ AcpiDbSleep (
 
     /* Convert argument to binary and invoke the sleep state */
 
-    SleepState = (UINT8) ACPI_STRTOUL (ObjectArg, NULL, 0);
+    SleepState = (UINT8) strtoul (ObjectArg, NULL, 0);
     AcpiDbDoOneSleepState (SleepState);
     return_ACPI_STATUS (AE_OK);
 }
@@ -561,7 +561,7 @@ AcpiDbDisplayInterfaces (
 
     /* Install - install an interface */
 
-    SubString = ACPI_STRSTR ("INSTALL", ActionArg);
+    SubString = strstr ("INSTALL", ActionArg);
     if (SubString)
     {
         Status = AcpiInstallInterface (InterfaceNameArg);
@@ -575,7 +575,7 @@ AcpiDbDisplayInterfaces (
 
     /* Remove - remove an interface */
 
-    SubString = ACPI_STRSTR ("REMOVE", ActionArg);
+    SubString = strstr ("REMOVE", ActionArg);
     if (SubString)
     {
         Status = AcpiRemoveInterface (InterfaceNameArg);
@@ -736,7 +736,7 @@ AcpiDmCompareAmlResources (
 
         /* Check for descriptor byte match */
 
-        else if (ACPI_MEMCMP (Aml1, Aml2, Aml1Length))
+        else if (memcmp (Aml1, Aml2, Aml1Length))
         {
             AcpiOsPrintf (
                 "**** Data mismatch in descriptor [%.2X] type %2.2X, Offset %8.8X ****\n",
@@ -1138,7 +1138,7 @@ AcpiDbDisplayResources (
 
     /* Asterisk means "display resources for all devices" */
 
-    if (!ObjectArg || (!ACPI_STRCMP (ObjectArg, "*")))
+    if (!ObjectArg || (!strcmp (ObjectArg, "*")))
     {
         (void) AcpiWalkNamespace (ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
                     ACPI_UINT32_MAX, AcpiDbDeviceResources, NULL, NULL, NULL);
@@ -1191,7 +1191,7 @@ AcpiDbGenerateGpe (
     ACPI_GPE_EVENT_INFO     *GpeEventInfo;
 
 
-    GpeNumber = ACPI_STRTOUL (GpeArg, NULL, 0);
+    GpeNumber = strtoul (GpeArg, NULL, 0);
 
     /*
      * If no block arg, or block arg == 0 or 1, use the FADT-defined
@@ -1199,7 +1199,7 @@ AcpiDbGenerateGpe (
      */
     if (BlockArg)
     {
-        BlockNumber = ACPI_STRTOUL (BlockArg, NULL, 0);
+        BlockNumber = strtoul (BlockArg, NULL, 0);
         if (BlockNumber == 1)
         {
             BlockNumber = 0;
index 2a517d2..4c7b4ba 100644 (file)
@@ -77,7 +77,7 @@ AcpiDbHexCharToValue (
 
     /* Digit must be ascii [0-9a-fA-F] */
 
-    if (!ACPI_IS_XDIGIT (HexChar))
+    if (!isxdigit (HexChar))
     {
         return (AE_BAD_HEX_CONSTANT);
     }
@@ -88,7 +88,7 @@ AcpiDbHexCharToValue (
     }
     else
     {
-        Value = (UINT8) (ACPI_TOUPPER (HexChar) - 0x37);
+        Value = (UINT8) (toupper (HexChar) - 0x37);
     }
 
     *ReturnValue = Value;
@@ -306,7 +306,7 @@ AcpiDbConvertToObject (
 
         Object->Type = ACPI_TYPE_STRING;
         Object->String.Pointer = String;
-        Object->String.Length = (UINT32) ACPI_STRLEN (String);
+        Object->String.Length = (UINT32) strlen (String);
         break;
 
     case ACPI_TYPE_BUFFER:
@@ -471,7 +471,7 @@ AcpiDbDumpPldBuffer (
 
     /* The two bit-packed buffers should match */
 
-    if (ACPI_MEMCMP (NewBuffer, BufferDesc->Buffer.Pointer,
+    if (memcmp (NewBuffer, BufferDesc->Buffer.Pointer,
         BufferDesc->Buffer.Length))
     {
         AcpiOsPrintf ("Converted _PLD buffer does not compare. New:\n");
index ac8beeb..aedc8bf 100644 (file)
@@ -141,7 +141,7 @@ AcpiDbGetPointer (
     ACPI_SIZE               Address;
 
 
-    Address = ACPI_STRTOUL (Target, NULL, 16);
+    Address = strtoul (Target, NULL, 16);
     ObjPtr = ACPI_TO_POINTER (Address);
     return (ObjPtr);
 }
index 1cf8760..433cc55 100644 (file)
@@ -433,15 +433,15 @@ AcpiDbExecute (
     }
     else
     {
-        NameString = ACPI_ALLOCATE (ACPI_STRLEN (Name) + 1);
+        NameString = ACPI_ALLOCATE (strlen (Name) + 1);
         if (!NameString)
         {
             return;
         }
 
-        ACPI_MEMSET (&AcpiGbl_DbMethodInfo, 0, sizeof (ACPI_DB_METHOD_INFO));
+        memset (&AcpiGbl_DbMethodInfo, 0, sizeof (ACPI_DB_METHOD_INFO));
 
-        ACPI_STRCPY (NameString, Name);
+        strcpy (NameString, Name);
         AcpiUtStrupr (NameString);
         AcpiGbl_DbMethodInfo.Name = NameString;
         AcpiGbl_DbMethodInfo.Args = Args;
@@ -669,8 +669,8 @@ AcpiDbCreateExecutionThreads (
 
     /* Get the arguments */
 
-    NumThreads = ACPI_STRTOUL (NumThreadsArg, NULL, 0);
-    NumLoops   = ACPI_STRTOUL (NumLoopsArg, NULL, 0);
+    NumThreads = strtoul (NumThreadsArg, NULL, 0);
+    NumLoops   = strtoul (NumLoopsArg, NULL, 0);
 
     if (!NumThreads || !NumLoops)
     {
@@ -714,7 +714,7 @@ AcpiDbCreateExecutionThreads (
         return;
     }
 
-    ACPI_MEMSET (&AcpiGbl_DbMethodInfo, 0, sizeof (ACPI_DB_METHOD_INFO));
+    memset (&AcpiGbl_DbMethodInfo, 0, sizeof (ACPI_DB_METHOD_INFO));
 
     /* Array to store IDs of threads */
 
@@ -729,7 +729,7 @@ AcpiDbCreateExecutionThreads (
         (void) AcpiOsDeleteSemaphore (InfoGate);
         return;
     }
-    ACPI_MEMSET (AcpiGbl_DbMethodInfo.Threads, 0, Size);
+    memset (AcpiGbl_DbMethodInfo.Threads, 0, Size);
 
     /* Setup the context to be passed to each thread */
 
index f9d7635..5d52620 100644 (file)
@@ -112,7 +112,7 @@ AcpiDbOpenDebugFile (
     }
 
     AcpiOsPrintf ("Debug output file %s opened\n", Name);
-    ACPI_STRNCPY (AcpiGbl_DbDebugFilename, Name,
+    strncpy (AcpiGbl_DbDebugFilename, Name,
         sizeof (AcpiGbl_DbDebugFilename));
     AcpiGbl_DbOutputToFile = TRUE;
 
index 70bca42..bc29d3b 100644 (file)
@@ -92,7 +92,7 @@ AcpiDbAddToHistory (
 
     /* Put command into the next available slot */
 
-    CmdLen = (UINT16) ACPI_STRLEN (CommandLine);
+    CmdLen = (UINT16) strlen (CommandLine);
     if (!CmdLen)
     {
         return;
@@ -100,7 +100,7 @@ AcpiDbAddToHistory (
 
     if (AcpiGbl_HistoryBuffer[AcpiGbl_NextHistoryIndex].Command != NULL)
     {
-        BufferLen = (UINT16) ACPI_STRLEN (
+        BufferLen = (UINT16) strlen (
             AcpiGbl_HistoryBuffer[AcpiGbl_NextHistoryIndex].Command);
         if (CmdLen > BufferLen)
         {
@@ -116,7 +116,7 @@ AcpiDbAddToHistory (
             AcpiOsAllocate (CmdLen + 1);
     }
 
-    ACPI_STRCPY (AcpiGbl_HistoryBuffer[AcpiGbl_NextHistoryIndex].Command,
+    strcpy (AcpiGbl_HistoryBuffer[AcpiGbl_NextHistoryIndex].Command,
         CommandLine);
 
     AcpiGbl_HistoryBuffer[AcpiGbl_NextHistoryIndex].CmdNum =
@@ -217,7 +217,7 @@ AcpiDbGetFromHistory (
 
     else
     {
-        CmdNum = ACPI_STRTOUL (CommandNumArg, NULL, 0);
+        CmdNum = strtoul (CommandNumArg, NULL, 0);
     }
 
     return (AcpiDbGetHistoryByIndex (CmdNum));
index 80fd3e6..e588167 100644 (file)
@@ -361,7 +361,7 @@ AcpiDbMatchCommandHelp (
 
     while ((*Command) && (*Invocation) && (*Invocation != ' '))
     {
-        if (ACPI_TOLOWER (*Command) != ACPI_TOLOWER (*Invocation))
+        if (tolower ((int) *Command) != tolower ((int) *Invocation))
         {
             return (FALSE);
         }
@@ -702,7 +702,7 @@ AcpiDbMatchCommand (
 
     for (i = CMD_FIRST_VALID; AcpiGbl_DbCommands[i].Name; i++)
     {
-        if (ACPI_STRSTR (AcpiGbl_DbCommands[i].Name, UserCommand) ==
+        if (strstr (AcpiGbl_DbCommands[i].Name, UserCommand) ==
                          AcpiGbl_DbCommands[i].Name)
         {
             return (i);
@@ -946,7 +946,7 @@ AcpiDbCommandDispatch (
         else if (ParamCount == 2)
         {
             Temp = AcpiGbl_DbConsoleDebugLevel;
-            AcpiGbl_DbConsoleDebugLevel = ACPI_STRTOUL (AcpiGbl_DbArgs[1],
+            AcpiGbl_DbConsoleDebugLevel = strtoul (AcpiGbl_DbArgs[1],
                                             NULL, 16);
             AcpiOsPrintf (
                 "Debug Level for console output was %8.8lX, now %8.8lX\n",
@@ -955,7 +955,7 @@ AcpiDbCommandDispatch (
         else
         {
             Temp = AcpiGbl_DbDebugLevel;
-            AcpiGbl_DbDebugLevel = ACPI_STRTOUL (AcpiGbl_DbArgs[1], NULL, 16);
+            AcpiGbl_DbDebugLevel = strtoul (AcpiGbl_DbArgs[1], NULL, 16);
             AcpiOsPrintf (
                 "Debug Level for file output was %8.8lX, now %8.8lX\n",
                 Temp, AcpiGbl_DbDebugLevel);
@@ -994,7 +994,7 @@ AcpiDbCommandDispatch (
 
     case CMD_NOTIFY:
 
-        Temp = ACPI_STRTOUL (AcpiGbl_DbArgs[2], NULL, 0);
+        Temp = strtoul (AcpiGbl_DbArgs[2], NULL, 0);
         AcpiDbSendNotify (AcpiGbl_DbArgs[1], Temp);
         break;
 
index c658d6a..2b03d35 100644 (file)
@@ -89,7 +89,7 @@ AcpiDbSetMethodBreakpoint (
 
     /* Get and verify the breakpoint address */
 
-    Address = ACPI_STRTOUL (Location, NULL, 16);
+    Address = strtoul (Location, NULL, 16);
     if (Address <= Op->Common.AmlOffset)
     {
         AcpiOsPrintf ("Breakpoint %X is beyond current address %X\n",
@@ -174,7 +174,7 @@ AcpiDbSetMethodData (
         return;
     }
 
-    Value = ACPI_STRTOUL (ValueArg, NULL, 16);
+    Value = strtoul (ValueArg, NULL, 16);
 
     if (Type == 'N')
     {
@@ -196,7 +196,7 @@ AcpiDbSetMethodData (
 
     /* Get the index and value */
 
-    Index = ACPI_STRTOUL (IndexArg, NULL, 16);
+    Index = strtoul (IndexArg, NULL, 16);
 
     WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList);
     if (!WalkState)
@@ -304,7 +304,7 @@ AcpiDbDisassembleAml (
 
     if (Statements)
     {
-        NumStatements = ACPI_STRTOUL (Statements, NULL, 0);
+        NumStatements = strtoul (Statements, NULL, 0);
     }
 
     AcpiDmDisassemble (NULL, Op, NumStatements);
index 48aaeb0..0b56f07 100644 (file)
@@ -248,7 +248,7 @@ AcpiDbDumpNamespace (
 
         if (DepthArg)
         {
-            MaxDepth = ACPI_STRTOUL (DepthArg, NULL, 0);
+            MaxDepth = strtoul (DepthArg, NULL, 0);
         }
     }
 
@@ -319,13 +319,13 @@ AcpiDbDumpNamespaceByOwner (
     ACPI_OWNER_ID           OwnerId;
 
 
-    OwnerId = (ACPI_OWNER_ID) ACPI_STRTOUL (OwnerArg, NULL, 0);
+    OwnerId = (ACPI_OWNER_ID) strtoul (OwnerArg, NULL, 0);
 
     /* Now we can check for the depth argument */
 
     if (DepthArg)
     {
-        MaxDepth = ACPI_STRTOUL (DepthArg, NULL, 0);
+        MaxDepth = strtoul (DepthArg, NULL, 0);
     }
 
     AcpiDbSetOutputDestination (ACPI_DB_DUPLICATE_OUTPUT);
@@ -426,7 +426,7 @@ AcpiDbFindNameInNamespace (
     char                    *AcpiNamePtr = AcpiName;
 
 
-    if (ACPI_STRLEN (NameArg) > 4)
+    if (strlen (NameArg) > 4)
     {
         AcpiOsPrintf ("Name must be no longer than 4 characters\n");
         return (AE_OK);
@@ -830,7 +830,7 @@ AcpiDbFindReferences (
 
     /* Convert string to object pointer */
 
-    Address = ACPI_STRTOUL (ObjectArg, NULL, 16);
+    Address = strtoul (ObjectArg, NULL, 16);
     ObjDesc = ACPI_TO_POINTER (Address);
 
     /* Search all nodes in namespace */
index 72a4499..8d68f53 100644 (file)
@@ -646,7 +646,7 @@ AcpiDbTestBufferType (
      * count is not an integral number of bytes. Zero out the
      * unused bits.
      */
-    ACPI_MEMSET (Buffer, BUFFER_FILL_VALUE, ByteLength);
+    memset (Buffer, BUFFER_FILL_VALUE, ByteLength);
     ExtraBits = BitLength % 8;
     if (ExtraBits)
     {
@@ -671,7 +671,7 @@ AcpiDbTestBufferType (
         goto Exit;
     }
 
-    if (ACPI_MEMCMP (Temp2->Buffer.Pointer, Buffer, ByteLength))
+    if (memcmp (Temp2->Buffer.Pointer, Buffer, ByteLength))
     {
         AcpiOsPrintf (" MISMATCH 2: New buffer value");
     }
@@ -695,7 +695,7 @@ AcpiDbTestBufferType (
         goto Exit;
     }
 
-    if (ACPI_MEMCMP (Temp1->Buffer.Pointer, Temp3->Buffer.Pointer, ByteLength))
+    if (memcmp (Temp1->Buffer.Pointer, Temp3->Buffer.Pointer, ByteLength))
     {
         AcpiOsPrintf (" MISMATCH 3: While restoring original buffer");
     }
@@ -751,7 +751,7 @@ AcpiDbTestStringType (
     /* Write a new value */
 
     WriteValue.Type = ACPI_TYPE_STRING;
-    WriteValue.String.Length = ACPI_STRLEN (ValueToWrite);
+    WriteValue.String.Length = strlen (ValueToWrite);
     WriteValue.String.Pointer = ValueToWrite;
 
     Status = AcpiDbWriteToObject (Node, &WriteValue);
@@ -768,7 +768,7 @@ AcpiDbTestStringType (
         goto Exit;
     }
 
-    if (ACPI_STRCMP (Temp2->String.Pointer, ValueToWrite))
+    if (strcmp (Temp2->String.Pointer, ValueToWrite))
     {
         AcpiOsPrintf (" MISMATCH 2: %s, expecting %s",
             Temp2->String.Pointer, ValueToWrite);
@@ -776,7 +776,7 @@ AcpiDbTestStringType (
 
     /* Write back the original value */
 
-    WriteValue.String.Length = ACPI_STRLEN (Temp1->String.Pointer);
+    WriteValue.String.Length = strlen (Temp1->String.Pointer);
     WriteValue.String.Pointer = Temp1->String.Pointer;
 
     Status = AcpiDbWriteToObject (Node, &WriteValue);
@@ -793,7 +793,7 @@ AcpiDbTestStringType (
         goto Exit;
     }
 
-    if (ACPI_STRCMP (Temp1->String.Pointer, Temp3->String.Pointer))
+    if (strcmp (Temp1->String.Pointer, Temp3->String.Pointer))
     {
         AcpiOsPrintf (" MISMATCH 3: %s, expecting %s",
             Temp3->String.Pointer, Temp1->String.Pointer);
@@ -926,7 +926,7 @@ AcpiDbWriteToObject (
 
     /* Copy the incoming user parameter */
 
-    ACPI_MEMCPY (&Params[1], Value, sizeof (ACPI_OBJECT));
+    memcpy (&Params[1], Value, sizeof (ACPI_OBJECT));
 
     ParamObjects.Count = 2;
     ParamObjects.Pointer = Params;
@@ -970,7 +970,7 @@ AcpiDbEvaluateAllPredefinedNames (
 
     if (CountArg)
     {
-        Info.MaxCount = ACPI_STRTOUL (CountArg, NULL, 0);
+        Info.MaxCount = strtoul (CountArg, NULL, 0);
     }
 
     /* Search all nodes in namespace */
@@ -1077,7 +1077,7 @@ AcpiDbEvaluateOnePredefinedName (
             case ACPI_TYPE_STRING:
 
                 ThisParam->String.Pointer = "This is the default argument string";
-                ThisParam->String.Length = ACPI_STRLEN (ThisParam->String.Pointer);
+                ThisParam->String.Length = strlen (ThisParam->String.Pointer);
                 break;
 
             case ACPI_TYPE_BUFFER:
index 1b33752..a089344 100644 (file)
@@ -96,7 +96,7 @@ AcpiDbMatchArgument (
 
     for (i = 0; Arguments[i].Name; i++)
     {
-        if (ACPI_STRSTR (Arguments[i].Name, UserArgument) == Arguments[i].Name)
+        if (strstr (Arguments[i].Name, UserArgument) == Arguments[i].Name)
         {
             return (i);
         }
@@ -375,7 +375,7 @@ AcpiDbUint32ToHexString (
 
     if (Value == 0)
     {
-        ACPI_STRCPY (Buffer, "0");
+        strcpy (Buffer, "0");
         return;
     }
 
index 04b69ad..33d5e36 100644 (file)
@@ -431,7 +431,7 @@ AcpiDbInitialize (
     {
         return_ACPI_STATUS (AE_NO_MEMORY);
     }
-    ACPI_MEMSET (AcpiGbl_DbBuffer, 0, ACPI_DEBUG_BUFFER_SIZE);
+    memset (AcpiGbl_DbBuffer, 0, ACPI_DEBUG_BUFFER_SIZE);
 
     /* Initial scope is the root */
 
index 8cd06a4..2291bb2 100644 (file)
@@ -205,7 +205,7 @@ AcpiDmDisasmByteList (
             }
 
             BufChar = ByteData[CurrentIndex];
-            if (ACPI_IS_PRINT (BufChar))
+            if (isprint (BufChar))
             {
                 AcpiOsPrintf ("%c", BufChar);
             }
@@ -554,7 +554,7 @@ AcpiDmIsStringBuffer (
          * they will be handled in the string output routine
          */
 
-        if (!ACPI_IS_PRINT (ByteData[i]))
+        if (!isprint (ByteData[i]))
         {
             return (FALSE);
         }
@@ -836,7 +836,7 @@ AcpiDmUnicode (
         {
             AcpiOsPrintf ("\\%c", OutputValue);
         }
-        else if (!ACPI_IS_PRINT (OutputValue))
+        else if (!isprint (OutputValue))
         {
             AcpiOsPrintf ("\\x%2.2X", OutputValue);
         }
@@ -902,7 +902,7 @@ AcpiDmGetHardwareIdType (
         for (i = 0; i < 3; i++)
         {
             if (!ACPI_IS_ASCII (Prefix[i]) ||
-                !ACPI_IS_ALPHA (Prefix[i]))
+                !isalpha (Prefix[i]))
             {
                 return;
             }
index 1f13819..a6ec689 100644 (file)
@@ -337,23 +337,70 @@ AcpiDmCheckForSymbolicOpcode (
          */
         AcpiDmPromoteTarget (Op, Target);
 
-        /*
-         * Check for possible conversion to a "Compound Assignment".
-         *
-         * Determine if either operand is the same as the target
-         * and display compound assignment operator and other operand.
-         */
-        if ((AcpiDmIsTargetAnOperand (Target, Child1, TRUE)) ||
-            (AcpiDmIsTargetAnOperand (Target, Child2, TRUE)))
+        /* Check operands for conversion to a "Compound Assignment" */
+
+        switch (Op->Common.AmlOpcode)
         {
-            Target->Common.OperatorSymbol =
-                AcpiDmGetCompoundSymbol (Op->Common.AmlOpcode);
+            /* Commutative operators */
+
+        case AML_ADD_OP:
+        case AML_MULTIPLY_OP:
+        case AML_BIT_AND_OP:
+        case AML_BIT_OR_OP:
+        case AML_BIT_XOR_OP:
+            /*
+             * For the commutative operators, we can convert to a
+             * compound statement only if at least one (either) operand
+             * is the same as the target.
+             *
+             *      Add (A, B, A) --> A += B
+             *      Add (B, A, A) --> A += B
+             *      Add (B, C, A) --> A = (B + C)
+             */
+            if ((AcpiDmIsTargetAnOperand (Target, Child1, TRUE)) ||
+                (AcpiDmIsTargetAnOperand (Target, Child2, TRUE)))
+            {
+                Target->Common.OperatorSymbol =
+                    AcpiDmGetCompoundSymbol (Op->Common.AmlOpcode);
 
-            /* Convert operator to compound assignment */
+                /* Convert operator to compound assignment */
 
-            Op->Common.DisasmFlags |= ACPI_PARSEOP_COMPOUND;
-            Child1->Common.OperatorSymbol = NULL;
-            return (TRUE);
+                Op->Common.DisasmFlags |= ACPI_PARSEOP_COMPOUND;
+                Child1->Common.OperatorSymbol = NULL;
+                return (TRUE);
+            }
+            break;
+
+            /* Non-commutative operators */
+
+        case AML_SUBTRACT_OP:
+        case AML_DIVIDE_OP:
+        case AML_MOD_OP:
+        case AML_SHIFT_LEFT_OP:
+        case AML_SHIFT_RIGHT_OP:
+            /*
+             * For the non-commutative operators, we can convert to a
+             * compound statement only if the target is the same as the
+             * first operand.
+             *
+             *      Subtract (A, B, A) --> A -= B
+             *      Subtract (B, A, A) --> A = (B - A)
+             */
+            if ((AcpiDmIsTargetAnOperand (Target, Child1, TRUE)))
+            {
+                Target->Common.OperatorSymbol =
+                    AcpiDmGetCompoundSymbol (Op->Common.AmlOpcode);
+
+                /* Convert operator to compound assignment */
+
+                Op->Common.DisasmFlags |= ACPI_PARSEOP_COMPOUND;
+                Child1->Common.OperatorSymbol = NULL;
+                return (TRUE);
+            }
+            break;
+
+        default:
+            break;
         }
 
         /*
@@ -423,8 +470,12 @@ AcpiDmCheckForSymbolicOpcode (
          * source so that the target is processed first.
          */
         Target = Child1->Common.Next;
-        AcpiDmPromoteTarget (Op, Target);
+        if (!Target)
+        {
+            return (FALSE);
+        }
 
+        AcpiDmPromoteTarget (Op, Target);
         if (!Target->Common.OperatorSymbol)
         {
             Target->Common.OperatorSymbol = " = ";
@@ -674,7 +725,8 @@ AcpiDmPromoteTarget (
  *
  * DESCRIPTION: Determine if a Target Op is a placeholder Op or a real Target.
  *              In other words, determine if the optional target is used or
- *              not.
+ *              not. Note: If Target is NULL, something is seriously wrong,
+ *              probably with the parse tree.
  *
  ******************************************************************************/
 
@@ -683,6 +735,11 @@ AcpiDmIsValidTarget (
     ACPI_PARSE_OBJECT       *Target)
 {
 
+    if (!Target)
+    {
+        return (FALSE);
+    }
+
     if ((Target->Common.AmlOpcode == AML_INT_NAMEPATH_OP) &&
         (Target->Common.Value.Arg == NULL))
     {
index d8ab1d5..60345fc 100644 (file)
@@ -269,10 +269,10 @@ AcpiDmPredefinedDescription (
      * Note: NameString is guaranteed to be upper case here.
      */
     LastCharIsDigit =
-        (ACPI_IS_DIGIT (NameString[3]));    /* d */
+        (isdigit ((int) NameString[3]));    /* d */
     LastCharsAreHex =
-        (ACPI_IS_XDIGIT (NameString[2]) &&  /* xx */
-         ACPI_IS_XDIGIT (NameString[3]));
+        (isxdigit ((int) NameString[2]) &&  /* xx */
+         isxdigit ((int) NameString[3]));
 
     switch (NameString[1])
     {
index 83100be..69437de 100644 (file)
@@ -530,7 +530,7 @@ AcpiDsCreateField (
         }
     }
 
-    ACPI_MEMSET (&Info, 0, sizeof (ACPI_CREATE_FIELD_INFO));
+    memset (&Info, 0, sizeof (ACPI_CREATE_FIELD_INFO));
 
     /* Second arg is the field flags */
 
index 8957eff..aabd30b 100644 (file)
@@ -224,7 +224,7 @@ AcpiDsInitializeObjects (
 
     /* Set all init info to zero */
 
-    ACPI_MEMSET (&Info, 0, sizeof (ACPI_INIT_WALK_INFO));
+    memset (&Info, 0, sizeof (ACPI_INIT_WALK_INFO));
 
     Info.OwnerId = OwnerId;
     Info.TableIndex = TableIndex;
index 54899d7..cdc8431 100644 (file)
@@ -348,7 +348,7 @@ AcpiDsBuildInternalBufferObj (
 
         if (ByteList)
         {
-            ACPI_MEMCPY (ObjDesc->Buffer.Pointer, ByteList->Named.Data,
+            memcpy (ObjDesc->Buffer.Pointer, ByteList->Named.Data,
                          ByteListLength);
         }
     }
@@ -775,7 +775,7 @@ AcpiDsInitObjectFromOp (
     case ACPI_TYPE_STRING:
 
         ObjDesc->String.Pointer = Op->Common.Value.String;
-        ObjDesc->String.Length = (UINT32) ACPI_STRLEN (Op->Common.Value.String);
+        ObjDesc->String.Length = (UINT32) strlen (Op->Common.Value.String);
 
         /*
          * The string is contained in the ACPI table, don't ever try
index fadc7c5..15c54fb 100644 (file)
@@ -605,7 +605,7 @@ AcpiDsCreateOperand (
 
                     ObjDesc = AcpiUtCreateStringObject ((ACPI_SIZE) NameLength);
 
-                    ACPI_STRNCPY (ObjDesc->String.Pointer, NameString, NameLength);
+                    strncpy (ObjDesc->String.Pointer, NameString, NameLength);
                     Status = AE_OK;
                 }
                 else
index ab2d80d..37b7b39 100644 (file)
@@ -325,9 +325,18 @@ AcpiDsLoad1BeginOp (
         if ((WalkState->Opcode != AML_SCOPE_OP) &&
             (!(WalkState->ParseFlags & ACPI_PARSE_DEFERRED_OP)))
         {
-            Flags |= ACPI_NS_ERROR_IF_FOUND;
-            ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "[%s] Cannot already exist\n",
-                    AcpiUtGetTypeName (ObjectType)));
+            if (WalkState->NamespaceOverride)
+            {
+                Flags |= ACPI_NS_OVERRIDE_IF_FOUND;
+                ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "[%s] Override allowed\n",
+                        AcpiUtGetTypeName (ObjectType)));
+            }
+            else
+            {
+                Flags |= ACPI_NS_ERROR_IF_FOUND;
+                ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "[%s] Cannot already exist\n",
+                        AcpiUtGetTypeName (ObjectType)));
+            }
         }
         else
         {
index 4e635ce..2ce57f9 100644 (file)
@@ -104,6 +104,7 @@ AcpiEvUpdateGpeEnableMask (
     {
         ACPI_SET_BIT (GpeRegisterInfo->EnableForRun, (UINT8) RegisterBit);
     }
+    GpeRegisterInfo->EnableMask = GpeRegisterInfo->EnableForRun;
 
     return_ACPI_STATUS (AE_OK);
 }
@@ -141,7 +142,7 @@ AcpiEvEnableGpe (
 
     /* Enable the requested GPE */
 
-    Status = AcpiHwLowSetGpe (GpeEventInfo, ACPI_GPE_ENABLE_SAVE);
+    Status = AcpiHwLowSetGpe (GpeEventInfo, ACPI_GPE_ENABLE);
     return_ACPI_STATUS (Status);
 }
 
@@ -231,7 +232,7 @@ AcpiEvRemoveGpeReference (
         Status = AcpiEvUpdateGpeEnableMask (GpeEventInfo);
         if (ACPI_SUCCESS (Status))
         {
-            Status = AcpiHwLowSetGpe (GpeEventInfo, ACPI_GPE_DISABLE_SAVE);
+            Status = AcpiHwLowSetGpe (GpeEventInfo, ACPI_GPE_DISABLE);
         }
 
         if (ACPI_FAILURE (Status))
index 1943d23..d23a345 100644 (file)
@@ -395,7 +395,7 @@ AcpiEvMatchGpeMethod (
 
     /* 4) The last two characters of the name are the hex GPE Number */
 
-    GpeNumber = ACPI_STRTOUL (&Name[2], NULL, 16);
+    GpeNumber = strtoul (&Name[2], NULL, 16);
     if (GpeNumber == ACPI_UINT32_MAX)
     {
         /* Conversion failed; invalid method, just ignore it */
index aa233b7..85389dd 100644 (file)
@@ -515,7 +515,7 @@ AcpiExLoadOp (
             return_ACPI_STATUS (AE_NO_MEMORY);
         }
 
-        ACPI_MEMCPY (Table, TableHeader, Length);
+        memcpy (Table, TableHeader, Length);
         break;
 
     default:
index e0ef653..b8f032c 100644 (file)
@@ -251,7 +251,7 @@ AcpiExConvertToBuffer (
         /* Copy the integer to the buffer, LSB first */
 
         NewBuf = ReturnDesc->Buffer.Pointer;
-        ACPI_MEMCPY (NewBuf,
+        memcpy (NewBuf,
                         &ObjDesc->Integer.Value,
                         AcpiGbl_IntegerByteWidth);
         break;
@@ -276,7 +276,7 @@ AcpiExConvertToBuffer (
         /* Copy the string to the buffer */
 
         NewBuf = ReturnDesc->Buffer.Pointer;
-        ACPI_STRNCPY ((char *) NewBuf, (char *) ObjDesc->String.Pointer,
+        strncpy ((char *) NewBuf, (char *) ObjDesc->String.Pointer,
             ObjDesc->String.Length);
         break;
 
index dd41f93..6ca866c 100644 (file)
@@ -81,6 +81,8 @@ AcpiExDoDebugObject (
 {
     UINT32                  i;
     UINT32                  Timer;
+    ACPI_OPERAND_OBJECT     *ObjectDesc;
+    UINT32                  Value;
 
 
     ACPI_FUNCTION_TRACE_PTR (ExDoDebugObject, SourceDesc);
@@ -267,8 +269,37 @@ AcpiExDoDebugObject (
             }
             else
             {
-                AcpiExDoDebugObject (SourceDesc->Reference.Object,
-                    Level+4, 0);
+                ObjectDesc = SourceDesc->Reference.Object;
+                Value = SourceDesc->Reference.Value;
+
+                switch (ObjectDesc->Common.Type)
+                {
+                case ACPI_TYPE_BUFFER:
+
+                    AcpiOsPrintf ("Buffer[%u] = 0x%2.2X\n",
+                        Value, *SourceDesc->Reference.IndexPointer);
+                    break;
+
+                case ACPI_TYPE_STRING:
+
+                    AcpiOsPrintf ("String[%u] = \"%c\" (0x%2.2X)\n",
+                        Value, *SourceDesc->Reference.IndexPointer,
+                        *SourceDesc->Reference.IndexPointer);
+                    break;
+
+                case ACPI_TYPE_PACKAGE:
+
+                    AcpiOsPrintf ("Package[%u] = ", Value);
+                    AcpiExDoDebugObject (*SourceDesc->Reference.Where,
+                        Level+4, 0);
+                    break;
+
+                default:
+
+                    AcpiOsPrintf ("Unknown Reference object type %X\n",
+                        ObjectDesc->Common.Type);
+                    break;
+                }
             }
         }
         break;
index c76a1a4..299a1a0 100644 (file)
@@ -238,7 +238,7 @@ static ACPI_EXDUMP_INFO     AcpiExDumpIndexField[5] =
     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (IndexField.DataObj),           "Data Object"}
 };
 
-static ACPI_EXDUMP_INFO     AcpiExDumpReference[8] =
+static ACPI_EXDUMP_INFO     AcpiExDumpReference[9] =
 {
     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpReference),       NULL},
     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Reference.Class),              "Class"},
@@ -247,6 +247,7 @@ static ACPI_EXDUMP_INFO     AcpiExDumpReference[8] =
     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Reference.Object),             "Object Desc"},
     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Reference.Node),               "Node"},
     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Reference.Where),              "Where"},
+    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Reference.IndexPointer),       "Index Pointer"},
     {ACPI_EXD_REFERENCE,0,                                              NULL}
 };
 
@@ -1053,16 +1054,18 @@ AcpiExDumpReferenceObj (
     {
         if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_OPERAND)
         {
-            AcpiOsPrintf (" Target: %p", ObjDesc->Reference.Object);
+            AcpiOsPrintf ("%22s %p", "Target :",
+                ObjDesc->Reference.Object);
             if (ObjDesc->Reference.Class == ACPI_REFCLASS_TABLE)
             {
-                AcpiOsPrintf (" Table Index: %X\n", ObjDesc->Reference.Value);
+                AcpiOsPrintf (" Table Index: %X\n",
+                    ObjDesc->Reference.Value);
             }
             else
             {
-                AcpiOsPrintf (" Target: %p [%s]\n", ObjDesc->Reference.Object,
+                AcpiOsPrintf (" [%s]\n",
                     AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *)
-                        ObjDesc->Reference.Object)->Common.Type));
+                    ObjDesc->Reference.Object)->Common.Type));
             }
         }
         else
index 9407fa7..d0ebcf0 100644 (file)
@@ -460,7 +460,7 @@ AcpiExWriteDataToField (
         }
 
         Buffer = BufferDesc->Buffer.Pointer;
-        ACPI_MEMCPY (Buffer, SourceDesc->Buffer.Pointer, Length);
+        memcpy (Buffer, SourceDesc->Buffer.Pointer, Length);
 
         /* Lock entire transaction if requested */
 
index 7e81d42..5c95223 100644 (file)
@@ -456,7 +456,7 @@ AcpiExFieldDatumIo (
              * Copy the data from the source buffer.
              * Length is the field width in bytes.
              */
-            ACPI_MEMCPY (Value,
+            memcpy (Value,
                 (ObjDesc->BufferField.BufferObj)->Buffer.Pointer +
                     ObjDesc->BufferField.BaseByteOffset +
                     FieldDatumByteOffset,
@@ -468,7 +468,7 @@ AcpiExFieldDatumIo (
              * Copy the data to the target buffer.
              * Length is the field width in bytes.
              */
-            ACPI_MEMCPY ((ObjDesc->BufferField.BufferObj)->Buffer.Pointer +
+            memcpy ((ObjDesc->BufferField.BufferObj)->Buffer.Pointer +
                 ObjDesc->BufferField.BaseByteOffset +
                 FieldDatumByteOffset,
                 Value, ObjDesc->CommonField.AccessByteWidth);
@@ -748,7 +748,7 @@ AcpiExExtractFromField (
         return_ACPI_STATUS (AE_BUFFER_OVERFLOW);
     }
 
-    ACPI_MEMSET (Buffer, 0, BufferLength);
+    memset (Buffer, 0, BufferLength);
     AccessBitWidth = ACPI_MUL_8 (ObjDesc->CommonField.AccessByteWidth);
 
     /* Handle the simple case here */
@@ -765,7 +765,7 @@ AcpiExExtractFromField (
             /* Use RawDatum (UINT64) to handle buffers < 64 bits */
 
             Status = AcpiExFieldDatumIo (ObjDesc, 0, &RawDatum, ACPI_READ);
-            ACPI_MEMCPY (Buffer, &RawDatum, BufferLength);
+            memcpy (Buffer, &RawDatum, BufferLength);
         }
 
         return_ACPI_STATUS (Status);
@@ -835,7 +835,7 @@ AcpiExExtractFromField (
 
         /* Write merged datum to target buffer */
 
-        ACPI_MEMCPY (((char *) Buffer) + BufferOffset, &MergedDatum,
+        memcpy (((char *) Buffer) + BufferOffset, &MergedDatum,
             ACPI_MIN(ObjDesc->CommonField.AccessByteWidth,
                 BufferLength - BufferOffset));
 
@@ -853,7 +853,7 @@ AcpiExExtractFromField (
 
     /* Write the last datum to the buffer */
 
-    ACPI_MEMCPY (((char *) Buffer) + BufferOffset, &MergedDatum,
+    memcpy (((char *) Buffer) + BufferOffset, &MergedDatum,
         ACPI_MIN(ObjDesc->CommonField.AccessByteWidth,
             BufferLength - BufferOffset));
 
@@ -926,7 +926,7 @@ AcpiExInsertIntoField (
          * at Byte zero. All unused (upper) bytes of the
          * buffer will be 0.
          */
-        ACPI_MEMCPY ((char *) NewBuffer, (char *) Buffer, BufferLength);
+        memcpy ((char *) NewBuffer, (char *) Buffer, BufferLength);
         Buffer = NewBuffer;
         BufferLength = RequiredLength;
     }
@@ -969,7 +969,7 @@ AcpiExInsertIntoField (
 
     /* Get initial Datum from the input buffer */
 
-    ACPI_MEMCPY (&RawDatum, Buffer,
+    memcpy (&RawDatum, Buffer,
         ACPI_MIN(ObjDesc->CommonField.AccessByteWidth,
             BufferLength - BufferOffset));
 
@@ -1021,7 +1021,7 @@ AcpiExInsertIntoField (
         /* Get the next input datum from the buffer */
 
         BufferOffset += ObjDesc->CommonField.AccessByteWidth;
-        ACPI_MEMCPY (&RawDatum, ((char *) Buffer) + BufferOffset,
+        memcpy (&RawDatum, ((char *) Buffer) + BufferOffset,
             ACPI_MIN(ObjDesc->CommonField.AccessByteWidth,
                  BufferLength - BufferOffset));
 
index 49fad87..2a7b620 100644 (file)
@@ -225,8 +225,8 @@ AcpiExConcatTemplate (
      * EndTag descriptor is copied from Operand1.
      */
     NewBuf = ReturnDesc->Buffer.Pointer;
-    ACPI_MEMCPY (NewBuf, Operand0->Buffer.Pointer, Length0);
-    ACPI_MEMCPY (NewBuf + Length0, Operand1->Buffer.Pointer, Length1);
+    memcpy (NewBuf, Operand0->Buffer.Pointer, Length0);
+    memcpy (NewBuf + Length0, Operand1->Buffer.Pointer, Length1);
 
     /* Insert EndTag and set the checksum to zero, means "ignore checksum" */
 
@@ -340,12 +340,12 @@ AcpiExDoConcatenate (
 
         /* Copy the first integer, LSB first */
 
-        ACPI_MEMCPY (NewBuf, &Operand0->Integer.Value,
+        memcpy (NewBuf, &Operand0->Integer.Value,
                         AcpiGbl_IntegerByteWidth);
 
         /* Copy the second integer (LSB first) after the first */
 
-        ACPI_MEMCPY (NewBuf + AcpiGbl_IntegerByteWidth,
+        memcpy (NewBuf + AcpiGbl_IntegerByteWidth,
                         &LocalOperand1->Integer.Value,
                         AcpiGbl_IntegerByteWidth);
         break;
@@ -367,8 +367,8 @@ AcpiExDoConcatenate (
 
         /* Concatenate the strings */
 
-        ACPI_STRCPY (NewBuf, Operand0->String.Pointer);
-        ACPI_STRCPY (NewBuf + Operand0->String.Length,
+        strcpy (NewBuf, Operand0->String.Pointer);
+        strcpy (NewBuf + Operand0->String.Length,
                         LocalOperand1->String.Pointer);
         break;
 
@@ -389,9 +389,9 @@ AcpiExDoConcatenate (
 
         /* Concatenate the buffers */
 
-        ACPI_MEMCPY (NewBuf, Operand0->Buffer.Pointer,
+        memcpy (NewBuf, Operand0->Buffer.Pointer,
                         Operand0->Buffer.Length);
-        ACPI_MEMCPY (NewBuf + Operand0->Buffer.Length,
+        memcpy (NewBuf + Operand0->Buffer.Length,
                         LocalOperand1->Buffer.Pointer,
                         LocalOperand1->Buffer.Length);
         break;
@@ -712,7 +712,7 @@ AcpiExDoLogicalOp (
 
         /* Lexicographic compare: compare the data bytes */
 
-        Compare = ACPI_MEMCMP (Operand0->Buffer.Pointer,
+        Compare = memcmp (Operand0->Buffer.Pointer,
                     LocalOperand1->Buffer.Pointer,
                     (Length0 > Length1) ? Length1 : Length0);
 
index dbadb5a..61a5bbd 100644 (file)
@@ -221,7 +221,7 @@ AcpiExNameSegment (
 
         if (NameString)
         {
-            ACPI_STRCAT (NameString, CharBuf);
+            strcat (NameString, CharBuf);
             ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
                 "Appended to - %s\n", NameString));
         }
index 419aa6d..a5b1513 100644 (file)
@@ -368,7 +368,7 @@ AcpiExOpcode_2A_1T_1R (
          * Copy the raw buffer data with no transform.
          * (NULL terminated already)
          */
-        ACPI_MEMCPY (ReturnDesc->String.Pointer,
+        memcpy (ReturnDesc->String.Pointer,
             Operand[0]->Buffer.Pointer, Length);
         break;
 
@@ -412,6 +412,8 @@ AcpiExOpcode_2A_1T_1R (
             }
 
             ReturnDesc->Reference.TargetType = ACPI_TYPE_BUFFER_FIELD;
+            ReturnDesc->Reference.IndexPointer =
+                &(Operand[0]->Buffer.Pointer [Index]);
             break;
 
         case ACPI_TYPE_BUFFER:
@@ -423,6 +425,8 @@ AcpiExOpcode_2A_1T_1R (
             }
 
             ReturnDesc->Reference.TargetType = ACPI_TYPE_BUFFER_FIELD;
+            ReturnDesc->Reference.IndexPointer =
+                &(Operand[0]->Buffer.Pointer [Index]);
             break;
 
         case ACPI_TYPE_PACKAGE:
@@ -434,7 +438,8 @@ AcpiExOpcode_2A_1T_1R (
             }
 
             ReturnDesc->Reference.TargetType = ACPI_TYPE_PACKAGE;
-            ReturnDesc->Reference.Where = &Operand[0]->Package.Elements [Index];
+            ReturnDesc->Reference.Where =
+                &Operand[0]->Package.Elements [Index];
             break;
 
         default:
index 5f83f10..aa42edb 100644 (file)
@@ -261,7 +261,7 @@ AcpiExOpcode_3A_1T_1R (
         {
             /* We have a buffer, copy the portion requested */
 
-            ACPI_MEMCPY (Buffer, Operand[0]->String.Pointer + Index,
+            memcpy (Buffer, Operand[0]->String.Pointer + Index,
                          Length);
         }
 
index 6fcfa0f..6aaf69c 100644 (file)
@@ -558,13 +558,13 @@ AcpiExDataTableSpaceHandler (
     {
     case ACPI_READ:
 
-        ACPI_MEMCPY (ACPI_CAST_PTR (char, Value), ACPI_PHYSADDR_TO_PTR (Address),
+        memcpy (ACPI_CAST_PTR (char, Value), ACPI_PHYSADDR_TO_PTR (Address),
             ACPI_DIV_8 (BitWidth));
         break;
 
     case ACPI_WRITE:
 
-        ACPI_MEMCPY (ACPI_PHYSADDR_TO_PTR (Address), ACPI_CAST_PTR (char, Value),
+        memcpy (ACPI_PHYSADDR_TO_PTR (Address), ACPI_CAST_PTR (char, Value),
             ACPI_DIV_8 (BitWidth));
         break;
 
index 24db5ce..87791c0 100644 (file)
@@ -109,8 +109,8 @@ AcpiExStoreBufferToBuffer (
     {
         /* Clear existing buffer and copy in the new one */
 
-        ACPI_MEMSET (TargetDesc->Buffer.Pointer, 0, TargetDesc->Buffer.Length);
-        ACPI_MEMCPY (TargetDesc->Buffer.Pointer, Buffer, Length);
+        memset (TargetDesc->Buffer.Pointer, 0, TargetDesc->Buffer.Length);
+        memcpy (TargetDesc->Buffer.Pointer, Buffer, Length);
 
 #ifdef ACPI_OBSOLETE_BEHAVIOR
         /*
@@ -139,7 +139,7 @@ AcpiExStoreBufferToBuffer (
     {
         /* Truncate the source, copy only what will fit */
 
-        ACPI_MEMCPY (TargetDesc->Buffer.Pointer, Buffer,
+        memcpy (TargetDesc->Buffer.Pointer, Buffer,
             TargetDesc->Buffer.Length);
 
         ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
@@ -203,9 +203,9 @@ AcpiExStoreStringToString (
          * String will fit in existing non-static buffer.
          * Clear old string and copy in the new one
          */
-        ACPI_MEMSET (TargetDesc->String.Pointer, 0,
+        memset (TargetDesc->String.Pointer, 0,
             (ACPI_SIZE) TargetDesc->String.Length + 1);
-        ACPI_MEMCPY (TargetDesc->String.Pointer, Buffer, Length);
+        memcpy (TargetDesc->String.Pointer, Buffer, Length);
     }
     else
     {
@@ -229,7 +229,7 @@ AcpiExStoreStringToString (
         }
 
         TargetDesc->Common.Flags &= ~AOPOBJ_STATIC_POINTER;
-        ACPI_MEMCPY (TargetDesc->String.Pointer, Buffer, Length);
+        memcpy (TargetDesc->String.Pointer, Buffer, Length);
     }
 
     /* Set the new target length */
index 25676a1..a4cc73a 100644 (file)
@@ -431,6 +431,43 @@ AcpiExIntegerToString (
 }
 
 
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiExPciClsToString
+ *
+ * PARAMETERS:  OutString       - Where to put the converted string (7 bytes)
+ * PARAMETERS:  ClassCode       - PCI class code to be converted (3 bytes)
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Convert 3-bytes PCI class code to string representation.
+ *              Return buffer must be large enough to hold the string. The
+ *              string returned is always exactly of length
+ *              ACPI_PCICLS_STRING_SIZE (includes null terminator).
+ *
+ ******************************************************************************/
+
+void
+AcpiExPciClsToString (
+    char                    *OutString,
+    UINT8                   ClassCode[3])
+{
+
+    ACPI_FUNCTION_ENTRY ();
+
+
+    /* All 3 bytes are hexadecimal */
+
+    OutString[0] = AcpiUtHexToAsciiChar ((UINT64) ClassCode[0], 4);
+    OutString[1] = AcpiUtHexToAsciiChar ((UINT64) ClassCode[0], 0);
+    OutString[2] = AcpiUtHexToAsciiChar ((UINT64) ClassCode[1], 4);
+    OutString[3] = AcpiUtHexToAsciiChar ((UINT64) ClassCode[1], 0);
+    OutString[4] = AcpiUtHexToAsciiChar ((UINT64) ClassCode[2], 4);
+    OutString[5] = AcpiUtHexToAsciiChar ((UINT64) ClassCode[2], 0);
+    OutString[6] = 0;
+}
+
+
 /*******************************************************************************
  *
  * FUNCTION:    AcpiIsValidSpaceId
index 2e616d4..1458f4f 100644 (file)
@@ -97,6 +97,8 @@ AcpiHwGetGpeRegisterBit (
  * RETURN:      Status
  *
  * DESCRIPTION: Enable or disable a single GPE in the parent enable register.
+ *              The EnableMask field of the involved GPE register must be
+ *              updated by the caller if necessary.
  *
  ******************************************************************************/
 
@@ -133,7 +135,7 @@ AcpiHwLowSetGpe (
     /* Set or clear just the bit that corresponds to this GPE */
 
     RegisterBit = AcpiHwGetGpeRegisterBit (GpeEventInfo);
-    switch (Action & ~ACPI_GPE_SAVE_MASK)
+    switch (Action)
     {
     case ACPI_GPE_CONDITIONAL_ENABLE:
 
@@ -165,10 +167,6 @@ AcpiHwLowSetGpe (
     /* Write the updated enable mask */
 
     Status = AcpiHwWrite (EnableMask, &GpeRegisterInfo->EnableAddress);
-    if (ACPI_SUCCESS (Status) && (Action & ACPI_GPE_SAVE_MASK))
-    {
-        GpeRegisterInfo->EnableMask = (UINT8) EnableMask;
-    }
     return (Status);
 }
 
@@ -334,11 +332,8 @@ AcpiHwGpeEnableWrite (
     ACPI_STATUS             Status;
 
 
+    GpeRegisterInfo->EnableMask = EnableMask;
     Status = AcpiHwWrite (EnableMask, &GpeRegisterInfo->EnableAddress);
-    if (ACPI_SUCCESS (Status))
-    {
-        GpeRegisterInfo->EnableMask = EnableMask;
-    }
 
     return (Status);
 }
index 5576ede..1642aa3 100644 (file)
 
 /* Local prototypes */
 
+#if (!ACPI_REDUCED_HARDWARE)
+static ACPI_STATUS
+AcpiHwSetFirmwareWakingVector (
+    ACPI_TABLE_FACS         *Facs,
+    ACPI_PHYSICAL_ADDRESS   PhysicalAddress,
+    ACPI_PHYSICAL_ADDRESS   PhysicalAddress64);
+#endif
+
 static ACPI_STATUS
 AcpiHwSleepDispatch (
     UINT8                   SleepState,
@@ -77,29 +85,33 @@ static ACPI_SLEEP_FUNCTIONS         AcpiSleepDispatch[] =
 /*
  * These functions are removed for the ACPI_REDUCED_HARDWARE case:
  *      AcpiSetFirmwareWakingVector
- *      AcpiSetFirmwareWakingVector64
  *      AcpiEnterSleepStateS4bios
  */
 
 #if (!ACPI_REDUCED_HARDWARE)
 /*******************************************************************************
  *
- * FUNCTION:    AcpiSetFirmwareWakingVector
+ * FUNCTION:    AcpiHwSetFirmwareWakingVector
  *
- * PARAMETERS:  PhysicalAddress     - 32-bit physical address of ACPI real mode
- *                                    entry point.
+ * PARAMETERS:  Facs                - Pointer to FACS table
+ *              PhysicalAddress     - 32-bit physical address of ACPI real mode
+ *                                    entry point
+ *              PhysicalAddress64   - 64-bit physical address of ACPI protected
+ *                                    entry point
  *
  * RETURN:      Status
  *
- * DESCRIPTION: Sets the 32-bit FirmwareWakingVector field of the FACS
+ * DESCRIPTION: Sets the FirmwareWakingVector fields of the FACS
  *
  ******************************************************************************/
 
-ACPI_STATUS
-AcpiSetFirmwareWakingVector (
-    UINT32                  PhysicalAddress)
+static ACPI_STATUS
+AcpiHwSetFirmwareWakingVector (
+    ACPI_TABLE_FACS         *Facs,
+    ACPI_PHYSICAL_ADDRESS   PhysicalAddress,
+    ACPI_PHYSICAL_ADDRESS   PhysicalAddress64)
 {
-    ACPI_FUNCTION_TRACE (AcpiSetFirmwareWakingVector);
+    ACPI_FUNCTION_TRACE (AcpiHwSetFirmwareWakingVector);
 
 
     /*
@@ -112,60 +124,73 @@ AcpiSetFirmwareWakingVector (
 
     /* Set the 32-bit vector */
 
-    AcpiGbl_FACS->FirmwareWakingVector = PhysicalAddress;
+    Facs->FirmwareWakingVector = (UINT32) PhysicalAddress;
 
-    /* Clear the 64-bit vector if it exists */
-
-    if ((AcpiGbl_FACS->Length > 32) && (AcpiGbl_FACS->Version >= 1))
+    if (Facs->Length > 32)
     {
-        AcpiGbl_FACS->XFirmwareWakingVector = 0;
+        if (Facs->Version >= 1)
+        {
+            /* Set the 64-bit vector */
+
+            Facs->XFirmwareWakingVector = PhysicalAddress64;
+        }
+        else
+        {
+            /* Clear the 64-bit vector if it exists */
+
+            Facs->XFirmwareWakingVector = 0;
+        }
     }
 
     return_ACPI_STATUS (AE_OK);
 }
 
-ACPI_EXPORT_SYMBOL (AcpiSetFirmwareWakingVector)
-
 
-#if ACPI_MACHINE_WIDTH == 64
 /*******************************************************************************
  *
- * FUNCTION:    AcpiSetFirmwareWakingVector64
+ * FUNCTION:    AcpiSetFirmwareWakingVector
  *
- * PARAMETERS:  PhysicalAddress     - 64-bit physical address of ACPI protected
- *                                    mode entry point.
+ * PARAMETERS:  PhysicalAddress     - 32-bit physical address of ACPI real mode
+ *                                    entry point
+ *              PhysicalAddress64   - 64-bit physical address of ACPI protected
+ *                                    entry point
  *
  * RETURN:      Status
  *
- * DESCRIPTION: Sets the 64-bit X_FirmwareWakingVector field of the FACS, if
- *              it exists in the table. This function is intended for use with
- *              64-bit host operating systems.
+ * DESCRIPTION: Sets the FirmwareWakingVector fields of the FACS
  *
  ******************************************************************************/
 
 ACPI_STATUS
-AcpiSetFirmwareWakingVector64 (
-    UINT64                  PhysicalAddress)
+AcpiSetFirmwareWakingVector (
+    ACPI_PHYSICAL_ADDRESS   PhysicalAddress,
+    ACPI_PHYSICAL_ADDRESS   PhysicalAddress64)
 {
-    ACPI_FUNCTION_TRACE (AcpiSetFirmwareWakingVector64);
 
+    ACPI_FUNCTION_TRACE (AcpiSetFirmwareWakingVector);
 
-    /* Determine if the 64-bit vector actually exists */
+    /* If Hardware Reduced flag is set, there is no FACS */
 
-    if ((AcpiGbl_FACS->Length <= 32) || (AcpiGbl_FACS->Version < 1))
+    if (AcpiGbl_ReducedHardware)
     {
-        return_ACPI_STATUS (AE_NOT_EXIST);
+        return_ACPI_STATUS (AE_OK);
     }
 
-    /* Clear 32-bit vector, set the 64-bit X_ vector */
+    if (AcpiGbl_Facs32)
+    {
+        (void) AcpiHwSetFirmwareWakingVector (AcpiGbl_Facs32,
+                    PhysicalAddress, PhysicalAddress64);
+    }
+    if (AcpiGbl_Facs64)
+    {
+        (void) AcpiHwSetFirmwareWakingVector (AcpiGbl_Facs64,
+                    PhysicalAddress, PhysicalAddress64);
+    }
 
-    AcpiGbl_FACS->FirmwareWakingVector = 0;
-    AcpiGbl_FACS->XFirmwareWakingVector = PhysicalAddress;
     return_ACPI_STATUS (AE_OK);
 }
 
-ACPI_EXPORT_SYMBOL (AcpiSetFirmwareWakingVector64)
-#endif
+ACPI_EXPORT_SYMBOL (AcpiSetFirmwareWakingVector)
 
 
 /*******************************************************************************
index 9729cd6..615257a 100644 (file)
@@ -111,7 +111,7 @@ AcpiNsRootInitialize (
     {
         /* _OSI is optional for now, will be permanent later */
 
-        if (!ACPI_STRCMP (InitVal->Name, "_OSI") && !AcpiGbl_CreateOsiMethod)
+        if (!strcmp (InitVal->Name, "_OSI") && !AcpiGbl_CreateOsiMethod)
         {
             continue;
         }
@@ -191,7 +191,7 @@ AcpiNsRootInitialize (
 
                 /* Build an object around the static string */
 
-                ObjDesc->String.Length = (UINT32) ACPI_STRLEN (Val);
+                ObjDesc->String.Length = (UINT32) strlen (Val);
                 ObjDesc->String.Pointer = Val;
                 ObjDesc->Common.Flags |= AOPOBJ_STATIC_POINTER;
                 break;
@@ -212,7 +212,7 @@ AcpiNsRootInitialize (
 
                 /* Special case for ACPI Global Lock */
 
-                if (ACPI_STRCMP (InitVal->Name, "_GL_") == 0)
+                if (strcmp (InitVal->Name, "_GL_") == 0)
                 {
                     AcpiGbl_GlobalLockMutex = ObjDesc;
 
@@ -319,7 +319,9 @@ AcpiNsLookup (
         return_ACPI_STATUS (AE_BAD_PARAMETER);
     }
 
-    LocalFlags = Flags & ~(ACPI_NS_ERROR_IF_FOUND | ACPI_NS_SEARCH_PARENT);
+    LocalFlags = Flags &
+        ~(ACPI_NS_ERROR_IF_FOUND | ACPI_NS_OVERRIDE_IF_FOUND |
+          ACPI_NS_SEARCH_PARENT);
     *ReturnNode = ACPI_ENTRY_NOT_FOUND;
     AcpiGbl_NsLookupCount++;
 
@@ -571,6 +573,13 @@ AcpiNsLookup (
             {
                 LocalFlags |= ACPI_NS_ERROR_IF_FOUND;
             }
+
+            /* Set override flag according to caller */
+
+            if (Flags & ACPI_NS_OVERRIDE_IF_FOUND)
+            {
+                LocalFlags |= ACPI_NS_OVERRIDE_IF_FOUND;
+            }
         }
 
         /* Extract one ACPI name from the front of the pathname */
index 6fa67fa..c3ca5b8 100644 (file)
@@ -202,7 +202,7 @@ AcpiNsConvertToString (
          * Copy the raw buffer data with no transform. String is already NULL
          * terminated at Length+1.
          */
-        ACPI_MEMCPY (NewObject->String.Pointer,
+        memcpy (NewObject->String.Pointer,
             OriginalObject->Buffer.Pointer, Length);
         break;
 
@@ -269,7 +269,7 @@ AcpiNsConvertToBuffer (
             return (AE_NO_MEMORY);
         }
 
-        ACPI_MEMCPY (NewObject->Buffer.Pointer,
+        memcpy (NewObject->Buffer.Pointer,
             OriginalObject->String.Pointer, OriginalObject->String.Length);
         break;
 
index bbaff7d..0e692ba 100644 (file)
@@ -122,7 +122,7 @@ AcpiNsPrintPathname (
     {
         for (i = 0; i < 4; i++)
         {
-            ACPI_IS_PRINT (Pathname[i]) ?
+            isprint ((int) Pathname[i]) ?
                 AcpiOsPrintf ("%c", Pathname[i]) :
                 AcpiOsPrintf ("?");
         }
index e5a0eb8..6ab6a93 100644 (file)
@@ -63,15 +63,14 @@ AcpiNsExecModuleCode (
  *
  * FUNCTION:    AcpiNsEvaluate
  *
- * PARAMETERS:  Info            - Evaluation info block, contains:
+ * PARAMETERS:  Info            - Evaluation info block, contains these fields
+ *                                and more:
  *                  PrefixNode      - Prefix or Method/Object Node to execute
  *                  RelativePath    - Name of method to execute, If NULL, the
  *                                    Node is the object to execute
  *                  Parameters      - List of parameters to pass to the method,
  *                                    terminated by NULL. Params itself may be
  *                                    NULL if no parameters are being passed.
- *                  ReturnObject    - Where to put method's return value (if
- *                                    any). If NULL, no value is returned.
  *                  ParameterType   - Type of Parameter list
  *                  ReturnObject    - Where to put method's return value (if
  *                                    any). If NULL, no value is returned.
@@ -463,7 +462,7 @@ AcpiNsExecModuleCode (
 
     /* Initialize the evaluation information block */
 
-    ACPI_MEMSET (Info, 0, sizeof (ACPI_EVALUATE_INFO));
+    memset (Info, 0, sizeof (ACPI_EVALUATE_INFO));
     Info->PrefixNode = ParentNode;
 
     /*
index d68ee20..c80d2c8 100644 (file)
@@ -105,7 +105,7 @@ AcpiNsInitializeObjects (
 
     /* Set all init info to zero */
 
-    ACPI_MEMSET (&Info, 0, sizeof (ACPI_INIT_WALK_INFO));
+    memset (&Info, 0, sizeof (ACPI_INIT_WALK_INFO));
 
     /* Walk entire namespace from the supplied root */
 
@@ -614,7 +614,7 @@ AcpiNsInitOneDevice (
     ACPI_DEBUG_EXEC (AcpiUtDisplayInitPathname (
         ACPI_TYPE_METHOD, DeviceNode, METHOD_NAME__INI));
 
-    ACPI_MEMSET (Info, 0, sizeof (ACPI_EVALUATE_INFO));
+    memset (Info, 0, sizeof (ACPI_EVALUATE_INFO));
     Info->PrefixNode = DeviceNode;
     Info->RelativePathname = METHOD_NAME__INI;
     Info->Parameters = NULL;
index fec9c51..bfc5615 100644 (file)
@@ -129,6 +129,14 @@ AcpiNsOneCompleteParse (
                     AmlStart, AmlLength, NULL, (UINT8) PassNumber);
     }
 
+    /* Found OSDT table, enable the namespace override feature */
+
+    if (ACPI_COMPARE_NAME(Table->Signature, ACPI_SIG_OSDT) &&
+        PassNumber == ACPI_IMODE_LOAD_PASS1)
+    {
+        WalkState->NamespaceOverride = TRUE;
+    }
+
     if (ACPI_FAILURE (Status))
     {
         AcpiDsDeleteWalkState (WalkState);
index 60b895b..f68f8bc 100644 (file)
@@ -637,7 +637,7 @@ AcpiNsRepair_HID (
      */
     for (Dest = NewString->String.Pointer; *Source; Dest++, Source++)
     {
-        *Dest = (char) ACPI_TOUPPER (*Source);
+        *Dest = (char) toupper ((int) *Source);
     }
 
     AcpiUtRemoveReference (ReturnObject);
index 46794b6..bdd4e86 100644 (file)
@@ -338,10 +338,42 @@ AcpiNsSearchAndEnter (
          * If we found it AND the request specifies that a find is an error,
          * return the error
          */
-        if ((Status == AE_OK) &&
-            (Flags & ACPI_NS_ERROR_IF_FOUND))
+        if (Status == AE_OK)
         {
-            Status = AE_ALREADY_EXISTS;
+            /* The node was found in the namespace */
+
+            /*
+             * If the namespace override feature is enabled for this node,
+             * delete any existing attached sub-object and make the node
+             * look like a new node that is owned by the override table.
+             */
+            if (Flags & ACPI_NS_OVERRIDE_IF_FOUND)
+            {
+                ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
+                    "Namespace override: %4.4s pass %u type %X Owner %X\n",
+                    ACPI_CAST_PTR(char, &TargetName), InterpreterMode,
+                    (*ReturnNode)->Type, WalkState->OwnerId));
+
+                AcpiNsDeleteChildren (*ReturnNode);
+                if (AcpiGbl_RuntimeNamespaceOverride)
+                {
+                    AcpiUtRemoveReference ((*ReturnNode)->Object);
+                    (*ReturnNode)->Object = NULL;
+                    (*ReturnNode)->OwnerId = WalkState->OwnerId;
+                }
+                else
+                {
+                    AcpiNsRemoveNode (*ReturnNode);
+                    *ReturnNode = ACPI_ENTRY_NOT_FOUND;
+                }
+            }
+
+            /* Return an error if we don't expect to find the object */
+
+            else if (Flags & ACPI_NS_ERROR_IF_FOUND)
+            {
+                Status = AE_ALREADY_EXISTS;
+            }
         }
 
 #ifdef ACPI_ASL_COMPILER
index becdf33..5335810 100644 (file)
@@ -347,7 +347,7 @@ AcpiNsBuildInternalName (
             {
                 /* Convert the character to uppercase and save it */
 
-                Result[i] = (char) ACPI_TOUPPER ((int) *ExternalName);
+                Result[i] = (char) toupper ((int) *ExternalName);
                 ExternalName++;
             }
         }
index 547ed4d..1a867bd 100644 (file)
@@ -758,7 +758,7 @@ AcpiNsGetDeviceCallback (
             return (AE_CTRL_DEPTH);
         }
 
-        NoMatch = ACPI_STRCMP (Hid->String, Info->Hid);
+        NoMatch = strcmp (Hid->String, Info->Hid);
         ACPI_FREE (Hid);
 
         if (NoMatch)
@@ -782,7 +782,7 @@ AcpiNsGetDeviceCallback (
             Found = FALSE;
             for (i = 0; i < Cid->Count; i++)
             {
-                if (ACPI_STRCMP (Cid->Ids[i].String, Info->Hid) == 0)
+                if (strcmp (Cid->Ids[i].String, Info->Hid) == 0)
                 {
                     /* Found a matching CID */
 
index 3f6c74d..7f92201 100644 (file)
@@ -126,7 +126,7 @@ AcpiGetHandle (
 
         /* Special case for root-only, since we can't search for it */
 
-        if (!ACPI_STRCMP (Pathname, ACPI_NS_ROOT_PATH))
+        if (!strcmp (Pathname, ACPI_NS_ROOT_PATH))
         {
             *RetHandle = ACPI_CAST_PTR (ACPI_HANDLE, AcpiGbl_RootNode);
             return (AE_OK);
@@ -271,7 +271,7 @@ AcpiNsCopyDeviceId (
 
     /* Copy actual string and return a pointer to the next string area */
 
-    ACPI_MEMCPY (StringArea, Source->String, Source->Length);
+    memcpy (StringArea, Source->String, Source->Length);
     return (StringArea + Source->Length);
 }
 
@@ -290,7 +290,7 @@ AcpiNsCopyDeviceId (
  *              control methods (Such as in the case of a device.)
  *
  * For Device and Processor objects, run the Device _HID, _UID, _CID, _SUB,
- * _STA, _ADR, _SxW, and _SxD methods.
+ * _CLS, _STA, _ADR, _SxW, and _SxD methods.
  *
  * Note: Allocates the return buffer, must be freed by the caller.
  *
@@ -307,11 +307,12 @@ AcpiGetObjectInfo (
     ACPI_PNP_DEVICE_ID      *Hid = NULL;
     ACPI_PNP_DEVICE_ID      *Uid = NULL;
     ACPI_PNP_DEVICE_ID      *Sub = NULL;
+    ACPI_PNP_DEVICE_ID      *Cls = NULL;
     char                    *NextIdString;
     ACPI_OBJECT_TYPE        Type;
     ACPI_NAME               Name;
     UINT8                   ParamCount= 0;
-    UINT                  Valid = 0;
+    UINT16                  Valid = 0;
     UINT32                  InfoSize;
     UINT32                  i;
     ACPI_STATUS             Status;
@@ -359,7 +360,7 @@ AcpiGetObjectInfo (
     {
         /*
          * Get extra info for ACPI Device/Processor objects only:
-         * Run the Device _HID, _UID, _SUB, and _CID methods.
+         * Run the Device _HID, _UID, _SUB, _CID, and _CLS methods.
          *
          * Note: none of these methods are required, so they may or may
          * not be present for this device. The Info->Valid bitfield is used
@@ -403,6 +404,15 @@ AcpiGetObjectInfo (
             InfoSize += (CidList->ListSize - sizeof (ACPI_PNP_DEVICE_ID_LIST));
             Valid |= ACPI_VALID_CID;
         }
+
+        /* Execute the Device._CLS method */
+
+        Status = AcpiUtExecute_CLS (Node, &Cls);
+        if (ACPI_SUCCESS (Status))
+        {
+            InfoSize += Cls->Length;
+            Valid |= ACPI_VALID_CLS;
+        }
     }
 
     /*
@@ -534,6 +544,12 @@ AcpiGetObjectInfo (
         }
     }
 
+    if (Cls)
+    {
+        NextIdString = AcpiNsCopyDeviceId (&Info->ClassCode,
+            Cls, NextIdString);
+    }
+
     /* Copy the fixed-length data */
 
     Info->InfoSize = InfoSize;
@@ -563,6 +579,10 @@ Cleanup:
     {
         ACPI_FREE (CidList);
     }
+    if (Cls)
+    {
+        ACPI_FREE (Cls);
+    }
     return (Status);
 }
 
@@ -684,7 +704,7 @@ AcpiInstallMethod (
 
     /* Copy the method AML to the local buffer */
 
-    ACPI_MEMCPY (AmlBuffer, AmlStart, AmlLength);
+    memcpy (AmlBuffer, AmlStart, AmlLength);
 
     /* Initialize the method object with the new method's information */
 
index e95d162..55bf2cc 100644 (file)
@@ -104,7 +104,7 @@ AcpiPsInitOp (
     Op->Common.DescriptorType = ACPI_DESC_TYPE_PARSER;
     Op->Common.AmlOpcode = Opcode;
 
-    ACPI_DISASM_ONLY_MEMBERS (ACPI_STRNCPY (Op->Common.AmlOpName,
+    ACPI_DISASM_ONLY_MEMBERS (strncpy (Op->Common.AmlOpName,
             (AcpiPsGetOpcodeInfo (Opcode))->Name,
                 sizeof (Op->Common.AmlOpName)));
 }
index 5b47e7e..551f59a 100644 (file)
@@ -374,12 +374,12 @@ AcpiRsCreatePciRoutingTable (
 
                 /* +1 to include null terminator */
 
-                UserPrt->Length += (UINT32) ACPI_STRLEN (UserPrt->Source) + 1;
+                UserPrt->Length += (UINT32) strlen (UserPrt->Source) + 1;
                 break;
 
             case ACPI_TYPE_STRING:
 
-                ACPI_STRCPY (UserPrt->Source, ObjDesc->String.Pointer);
+                strcpy (UserPrt->Source, ObjDesc->String.Pointer);
 
                 /*
                  * Add to the Length field the length of the string
index 82df562..83f50aa 100644 (file)
@@ -130,7 +130,7 @@ AcpiRsConvertAmlToResource (
             /*
              * Get the resource type and the initial (minimum) length
              */
-            ACPI_MEMSET (Resource, 0, INIT_RESOURCE_LENGTH (Info));
+            memset (Resource, 0, INIT_RESOURCE_LENGTH (Info));
             Resource->Type = INIT_RESOURCE_TYPE (Info);
             Resource->Length = INIT_RESOURCE_LENGTH (Info);
             break;
@@ -326,13 +326,13 @@ AcpiRsConvertAmlToResource (
 
         case ACPI_RSC_SET8:
 
-            ACPI_MEMSET (Destination, Info->AmlOffset, Info->Value);
+            memset (Destination, Info->AmlOffset, Info->Value);
             break;
 
         case ACPI_RSC_DATA8:
 
             Target = ACPI_ADD_PTR (char, Resource, Info->Value);
-            ACPI_MEMCPY (Destination, Source,  ACPI_GET16 (Target));
+            memcpy (Destination, Source,  ACPI_GET16 (Target));
             break;
 
         case ACPI_RSC_ADDRESS:
@@ -505,7 +505,7 @@ AcpiRsConvertResourceToAml (
         {
         case ACPI_RSC_INITSET:
 
-            ACPI_MEMSET (Aml, 0, INIT_RESOURCE_LENGTH (Info));
+            memset (Aml, 0, INIT_RESOURCE_LENGTH (Info));
             AmlLength = INIT_RESOURCE_LENGTH (Info);
             AcpiRsSetResourceHeader (INIT_RESOURCE_TYPE (Info), AmlLength, Aml);
             break;
index 6840794..a5517c6 100644 (file)
@@ -174,7 +174,7 @@ AcpiRsMoveData (
         case ACPI_RSC_MOVE_SERIAL_VEN:
         case ACPI_RSC_MOVE_SERIAL_RES:
 
-            ACPI_MEMCPY (Destination, Source, ItemCount);
+            memcpy (Destination, Source, ItemCount);
             return;
 
         /*
@@ -408,11 +408,11 @@ AcpiRsGetResourceSource (
          *
          * Zero the entire area of the buffer.
          */
-        TotalLength = (UINT32) ACPI_STRLEN (
+        TotalLength = (UINT32) strlen (
             ACPI_CAST_PTR (char, &AmlResourceSource[1])) + 1;
         TotalLength = (UINT32) ACPI_ROUND_UP_TO_NATIVE_WORD (TotalLength);
 
-        ACPI_MEMSET (ResourceSource->StringPtr, 0, TotalLength);
+        memset (ResourceSource->StringPtr, 0, TotalLength);
 
         /* Copy the ResourceSource string to the destination */
 
@@ -477,7 +477,7 @@ AcpiRsSetResourceSource (
 
         /* Copy the ResourceSource string */
 
-        ACPI_STRCPY (ACPI_CAST_PTR (char, &AmlResourceSource[1]),
+        strcpy (ACPI_CAST_PTR (char, &AmlResourceSource[1]),
             ResourceSource->StringPtr);
 
         /*
index cb64c1d..1008af0 100644 (file)
@@ -447,7 +447,7 @@ AcpiResourceToAddress64 (
 
         /* Simple copy for 64 bit source */
 
-        ACPI_MEMCPY (Out, &Resource->Data, sizeof (ACPI_RESOURCE_ADDRESS64));
+        memcpy (Out, &Resource->Data, sizeof (ACPI_RESOURCE_ADDRESS64));
         break;
 
     default:
@@ -558,7 +558,7 @@ AcpiRsMatchVendorResource (
      */
     if ((Vendor->ByteLength < (ACPI_UUID_LENGTH + 1)) ||
         (Vendor->UuidSubtype != Info->Uuid->Subtype)  ||
-        (ACPI_MEMCMP (Vendor->Uuid, Info->Uuid->Data, ACPI_UUID_LENGTH)))
+        (memcmp (Vendor->Uuid, Info->Uuid->Data, ACPI_UUID_LENGTH)))
     {
         return (AE_OK);
     }
@@ -574,7 +574,7 @@ AcpiRsMatchVendorResource (
 
     /* Found the correct resource, copy and return it */
 
-    ACPI_MEMCPY (Buffer->Pointer, Resource, Resource->Length);
+    memcpy (Buffer->Pointer, Resource, Resource->Length);
     Buffer->Length = Resource->Length;
 
     /* Found the desired descriptor, terminate resource walk */
index 5c1cfe4..5769a8e 100644 (file)
@@ -77,7 +77,7 @@ AcpiTbInitTableDescriptor (
      * Initialize the table descriptor. Set the pointer to NULL, since the
      * table is not fully mapped at this time.
      */
-    ACPI_MEMSET (TableDesc, 0, sizeof (ACPI_TABLE_DESC));
+    memset (TableDesc, 0, sizeof (ACPI_TABLE_DESC));
     TableDesc->Address = Address;
     TableDesc->Length = Table->Length;
     TableDesc->Flags = Flags;
@@ -511,7 +511,7 @@ AcpiTbResizeRootTableList (
 
     if (AcpiGbl_RootTableList.Tables)
     {
-        ACPI_MEMCPY (Tables, AcpiGbl_RootTableList.Tables,
+        memcpy (Tables, AcpiGbl_RootTableList.Tables,
             (ACPI_SIZE) TableCount * sizeof (ACPI_TABLE_DESC));
 
         if (AcpiGbl_RootTableList.Flags & ACPI_ROOT_ORIGIN_ALLOCATED)
index 6d57e80..871eb88 100644 (file)
@@ -382,8 +382,16 @@ AcpiTbParseFadt (
 
     if (!AcpiGbl_ReducedHardware)
     {
-        AcpiTbInstallFixedTable ((ACPI_PHYSICAL_ADDRESS) AcpiGbl_FADT.XFacs,
-            ACPI_SIG_FACS, ACPI_TABLE_INDEX_FACS);
+        if (AcpiGbl_FADT.Facs)
+        {
+            AcpiTbInstallFixedTable ((ACPI_PHYSICAL_ADDRESS) AcpiGbl_FADT.Facs,
+                ACPI_SIG_FACS, ACPI_TABLE_INDEX_FACS);
+        }
+        if (AcpiGbl_FADT.XFacs)
+        {
+            AcpiTbInstallFixedTable ((ACPI_PHYSICAL_ADDRESS) AcpiGbl_FADT.XFacs,
+                ACPI_SIG_FACS, ACPI_TABLE_INDEX_X_FACS);
+        }
     }
 }
 
@@ -425,11 +433,11 @@ AcpiTbCreateLocalFadt (
 
     /* Clear the entire local FADT */
 
-    ACPI_MEMSET (&AcpiGbl_FADT, 0, sizeof (ACPI_TABLE_FADT));
+    memset (&AcpiGbl_FADT, 0, sizeof (ACPI_TABLE_FADT));
 
     /* Copy the original FADT, up to sizeof (ACPI_TABLE_FADT) */
 
-    ACPI_MEMCPY (&AcpiGbl_FADT, Table,
+    memcpy (&AcpiGbl_FADT, Table,
         ACPI_MIN (Length, sizeof (ACPI_TABLE_FADT)));
 
     /* Take a copy of the Hardware Reduced flag */
@@ -533,12 +541,9 @@ AcpiTbConvertFadt (
     AcpiGbl_FADT.Header.Length = sizeof (ACPI_TABLE_FADT);
 
     /*
-     * Expand the 32-bit FACS and DSDT addresses to 64-bit as necessary.
+     * Expand the 32-bit DSDT addresses to 64-bit as necessary.
      * Later ACPICA code will always use the X 64-bit field.
      */
-    AcpiGbl_FADT.XFacs = AcpiTbSelectAddress ("FACS",
-        AcpiGbl_FADT.Facs, AcpiGbl_FADT.XFacs);
-
     AcpiGbl_FADT.XDsdt = AcpiTbSelectAddress ("DSDT",
         AcpiGbl_FADT.Dsdt, AcpiGbl_FADT.XDsdt);
 
index 13ed982..af79092 100644 (file)
@@ -83,16 +83,16 @@ AcpiTbFindTable (
 
     /* Normalize the input strings */
 
-    ACPI_MEMSET (&Header, 0, sizeof (ACPI_TABLE_HEADER));
+    memset (&Header, 0, sizeof (ACPI_TABLE_HEADER));
     ACPI_MOVE_NAME (Header.Signature, Signature);
-    ACPI_STRNCPY (Header.OemId, OemId, ACPI_OEM_ID_SIZE);
-    ACPI_STRNCPY (Header.OemTableId, OemTableId, ACPI_OEM_TABLE_ID_SIZE);
+    strncpy (Header.OemId, OemId, ACPI_OEM_ID_SIZE);
+    strncpy (Header.OemTableId, OemTableId, ACPI_OEM_TABLE_ID_SIZE);
 
     /* Search for the table */
 
     for (i = 0; i < AcpiGbl_RootTableList.CurrentTableCount; ++i)
     {
-        if (ACPI_MEMCMP (&(AcpiGbl_RootTableList.Tables[i].Signature),
+        if (memcmp (&(AcpiGbl_RootTableList.Tables[i].Signature),
                             Header.Signature, ACPI_NAME_SIZE))
         {
             /* Not the requested table */
@@ -120,13 +120,13 @@ AcpiTbFindTable (
 
         /* Check for table match on all IDs */
 
-        if (!ACPI_MEMCMP (AcpiGbl_RootTableList.Tables[i].Pointer->Signature,
+        if (!memcmp (AcpiGbl_RootTableList.Tables[i].Pointer->Signature,
                             Header.Signature, ACPI_NAME_SIZE) &&
             (!OemId[0] ||
-             !ACPI_MEMCMP (AcpiGbl_RootTableList.Tables[i].Pointer->OemId,
+             !memcmp (AcpiGbl_RootTableList.Tables[i].Pointer->OemId,
                              Header.OemId, ACPI_OEM_ID_SIZE)) &&
             (!OemTableId[0] ||
-             !ACPI_MEMCMP (AcpiGbl_RootTableList.Tables[i].Pointer->OemTableId,
+             !memcmp (AcpiGbl_RootTableList.Tables[i].Pointer->OemTableId,
                              Header.OemTableId, ACPI_OEM_TABLE_ID_SIZE)))
         {
             *TableIndex = i;
index e2c6833..c797efb 100644 (file)
@@ -94,7 +94,7 @@ AcpiTbCompareTables (
      * not just the header.
      */
     IsIdentical = (BOOLEAN)((TableDesc->Length != TableLength ||
-        ACPI_MEMCMP (TableDesc->Pointer, Table, TableLength)) ?
+        memcmp (TableDesc->Pointer, Table, TableLength)) ?
         FALSE : TRUE);
 
     /* Release the acquired table */
@@ -309,7 +309,7 @@ AcpiTbInstallStandardTable (
          */
         if ((NewTableDesc.Signature.Ascii[0] != 0x00) &&
            (!ACPI_COMPARE_NAME (&NewTableDesc.Signature, ACPI_SIG_SSDT)) &&
-           (ACPI_STRNCMP (NewTableDesc.Signature.Ascii, "OEM", 3)))
+           (strncmp (NewTableDesc.Signature.Ascii, "OEM", 3)))
         {
             ACPI_BIOS_ERROR ((AE_INFO,
                 "Table has invalid signature [%4.4s] (0x%8.8X), "
index 48d8d50..af73279 100644 (file)
@@ -84,7 +84,7 @@ AcpiTbFixString (
 
     while (Length && *String)
     {
-        if (!ACPI_IS_PRINT (*String))
+        if (!isprint ((int) *String))
         {
             *String = '?';
         }
@@ -114,7 +114,7 @@ AcpiTbCleanupTableHeader (
     ACPI_TABLE_HEADER       *Header)
 {
 
-    ACPI_MEMCPY (OutHeader, Header, sizeof (ACPI_TABLE_HEADER));
+    memcpy (OutHeader, Header, sizeof (ACPI_TABLE_HEADER));
 
     AcpiTbFixString (OutHeader->Signature, ACPI_NAME_SIZE);
     AcpiTbFixString (OutHeader->OemId, ACPI_OEM_ID_SIZE);
@@ -156,7 +156,7 @@ AcpiTbPrintTableHeader (
     {
         /* RSDP has no common fields */
 
-        ACPI_MEMCPY (LocalHeader.OemId,
+        memcpy (LocalHeader.OemId,
             ACPI_CAST_PTR (ACPI_TABLE_RSDP, Header)->OemId, ACPI_OEM_ID_SIZE);
         AcpiTbFixString (LocalHeader.OemId, ACPI_OEM_ID_SIZE);
 
index 7159c60..df1e053 100644 (file)
@@ -75,8 +75,6 @@ ACPI_STATUS
 AcpiTbInitializeFacs (
     void)
 {
-    ACPI_STATUS             Status;
-
 
     /* If Hardware Reduced flag is set, there is no FACS */
 
@@ -86,9 +84,23 @@ AcpiTbInitializeFacs (
         return (AE_OK);
     }
 
-    Status = AcpiGetTableByIndex (ACPI_TABLE_INDEX_FACS,
-                ACPI_CAST_INDIRECT_PTR (ACPI_TABLE_HEADER, &AcpiGbl_FACS));
-    return (Status);
+    (void) AcpiGetTableByIndex (ACPI_TABLE_INDEX_FACS,
+                ACPI_CAST_INDIRECT_PTR (ACPI_TABLE_HEADER, &AcpiGbl_Facs32));
+    (void) AcpiGetTableByIndex (ACPI_TABLE_INDEX_X_FACS,
+                ACPI_CAST_INDIRECT_PTR (ACPI_TABLE_HEADER, &AcpiGbl_Facs64));
+
+    if (AcpiGbl_Facs64 && (!AcpiGbl_Facs32 || !AcpiGbl_Use32BitFacsAddresses))
+    {
+        AcpiGbl_FACS = AcpiGbl_Facs64;
+    }
+    else if (AcpiGbl_Facs32)
+    {
+        AcpiGbl_FACS = AcpiGbl_Facs32;
+    }
+
+    /* If there is no FACS, just continue. There was already an error msg */
+
+    return (AE_OK);
 }
 #endif /* !ACPI_REDUCED_HARDWARE */
 
@@ -111,7 +123,7 @@ AcpiTbTablesLoaded (
     void)
 {
 
-    if (AcpiGbl_RootTableList.CurrentTableCount >= 3)
+    if (AcpiGbl_RootTableList.CurrentTableCount >= 4)
     {
         return (TRUE);
     }
@@ -190,7 +202,7 @@ AcpiTbCopyDsdt (
         return (NULL);
     }
 
-    ACPI_MEMCPY (NewTable, TableDesc->Pointer, TableDesc->Length);
+    memcpy (NewTable, TableDesc->Pointer, TableDesc->Length);
     AcpiTbUninstallTable (TableDesc);
 
     AcpiTbInitTableDescriptor (
@@ -389,11 +401,11 @@ AcpiTbParseRootTable (
     TableEntry = ACPI_ADD_PTR (UINT8, Table, sizeof (ACPI_TABLE_HEADER));
 
     /*
-     * First two entries in the table array are reserved for the DSDT
-     * and FACS, which are not actually present in the RSDT/XSDT - they
-     * come from the FADT
+     * First three entries in the table array are reserved for the DSDT
+     * and 32bit/64bit FACS, which are not actually present in the
+     * RSDT/XSDT - they come from the FADT
      */
-    AcpiGbl_RootTableList.CurrentTableCount = 2;
+    AcpiGbl_RootTableList.CurrentTableCount = 3;
 
     /* Initialize the root table array from the RSDT/XSDT */
 
index 7b4e7f0..bcaf6af 100644 (file)
@@ -132,7 +132,7 @@ AcpiInitializeTables (
     {
         /* Root Table Array has been statically allocated by the host */
 
-        ACPI_MEMSET (InitialTableArray, 0,
+        memset (InitialTableArray, 0,
             (ACPI_SIZE) InitialTableCount * sizeof (ACPI_TABLE_DESC));
 
         AcpiGbl_RootTableList.Tables = InitialTableArray;
@@ -271,7 +271,7 @@ AcpiGetTableHeader (
                     return (AE_NO_MEMORY);
                 }
 
-                ACPI_MEMCPY (OutTableHeader, Header,
+                memcpy (OutTableHeader, Header,
                     sizeof (ACPI_TABLE_HEADER));
                 AcpiOsUnmapMemory (Header, sizeof (ACPI_TABLE_HEADER));
             }
@@ -282,7 +282,7 @@ AcpiGetTableHeader (
         }
         else
         {
-            ACPI_MEMCPY (OutTableHeader,
+            memcpy (OutTableHeader,
                 AcpiGbl_RootTableList.Tables[i].Pointer,
                 sizeof (ACPI_TABLE_HEADER));
         }
index 3473df8..19c31e7 100644 (file)
@@ -164,7 +164,7 @@ AcpiTbLoadNamespace (
      * Save the original DSDT header for detection of table corruption
      * and/or replacement of the DSDT from outside the OS.
      */
-    ACPI_MEMCPY (&AcpiGbl_OriginalDsdtHeader, AcpiGbl_DSDT,
+    memcpy (&AcpiGbl_OriginalDsdtHeader, AcpiGbl_DSDT,
         sizeof (ACPI_TABLE_HEADER));
 
     (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES);
@@ -182,10 +182,13 @@ AcpiTbLoadNamespace (
     (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES);
     for (i = 0; i < AcpiGbl_RootTableList.CurrentTableCount; ++i)
     {
-        if ((!ACPI_COMPARE_NAME (&(AcpiGbl_RootTableList.Tables[i].Signature),
+        if (!AcpiGbl_RootTableList.Tables[i].Address ||
+            (!ACPI_COMPARE_NAME (&(AcpiGbl_RootTableList.Tables[i].Signature),
                     ACPI_SIG_SSDT) &&
              !ACPI_COMPARE_NAME (&(AcpiGbl_RootTableList.Tables[i].Signature),
-                    ACPI_SIG_PSDT)) ||
+                    ACPI_SIG_PSDT) &&
+             !ACPI_COMPARE_NAME (&(AcpiGbl_RootTableList.Tables[i].Signature),
+                    ACPI_SIG_OSDT)) ||
              ACPI_FAILURE (AcpiTbValidateTable (
                 &AcpiGbl_RootTableList.Tables[i])))
         {
@@ -238,11 +241,11 @@ AcpiInstallTable (
 
     if (Physical)
     {
-        Flags = ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL;
+        Flags = ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL;
     }
     else
     {
-        Flags = ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL;
+        Flags = ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL;
     }
 
     Status = AcpiTbInstallStandardTable (Address, Flags,
index bb4194d..d0b5c92 100644 (file)
@@ -79,7 +79,7 @@ AcpiOsAllocateZeroed (
     {
         /* Clear the memory block */
 
-        ACPI_MEMSET (Allocation, 0, Size);
+        memset (Allocation, 0, Size);
     }
 
     return (Allocation);
@@ -189,7 +189,7 @@ AcpiUtDeleteCaches (
 
     if (AcpiGbl_DisplayFinalMemStats)
     {
-        ACPI_STRCPY (Buffer, "MEMORY");
+        strcpy (Buffer, "MEMORY");
         (void) AcpiDbDisplayStatistics (Buffer);
     }
 #endif
@@ -359,6 +359,6 @@ AcpiUtInitializeBuffer (
 
     /* Have a valid buffer, clear it */
 
-    ACPI_MEMSET (Buffer->Pointer, 0, RequiredLength);
+    memset (Buffer->Pointer, 0, RequiredLength);
     return (AE_OK);
 }
index cf99b76..16a593f 100644 (file)
@@ -168,7 +168,7 @@ AcpiUtDumpBuffer (
             }
 
             BufChar = Buffer[(ACPI_SIZE) i + j];
-            if (ACPI_IS_PRINT (BufChar))
+            if (isprint (BufChar))
             {
                 AcpiOsPrintf ("%c", BufChar);
             }
@@ -341,7 +341,7 @@ AcpiUtDumpBufferToFile (
             }
 
             BufChar = Buffer[(ACPI_SIZE) i + j];
-            if (ACPI_IS_PRINT (BufChar))
+            if (isprint (BufChar))
             {
                 AcpiUtFilePrintf (File, "%c", BufChar);
             }
index c2211cc..7a0f210 100644 (file)
@@ -92,7 +92,7 @@ AcpiOsCreateCache (
 
     /* Populate the cache object and return it */
 
-    ACPI_MEMSET (Cache, 0, sizeof (ACPI_MEMORY_LIST));
+    memset (Cache, 0, sizeof (ACPI_MEMORY_LIST));
     Cache->ListName   = CacheName;
     Cache->ObjectSize = ObjectSize;
     Cache->MaxDepth   = MaxDepth;
@@ -242,7 +242,7 @@ AcpiOsReleaseObject (
 
         /* Mark the object as cached */
 
-        ACPI_MEMSET (Object, 0xCA, Cache->ObjectSize);
+        memset (Object, 0xCA, Cache->ObjectSize);
         ACPI_SET_DESCRIPTOR_TYPE (Object, ACPI_DESC_TYPE_CACHED);
 
         /* Put the object at the head of the cache list */
@@ -318,7 +318,7 @@ AcpiOsAcquireObject (
 
         /* Clear (zero) the previously used Object */
 
-        ACPI_MEMSET (Object, 0, Cache->ObjectSize);
+        memset (Object, 0, Cache->ObjectSize);
     }
     else
     {
index e68634b..a93ed86 100644 (file)
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- * Module Name: cmclib - Local implementation of C library functions
+ * Module Name: utclib - ACPICA implementations of C library functions
  *
  *****************************************************************************/
 
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
+#define ACPI_CLIBRARY
 #include "acpi.h"
 #include "accommon.h"
 
 /*
- * These implementations of standard C Library routines can optionally be
- * used if a C library is not available. In general, they are less efficient
- * than an inline or assembly implementation
+ * This module contains implementations of the standard C library functions
+ * that are required by the ACPICA code at both application level and kernel
+ * level.
+ *
+ * The module is an optional feature that can be used if a local/system
+ * C library is not available. Some operating system kernels may not have
+ * an internal C library.
+ *
+ * In general, these functions are less efficient than an inline or assembly
+ * code implementation.
+ *
+ * These C functions and the associated prototypes are enabled by default
+ * unless the ACPI_USE_SYSTEM_CLIBRARY symbol is defined. This is usually
+ * automatically defined for the ACPICA applications such as iASL and
+ * AcpiExec, so that these user-level applications use the local C library
+ * instead of the functions in this module.
  */
 
+/*******************************************************************************
+ *
+ * Functions implemented in this module:
+ *
+ * FUNCTION:    memcmp
+ * FUNCTION:    memcpy
+ * FUNCTION:    memset
+ * FUNCTION:    strlen
+ * FUNCTION:    strcpy
+ * FUNCTION:    strncpy
+ * FUNCTION:    strcmp
+ * FUNCTION:    strchr
+ * FUNCTION:    strncmp
+ * FUNCTION:    strcat
+ * FUNCTION:    strncat
+ * FUNCTION:    strstr
+ * FUNCTION:    strtoul
+ * FUNCTION:    toupper
+ * FUNCTION:    tolower
+ * FUNCTION:    is* functions
+ *
+ ******************************************************************************/
+
 #define _COMPONENT          ACPI_UTILITIES
-        ACPI_MODULE_NAME    ("cmclib")
+        ACPI_MODULE_NAME    ("utclib")
 
 
-#ifndef ACPI_USE_SYSTEM_CLIBRARY
+#ifndef ACPI_USE_SYSTEM_CLIBRARY    /* Entire module */
 
 #define NEGATIVE    1
 #define POSITIVE    0
@@ -62,7 +99,7 @@
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiUtMemcmp (memcmp)
+ * FUNCTION:    memcmp
  *
  * PARAMETERS:  Buffer1         - First Buffer
  *              Buffer2         - Second Buffer
  ******************************************************************************/
 
 int
-AcpiUtMemcmp (
-    const char              *Buffer1,
-    const char              *Buffer2,
+memcmp (
+    void                    *VBuffer1,
+    void                    *VBuffer2,
     ACPI_SIZE               Count)
 {
+    char                    *Buffer1 = (char *) VBuffer1;
+    char                    *Buffer2 = (char *) VBuffer2;
+
 
     for ( ; Count-- && (*Buffer1 == *Buffer2); Buffer1++, Buffer2++)
     {
@@ -92,7 +132,7 @@ AcpiUtMemcmp (
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiUtMemcpy (memcpy)
+ * FUNCTION:    memcpy
  *
  * PARAMETERS:  Dest        - Target of the copy
  *              Src         - Source buffer to copy
@@ -105,7 +145,7 @@ AcpiUtMemcmp (
  ******************************************************************************/
 
 void *
-AcpiUtMemcpy (
+memcpy (
     void                    *Dest,
     const void              *Src,
     ACPI_SIZE               Count)
@@ -128,7 +168,7 @@ AcpiUtMemcpy (
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiUtMemset (memset)
+ * FUNCTION:    memset
  *
  * PARAMETERS:  Dest        - Buffer to set
  *              Value       - Value to set each byte of memory
@@ -141,9 +181,9 @@ AcpiUtMemcpy (
  ******************************************************************************/
 
 void *
-AcpiUtMemset (
+memset (
     void                    *Dest,
-    UINT8                   Value,
+    int                     Value,
     ACPI_SIZE               Count)
 {
     char                    *New = (char *) Dest;
@@ -162,7 +202,7 @@ AcpiUtMemset (
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiUtStrlen (strlen)
+ * FUNCTION:    strlen
  *
  * PARAMETERS:  String              - Null terminated string
  *
@@ -174,7 +214,7 @@ AcpiUtMemset (
 
 
 ACPI_SIZE
-AcpiUtStrlen (
+strlen (
     const char              *String)
 {
     UINT32                  Length = 0;
@@ -194,7 +234,7 @@ AcpiUtStrlen (
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiUtStrcpy (strcpy)
+ * FUNCTION:    strcpy
  *
  * PARAMETERS:  DstString       - Target of the copy
  *              SrcString       - The source string to copy
@@ -206,7 +246,7 @@ AcpiUtStrlen (
  ******************************************************************************/
 
 char *
-AcpiUtStrcpy (
+strcpy (
     char                    *DstString,
     const char              *SrcString)
 {
@@ -232,7 +272,7 @@ AcpiUtStrcpy (
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiUtStrncpy (strncpy)
+ * FUNCTION:    strncpy
  *
  * PARAMETERS:  DstString       - Target of the copy
  *              SrcString       - The source string to copy
@@ -245,7 +285,7 @@ AcpiUtStrcpy (
  ******************************************************************************/
 
 char *
-AcpiUtStrncpy (
+strncpy (
     char                    *DstString,
     const char              *SrcString,
     ACPI_SIZE               Count)
@@ -275,7 +315,7 @@ AcpiUtStrncpy (
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiUtStrcmp (strcmp)
+ * FUNCTION:    strcmp
  *
  * PARAMETERS:  String1         - First string
  *              String2         - Second string
@@ -287,7 +327,7 @@ AcpiUtStrncpy (
  ******************************************************************************/
 
 int
-AcpiUtStrcmp (
+strcmp (
     const char              *String1,
     const char              *String2)
 {
@@ -307,7 +347,7 @@ AcpiUtStrcmp (
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiUtStrchr (strchr)
+ * FUNCTION:    strchr
  *
  * PARAMETERS:  String          - Search string
  *              ch              - character to search for
@@ -319,7 +359,7 @@ AcpiUtStrcmp (
  ******************************************************************************/
 
 char *
-AcpiUtStrchr (
+strchr (
     const char              *String,
     int                     ch)
 {
@@ -339,7 +379,7 @@ AcpiUtStrchr (
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiUtStrncmp (strncmp)
+ * FUNCTION:    strncmp
  *
  * PARAMETERS:  String1         - First string
  *              String2         - Second string
@@ -352,7 +392,7 @@ AcpiUtStrchr (
  ******************************************************************************/
 
 int
-AcpiUtStrncmp (
+strncmp (
     const char              *String1,
     const char              *String2,
     ACPI_SIZE               Count)
@@ -374,7 +414,7 @@ AcpiUtStrncmp (
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiUtStrcat (Strcat)
+ * FUNCTION:    strcat
  *
  * PARAMETERS:  DstString       - Target of the copy
  *              SrcString       - The source string to copy
@@ -386,7 +426,7 @@ AcpiUtStrncmp (
  ******************************************************************************/
 
 char *
-AcpiUtStrcat (
+strcat (
     char                    *DstString,
     const char              *SrcString)
 {
@@ -409,7 +449,7 @@ AcpiUtStrcat (
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiUtStrncat (strncat)
+ * FUNCTION:    strncat
  *
  * PARAMETERS:  DstString       - Target of the copy
  *              SrcString       - The source string to copy
@@ -423,7 +463,7 @@ AcpiUtStrcat (
  ******************************************************************************/
 
 char *
-AcpiUtStrncat (
+strncat (
     char                    *DstString,
     const char              *SrcString,
     ACPI_SIZE               Count)
@@ -457,7 +497,7 @@ AcpiUtStrncat (
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiUtStrstr (strstr)
+ * FUNCTION:    strstr
  *
  * PARAMETERS:  String1         - Target string
  *              String2         - Substring to search for
@@ -471,22 +511,22 @@ AcpiUtStrncat (
  ******************************************************************************/
 
 char *
-AcpiUtStrstr (
+strstr (
     char                    *String1,
     char                    *String2)
 {
     UINT32                  Length;
 
 
-    Length = AcpiUtStrlen (String2);
+    Length = strlen (String2);
     if (!Length)
     {
         return (String1);
     }
 
-    while (AcpiUtStrlen (String1) >= Length)
+    while (strlen (String1) >= Length)
     {
-        if (AcpiUtMemcmp (String1, String2, Length) == 0)
+        if (memcmp (String1, String2, Length) == 0)
         {
             return (String1);
         }
@@ -499,7 +539,7 @@ AcpiUtStrstr (
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiUtStrtoul (strtoul)
+ * FUNCTION:    strtoul
  *
  * PARAMETERS:  String          - Null terminated string
  *              Terminater      - Where a pointer to the terminating byte is
@@ -509,12 +549,12 @@ AcpiUtStrstr (
  * RETURN:      Converted value
  *
  * DESCRIPTION: Convert a string into a 32-bit unsigned value.
- *              Note: use AcpiUtStrtoul64 for 64-bit integers.
+ *              Note: use strtoul64 for 64-bit integers.
  *
  ******************************************************************************/
 
 UINT32
-AcpiUtStrtoul (
+strtoul (
     const char              *String,
     char                    **Terminator,
     UINT32                  Base)
@@ -533,7 +573,7 @@ AcpiUtStrtoul (
      * skip over any white space in the buffer:
      */
     StringStart = String;
-    while (ACPI_IS_SPACE (*String) || *String == '\t')
+    while (isspace (*String) || *String == '\t')
     {
         ++String;
     }
@@ -565,7 +605,7 @@ AcpiUtStrtoul (
     {
         if (*String == '0')
         {
-            if (AcpiUtToLower (*(++String)) == 'x')
+            if (tolower (*(++String)) == 'x')
             {
                 Base = 16;
                 ++String;
@@ -600,7 +640,7 @@ AcpiUtStrtoul (
 
     if (Base == 16 &&
         *String == '0' &&
-        AcpiUtToLower (*(++String)) == 'x')
+        tolower (*(++String)) == 'x')
     {
         String++;
     }
@@ -610,14 +650,14 @@ AcpiUtStrtoul (
      */
     while (*String)
     {
-        if (ACPI_IS_DIGIT (*String))
+        if (isdigit (*String))
         {
             index = (UINT32) ((UINT8) *String - '0');
         }
         else
         {
-            index = (UINT32) AcpiUtToUpper (*String);
-            if (ACPI_IS_UPPER (index))
+            index = (UINT32) toupper (*String);
+            if (isupper (index))
             {
                 index = index - 'A' + 10;
             }
@@ -688,7 +728,7 @@ done:
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiUtToUpper (TOUPPER)
+ * FUNCTION:    toupper
  *
  * PARAMETERS:  c           - Character to convert
  *
@@ -699,17 +739,17 @@ done:
  ******************************************************************************/
 
 int
-AcpiUtToUpper (
+toupper (
     int                     c)
 {
 
-    return (ACPI_IS_LOWER(c) ? ((c)-0x20) : (c));
+    return (islower(c) ? ((c)-0x20) : (c));
 }
 
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiUtToLower (TOLOWER)
+ * FUNCTION:    tolower
  *
  * PARAMETERS:  c           - Character to convert
  *
@@ -720,23 +760,23 @@ AcpiUtToUpper (
  ******************************************************************************/
 
 int
-AcpiUtToLower (
+tolower (
     int                     c)
 {
 
-    return (ACPI_IS_UPPER(c) ? ((c)+0x20) : (c));
+    return (isupper(c) ? ((c)+0x20) : (c));
 }
 
 
 /*******************************************************************************
  *
- * FUNCTION:    is* functions
+ * FUNCTION:    is* function array
  *
  * DESCRIPTION: is* functions use the ctype table below
  *
  ******************************************************************************/
 
-const UINT8 _acpi_ctype[257] = {
+const UINT8 AcpiGbl_Ctypes[257] = {
     _ACPI_CN,            /* 0x00     0 NUL */
     _ACPI_CN,            /* 0x01     1 SOH */
     _ACPI_CN,            /* 0x02     2 STX */
index 932faa3..dc5ecda 100644 (file)
@@ -146,7 +146,7 @@ AcpiUtCopyIsimpleToEsimple (
 
     /* Always clear the external object */
 
-    ACPI_MEMSET (ExternalObject, 0, sizeof (ACPI_OBJECT));
+    memset (ExternalObject, 0, sizeof (ACPI_OBJECT));
 
     /*
      * In general, the external object will be the same type as
@@ -165,7 +165,7 @@ AcpiUtCopyIsimpleToEsimple (
         *BufferSpaceUsed = ACPI_ROUND_UP_TO_NATIVE_WORD (
                             (ACPI_SIZE) InternalObject->String.Length + 1);
 
-        ACPI_MEMCPY ((void *) DataSpace,
+        memcpy ((void *) DataSpace,
             (void *) InternalObject->String.Pointer,
             (ACPI_SIZE) InternalObject->String.Length + 1);
         break;
@@ -177,7 +177,7 @@ AcpiUtCopyIsimpleToEsimple (
         *BufferSpaceUsed = ACPI_ROUND_UP_TO_NATIVE_WORD (
                             InternalObject->String.Length);
 
-        ACPI_MEMCPY ((void *) DataSpace,
+        memcpy ((void *) DataSpace,
             (void *) InternalObject->Buffer.Pointer,
             InternalObject->Buffer.Length);
         break;
@@ -528,7 +528,7 @@ AcpiUtCopyEsimpleToIsimple (
             goto ErrorExit;
         }
 
-        ACPI_MEMCPY (InternalObject->String.Pointer,
+        memcpy (InternalObject->String.Pointer,
                      ExternalObject->String.Pointer,
                      ExternalObject->String.Length);
 
@@ -544,7 +544,7 @@ AcpiUtCopyEsimpleToIsimple (
             goto ErrorExit;
         }
 
-        ACPI_MEMCPY (InternalObject->Buffer.Pointer,
+        memcpy (InternalObject->Buffer.Pointer,
                      ExternalObject->Buffer.Pointer,
                      ExternalObject->Buffer.Length);
 
@@ -732,7 +732,7 @@ AcpiUtCopySimpleObject (
         CopySize = sizeof (ACPI_NAMESPACE_NODE);
     }
 
-    ACPI_MEMCPY (ACPI_CAST_PTR (char, DestDesc),
+    memcpy (ACPI_CAST_PTR (char, DestDesc),
         ACPI_CAST_PTR (char, SourceDesc), CopySize);
 
     /* Restore the saved fields */
@@ -766,7 +766,7 @@ AcpiUtCopySimpleObject (
 
             /* Copy the actual buffer data */
 
-            ACPI_MEMCPY (DestDesc->Buffer.Pointer,
+            memcpy (DestDesc->Buffer.Pointer,
                 SourceDesc->Buffer.Pointer, SourceDesc->Buffer.Length);
         }
         break;
@@ -788,7 +788,7 @@ AcpiUtCopySimpleObject (
 
             /* Copy the actual string data */
 
-            ACPI_MEMCPY (DestDesc->String.Pointer, SourceDesc->String.Pointer,
+            memcpy (DestDesc->String.Pointer, SourceDesc->String.Pointer,
                 (ACPI_SIZE) SourceDesc->String.Length + 1);
         }
         break;
index 2affb21..1b7f1f5 100644 (file)
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- * Module Name: utids - support for device IDs - HID, UID, CID
+ * Module Name: utids - support for device IDs - HID, UID, CID, SUB, CLS
  *
  *****************************************************************************/
 
@@ -121,7 +121,7 @@ AcpiUtExecute_HID (
     }
     else
     {
-        ACPI_STRCPY (Hid->String, ObjDesc->String.Pointer);
+        strcpy (Hid->String, ObjDesc->String.Pointer);
     }
 
     Hid->Length = Length;
@@ -194,7 +194,7 @@ AcpiUtExecute_SUB (
 
     /* Simply copy existing string */
 
-    ACPI_STRCPY (Sub->String, ObjDesc->String.Pointer);
+    strcpy (Sub->String, ObjDesc->String.Pointer);
     Sub->Length = Length;
     *ReturnId = Sub;
 
@@ -279,7 +279,7 @@ AcpiUtExecute_UID (
     }
     else
     {
-        ACPI_STRCPY (Uid->String, ObjDesc->String.Pointer);
+        strcpy (Uid->String, ObjDesc->String.Pointer);
     }
 
     Uid->Length = Length;
@@ -426,7 +426,7 @@ AcpiUtExecute_CID (
         {
             /* Copy the String CID from the returned object */
 
-            ACPI_STRCPY (NextIdString, CidObjects[i]->String.Pointer);
+            strcpy (NextIdString, CidObjects[i]->String.Pointer);
             Length = CidObjects[i]->String.Length + 1;
         }
 
@@ -449,3 +449,97 @@ Cleanup:
     AcpiUtRemoveReference (ObjDesc);
     return_ACPI_STATUS (Status);
 }
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiUtExecute_CLS
+ *
+ * PARAMETERS:  DeviceNode          - Node for the device
+ *              ReturnId            - Where the _CLS is returned
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Executes the _CLS control method that returns PCI-defined
+ *              class code of the device. The _CLS value is always a package
+ *              containing PCI class information as a list of integers.
+ *              The returned string has format "BBSSPP", where:
+ *                BB = Base-class code
+ *                SS = Sub-class code
+ *                PP = Programming Interface code
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiUtExecute_CLS (
+    ACPI_NAMESPACE_NODE     *DeviceNode,
+    ACPI_PNP_DEVICE_ID      **ReturnId)
+{
+    ACPI_OPERAND_OBJECT     *ObjDesc;
+    ACPI_OPERAND_OBJECT     **ClsObjects;
+    UINT32                  Count;
+    ACPI_PNP_DEVICE_ID      *Cls;
+    UINT32                  Length;
+    ACPI_STATUS             Status;
+    UINT8                   ClassCode[3] = {0, 0, 0};
+
+
+    ACPI_FUNCTION_TRACE (UtExecute_CLS);
+
+
+    Status = AcpiUtEvaluateObject (DeviceNode, METHOD_NAME__CLS,
+                ACPI_BTYPE_PACKAGE, &ObjDesc);
+    if (ACPI_FAILURE (Status))
+    {
+        return_ACPI_STATUS (Status);
+    }
+
+    /* Get the size of the String to be returned, includes null terminator */
+
+    Length = ACPI_PCICLS_STRING_SIZE;
+    ClsObjects = ObjDesc->Package.Elements;
+    Count = ObjDesc->Package.Count;
+
+    if (ObjDesc->Common.Type == ACPI_TYPE_PACKAGE)
+    {
+        if (Count > 0 && ClsObjects[0]->Common.Type == ACPI_TYPE_INTEGER)
+        {
+            ClassCode[0] = (UINT8) ClsObjects[0]->Integer.Value;
+        }
+        if (Count > 1 && ClsObjects[1]->Common.Type == ACPI_TYPE_INTEGER)
+        {
+            ClassCode[1] = (UINT8) ClsObjects[1]->Integer.Value;
+        }
+        if (Count > 2 && ClsObjects[2]->Common.Type == ACPI_TYPE_INTEGER)
+        {
+            ClassCode[2] = (UINT8) ClsObjects[2]->Integer.Value;
+        }
+    }
+
+    /* Allocate a buffer for the CLS */
+
+    Cls = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_PNP_DEVICE_ID) + (ACPI_SIZE) Length);
+    if (!Cls)
+    {
+        Status = AE_NO_MEMORY;
+        goto Cleanup;
+    }
+
+    /* Area for the string starts after PNP_DEVICE_ID struct */
+
+    Cls->String = ACPI_ADD_PTR (char, Cls, sizeof (ACPI_PNP_DEVICE_ID));
+
+    /* Simply copy existing string */
+
+    AcpiExPciClsToString (Cls->String, ClassCode);
+    Cls->Length = Length;
+    *ReturnId = Cls;
+
+
+Cleanup:
+
+    /* On exit, we must delete the return object */
+
+    AcpiUtRemoveReference (ObjDesc);
+    return_ACPI_STATUS (Status);
+}
index d482ad5..8ac133a 100644 (file)
@@ -71,10 +71,10 @@ AcpiUtIsPciRootBridge (
      * Check if this is a PCI root bridge.
      * ACPI 3.0+: check for a PCI Express root also.
      */
-    if (!(ACPI_STRCMP (Id,
+    if (!(strcmp (Id,
             PCI_ROOT_HID_STRING)) ||
 
-        !(ACPI_STRCMP (Id,
+        !(strcmp (Id,
             PCI_EXPRESS_ROOT_HID_STRING)))
     {
         return (TRUE);
@@ -108,7 +108,8 @@ AcpiUtIsAmlTable (
 
     if (ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_DSDT) ||
         ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_PSDT) ||
-        ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_SSDT))
+        ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_SSDT) ||
+        ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_OSDT))
     {
         return (TRUE);
     }
index f2c1adf..30cba54 100644 (file)
@@ -256,7 +256,7 @@ AcpiUtInstallInterface (
         return (AE_NO_MEMORY);
     }
 
-    InterfaceInfo->Name = ACPI_ALLOCATE_ZEROED (ACPI_STRLEN (InterfaceName) + 1);
+    InterfaceInfo->Name = ACPI_ALLOCATE_ZEROED (strlen (InterfaceName) + 1);
     if (!InterfaceInfo->Name)
     {
         ACPI_FREE (InterfaceInfo);
@@ -265,7 +265,7 @@ AcpiUtInstallInterface (
 
     /* Initialize new info and insert at the head of the global list */
 
-    ACPI_STRCPY (InterfaceInfo->Name, InterfaceName);
+    strcpy (InterfaceInfo->Name, InterfaceName);
     InterfaceInfo->Flags = ACPI_OSI_DYNAMIC;
     InterfaceInfo->Next = AcpiGbl_SupportedInterfaces;
 
@@ -298,7 +298,7 @@ AcpiUtRemoveInterface (
     PreviousInterface = NextInterface = AcpiGbl_SupportedInterfaces;
     while (NextInterface)
     {
-        if (!ACPI_STRCMP (InterfaceName, NextInterface->Name))
+        if (!strcmp (InterfaceName, NextInterface->Name))
         {
             /* Found: name is in either the static list or was added at runtime */
 
@@ -419,7 +419,7 @@ AcpiUtGetInterface (
     NextInterface = AcpiGbl_SupportedInterfaces;
     while (NextInterface)
     {
-        if (!ACPI_STRCMP (InterfaceName, NextInterface->Name))
+        if (!strcmp (InterfaceName, NextInterface->Name))
         {
             return (NextInterface);
         }
index 205fa45..1b7ef34 100644 (file)
@@ -166,7 +166,7 @@ AcpiUtGetExpectedReturnTypes (
 
     if (!ExpectedBtypes)
     {
-        ACPI_STRCPY (Buffer, "NONE");
+        strcpy (Buffer, "NONE");
         return;
     }
 
@@ -180,7 +180,7 @@ AcpiUtGetExpectedReturnTypes (
 
         if (ExpectedBtypes & ThisRtype)
         {
-            ACPI_STRCAT (Buffer, &UtRtypeNames[i][j]);
+            strcat (Buffer, &UtRtypeNames[i][j]);
             j = 0;              /* Use name separator from now on */
         }
 
index ffb5e6a..6d7b87c 100644 (file)
@@ -227,7 +227,7 @@ AcpiUtScanNumber (
     UINT64                  Number = 0;
 
 
-    while (ACPI_IS_DIGIT (*String))
+    while (isdigit ((int) *String))
     {
         Number *= 10;
         Number += *(String++) - '0';
@@ -505,7