svn commit: r196804 - in vendor-sys/acpica/dist: . common compiler dispatcher executer include namespace parser tools/acpiexec utilities

Jung-uk Kim jkim at FreeBSD.org
Fri Sep 4 01:21:44 UTC 2009


Author: jkim
Date: Fri Sep  4 01:21:44 2009
New Revision: 196804
URL: http://svn.freebsd.org/changeset/base/196804

Log:
  Import ACPICA 20090903

Modified:
  vendor-sys/acpica/dist/changes.txt
  vendor-sys/acpica/dist/common/dmtbdump.c
  vendor-sys/acpica/dist/common/dmtbinfo.c
  vendor-sys/acpica/dist/compiler/aslcompiler.h
  vendor-sys/acpica/dist/compiler/aslfiles.c
  vendor-sys/acpica/dist/compiler/aslglobal.h
  vendor-sys/acpica/dist/compiler/aslload.c
  vendor-sys/acpica/dist/compiler/aslmain.c
  vendor-sys/acpica/dist/compiler/asltypes.h
  vendor-sys/acpica/dist/dispatcher/dsmthdat.c
  vendor-sys/acpica/dist/dispatcher/dsobject.c
  vendor-sys/acpica/dist/executer/exstorob.c
  vendor-sys/acpica/dist/include/acdisasm.h
  vendor-sys/acpica/dist/include/aclocal.h
  vendor-sys/acpica/dist/include/acpixf.h
  vendor-sys/acpica/dist/namespace/nsinit.c
  vendor-sys/acpica/dist/namespace/nspredef.c
  vendor-sys/acpica/dist/parser/psloop.c
  vendor-sys/acpica/dist/tools/acpiexec/aecommon.h
  vendor-sys/acpica/dist/tools/acpiexec/aeexec.c
  vendor-sys/acpica/dist/tools/acpiexec/aehandlers.c
  vendor-sys/acpica/dist/tools/acpiexec/aemain.c
  vendor-sys/acpica/dist/tools/acpiexec/aetables.c
  vendor-sys/acpica/dist/utilities/uteval.c

Modified: vendor-sys/acpica/dist/changes.txt
==============================================================================
--- vendor-sys/acpica/dist/changes.txt	Thu Sep  3 23:04:33 2009	(r196803)
+++ vendor-sys/acpica/dist/changes.txt	Fri Sep  4 01:21:44 2009	(r196804)
@@ -1,4 +1,77 @@
 ----------------------------------------
+03 September 2009. Summary of changes for version 20090903:
+
+This release is available at www.acpica.org/downloads
+
+1) ACPI CA Core Subsystem:
+
+For Windows Vista compatibility, added the automatic execution of an _INI 
+method located at the namespace root (\_INI). This method is executed at 
+table load time. This support is in addition to the automatic execution of 
+\_SB._INI. Lin Ming.
+
+Fixed a possible memory leak in the interpreter for AML package objects if 
+the package initializer list is longer than the defined size of the package. 
+This apparently can only happen if the BIOS changes the package size on the 
+fly (seen in a _PSS object), as ASL compilers do not allow this. The 
+interpreter will truncate the package to the defined size (and issue an error 
+message), but previously could leave the extra objects undeleted if they were 
+pre-created during the argument processing (such is the case if the package 
+consists of a number of sub-packages as in the _PSS.) ACPICA BZ 805.
+
+Fixed a problem seen when a Buffer or String is stored to itself via ASL. 
+This has been reported in the field. Previously, ACPICA would zero out the 
+buffer/string. Now, the operation is treated as a noop. Provides Windows 
+compatibility. ACPICA BZ 803. Lin Ming.
+
+Removed an extraneous error message for ASL constructs of the form 
+Store(LocalX,LocalX) when LocalX is uninitialized. These curious statements 
+are seen in many BIOSs and are once again treated as NOOPs and no error is 
+emitted when they are encountered. ACPICA BZ 785.
+
+Fixed an extraneous warning message if a _DSM reserved method returns a 
+Package object. _DSM can return any type of object, so validation on the 
+return type cannot be performed. ACPICA BZ 802.
+
+Example Code and Data Size: These are the sizes for the OS-independent 
+acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
+debug version of the code includes the debug output trace mechanism and has a 
+much larger code and data size.
+
+  Previous Release:
+    Non-Debug Version:  85.5K Code, 18.0K Data, 103.5K Total
+    Debug Version:     161.6K Code, 50.9K Data, 212.5K Total
+  Current Release:
+    Non-Debug Version:  85.6K Code, 18.0K Data, 103.6K Total
+    Debug Version:     161.7K Code, 50.9K Data, 212.6K Total
+
+2) iASL Compiler/Disassembler and Tools:
+
+iASL: Fixed a problem with the use of the Alias operator and Resource 
+Templates. The correct alias is now constructed and no error is emitted. 
+ACPICA BZ 738.
+
+iASL: Implemented the -I option to specify additional search directories for 
+include files. Allows multiple additional search paths for include files. 
+Directories are searched in the order specified on the command line (after 
+the local directory is searched.) ACPICA BZ 800.
+
+iASL: Fixed a problem where the full pathname for include files was not 
+emitted for warnings/errors. This caused the IDE support to not work 
+properly. ACPICA BZ 765.
+
+iASL: Implemented the -@ option to specify a Windows-style response file 
+containing additional command line options. ACPICA BZ 801.
+
+AcpiExec: Added support to load multiple AML files simultaneously (such as a 
+DSDT and multiple SSDTs). Also added support for wildcards within the AML 
+pathname. These features allow all machine tables to be easily loaded and 
+debugged together. ACPICA BZ 804.
+
+Disassembler: Added missing support for disassembly of HEST table Error Bank 
+subtables. 
+
+----------------------------------------
 30 July 2009. Summary of changes for version 20090730:
 
 This release is available at www.acpica.org/downloads

Modified: vendor-sys/acpica/dist/common/dmtbdump.c
==============================================================================
--- vendor-sys/acpica/dist/common/dmtbdump.c	Thu Sep  3 23:04:33 2009	(r196803)
+++ vendor-sys/acpica/dist/common/dmtbdump.c	Fri Sep  4 01:21:44 2009	(r196804)
@@ -747,6 +747,8 @@ AcpiDmDumpHest (
     UINT32                  Offset = sizeof (ACPI_TABLE_HEST);
     ACPI_DMTABLE_INFO       *InfoTable;
     UINT32                  SubTableLength;
+    UINT32                  BankCount;
+    ACPI_HEST_IA_ERROR_BANK *BankTable;
 
 
     /* Main table */
@@ -762,16 +764,21 @@ AcpiDmDumpHest (
     SubTable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Table, Offset);
     while (Offset < Table->Length)
     {
+        BankCount = 0;
         switch (SubTable->Type)
         {
         case ACPI_HEST_TYPE_IA32_CHECK:
             InfoTable = AcpiDmTableInfoHest0;
             SubTableLength = sizeof (ACPI_HEST_IA_MACHINE_CHECK);
+            BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_MACHINE_CHECK,
+                            SubTable))->NumHardwareBanks;
             break;
 
         case ACPI_HEST_TYPE_IA32_CORRECTED_CHECK:
             InfoTable = AcpiDmTableInfoHest1;
             SubTableLength = sizeof (ACPI_HEST_IA_CORRECTED);
+            BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_CORRECTED,
+                            SubTable))->NumHardwareBanks;
             break;
 
         case ACPI_HEST_TYPE_IA32_NMI:
@@ -814,9 +821,34 @@ AcpiDmDumpHest (
             return;
         }
 
-        /* Point to next sub-table (each subtable is of fixed length) */
+        /* Point to end of current subtable (each subtable above is of fixed length) */
 
         Offset += SubTableLength;
+
+        /* If there are any (fixed-length) Error Banks from above, dump them now */
+
+        if (BankCount)
+        {
+            BankTable = ACPI_ADD_PTR (ACPI_HEST_IA_ERROR_BANK, SubTable, SubTableLength);
+            SubTableLength += BankCount * sizeof (ACPI_HEST_IA_ERROR_BANK);
+
+            while (BankCount)
+            {
+                AcpiOsPrintf ("\n");
+                Status = AcpiDmDumpTable (Length, Offset, BankTable,
+                            sizeof (ACPI_HEST_IA_ERROR_BANK), AcpiDmTableInfoHestBank);
+                if (ACPI_FAILURE (Status))
+                {
+                    return;
+                }
+                Offset += sizeof (ACPI_HEST_IA_ERROR_BANK);
+                BankTable++;
+                BankCount--;
+            }
+        }
+
+        /* Point to next sub-table */
+
         SubTable = ACPI_ADD_PTR (ACPI_HEST_HEADER, SubTable, SubTableLength);
     }
 }

Modified: vendor-sys/acpica/dist/common/dmtbinfo.c
==============================================================================
--- vendor-sys/acpica/dist/common/dmtbinfo.c	Thu Sep  3 23:04:33 2009	(r196803)
+++ vendor-sys/acpica/dist/common/dmtbinfo.c	Fri Sep  4 01:21:44 2009	(r196804)
@@ -178,6 +178,7 @@
 #define ACPI_HEST8_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_HEST_AER_BRIDGE,f)
 #define ACPI_HEST9_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_HEST_GENERIC,f)
 #define ACPI_HESTN_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_HEST_NOTIFY,f)
+#define ACPI_HESTB_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_HEST_IA_ERROR_BANK,f)
 #define ACPI_IVRSH_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_IVRS_HEADER,f)
 #define ACPI_IVRS0_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_IVRS_HARDWARE,f)
 #define ACPI_IVRS1_OFFSET(f)            (UINT8) ACPI_OFFSET (ACPI_IVRS_MEMORY,f)
@@ -905,6 +906,25 @@ ACPI_DMTABLE_INFO           AcpiDmTableI
 };
 
 
+/*
+ * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and
+ * ACPI_HEST_IA_CORRECTED structures.
+ */
+ACPI_DMTABLE_INFO           AcpiDmTableInfoHestBank[] =
+{
+    {ACPI_DMT_UINT8,    ACPI_HESTB_OFFSET (BankNumber),             "Bank Number"},
+    {ACPI_DMT_UINT8,    ACPI_HESTB_OFFSET (ClearStatusOnInit),      "Clear Status On Init"},
+    {ACPI_DMT_UINT8,    ACPI_HESTB_OFFSET (StatusFormat),           "Status Format"},
+    {ACPI_DMT_UINT8,    ACPI_HESTB_OFFSET (Reserved),               "Reserved"},
+    {ACPI_DMT_UINT32,   ACPI_HESTB_OFFSET (ControlRegister),        "Control Register"},
+    {ACPI_DMT_UINT64,   ACPI_HESTB_OFFSET (ControlData),            "Control Data"},
+    {ACPI_DMT_UINT32,   ACPI_HESTB_OFFSET (StatusRegister),         "Status Register"},
+    {ACPI_DMT_UINT32,   ACPI_HESTB_OFFSET (AddressRegister),        "Address Register"},
+    {ACPI_DMT_UINT32,   ACPI_HESTB_OFFSET (MiscRegister),           "Misc Register"},
+    {ACPI_DMT_EXIT,     0,                                          NULL}
+};
+
+
 /*******************************************************************************
  *
  * HPET - High Precision Event Timer table

Modified: vendor-sys/acpica/dist/compiler/aslcompiler.h
==============================================================================
--- vendor-sys/acpica/dist/compiler/aslcompiler.h	Thu Sep  3 23:04:33 2009	(r196803)
+++ vendor-sys/acpica/dist/compiler/aslcompiler.h	Fri Sep  4 01:21:44 2009	(r196804)
@@ -556,6 +556,10 @@ AslAbort (
     void);
 
 void
+FlAddIncludeDirectory (
+    char                    *Dir);
+
+void
 FlOpenIncludeFile (
     ACPI_PARSE_OBJECT       *Op);
 

Modified: vendor-sys/acpica/dist/compiler/aslfiles.c
==============================================================================
--- vendor-sys/acpica/dist/compiler/aslfiles.c	Thu Sep  3 23:04:33 2009	(r196803)
+++ vendor-sys/acpica/dist/compiler/aslfiles.c	Fri Sep  4 01:21:44 2009	(r196804)
@@ -128,10 +128,11 @@ FlOpenFile (
     char                    *Filename,
     char                    *Mode);
 
-static FILE *
-FlOpenLocalFile (
-    char                    *LocalName,
-    char                    *Mode);
+FILE *
+FlOpenIncludeWithPrefix (
+    char                    *PrefixDir,
+    char                    *Filename);
+
 
 #ifdef ACPI_OBSOLETE_FUNCTIONS
 ACPI_STATUS
@@ -172,45 +173,6 @@ AslAbort (
 
 /*******************************************************************************
  *
- * FUNCTION:    FlOpenLocalFile
- *
- * PARAMETERS:  LocalName           - Single filename (not a pathname)
- *              Mode                - Open mode for fopen
- *
- * RETURN:      File descriptor
- *
- * DESCRIPTION: Build a complete pathname for the input filename and open
- *              the file.
- *
- ******************************************************************************/
-
-static FILE *
-FlOpenLocalFile (
-    char                    *LocalName,
-    char                    *Mode)
-{
-
-    StringBuffer[0] = 0;
-
-    /* Check for an absolute pathname */
-
-    if ((LocalName[0] != '/') &&        /* Forward slash */
-        (LocalName[0] != '\\') &&       /* backslash (Win) */
-        (LocalName[1] != ':'))          /* Device name (Win) */
-    {
-        /* The include file path is relative, prepend the directory path */
-
-        strcat (StringBuffer, Gbl_DirectoryPath);
-    }
-    strcat (StringBuffer, LocalName);
-
-    DbgPrint (ASL_PARSE_OUTPUT, "FlOpenLocalFile: %s\n", StringBuffer);
-    return (fopen (StringBuffer, (const char *) Mode));
-}
-
-
-/*******************************************************************************
- *
  * FUNCTION:    FlFileError
  *
  * PARAMETERS:  FileId              - Index into file info array
@@ -481,6 +443,122 @@ FlSetLineNumber (
 
 /*******************************************************************************
  *
+ * FUNCTION:    FlAddIncludeDirectory
+ *
+ * PARAMETERS:  Dir             - Directory pathname string
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Add a directory the list of include prefix directories.
+ *
+ ******************************************************************************/
+
+void
+FlAddIncludeDirectory (
+    char                    *Dir)
+{
+    ASL_INCLUDE_DIR         *NewDir;
+    ASL_INCLUDE_DIR         *NextDir;
+    ASL_INCLUDE_DIR         *PrevDir = NULL;
+    UINT32                  NeedsSeparator = 0;
+    size_t                  DirLength;
+
+
+    DirLength = strlen (Dir);
+    if (!DirLength)
+    {
+        return;
+    }
+
+    /* Make sure that the pathname ends with a path separator */
+
+    if ((Dir[DirLength-1] != '/') &&
+        (Dir[DirLength-1] != '\\'))
+    {
+        NeedsSeparator = 1;
+    }
+
+    NewDir = ACPI_ALLOCATE_ZEROED (sizeof (ASL_INCLUDE_DIR));
+    NewDir->Dir = ACPI_ALLOCATE (DirLength + 1 + NeedsSeparator);
+    strcpy (NewDir->Dir, Dir);
+    if (NeedsSeparator)
+    {
+        strcat (NewDir->Dir, "/");
+    }
+
+    /*
+     * Preserve command line ordering of -I options by adding new elements
+     * at the end of the list
+     */
+    NextDir = Gbl_IncludeDirList;
+    while (NextDir)
+    {
+        PrevDir = NextDir;
+        NextDir = NextDir->Next;
+    }
+
+    if (PrevDir)
+    {
+        PrevDir->Next = NewDir;
+    }
+    else
+    {
+        Gbl_IncludeDirList = NewDir;
+    }
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    FlOpenIncludeWithPrefix
+ *
+ * PARAMETERS:  PrefixDir       - Prefix directory pathname. Can be a zero
+ *                                length string.
+ *              Filename        - The include filename from the source ASL.
+ *
+ * RETURN:      Valid file descriptor if successful. Null otherwise.
+ *
+ * DESCRIPTION: Open an include file and push it on the input file stack.
+ *
+ ******************************************************************************/
+
+FILE *
+FlOpenIncludeWithPrefix (
+    char                    *PrefixDir,
+    char                    *Filename)
+{
+    FILE                    *IncludeFile;
+    char                    *Pathname;
+
+
+    /* Build the full pathname to the file */
+
+    Pathname = ACPI_ALLOCATE (strlen (PrefixDir) + strlen (Filename) + 1);
+
+    strcpy (Pathname, PrefixDir);
+    strcat (Pathname, Filename);
+
+    DbgPrint (ASL_PARSE_OUTPUT, "\nAttempt to open include file: path %s\n\n",
+        Pathname);
+
+    /* Attempt to open the file, push if successful */
+
+    IncludeFile = fopen (Pathname, "r");
+    if (IncludeFile)
+    {
+        /* Push the include file on the open input file stack */
+
+        AslPushInputFileStack (IncludeFile, Pathname);
+        return (IncludeFile);
+    }
+
+    ACPI_FREE (Pathname);
+    return (NULL);
+}
+
+
+/*******************************************************************************
+ *
  * FUNCTION:    FlOpenIncludeFile
  *
  * PARAMETERS:  Op        - Parse node for the INCLUDE ASL statement
@@ -495,7 +573,8 @@ void
 FlOpenIncludeFile (
     ACPI_PARSE_OBJECT       *Op)
 {
-    FILE                    *IncFile;
+    FILE                    *IncludeFile;
+    ASL_INCLUDE_DIR         *NextDir;
 
 
     /* Op must be valid */
@@ -518,21 +597,58 @@ FlOpenIncludeFile (
     FlPrintFile (ASL_FILE_SOURCE_OUTPUT, "\n");
     Gbl_CurrentLineOffset++;
 
-    /* Prepend the directory pathname and open the include file */
 
-    DbgPrint (ASL_PARSE_OUTPUT, "\nOpen include file: path %s\n\n",
-        Op->Asl.Value.String);
-    IncFile = FlOpenLocalFile (Op->Asl.Value.String, "r");
-    if (!IncFile)
+    /* Attempt to open the include file */
+
+    /* If the file specifies an absolute path, just open it */
+
+    if ((Op->Asl.Value.String[0] == '/')  ||
+        (Op->Asl.Value.String[0] == '\\') ||
+        (Op->Asl.Value.String[1] == ':'))
     {
-        sprintf (MsgBuffer, "%s (%s)", Op->Asl.Value.String, strerror (errno));
-        AslError (ASL_ERROR, ASL_MSG_INCLUDE_FILE_OPEN, Op, MsgBuffer);
+        IncludeFile = FlOpenIncludeWithPrefix ("", Op->Asl.Value.String);
+        if (!IncludeFile)
+        {
+            goto ErrorExit;
+        }
         return;
     }
 
-    /* Push the include file on the open input file stack */
+    /*
+     * The include filename is not an absolute path.
+     *
+     * First, search for the file within the "local" directory -- meaning
+     * the same directory that contains the source file.
+     *
+     * Construct the file pathname from the global directory name.
+     */
+    IncludeFile = FlOpenIncludeWithPrefix (Gbl_DirectoryPath, Op->Asl.Value.String);
+    if (IncludeFile)
+    {
+        return;
+    }
+
+    /*
+     * Second, search for the file within the (possibly multiple) directories
+     * specified by the -I option on the command line.
+     */
+    NextDir = Gbl_IncludeDirList;
+    while (NextDir)
+    {
+        IncludeFile = FlOpenIncludeWithPrefix (NextDir->Dir, Op->Asl.Value.String);
+        if (IncludeFile)
+        {
+            return;
+        }
+
+        NextDir = NextDir->Next;
+    }
+
+    /* We could not open the include file after trying very hard */
 
-    AslPushInputFileStack (IncFile, Op->Asl.Value.String);
+ErrorExit:
+    sprintf (MsgBuffer, "%s, %s", Op->Asl.Value.String, strerror (errno));
+    AslError (ASL_ERROR, ASL_MSG_INCLUDE_FILE_OPEN, Op, MsgBuffer);
 }
 
 

Modified: vendor-sys/acpica/dist/compiler/aslglobal.h
==============================================================================
--- vendor-sys/acpica/dist/compiler/aslglobal.h	Thu Sep  3 23:04:33 2009	(r196803)
+++ vendor-sys/acpica/dist/compiler/aslglobal.h	Fri Sep  4 01:21:44 2009	(r196804)
@@ -148,7 +148,7 @@ extern char                         HexL
 #define ASL_LINE_BUFFER_SIZE        512
 #define ASL_MSG_BUFFER_SIZE         4096
 #define HEX_TABLE_LINE_SIZE         8
-#define HEX_LISTING_LINE_SIZE       16
+#define HEX_LISTING_LINE_SIZE       8
 
 
 /* Source code buffers and pointers for error reporting */
@@ -212,6 +212,7 @@ ASL_EXTERN char                     *Gbl
 ASL_EXTERN char                     ASL_INIT_GLOBAL (*Gbl_ExternalFilename, NULL);
 ASL_EXTERN char                     ASL_INIT_GLOBAL (*Gbl_IncludeFilename, NULL);
 ASL_EXTERN char                     ASL_INIT_GLOBAL (*Gbl_OutputFilenamePrefix, NULL);
+ASL_EXTERN ASL_INCLUDE_DIR          ASL_INIT_GLOBAL (*Gbl_IncludeDirList, NULL);
 ASL_EXTERN char                     *Gbl_CurrentInputFilename;
 
 ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_HasIncludeFiles, FALSE);

Modified: vendor-sys/acpica/dist/compiler/aslload.c
==============================================================================
--- vendor-sys/acpica/dist/compiler/aslload.c	Thu Sep  3 23:04:33 2009	(r196803)
+++ vendor-sys/acpica/dist/compiler/aslload.c	Fri Sep  4 01:21:44 2009	(r196804)
@@ -353,6 +353,7 @@ LdLoadResourceElements (
 
     Node->Value = (UINT32) Op->Asl.Value.Integer;
     Node->Op = Op;
+    Op->Asl.Node = Node;
 
     /*
      * Now enter the predefined fields, for easy lookup when referenced

Modified: vendor-sys/acpica/dist/compiler/aslmain.c
==============================================================================
--- vendor-sys/acpica/dist/compiler/aslmain.c	Thu Sep  3 23:04:33 2009	(r196803)
+++ vendor-sys/acpica/dist/compiler/aslmain.c	Fri Sep  4 01:21:44 2009	(r196804)
@@ -150,6 +150,28 @@ AslCommandLine (
     int                     argc,
     char                    **argv);
 
+static int
+AslDoOptions (
+    int                     argc,
+    char                    **argv,
+    BOOLEAN                 IsResponseFile);
+
+static void
+AslMergeOptionTokens (
+    char                    *InBuffer,
+    char                    *OutBuffer);
+
+static int
+AslDoResponseFile (
+    char                    *Filename);
+
+extern int   AcpiGbl_Opterr;
+extern int   AcpiGbl_Optind;
+
+
+#define ASL_TOKEN_SEPARATORS    " \t\n"
+#define ASL_SUPPORTED_OPTIONS   "@:2b:cd^e:fgh^i^I:l^o:p:r:s:t:v:w:x:"
+
 
 /*******************************************************************************
  *
@@ -168,8 +190,12 @@ Options (
     void)
 {
 
-    printf ("General Output:\n");
-    printf ("  -p <prefix>    Specify path/filename prefix for all output files\n");
+    printf ("Global:\n");
+    printf ("  -@<file>       Specify command file\n");
+    printf ("  -I<dir>        Specify additional include directory\n");
+
+    printf ("\nGeneral Output:\n");
+    printf ("  -p<prefix>     Specify path/filename prefix for all output files\n");
     printf ("  -va            Disable all errors and warnings (summary only)\n");
     printf ("  -vi            Less verbose errors and warnings for use with IDEs\n");
     printf ("  -vo            Enable optimization comments\n");
@@ -310,39 +336,149 @@ AslInitialize (
 
 /*******************************************************************************
  *
- * FUNCTION:    AslCommandLine
+ * FUNCTION:    AslMergeOptionTokens
  *
- * PARAMETERS:  argc/argv
+ * PARAMETERS:  InBuffer            - Input containing an option string
+ *              OutBuffer           - Merged output buffer
  *
  * RETURN:      None
  *
- * DESCRIPTION: Command line processing
+ * DESCRIPTION: Remove all whitespace from an option string.
+ *
+ ******************************************************************************/
+
+static void
+AslMergeOptionTokens (
+    char                    *InBuffer,
+    char                    *OutBuffer)
+{
+    char                    *Token;
+
+
+    *OutBuffer = 0;
+
+    Token = strtok (InBuffer, ASL_TOKEN_SEPARATORS);
+    while (Token)
+    {
+        strcat (OutBuffer, Token);
+        Token = strtok (NULL, ASL_TOKEN_SEPARATORS);
+    }
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AslDoResponseFile
+ *
+ * PARAMETERS:  Filename        - Name of the response file
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Open a response file and process all options within.
  *
  ******************************************************************************/
 
 static int
-AslCommandLine (
-    int                     argc,
-    char                    **argv)
+AslDoResponseFile (
+    char                    *Filename)
 {
-    BOOLEAN                 BadCommandLine = FALSE;
-    int                     j;
+    char                    *argv = StringBuffer2;
+    FILE                    *ResponseFile;
+    int                     OptStatus = 0;
+    int                     Opterr;
+    int                     Optind;
 
 
-    /* Minimum command line contains at least one option or an input file */
+    ResponseFile = fopen (Filename, "r");
+    if (!ResponseFile)
+    {
+        printf ("Could not open command file %s, %s\n",
+            Filename, strerror (errno));
+        return -1;
+    }
 
-    if (argc < 2)
+    /* Must save the current GetOpt globals */
+
+    Opterr = AcpiGbl_Opterr;
+    Optind = AcpiGbl_Optind;
+
+    /*
+     * Process all lines in the response file. There must be one complete
+     * option per line
+     */
+    while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ResponseFile))
     {
-        AslCompilerSignon (ASL_FILE_STDOUT);
-        Usage ();
-        exit (1);
+        /* Compress all tokens, allowing us to use a single argv entry */
+
+        AslMergeOptionTokens (StringBuffer, StringBuffer2);
+
+        /* Process the option */
+
+        AcpiGbl_Opterr = 0;
+        AcpiGbl_Optind = 0;
+
+        OptStatus = AslDoOptions (1, &argv, TRUE);
+        if (OptStatus)
+        {
+            printf ("Invalid option in command file %s: %s\n",
+                Filename, StringBuffer);
+            break;
+        }
     }
 
+    /* Restore the GetOpt globals */
+
+    AcpiGbl_Opterr = Opterr;
+    AcpiGbl_Optind = Optind;
+
+    fclose (ResponseFile);
+    return (OptStatus);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AslDoOptions
+ *
+ * PARAMETERS:  argc/argv           - Standard argc/argv
+ *              IsResponseFile      - TRUE if executing a response file.
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Command line option processing
+ *
+ ******************************************************************************/
+
+static int
+AslDoOptions (
+    int                     argc,
+    char                    **argv,
+    BOOLEAN                 IsResponseFile)
+{
+    int                     j;
+
+
     /* Get the command line options */
 
-    while ((j = AcpiGetopt (argc, argv, "2b:cd^e:fgh^i^l^o:p:r:s:t:v:w:x:")) != EOF) switch (j)
+    while ((j = AcpiGetopt (argc, argv, ASL_SUPPORTED_OPTIONS)) != EOF) switch (j)
     {
+    case '@':   /* Begin a response file */
+
+        if (IsResponseFile)
+        {
+            printf ("Nested command files are not supported\n");
+            return -1;
+        }
+
+        if (AslDoResponseFile (AcpiGbl_Optarg))
+        {
+            return -1;
+        }
+        break;
+
+
     case '2':
+
         Gbl_Acpi2 = TRUE;
         break;
 
@@ -364,8 +500,7 @@ AslCommandLine (
 
         default:
             printf ("Unknown option: -b%s\n", AcpiGbl_Optarg);
-            BadCommandLine = TRUE;
-            break;
+            return (-1);
         }
 
         /* Produce debug output file */
@@ -394,8 +529,7 @@ AslCommandLine (
 
         default:
             printf ("Unknown option: -d%s\n", AcpiGbl_Optarg);
-            BadCommandLine = TRUE;
-            break;
+            return (-1);
         }
 
         Gbl_DisasmFlag = TRUE;
@@ -444,12 +578,17 @@ AslCommandLine (
 
         default:
             printf ("Unknown option: -h%s\n", AcpiGbl_Optarg);
-            BadCommandLine = TRUE;
-            break;
+            return (-1);
         }
         break;
 
 
+    case 'I': /* Add an include file search directory */
+
+        FlAddIncludeDirectory (AcpiGbl_Optarg);
+        break;
+
+
     case 'i':
 
         switch (AcpiGbl_Optarg[0])
@@ -470,8 +609,7 @@ AslCommandLine (
 
         default:
             printf ("Unknown option: -s%s\n", AcpiGbl_Optarg);
-            BadCommandLine = TRUE;
-            break;
+            return (-1);
         }
         break;
 
@@ -500,8 +638,7 @@ AslCommandLine (
 
         default:
             printf ("Unknown option: -l%s\n", AcpiGbl_Optarg);
-            BadCommandLine = TRUE;
-            break;
+            return (-1);
         }
         break;
 
@@ -549,8 +686,7 @@ AslCommandLine (
 
         default:
             printf ("Unknown option: -c%s\n", AcpiGbl_Optarg);
-            BadCommandLine = TRUE;
-            break;
+            return (-1);
         }
         break;
 
@@ -589,8 +725,7 @@ AslCommandLine (
 
         default:
             printf ("Unknown option: -s%s\n", AcpiGbl_Optarg);
-            BadCommandLine = TRUE;
-            break;
+            return (-1);
         }
         break;
 
@@ -611,8 +746,7 @@ AslCommandLine (
 
         default:
             printf ("Unknown option: -t%s\n", AcpiGbl_Optarg);
-            BadCommandLine = TRUE;
-            break;
+            return (-1);
         }
         break;
 
@@ -647,8 +781,7 @@ AslCommandLine (
 
         default:
             printf ("Unknown option: -v%s\n", AcpiGbl_Optarg);
-            BadCommandLine = TRUE;
-            break;
+            return (-1);
         }
         break;
 
@@ -671,8 +804,7 @@ AslCommandLine (
 
         default:
             printf ("Unknown option: -w%s\n", AcpiGbl_Optarg);
-            BadCommandLine = TRUE;
-            break;
+            return (-1);
         }
         break;
 
@@ -685,10 +817,46 @@ AslCommandLine (
 
     default:
 
-        BadCommandLine = TRUE;
-        break;
+        return (-1);
+    }
+
+    return (0);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AslCommandLine
+ *
+ * PARAMETERS:  argc/argv
+ *
+ * RETURN:      Last argv index
+ *
+ * DESCRIPTION: Command line processing
+ *
+ ******************************************************************************/
+
+static int
+AslCommandLine (
+    int                     argc,
+    char                    **argv)
+{
+    int                     BadCommandLine = 0;
+
+
+    /* Minimum command line contains at least the command and an input file */
+
+    if (argc < 2)
+    {
+        AslCompilerSignon (ASL_FILE_STDOUT);
+        Usage ();
+        exit (1);
     }
 
+    /* Process all command line options */
+
+    BadCommandLine = AslDoOptions (argc, argv, FALSE);
+
     /* Next parameter must be the input filename */
 
     if (!argv[AcpiGbl_Optind] &&

Modified: vendor-sys/acpica/dist/compiler/asltypes.h
==============================================================================
--- vendor-sys/acpica/dist/compiler/asltypes.h	Thu Sep  3 23:04:33 2009	(r196803)
+++ vendor-sys/acpica/dist/compiler/asltypes.h	Fri Sep  4 01:21:44 2009	(r196804)
@@ -255,6 +255,14 @@ typedef enum
 #define ASL_NUM_FILES           (ASL_MAX_FILE_TYPE + 1)
 
 
+typedef struct asl_include_dir
+{
+    char                        *Dir;
+    struct asl_include_dir      *Next;
+
+} ASL_INCLUDE_DIR;
+
+
 /* An entry in the exception list, one for each error/warning */
 
 typedef struct asl_error_msg

Modified: vendor-sys/acpica/dist/dispatcher/dsmthdat.c
==============================================================================
--- vendor-sys/acpica/dist/dispatcher/dsmthdat.c	Thu Sep  3 23:04:33 2009	(r196803)
+++ vendor-sys/acpica/dist/dispatcher/dsmthdat.c	Fri Sep  4 01:21:44 2009	(r196804)
@@ -548,9 +548,10 @@ AcpiDsMethodDataGetValue (
 
         case ACPI_REFCLASS_LOCAL:
 
-            ACPI_ERROR ((AE_INFO,
-                "Uninitialized Local[%d] at node %p", Index, Node));
-
+            /*
+             * No error message for this case, will be trapped again later to
+             * detect and ignore cases of Store(LocalX,LocalX)
+             */
             return_ACPI_STATUS (AE_AML_UNINITIALIZED_LOCAL);
 
         default:

Modified: vendor-sys/acpica/dist/dispatcher/dsobject.c
==============================================================================
--- vendor-sys/acpica/dist/dispatcher/dsobject.c	Thu Sep  3 23:04:33 2009	(r196803)
+++ vendor-sys/acpica/dist/dispatcher/dsobject.c	Fri Sep  4 01:21:44 2009	(r196804)
@@ -570,15 +570,28 @@ AcpiDsBuildInternalPackageObj (
     {
         /*
          * NumElements was exhausted, but there are remaining elements in the
-         * PackageList.
+         * PackageList. Truncate the package to NumElements.
          *
          * Note: technically, this is an error, from ACPI spec: "It is an error
          * for NumElements to be less than the number of elements in the
-         * PackageList". However, for now, we just print an error message and
-         * no exception is returned.
+         * PackageList". However, we just print an error message and
+         * no exception is returned. This provides Windows compatibility. Some
+         * BIOSs will alter the NumElements on the fly, creating this type
+         * of ill-formed package object.
          */
         while (Arg)
         {
+            /*
+             * We must delete any package elements that were created earlier
+             * and are not going to be used because of the package truncation.
+             */
+            if (Arg->Common.Node)
+            {
+                AcpiUtRemoveReference (
+                    ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Arg->Common.Node));
+                Arg->Common.Node = NULL;
+            }
+
             /* Find out how many elements there really are */
 
             i++;
@@ -586,7 +599,7 @@ AcpiDsBuildInternalPackageObj (
         }
 
         ACPI_ERROR ((AE_INFO,
-            "Package List length (%X) larger than NumElements count (%X), truncated\n",
+            "Package List length (0x%X) larger than NumElements count (0x%X), truncated\n",
             i, ElementCount));
     }
     else if (i < ElementCount)
@@ -596,7 +609,7 @@ AcpiDsBuildInternalPackageObj (
          * Note: this is not an error, the package is padded out with NULLs.
          */
         ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-            "Package List length (%X) smaller than NumElements count (%X), padded with null elements\n",
+            "Package List length (0x%X) smaller than NumElements count (0x%X), padded with null elements\n",
             i, ElementCount));
     }
 

Modified: vendor-sys/acpica/dist/executer/exstorob.c
==============================================================================
--- vendor-sys/acpica/dist/executer/exstorob.c	Thu Sep  3 23:04:33 2009	(r196803)
+++ vendor-sys/acpica/dist/executer/exstorob.c	Fri Sep  4 01:21:44 2009	(r196804)
@@ -150,6 +150,13 @@ AcpiExStoreBufferToBuffer (
     ACPI_FUNCTION_TRACE_PTR (ExStoreBufferToBuffer, SourceDesc);
 
 
+    /* If Source and Target are the same, just return */
+
+    if (SourceDesc == TargetDesc)
+    {
+        return_ACPI_STATUS (AE_OK);
+    }
+
     /* We know that SourceDesc is a buffer by now */
 
     Buffer = ACPI_CAST_PTR (UINT8, SourceDesc->Buffer.Pointer);
@@ -248,6 +255,13 @@ AcpiExStoreStringToString (
     ACPI_FUNCTION_TRACE_PTR (ExStoreStringToString, SourceDesc);
 
 
+    /* If Source and Target are the same, just return */
+
+    if (SourceDesc == TargetDesc)
+    {
+        return_ACPI_STATUS (AE_OK);
+    }
+
     /* We know that SourceDesc is a string by now */
 
     Buffer = ACPI_CAST_PTR (UINT8, SourceDesc->String.Pointer);

Modified: vendor-sys/acpica/dist/include/acdisasm.h
==============================================================================
--- vendor-sys/acpica/dist/include/acdisasm.h	Thu Sep  3 23:04:33 2009	(r196803)
+++ vendor-sys/acpica/dist/include/acdisasm.h	Fri Sep  4 01:21:44 2009	(r196804)
@@ -273,6 +273,7 @@ extern ACPI_DMTABLE_INFO        AcpiDmTa
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoHest8[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoHest9[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoHestNotify[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoHestBank[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoHpet[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs0[];

Modified: vendor-sys/acpica/dist/include/aclocal.h
==============================================================================
--- vendor-sys/acpica/dist/include/aclocal.h	Thu Sep  3 23:04:33 2009	(r196803)
+++ vendor-sys/acpica/dist/include/aclocal.h	Fri Sep  4 01:21:44 2009	(r196804)
@@ -1127,6 +1127,9 @@ typedef struct acpi_bit_register_info
 #define ACPI_OSI_WIN_XP_SP2             0x05
 #define ACPI_OSI_WINSRV_2003_SP1        0x06
 #define ACPI_OSI_WIN_VISTA              0x07
+#define ACPI_OSI_WINSRV_2008            0x08
+#define ACPI_OSI_WIN_VISTA_SP1          0x09
+#define ACPI_OSI_WIN_7                  0x0A
 
 #define ACPI_ALWAYS_ILLEGAL             0x00
 

Modified: vendor-sys/acpica/dist/include/acpixf.h
==============================================================================
--- vendor-sys/acpica/dist/include/acpixf.h	Thu Sep  3 23:04:33 2009	(r196803)
+++ vendor-sys/acpica/dist/include/acpixf.h	Fri Sep  4 01:21:44 2009	(r196804)

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


More information about the svn-src-all mailing list