Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 18 Dec 2015 18:35:46 +0000 (UTC)
From:      Jung-uk Kim <jkim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org
Subject:   svn commit: r292447 - in vendor-sys/acpica/dist: . source/common source/compiler source/components/debugger source/components/disassembler source/components/dispatcher source/components/events sour...
Message-ID:  <201512181835.tBIIZkE3082149@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jkim
Date: Fri Dec 18 18:35:46 2015
New Revision: 292447
URL: https://svnweb.freebsd.org/changeset/base/292447

Log:
  Import ACPICA 20151218.

Modified:
  vendor-sys/acpica/dist/changes.txt
  vendor-sys/acpica/dist/source/common/acfileio.c
  vendor-sys/acpica/dist/source/common/adisasm.c
  vendor-sys/acpica/dist/source/common/getopt.c
  vendor-sys/acpica/dist/source/compiler/aslascii.c
  vendor-sys/acpica/dist/source/compiler/aslcompiler.h
  vendor-sys/acpica/dist/source/compiler/asldefine.h
  vendor-sys/acpica/dist/source/compiler/aslfiles.c
  vendor-sys/acpica/dist/source/compiler/aslglobal.h
  vendor-sys/acpica/dist/source/compiler/asllisting.c
  vendor-sys/acpica/dist/source/compiler/aslmain.c
  vendor-sys/acpica/dist/source/compiler/aslmap.c
  vendor-sys/acpica/dist/source/compiler/aslopcodes.c
  vendor-sys/acpica/dist/source/compiler/asloptions.c
  vendor-sys/acpica/dist/source/compiler/aslrules.y
  vendor-sys/acpica/dist/source/compiler/aslstartup.c
  vendor-sys/acpica/dist/source/compiler/aslsupport.l
  vendor-sys/acpica/dist/source/compiler/asltree.c
  vendor-sys/acpica/dist/source/compiler/aslutils.c
  vendor-sys/acpica/dist/source/compiler/aslwalks.c
  vendor-sys/acpica/dist/source/compiler/dttemplate.c
  vendor-sys/acpica/dist/source/compiler/dttemplate.h
  vendor-sys/acpica/dist/source/components/debugger/dbdisply.c
  vendor-sys/acpica/dist/source/components/debugger/dbinput.c
  vendor-sys/acpica/dist/source/components/disassembler/dmopcode.c
  vendor-sys/acpica/dist/source/components/disassembler/dmwalk.c
  vendor-sys/acpica/dist/source/components/dispatcher/dsinit.c
  vendor-sys/acpica/dist/source/components/events/evhandler.c
  vendor-sys/acpica/dist/source/components/events/evregion.c
  vendor-sys/acpica/dist/source/components/events/evrgnini.c
  vendor-sys/acpica/dist/source/components/events/evxfregn.c
  vendor-sys/acpica/dist/source/components/executer/excreate.c
  vendor-sys/acpica/dist/source/components/executer/exdebug.c
  vendor-sys/acpica/dist/source/components/executer/exdump.c
  vendor-sys/acpica/dist/source/components/executer/exmisc.c
  vendor-sys/acpica/dist/source/components/executer/exoparg1.c
  vendor-sys/acpica/dist/source/components/namespace/nsconvert.c
  vendor-sys/acpica/dist/source/components/namespace/nseval.c
  vendor-sys/acpica/dist/source/components/namespace/nsload.c
  vendor-sys/acpica/dist/source/components/namespace/nsrepair.c
  vendor-sys/acpica/dist/source/components/parser/psargs.c
  vendor-sys/acpica/dist/source/components/parser/psloop.c
  vendor-sys/acpica/dist/source/components/parser/psopcode.c
  vendor-sys/acpica/dist/source/components/tables/tbutils.c
  vendor-sys/acpica/dist/source/components/utilities/utinit.c
  vendor-sys/acpica/dist/source/components/utilities/utstring.c
  vendor-sys/acpica/dist/source/components/utilities/utxfinit.c
  vendor-sys/acpica/dist/source/include/acapps.h
  vendor-sys/acpica/dist/source/include/acevents.h
  vendor-sys/acpica/dist/source/include/acexcep.h
  vendor-sys/acpica/dist/source/include/acglobal.h
  vendor-sys/acpica/dist/source/include/aclocal.h
  vendor-sys/acpica/dist/source/include/acnamesp.h
  vendor-sys/acpica/dist/source/include/acobject.h
  vendor-sys/acpica/dist/source/include/acopcode.h
  vendor-sys/acpica/dist/source/include/acparser.h
  vendor-sys/acpica/dist/source/include/acpixf.h
  vendor-sys/acpica/dist/source/include/amlcode.h
  vendor-sys/acpica/dist/source/tools/acpibin/abmain.c
  vendor-sys/acpica/dist/source/tools/acpiexec/aecommon.h
  vendor-sys/acpica/dist/source/tools/acpiexec/aehandlers.c
  vendor-sys/acpica/dist/source/tools/acpiexec/aemain.c
  vendor-sys/acpica/dist/source/tools/acpiexec/aeregion.c
  vendor-sys/acpica/dist/source/tools/acpiexec/aetables.c
  vendor-sys/acpica/dist/source/tools/acpinames/anmain.c
  vendor-sys/acpica/dist/source/tools/examples/examples.c
  vendor-sys/acpica/dist/tests/misc/grammar.asl

Modified: vendor-sys/acpica/dist/changes.txt
==============================================================================
--- vendor-sys/acpica/dist/changes.txt	Fri Dec 18 18:08:53 2015	(r292446)
+++ vendor-sys/acpica/dist/changes.txt	Fri Dec 18 18:35:46 2015	(r292447)
@@ -1,4 +1,161 @@
 ----------------------------------------
+18 December 2015. Summary of changes for version 20151218:
+
+This release is available at https://acpica.org/downloads
+
+
+1) ACPICA kernel-resident subsystem:
+
+Implemented per-AML-table execution of "module-level code" as individual 
+ACPI tables are loaded into the namespace during ACPICA initialization. 
+In other words, any module-level code within an AML table is executed 
+immediately after the table is loaded, instead of batched and executed 
+after all of the tables have been loaded. This provides compatibility 
+with other ACPI implementations. ACPICA BZ 1219. Bob Moore, Lv Zheng, 
+David Box.
+
+To fully support the feature above, the default operation region handlers 
+for the SystemMemory, SystemIO, and PCI_Config address spaces are now 
+installed before any ACPI tables are loaded. This enables module-level 
+code to access these address spaces during the table load and module-
+level code execution phase. ACPICA BZ 1220. Bob Moore, Lv Zheng, David 
+Box.
+
+Implemented several changes to the internal _REG support in conjunction 
+with the changes above. Also, changes to the AcpiExec/AcpiNames/Examples 
+utilities for the changes above. Although these tools were changed, host 
+operating systems that simply use the default handlers for SystemMemory, 
+SystemIO, and PCI_Config spaces should not require any update. Lv Zheng.
+
+For example, in the code below, DEV1 is conditionally added to the 
+namespace by the DSDT via module-level code that accesses an operation 
+region. The SSDT references DEV1 via the Scope operator. DEV1 must be 
+created immediately after the DSDT is loaded in order for the SSDT to 
+successfully reference DEV1. Previously, this code would cause an 
+AE_NOT_EXIST exception during the load of the SSDT. Now, this code is 
+fully supported by ACPICA.
+
+    DefinitionBlock ("", "DSDT", 2, "Intel", "DSDT1", 1)
+    {
+        OperationRegion (OPR1, SystemMemory, 0x400, 32)
+        Field (OPR1, AnyAcc, NoLock, Preserve)
+        {
+            FLD1, 1
+        }
+        If (FLD1)
+        {
+            Device (\DEV1)
+            {
+            }
+        }
+    }
+    DefinitionBlock ("", "SSDT", 2, "Intel", "SSDT1", 1)
+    {
+        External (\DEV1, DeviceObj)
+        Scope (\DEV1)
+        {
+        }
+    }
+
+Fixed an AML interpreter problem where control method invocations were 
+not handled correctly when the invocation was itself a SuperName argument 
+to another ASL operator. In these cases, the method was not invoked. 
+ACPICA BZ 1002. Affects the following ASL operators that have a SuperName 
+argument:
+    Store
+    Acquire, Wait
+    CondRefOf, RefOf
+    Decrement, Increment
+    Load, Unload
+    Notify
+    Signal, Release, Reset
+    SizeOf
+
+Implemented automatic String-to-ObjectReference conversion support for 
+packages returned by predefined names (such as _DEP). A common BIOS error 
+is to add double quotes around an ObjectReference namepath, which turns 
+the reference into an unexpected string object. This support detects the 
+problem and corrects it before the package is returned to the caller that 
+invoked the method. Lv Zheng.
+
+Implemented extensions to the Concatenate operator. Concatenate now 
+accepts any type of object, it is not restricted to simply 
+Integer/String/Buffer. For objects other than these 3 basic data types, 
+the argument is treated as a string containing the name of the object 
+type. This expands the utility of Concatenate and the Printf/Fprintf 
+macros. ACPICA BZ 1222.
+
+Cleaned up the output of the ASL Debug object. The timer() value is now 
+optional and no longer emitted by default. Also, the basic data types of 
+Integer/String/Buffer are simply emitted as their values, without a data 
+type string -- since the data type is obvious from the output. ACPICA BZ 
+1221.
+
+Example Code and Data Size: These are the sizes for the OS-independent 
+acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The 
+debug version of the code includes the debug output trace mechanism and 
+has a much larger code and data size.
+
+  Current Release:
+    Non-Debug Version: 102.6K Code, 28.4K Data, 131.0K Total
+    Debug Version:     200.3K Code, 81.9K Data, 282.3K Total
+  Previous Release:
+    Non-Debug Version: 102.0K Code, 28.3K Data, 130.3K Total
+    Debug Version:     199.6K Code, 81.8K Data, 281.4K Total
+
+
+2) iASL Compiler/Disassembler and Tools:
+
+iASL: Fixed some issues with the ASL Include() operator. This operator 
+was incorrectly defined in the iASL parser rules, causing a new scope to 
+be opened for the code within the include file. This could lead to 
+several issues, including allowing ASL code that is technically illegal 
+and not supported by AML interpreters. Note, this does not affect the 
+related #include preprocessor operator. ACPICA BZ 1212.
+
+iASL/Disassembler: Implemented support for the ASL ElseIf operator. This 
+operator is essentially an ASL macro since there is no AML opcode 
+associated with it. The code emitted by the iASL compiler for ElseIf is 
+an Else opcode followed immediately by an If opcode. The disassembler 
+will now emit an ElseIf if it finds an Else immediately followed by an 
+If. This simplifies the decoded ASL, especially for deeply nested 
+If..Else and large Switch constructs. Thus, the disassembled code more 
+closely follows the original source ASL. ACPICA BZ 1211. Example:
+
+    Old disassembly:
+        Else
+        {
+            If (Arg0 == 0x02)
+            {
+                Local0 = 0x05
+            }
+        }
+
+    New disassembly:
+        ElseIf (Arg0 == 0x02)
+        {
+            Local0 = 0x05
+        }
+
+AcpiExec: Added support for the new module level code behavior and the 
+early region installation. This required a small change to the 
+initialization, since AcpiExec must install its own operation region 
+handlers.
+
+AcpiExec: Added support to make the debug object timer optional. Default 
+is timer disabled. This cleans up the debug object output -- the timer 
+data is rarely used.
+
+AcpiExec: Multiple ACPI tables are now loaded in the order that they 
+appear on the command line. This can be important when there are 
+interdependencies/references between the tables.
+
+iASL/Templates. Add support to generate template files with multiple 
+SSDTs within a single output file. Also added ommand line support to 
+specify the number of SSDTs (in addition to a single DSDT). ACPICA BZ 
+1223, 1225.
+
+----------------------------------------
 24 November 2015. Summary of changes for version 20151124:
 
 This release is available at https://acpica.org/downloads

Modified: vendor-sys/acpica/dist/source/common/acfileio.c
==============================================================================
--- vendor-sys/acpica/dist/source/common/acfileio.c	Fri Dec 18 18:08:53 2015	(r292446)
+++ vendor-sys/acpica/dist/source/common/acfileio.c	Fri Dec 18 18:35:46 2015	(r292447)
@@ -55,20 +55,20 @@
 /* Local prototypes */
 
 static ACPI_STATUS
-AcpiAcGetOneTableFromFile (
+AcGetOneTableFromFile (
     char                    *Filename,
     FILE                    *File,
     UINT8                   GetOnlyAmlTables,
     ACPI_TABLE_HEADER       **Table);
 
 static ACPI_STATUS
-AcpiAcCheckTextModeCorruption (
+AcCheckTextModeCorruption (
     ACPI_TABLE_HEADER       *Table);
 
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiAcGetAllTablesFromFile
+ * FUNCTION:    AcGetAllTablesFromFile
  *
  * PARAMETERS:  Filename            - Table filename
  *              GetOnlyAmlTables    - TRUE if the tables must be AML tables
@@ -81,7 +81,7 @@ AcpiAcCheckTextModeCorruption (
  ******************************************************************************/
 
 ACPI_STATUS
-AcpiAcGetAllTablesFromFile (
+AcGetAllTablesFromFile (
     char                    *Filename,
     UINT8                   GetOnlyAmlTables,
     ACPI_NEW_TABLE_DESC     **ReturnListHead)
@@ -115,19 +115,36 @@ AcpiAcGetAllTablesFromFile (
         return (AE_ERROR);
     }
 
-    if (FileSize < 4)
+    fprintf (stderr,
+        "Input file %s, Length 0x%X (%u) bytes\n",
+        Filename, FileSize, FileSize);
+
+    /* We must have at least one ACPI table header */
+
+    if (FileSize < sizeof (ACPI_TABLE_HEADER))
     {
         return (AE_BAD_HEADER);
     }
 
+    /* Check for an non-binary file */
+
+    if (!AcIsFileBinary (File))
+    {
+        fprintf (stderr,
+            "    %s: File does not appear to contain a valid AML table\n",
+            Filename);
+        return (AE_TYPE);
+    }
+
     /* Read all tables within the file */
 
     while (ACPI_SUCCESS (Status))
     {
         /* Get one entire ACPI table */
 
-        Status = AcpiAcGetOneTableFromFile (
+        Status = AcGetOneTableFromFile (
             Filename, File, GetOnlyAmlTables, &Table);
+
         if (Status == AE_CTRL_TERMINATE)
         {
             Status = AE_OK;
@@ -135,13 +152,20 @@ AcpiAcGetAllTablesFromFile (
         }
         else if (Status == AE_TYPE)
         {
-            continue;
+            return (AE_OK);
         }
         else if (ACPI_FAILURE (Status))
         {
             return (Status);
         }
 
+        /* Print table header for iASL/disassembler only */
+
+#ifdef ACPI_ASL_COMPILER
+
+            AcpiTbPrintTableHeader (0, Table);
+#endif
+
         /* Allocate and link a table descriptor */
 
         TableDesc = AcpiOsAllocate (sizeof (ACPI_NEW_TABLE_DESC));
@@ -186,7 +210,7 @@ AcpiAcGetAllTablesFromFile (
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiAcGetOneTableFromFile
+ * FUNCTION:    AcGetOneTableFromFile
  *
  * PARAMETERS:  Filename            - File where table is located
  *              File                - Open FILE pointer to Filename
@@ -204,7 +228,7 @@ AcpiAcGetAllTablesFromFile (
  ******************************************************************************/
 
 static ACPI_STATUS
-AcpiAcGetOneTableFromFile (
+AcGetOneTableFromFile (
     char                    *Filename,
     FILE                    *File,
     UINT8                   GetOnlyAmlTables,
@@ -214,21 +238,28 @@ AcpiAcGetOneTableFromFile (
     ACPI_TABLE_HEADER       TableHeader;
     ACPI_TABLE_HEADER       *Table;
     INT32                   Count;
-    long                    Position;
+    long                    TableOffset;
 
 
     *ReturnTable = NULL;
 
+    /* Get the table header to examine signature and length */
 
-    /* Get just the table header to get signature and length */
-
-    Position = ftell (File);
+    TableOffset = ftell (File);
     Count = fread (&TableHeader, 1, sizeof (ACPI_TABLE_HEADER), File);
     if (Count != sizeof (ACPI_TABLE_HEADER))
     {
         return (AE_CTRL_TERMINATE);
     }
 
+    /* Validate the table signature/header (limited ASCII chars) */
+
+    Status = AcValidateTableHeader (File, TableOffset);
+    if (ACPI_FAILURE (Status))
+    {
+        return (Status);
+    }
+
     if (GetOnlyAmlTables)
     {
         /* Table must be an AML table (DSDT/SSDT) or FADT */
@@ -237,7 +268,7 @@ AcpiAcGetOneTableFromFile (
             !AcpiUtIsAmlTable (&TableHeader))
         {
             fprintf (stderr,
-                "    %s: [%4.4s] is not an AML table - ignoring\n",
+                "    %s: Table [%4.4s] is not an AML table - ignoring\n",
                 Filename, TableHeader.Signature);
 
             return (AE_TYPE);
@@ -252,9 +283,9 @@ AcpiAcGetOneTableFromFile (
         return (AE_NO_MEMORY);
     }
 
-    /* Now read the entire table */
+    /* Read the entire ACPI table, including header */
 
-    fseek (File, Position, SEEK_SET);
+    fseek (File, TableOffset, SEEK_SET);
 
     Count = fread (Table, 1, TableHeader.Length, File);
     if (Count != (INT32) TableHeader.Length)
@@ -268,18 +299,13 @@ AcpiAcGetOneTableFromFile (
     Status = AcpiTbVerifyChecksum (Table, TableHeader.Length);
     if (ACPI_FAILURE (Status))
     {
-        Status = AcpiAcCheckTextModeCorruption (Table);
+        Status = AcCheckTextModeCorruption (Table);
         if (ACPI_FAILURE (Status))
         {
             goto ErrorExit;
         }
     }
 
-    fprintf (stderr,
-        "Loading ACPI table [%4.4s] from file %12s - Length 0x%06X (%u)\n",
-        TableHeader.Signature, Filename,
-        TableHeader.Length, TableHeader.Length);
-
     *ReturnTable = Table;
     return (AE_OK);
 
@@ -292,7 +318,159 @@ ErrorExit:
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiAcCheckTextModeCorruption
+ * FUNCTION:    AcIsFileBinary
+ *
+ * PARAMETERS:  File                - Open input file
+ *
+ * RETURN:      TRUE if file appears to be binary
+ *
+ * DESCRIPTION: Scan a file for any non-ASCII bytes.
+ *
+ * Note: Maintains current file position.
+ *
+ ******************************************************************************/
+
+BOOLEAN
+AcIsFileBinary (
+    FILE                    *File)
+{
+    UINT8                   Byte;
+    BOOLEAN                 IsBinary = FALSE;
+    long                    FileOffset;
+
+
+    /* Scan entire file for any non-ASCII bytes */
+
+    FileOffset = ftell (File);
+    while (fread (&Byte, 1, 1, File) == 1)
+    {
+        if (!isprint (Byte) && !isspace (Byte))
+        {
+            IsBinary = TRUE;
+            goto Exit;
+        }
+    }
+
+Exit:
+    fseek (File, FileOffset, SEEK_SET);
+    return (IsBinary);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcValidateTableHeader
+ *
+ * PARAMETERS:  File                - Open input file
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Determine if a file seems to contain one or more binary ACPI
+ *              tables, via the
+ *              following checks on what would be the table header:
+ *              1) File must be at least as long as an ACPI_TABLE_HEADER
+ *              2) There must be enough room in the file to hold entire table
+ *              3) Signature, OemId, OemTableId, AslCompilerId must be ASCII
+ *
+ * Note: There can be multiple definition blocks per file, so we cannot
+ * expect/compare the file size to be equal to the table length. 12/2015.
+ *
+ * Note: Maintains current file position.
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcValidateTableHeader (
+    FILE                    *File,
+    long                    TableOffset)
+{
+    ACPI_TABLE_HEADER       TableHeader;
+    size_t                  Actual;
+    long                    OriginalOffset;
+    UINT32                  FileSize;
+    UINT32                  i;
+
+
+    ACPI_FUNCTION_TRACE ("AcValidateTableHeader");
+
+
+    /* Read a potential table header */
+
+    OriginalOffset = ftell (File);
+    fseek (File, TableOffset, SEEK_SET);
+
+    Actual = fread (&TableHeader, 1, sizeof (ACPI_TABLE_HEADER), File);
+    fseek (File, OriginalOffset, SEEK_SET);
+
+    if (Actual < sizeof (ACPI_TABLE_HEADER))
+    {
+        return (AE_ERROR);
+    }
+
+    /* Validate the signature (limited ASCII chars) */
+
+    if (!AcpiIsValidSignature (TableHeader.Signature))
+    {
+        fprintf (stderr, "Invalid table signature: 0x%8.8X\n",
+            *ACPI_CAST_PTR (UINT32, TableHeader.Signature));
+        return (AE_BAD_SIGNATURE);
+    }
+
+    /* Validate table length against bytes remaining in the file */
+
+    FileSize = CmGetFileSize (File);
+    if (TableHeader.Length > (UINT32) (FileSize - TableOffset))
+    {
+        fprintf (stderr, "Table [%4.4s] is too long for file - "
+            "needs: 0x%.2X, remaining in file: 0x%.2X\n",
+            TableHeader.Signature, TableHeader.Length,
+            (UINT32) (FileSize - TableOffset));
+        return (AE_BAD_HEADER);
+    }
+
+    /*
+     * These fields must be ASCII: OemId, OemTableId, AslCompilerId.
+     * We allow a NULL terminator in OemId and OemTableId.
+     */
+    for (i = 0; i < ACPI_NAME_SIZE; i++)
+    {
+        if (!ACPI_IS_ASCII ((UINT8) TableHeader.AslCompilerId[i]))
+        {
+            goto BadCharacters;
+        }
+    }
+
+    for (i = 0; (i < ACPI_OEM_ID_SIZE) && (TableHeader.OemId[i]); i++)
+    {
+        if (!ACPI_IS_ASCII ((UINT8) TableHeader.OemId[i]))
+        {
+            goto BadCharacters;
+        }
+    }
+
+    for (i = 0; (i < ACPI_OEM_TABLE_ID_SIZE) && (TableHeader.OemTableId[i]); i++)
+    {
+        if (!ACPI_IS_ASCII ((UINT8) TableHeader.OemTableId[i]))
+        {
+            goto BadCharacters;
+        }
+    }
+
+    return (AE_OK);
+
+
+BadCharacters:
+
+    ACPI_WARNING ((AE_INFO,
+        "Table header for [%4.4s] has invalid ASCII character(s)",
+        TableHeader.Signature));
+    return (AE_OK);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcCheckTextModeCorruption
  *
  * PARAMETERS:  Table           - Table buffer starting with table header
  *
@@ -305,7 +483,7 @@ ErrorExit:
  ******************************************************************************/
 
 static ACPI_STATUS
-AcpiAcCheckTextModeCorruption (
+AcCheckTextModeCorruption (
     ACPI_TABLE_HEADER       *Table)
 {
     UINT32                  i;

Modified: vendor-sys/acpica/dist/source/common/adisasm.c
==============================================================================
--- vendor-sys/acpica/dist/source/common/adisasm.c	Fri Dec 18 18:08:53 2015	(r292446)
+++ vendor-sys/acpica/dist/source/common/adisasm.c	Fri Dec 18 18:35:46 2015	(r292447)
@@ -192,10 +192,12 @@ AdAmlDisassemble (
     {
         /* Get the list of all AML tables in the file */
 
-        Status = AcpiAcGetAllTablesFromFile (Filename,
+        Status = AcGetAllTablesFromFile (Filename,
             ACPI_GET_ALL_TABLES, &ListHead);
         if (ACPI_FAILURE (Status))
         {
+            AcpiOsPrintf ("Could not get ACPI tables from %s, %s\n",
+                Filename, AcpiFormatException (Status));
             return (Status);
         }
 
@@ -281,13 +283,12 @@ AdAmlDisassemble (
 
 Cleanup:
 
-// check!
-#if 0
-    if (Table && !AcpiGbl_ForceAmlDisassembly && !AcpiUtIsAmlTable (Table))
+    if (Table &&
+        !AcpiGbl_ForceAmlDisassembly &&
+        !AcpiUtIsAmlTable (Table))
     {
         ACPI_FREE (Table);
     }
-#endif
 
     if (File)
     {
@@ -592,7 +593,7 @@ AdDoExternalFileList (
         AcpiOsPrintf ("External object resolution file %16s\n",
             ExternalFilename);
 
-        Status = AcpiAcGetAllTablesFromFile (
+        Status = AcGetAllTablesFromFile (
             ExternalFilename, ACPI_GET_ONLY_AML_TABLES, &ExternalListHead);
         if (ACPI_FAILURE (Status))
         {

Modified: vendor-sys/acpica/dist/source/common/getopt.c
==============================================================================
--- vendor-sys/acpica/dist/source/common/getopt.c	Fri Dec 18 18:08:53 2015	(r292446)
+++ vendor-sys/acpica/dist/source/common/getopt.c	Fri Dec 18 18:35:46 2015	(r292447)
@@ -47,6 +47,7 @@
  * Option strings:
  *    "f"       - Option has no arguments
  *    "f:"      - Option requires an argument
+ *    "f+"      - Option has an optional argument
  *    "f^"      - Option has optional single-char sub-options
  *    "f|"      - Option has required single-char sub-options
  */

Modified: vendor-sys/acpica/dist/source/compiler/aslascii.c
==============================================================================
--- vendor-sys/acpica/dist/source/compiler/aslascii.c	Fri Dec 18 18:08:53 2015	(r292446)
+++ vendor-sys/acpica/dist/source/compiler/aslascii.c	Fri Dec 18 18:35:46 2015	(r292447)
@@ -42,6 +42,7 @@
  */
 
 #include "aslcompiler.h"
+#include <actables.h>
 #include <acapps.h>
 
 #define _COMPONENT          ACPI_COMPILER
@@ -63,90 +64,7 @@ FlConsumeNewComment (
 
 /*******************************************************************************
  *
- * FUNCTION:    FlCheckForAcpiTable
- *
- * PARAMETERS:  Handle              - Open input file
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Determine if a file seems to be a binary ACPI table, via the
- *              following checks on what would be the table header:
- *              0) File must be at least as long as an ACPI_TABLE_HEADER
- *              1) The header length field must match the file size
- *              2) Signature, OemId, OemTableId, AslCompilerId must be ASCII
- *
- ******************************************************************************/
-
-ACPI_STATUS
-FlCheckForAcpiTable (
-    FILE                    *Handle)
-{
-    ACPI_TABLE_HEADER       Table;
-    UINT32                  FileSize;
-    size_t                  Actual;
-    UINT32                  i;
-
-
-    /* Read a potential table header */
-
-    Actual = fread (&Table, 1, sizeof (ACPI_TABLE_HEADER), Handle);
-    fseek (Handle, 0, SEEK_SET);
-
-    if (Actual < sizeof (ACPI_TABLE_HEADER))
-    {
-        return (AE_ERROR);
-    }
-
-    /* Header length field must match the file size */
-
-    FileSize = CmGetFileSize (Handle);
-    if (Table.Length != FileSize)
-    {
-        return (AE_ERROR);
-    }
-
-    /*
-     * These fields must be ASCII:
-     * Signature, OemId, OemTableId, AslCompilerId.
-     * We allow a NULL terminator in OemId and OemTableId.
-     */
-    for (i = 0; i < ACPI_NAME_SIZE; i++)
-    {
-        if (!ACPI_IS_ASCII ((UINT8) Table.Signature[i]))
-        {
-            return (AE_ERROR);
-        }
-
-        if (!ACPI_IS_ASCII ((UINT8) Table.AslCompilerId[i]))
-        {
-            return (AE_ERROR);
-        }
-    }
-
-    for (i = 0; (i < ACPI_OEM_ID_SIZE) && (Table.OemId[i]); i++)
-    {
-        if (!ACPI_IS_ASCII ((UINT8) Table.OemId[i]))
-        {
-            return (AE_ERROR);
-        }
-    }
-
-    for (i = 0; (i < ACPI_OEM_TABLE_ID_SIZE) && (Table.OemTableId[i]); i++)
-    {
-        if (!ACPI_IS_ASCII ((UINT8) Table.OemTableId[i]))
-        {
-            return (AE_ERROR);
-        }
-    }
-
-    printf ("Binary file appears to be a valid ACPI table, disassembling\n");
-    return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION:    FlCheckForAscii
+ * FUNCTION:    FlIsFileAsciiSource
  *
  * PARAMETERS:  Filename            - Full input filename
  *              DisplayErrors       - TRUE if error messages desired
@@ -163,7 +81,7 @@ FlCheckForAcpiTable (
  ******************************************************************************/
 
 ACPI_STATUS
-FlCheckForAscii (
+FlIsFileAsciiSource (
     char                    *Filename,
     BOOLEAN                 DisplayErrors)
 {

Modified: vendor-sys/acpica/dist/source/compiler/aslcompiler.h
==============================================================================
--- vendor-sys/acpica/dist/source/compiler/aslcompiler.h	Fri Dec 18 18:08:53 2015	(r292446)
+++ vendor-sys/acpica/dist/source/compiler/aslcompiler.h	Fri Dec 18 18:35:46 2015	(r292447)
@@ -167,11 +167,7 @@ CmDeleteCaches (
  * aslascii - ascii support
  */
 ACPI_STATUS
-FlCheckForAcpiTable (
-    FILE                    *Handle);
-
-ACPI_STATUS
-FlCheckForAscii (
+FlIsFileAsciiSource (
     char                    *Filename,
     BOOLEAN                 DisplayErrors);
 
@@ -741,6 +737,10 @@ TrSetEndLineNumber (
     ACPI_PARSE_OBJECT       *Op);
 
 void
+TrSetCurrentFilename (
+    ACPI_PARSE_OBJECT       *Op);
+
+void
 TrWalkTree (
     void);
 
@@ -923,6 +923,10 @@ DbgPrint (
 #define ASL_PARSE_OUTPUT    1
 #define ASL_TREE_OUTPUT     2
 
+BOOLEAN
+UtQueryForOverwrite (
+    char                    *Pathname);
+
 void
 UtDisplaySupportedTables (
     void);
@@ -1281,6 +1285,6 @@ DtDoCompile(
 
 ACPI_STATUS
 DtCreateTemplates (
-    char                    *Signature);
+    char                    **argv);
 
 #endif /*  __ASLCOMPILER_H */

Modified: vendor-sys/acpica/dist/source/compiler/asldefine.h
==============================================================================
--- vendor-sys/acpica/dist/source/compiler/asldefine.h	Fri Dec 18 18:08:53 2015	(r292446)
+++ vendor-sys/acpica/dist/source/compiler/asldefine.h	Fri Dec 18 18:35:46 2015	(r292447)
@@ -106,10 +106,10 @@
 
 /* Types for input files */
 
-#define ASL_INPUT_TYPE_BINARY       0
-#define ASL_INPUT_TYPE_ACPI_TABLE   1
-#define ASL_INPUT_TYPE_ASCII_ASL    2
-#define ASL_INPUT_TYPE_ASCII_DATA   3
+#define ASL_INPUT_TYPE_BINARY               0
+#define ASL_INPUT_TYPE_BINARY_ACPI_TABLE    1
+#define ASL_INPUT_TYPE_ASCII_ASL            2
+#define ASL_INPUT_TYPE_ASCII_DATA           3
 
 
 /* Misc */

Modified: vendor-sys/acpica/dist/source/compiler/aslfiles.c
==============================================================================
--- vendor-sys/acpica/dist/source/compiler/aslfiles.c	Fri Dec 18 18:08:53 2015	(r292446)
+++ vendor-sys/acpica/dist/source/compiler/aslfiles.c	Fri Dec 18 18:35:46 2015	(r292447)
@@ -336,6 +336,7 @@ FlOpenIncludeWithPrefix (
      */
     Gbl_CurrentLineNumber--;
     OriginalLineNumber = Gbl_CurrentLineNumber;
+
     while (DtGetNextLine (IncludeFile, DT_ALLOW_MULTILINE_QUOTES) != ASL_EOF)
     {
         if (Gbl_CurrentLineBuffer[0] == '#')
@@ -344,6 +345,7 @@ FlOpenIncludeWithPrefix (
                 Op, "use #include instead");
         }
     }
+
     Gbl_CurrentLineNumber = OriginalLineNumber;
 
     /* Must seek back to the start of the file */
@@ -570,7 +572,7 @@ FlOpenMiscOutputFiles (
 
     /* All done for disassembler */
 
-    if (Gbl_FileType == ASL_INPUT_TYPE_ACPI_TABLE)
+    if (Gbl_FileType == ASL_INPUT_TYPE_BINARY_ACPI_TABLE)
     {
         return (AE_OK);
     }

Modified: vendor-sys/acpica/dist/source/compiler/aslglobal.h
==============================================================================
--- vendor-sys/acpica/dist/source/compiler/aslglobal.h	Fri Dec 18 18:08:53 2015	(r292446)
+++ vendor-sys/acpica/dist/source/compiler/aslglobal.h	Fri Dec 18 18:35:46 2015	(r292447)
@@ -197,6 +197,7 @@ ASL_EXTERN char                     ASL_
 ASL_EXTERN ASL_INCLUDE_DIR          ASL_INIT_GLOBAL (*Gbl_IncludeDirList, NULL);
 ASL_EXTERN char                     *Gbl_CurrentInputFilename;
 ASL_EXTERN char                     ASL_INIT_GLOBAL (*Gbl_ExternalRefFilename, NULL);
+ASL_EXTERN char                     ASL_INIT_GLOBAL (*Gbl_PreviousIncludeFilename, NULL);
 
 ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_HasIncludeFiles, FALSE);
 
@@ -246,7 +247,6 @@ ASL_EXTERN ASL_LISTING_NODE         ASL_
 ASL_EXTERN ACPI_PARSE_OBJECT        *Gbl_FirstLevelInsertionNode;
 ASL_EXTERN UINT8                    ASL_INIT_GLOBAL (Gbl_FileType, 0);
 ASL_EXTERN char                     ASL_INIT_GLOBAL (*Gbl_Signature, NULL);
-ASL_EXTERN char                     *Gbl_TemplateSignature;
 
 ASL_EXTERN UINT32                   ASL_INIT_GLOBAL (Gbl_CurrentHexColumn, 0);
 ASL_EXTERN UINT32                   ASL_INIT_GLOBAL (Gbl_CurrentAmlOffset, 0);

Modified: vendor-sys/acpica/dist/source/compiler/asllisting.c
==============================================================================
--- vendor-sys/acpica/dist/source/compiler/asllisting.c	Fri Dec 18 18:08:53 2015	(r292446)
+++ vendor-sys/acpica/dist/source/compiler/asllisting.c	Fri Dec 18 18:35:46 2015	(r292447)
@@ -277,6 +277,34 @@ LsTreeWriteWalk (
 
     UtPrintFormattedName (Op->Asl.ParseOpcode, Level);
 
+    if (Op->Asl.ParseOpcode == PARSEOP_NAMESEG)
+    {
+        DbgPrint (ASL_TREE_OUTPUT,
+            "%10.4s      ", Op->Asl.Value.Name);
+    }
+    else if ((Op->Asl.ParseOpcode == PARSEOP_NAMESTRING) ||
+        (Op->Asl.ParseOpcode == PARSEOP_METHODCALL))
+    {
+        DbgPrint (ASL_TREE_OUTPUT,
+            "%10.32s      ", Op->Asl.Value.String);
+    }
+    else if (Op->Asl.ParseOpcode == PARSEOP_INCLUDE)
+    {
+        DbgPrint (ASL_TREE_OUTPUT,
+            "Open: %s\n", Op->Asl.Value.String);
+        return (AE_OK);
+    }
+    else if (Op->Asl.ParseOpcode == PARSEOP_INCLUDE_END)
+    {
+        DbgPrint (ASL_TREE_OUTPUT,
+            "Close: %s\n", Op->Asl.Filename);
+        return (AE_OK);
+    }
+    else
+    {
+        DbgPrint (ASL_TREE_OUTPUT, "                ");
+    }
+
     DbgPrint (ASL_TREE_OUTPUT, "    (%.4X) Flags %8.8X",
         Op->Asl.ParseOpcode, Op->Asl.CompileFlags);
     TrPrintNodeCompileFlags (Op->Asl.CompileFlags);
@@ -428,7 +456,7 @@ LsWriteNodeToListing (
 
         /* Create a new listing node and push it */
 
-        LsPushNode (Op->Asl.Child->Asl.Value.String);
+        LsPushNode (Op->Asl.Value.String);
         return;
 
 

Modified: vendor-sys/acpica/dist/source/compiler/aslmain.c
==============================================================================
--- vendor-sys/acpica/dist/source/compiler/aslmain.c	Fri Dec 18 18:08:53 2015	(r292446)
+++ vendor-sys/acpica/dist/source/compiler/aslmain.c	Fri Dec 18 18:35:46 2015	(r292447)
@@ -127,7 +127,8 @@ Usage (
     printf ("\nGeneral:\n");
     ACPI_OPTION ("-@ <file>",       "Specify command file");
     ACPI_OPTION ("-I <dir>",        "Specify additional include directory");
-    ACPI_OPTION ("-T <sig>|ALL|*",  "Create table template file for ACPI <Sig>");
+    ACPI_OPTION ("-T <sig list>|ALL",   "Create ACPI table template/example files");
+    ACPI_OPTION ("-T <count>",      "Emit DSDT and <count> SSDTs to same file");
     ACPI_OPTION ("-p <prefix>",     "Specify path/filename prefix for all output files");
     ACPI_OPTION ("-v",              "Display compiler version");
     ACPI_OPTION ("-vo",             "Enable optimization comments");

Modified: vendor-sys/acpica/dist/source/compiler/aslmap.c
==============================================================================
--- vendor-sys/acpica/dist/source/compiler/aslmap.c	Fri Dec 18 18:08:53 2015	(r292446)
+++ vendor-sys/acpica/dist/source/compiler/aslmap.c	Fri Dec 18 18:35:46 2015	(r292447)
@@ -313,7 +313,7 @@ const ASL_MAPPING_ENTRY     AslKeywordMa
 /* NOR */                       OP_TABLE_ENTRY (AML_BIT_NOR_OP,             0,                              0,                  ACPI_BTYPE_INTEGER),
 /* NOT */                       OP_TABLE_ENTRY (AML_BIT_NOT_OP,             0,                              0,                  ACPI_BTYPE_INTEGER),
 /* NOTIFY */                    OP_TABLE_ENTRY (AML_NOTIFY_OP,              0,                              0,                  0),
-/* OBJECTTYPE */                OP_TABLE_ENTRY (AML_TYPE_OP,                0,                              0,                  ACPI_BTYPE_INTEGER),
+/* OBJECTTYPE */                OP_TABLE_ENTRY (AML_OBJECT_TYPE_OP,         0,                              0,                  ACPI_BTYPE_INTEGER),
 /* OBJECTTYPE_BFF */            OP_TABLE_ENTRY (AML_BYTE_OP,                ACPI_TYPE_BUFFER_FIELD,         0,                  0),
 /* OBJECTTYPE_BUF */            OP_TABLE_ENTRY (AML_BYTE_OP,                ACPI_TYPE_BUFFER,               0,                  0),
 /* OBJECTTYPE_DDB */            OP_TABLE_ENTRY (AML_BYTE_OP,                ACPI_TYPE_DDB_HANDLE,           0,                  0),

Modified: vendor-sys/acpica/dist/source/compiler/aslopcodes.c
==============================================================================
--- vendor-sys/acpica/dist/source/compiler/aslopcodes.c	Fri Dec 18 18:08:53 2015	(r292446)
+++ vendor-sys/acpica/dist/source/compiler/aslopcodes.c	Fri Dec 18 18:35:46 2015	(r292447)
@@ -1510,7 +1510,6 @@ OpcGenerateAmlOpcode (
 
     case PARSEOP_INCLUDE:
 
-        Op->Asl.Child->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG;
         Gbl_HasIncludeFiles = TRUE;
         break;
 

Modified: vendor-sys/acpica/dist/source/compiler/asloptions.c
==============================================================================
--- vendor-sys/acpica/dist/source/compiler/asloptions.c	Fri Dec 18 18:08:53 2015	(r292446)
+++ vendor-sys/acpica/dist/source/compiler/asloptions.c	Fri Dec 18 18:35:46 2015	(r292447)
@@ -107,7 +107,7 @@ AslCommandLine (
 
     if (Gbl_DoTemplates)
     {
-        Status = DtCreateTemplates (Gbl_TemplateSignature);
+        Status = DtCreateTemplates (argv);
         if (ACPI_FAILURE (Status))
         {
             exit (-1);
@@ -662,7 +662,6 @@ AslDoOptions (
     case 'T':   /* Create a ACPI table template file */
 
         Gbl_DoTemplates = TRUE;
-        Gbl_TemplateSignature = AcpiGbl_Optarg;
         break;
 
     case 'v':   /* Version and verbosity settings */

Modified: vendor-sys/acpica/dist/source/compiler/aslrules.y
==============================================================================
--- vendor-sys/acpica/dist/source/compiler/aslrules.y	Fri Dec 18 18:08:53 2015	(r292446)
+++ vendor-sys/acpica/dist/source/compiler/aslrules.y	Fri Dec 18 18:35:46 2015	(r292447)
@@ -427,6 +427,7 @@ String
 
 CompilerDirective
     : IncludeTerm                   {}
+    | IncludeEndTerm                {}
     | ExternalTerm                  {}
     ;
 
@@ -1033,14 +1034,13 @@ IfTerm
     ;
 
 IncludeTerm
-    : PARSEOP_INCLUDE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_INCLUDE);}
-        String  ')'                 {TrLinkChildren ($<n>3,1,$4);FlOpenIncludeFile ($4);}
-        TermList
-        IncludeEndTerm              {$$ = TrLinkPeerNodes (3,$<n>3,$7,$8);}
+    : PARSEOP_INCLUDE '('
+        String  ')'                 {$$ = TrUpdateNode (PARSEOP_INCLUDE, $3);
+                                        FlOpenIncludeFile ($3);}
     ;
 
 IncludeEndTerm
-    : PARSEOP_INCLUDE_END           {$$ = TrCreateLeafNode (PARSEOP_INCLUDE_END);}
+    : PARSEOP_INCLUDE_END           {$<n>$ = TrCreateLeafNode (PARSEOP_INCLUDE_END); TrSetCurrentFilename ($$);}
     ;
 
 IncTerm

Modified: vendor-sys/acpica/dist/source/compiler/aslstartup.c
==============================================================================
--- vendor-sys/acpica/dist/source/compiler/aslstartup.c	Fri Dec 18 18:08:53 2015	(r292446)
+++ vendor-sys/acpica/dist/source/compiler/aslstartup.c	Fri Dec 18 18:35:46 2015	(r292447)
@@ -144,62 +144,63 @@ AslDetectSourceFileType (
     ASL_FILE_INFO           *Info)
 {
     char                    *FileChar;
-    UINT8                   Type;
+    UINT8                   Type = ASL_INPUT_TYPE_ASCII_DATA; /* default */
     ACPI_STATUS             Status;
 
 
-    /* Check for a valid binary ACPI table */
+    /* Check for 100% ASCII source file (comments are ignored) */
 
-    Status = FlCheckForAcpiTable (Info->Handle);
+    Status = FlIsFileAsciiSource (Info->Filename, FALSE);
     if (ACPI_SUCCESS (Status))
     {
-        Type = ASL_INPUT_TYPE_ACPI_TABLE;
-        goto Cleanup;
-    }
+        /*
+         * File contains ASCII source code. Determine if this is an ASL
+         * file or an ACPI data table file.
+         */
+        while (fgets (Gbl_CurrentLineBuffer, Gbl_LineBufferSize, Info->Handle))
+        {
+            /* Uppercase the buffer for caseless compare */
 
-    /* Check for 100% ASCII source file (comments are ignored) */
+            FileChar = Gbl_CurrentLineBuffer;
+            while (*FileChar)
+            {
+                *FileChar = (char) toupper ((int) *FileChar);
+                FileChar++;
+            }
 
-    Status = FlCheckForAscii (Info->Filename, TRUE);
-    if (ACPI_FAILURE (Status))
-    {
-        printf ("Invalid characters in input file - %s\n", Info->Filename);
+            /* Presence of "DefinitionBlock" indicates actual ASL code */
 
-        if (!Gbl_IgnoreErrors)
-        {
-            Type = ASL_INPUT_TYPE_BINARY;
-            goto Cleanup;
+            if (strstr (Gbl_CurrentLineBuffer, "DEFINITIONBLOCK"))
+            {
+                /* Appears to be an ASL file */
+
+                Type = ASL_INPUT_TYPE_ASCII_ASL;
+                goto Cleanup;
+            }
         }
-    }
 
-    /*
-     * File is ASCII. Determine if this is an ASL file or an ACPI data
-     * table file.
-     */
-    while (fgets (Gbl_CurrentLineBuffer, Gbl_LineBufferSize, Info->Handle))
-    {
-        /* Uppercase the buffer for caseless compare */
+        /* Appears to be an ASCII data table source file */
 
-        FileChar = Gbl_CurrentLineBuffer;
-        while (*FileChar)
-        {
-            *FileChar = (char) toupper ((int) *FileChar);
-            FileChar++;
-        }
+        Type = ASL_INPUT_TYPE_ASCII_DATA;
+        goto Cleanup;
+    }
 
-        /* Presence of "DefinitionBlock" indicates actual ASL code */
+    /* We have some sort of binary table, check for valid ACPI table */
 
-        if (strstr (Gbl_CurrentLineBuffer, "DEFINITIONBLOCK"))
-        {

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201512181835.tBIIZkE3082149>