[haiku-commits] haiku: hrev46307 - in src/add-ons/kernel/bus_managers/acpi/acpica: components/namespace components/utilities include components/parser components/resources

  • From: korli@xxxxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Fri, 1 Nov 2013 12:50:31 +0100 (CET)

hrev46307 adds 2 changesets to branch 'master'
old head: 3329eaa1ad5ebb774278c6777623b82e8e1fa5ef
new head: d5e0bd341208a4536103d2e98118d339e46df99c
overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=d5e0bd3+%5E3329eaa

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

c70258b: acpi: Update to ACPICA 20130823.

d5e0bd3: acpi: removed iasl tool
  
  * it didn't build since at least five years.
  * it should become a user package anyway.

                                   [ Jérôme Duval <jerome.duval@xxxxxxxxx> ]

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

203 files changed, 12606 insertions(+), 8497 deletions(-)
src/add-ons/kernel/bus_managers/acpi/Jamfile     |   12 +
.../bus_managers/acpi/acpica/common/adfile.c     |   19 +-
.../bus_managers/acpi/acpica/common/adisasm.c    |  250 +---
.../bus_managers/acpi/acpica/common/adwalk.c     |   21 +-
.../bus_managers/acpi/acpica/common/ahpredef.c   |    6 +-
.../bus_managers/acpi/acpica/common/dmextern.c   |  619 ++++++++-
.../bus_managers/acpi/acpica/common/dmrestag.c   |   17 +-
.../bus_managers/acpi/acpica/common/dmtable.c    |   54 +-
.../bus_managers/acpi/acpica/common/dmtbdump.c   |  217 ++-
.../bus_managers/acpi/acpica/common/dmtbinfo.c   |   99 +-
.../bus_managers/acpi/acpica/common/getopt.c     |   90 +-
.../acpi/acpica/components/dispatcher/dsargs.c   |    2 +-
.../acpica/components/dispatcher/dscontrol.c     |   14 +-
.../acpi/acpica/components/dispatcher/dsfield.c  |    6 +-
.../acpi/acpica/components/dispatcher/dsinit.c   |    6 +-
.../acpi/acpica/components/dispatcher/dsmethod.c |    6 +-
.../acpi/acpica/components/dispatcher/dsmthdat.c |    4 +-
.../acpi/acpica/components/dispatcher/dsobject.c |   29 +-
.../acpi/acpica/components/dispatcher/dsopcode.c |    5 +-
.../acpi/acpica/components/dispatcher/dsutils.c  |   10 +-
.../acpi/acpica/components/dispatcher/dswexec.c  |   22 +-
.../acpi/acpica/components/dispatcher/dswload.c  |   10 +-
.../acpi/acpica/components/dispatcher/dswload2.c |   15 +-
.../acpi/acpica/components/dispatcher/dswscope.c |    2 +-
.../acpi/acpica/components/dispatcher/dswstate.c |    2 +-
.../acpi/acpica/components/events/evevent.c      |   14 +-
.../acpi/acpica/components/events/evglock.c      |    3 +-
.../acpi/acpica/components/events/evgpe.c        |    7 +-
.../acpi/acpica/components/events/evgpeblk.c     |   14 +-
.../acpi/acpica/components/events/evgpeinit.c    |   19 +-
.../acpi/acpica/components/events/evgpeutil.c    |    4 +-
.../acpi/acpica/components/events/evhandler.c    |  657 +++++++++
.../acpi/acpica/components/events/evmisc.c       |   23 +-
.../acpi/acpica/components/events/evregion.c     |  719 ++--------
.../acpi/acpica/components/events/evrgnini.c     |    4 +-
.../acpi/acpica/components/events/evsci.c        |   89 +-
.../acpi/acpica/components/events/evxface.c      |  183 ++-
.../acpi/acpica/components/events/evxfevnt.c     |   16 +-
.../acpi/acpica/components/events/evxfgpe.c      |    8 +-
.../acpi/acpica/components/events/evxfregn.c     |    3 +-
.../acpi/acpica/components/executer/exconfig.c   |   23 +-
.../acpi/acpica/components/executer/exconvrt.c   |   29 +-
.../acpi/acpica/components/executer/excreate.c   |    5 +-
.../acpi/acpica/components/executer/exdebug.c    |    4 +-
.../acpi/acpica/components/executer/exdump.c     |   49 +-
.../acpi/acpica/components/executer/exfield.c    |    6 +-
.../acpi/acpica/components/executer/exfldio.c    |   22 +-
.../acpi/acpica/components/executer/exmisc.c     |   25 +-
.../acpi/acpica/components/executer/exmutex.c    |    2 +-
.../acpi/acpica/components/executer/exnames.c    |    7 +-
.../acpi/acpica/components/executer/exoparg1.c   |   95 +-
.../acpi/acpica/components/executer/exoparg2.c   |   21 +-
.../acpi/acpica/components/executer/exoparg3.c   |    5 +-
.../acpi/acpica/components/executer/exoparg6.c   |    9 +-
.../acpi/acpica/components/executer/exprep.c     |   11 +-
.../acpi/acpica/components/executer/exregion.c   |   29 +-
.../acpi/acpica/components/executer/exresnte.c   |    9 +-
.../acpi/acpica/components/executer/exresolv.c   |   20 +-
.../acpi/acpica/components/executer/exresop.c    |   23 +-
.../acpi/acpica/components/executer/exstore.c    |   39 +-
.../acpi/acpica/components/executer/exstoren.c   |   10 +-
.../acpi/acpica/components/executer/exstorob.c   |    2 +-
.../acpi/acpica/components/executer/exsystem.c   |    2 +-
.../acpi/acpica/components/executer/exutils.c    |   18 +-
.../acpi/acpica/components/hardware/hwacpi.c     |   23 +-
.../acpi/acpica/components/hardware/hwesleep.c   |    2 +-
.../acpi/acpica/components/hardware/hwgpe.c      |    7 +-
.../acpi/acpica/components/hardware/hwpci.c      |    2 +-
.../acpi/acpica/components/hardware/hwregs.c     |   18 +-
.../acpi/acpica/components/hardware/hwsleep.c    |    4 +-
.../acpi/acpica/components/hardware/hwtimer.c    |   24 +-
.../acpi/acpica/components/hardware/hwvalid.c    |    2 +-
.../acpi/acpica/components/hardware/hwxface.c    |  165 ++-
.../acpi/acpica/components/hardware/hwxfsleep.c  |   17 +-
.../acpi/acpica/components/namespace/nsaccess.c  |   10 +-
.../acpi/acpica/components/namespace/nsalloc.c   |    2 +-
.../acpica/components/namespace/nsarguments.c    |  375 ++++++
.../acpi/acpica/components/namespace/nsconvert.c |  556 ++++++++
.../acpi/acpica/components/namespace/nsdump.c    |  186 ++-
.../acpi/acpica/components/namespace/nsdumpdv.c  |    2 +-
.../acpi/acpica/components/namespace/nseval.c    |  248 ++--
.../acpi/acpica/components/namespace/nsinit.c    |   41 +-
.../acpi/acpica/components/namespace/nsload.c    |    2 +-
.../acpi/acpica/components/namespace/nsnames.c   |    2 +-
.../acpi/acpica/components/namespace/nsobject.c  |    2 +-
.../acpi/acpica/components/namespace/nsparse.c   |    2 +-
.../acpi/acpica/components/namespace/nspredef.c  | 1052 ++-------------
.../acpi/acpica/components/namespace/nsprepkg.c  |  703 ++++++++++
.../acpi/acpica/components/namespace/nsrepair.c  |  435 +++---
.../acpi/acpica/components/namespace/nsrepair2.c |  387 +++++-
.../acpi/acpica/components/namespace/nssearch.c  |    2 +-
.../acpi/acpica/components/namespace/nsutils.c   |   97 +-
.../acpi/acpica/components/namespace/nswalk.c    |   20 +-
.../acpi/acpica/components/namespace/nsxfeval.c  |  199 ++-
.../acpi/acpica/components/namespace/nsxfname.c  |   17 +-
.../acpi/acpica/components/namespace/nsxfobj.c   |    2 +-
.../acpi/acpica/components/parser/psargs.c       |   25 +-
.../acpi/acpica/components/parser/psloop.c       |  667 +--------
.../acpi/acpica/components/parser/psobject.c     |  751 +++++++++++
[ *** stats truncated: 104 lines dropped *** ]

############################################################################

Commit:      c70258b79f40a1d66e50767f61def8d6f4588ba1
URL:         http://cgit.haiku-os.org/haiku/commit/?id=c70258b
Author:      Jérôme Duval <jerome.duval@xxxxxxxxx>
Date:        Fri Nov  1 11:38:14 2013 UTC

acpi: Update to ACPICA 20130823.

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

diff --git a/src/add-ons/kernel/bus_managers/acpi/Jamfile 
b/src/add-ons/kernel/bus_managers/acpi/Jamfile
index 2313b59..85cdb1a 100644
--- a/src/add-ons/kernel/bus_managers/acpi/Jamfile
+++ b/src/add-ons/kernel/bus_managers/acpi/Jamfile
@@ -36,6 +36,7 @@ local events_src =
        evgpeblk.c
        evgpeinit.c
        evgpeutil.c
+       evhandler.c
        evmisc.c
        evregion.c
        evrgnini.c
@@ -89,6 +90,8 @@ local hardware_src =
 local namespace_src =
        nsaccess.c
        nsalloc.c
+       nsarguments.c
+       nsconvert.c
        nsdump.c
        nsdumpdv.c
        nseval.c
@@ -98,6 +101,7 @@ local namespace_src =
        nsobject.c
        nsparse.c
        nspredef.c
+       nsprepkg.c
        nsrepair.c
        nsrepair2.c
        nssearch.c
@@ -111,7 +115,9 @@ local namespace_src =
 local parser_src =
        psargs.c
        psloop.c
+       psobject.c
        psopcode.c
+       psopinfo.c
        psparse.c
        psscope.c
        pstree.c
@@ -140,6 +146,7 @@ local tables_src =
        tbfadt.c
        tbfind.c
        tbinstal.c
+       tbprint.c
        tbutils.c
        tbxface.c
        tbxfload.c
@@ -149,12 +156,14 @@ local tables_src =
 local utilities_src =
        utaddress.c
        utalloc.c
+       utbuffer.c
        utcache.c
        utclib.c
        utcopy.c
        utdecode.c
        utdebug.c
        utdelete.c
+       uterror.c
        uteval.c
        utexcep.c
        utglobal.c
@@ -166,8 +175,11 @@ local utilities_src =
        utmutex.c
        utobject.c
        utosi.c
+       utownerid.c
+       utpredef.c
        utresrc.c
        utstate.c
+       utstring.c
        uttrack.c
        utxface.c
        utxferror.c
diff --git a/src/add-ons/kernel/bus_managers/acpi/acpica/common/adfile.c 
b/src/add-ons/kernel/bus_managers/acpi/acpica/common/adfile.c
index 426a300..1af4cc2 100644
--- a/src/add-ons/kernel/bus_managers/acpi/acpica/common/adfile.c
+++ b/src/add-ons/kernel/bus_managers/acpi/acpica/common/adfile.c
@@ -8,7 +8,7 @@
  *
  * 1. Copyright Notice
  *
- * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2013, Intel Corp.
  * All rights reserved.
  *
  * 2. License
@@ -196,19 +196,24 @@ AdWriteBuffer (
     char                    *Buffer,
     UINT32                  Length)
 {
-    FILE                    *fp;
+    FILE                    *File;
     ACPI_SIZE               Actual;
 
 
-    fp = fopen (Filename, "wb");
-    if (!fp)
+    File = fopen (Filename, "wb");
+    if (!File)
     {
-        printf ("Couldn't open %s\n", Filename);
+        printf ("Could not open file %s\n", Filename);
         return (-1);
     }
 
-    Actual = fwrite (Buffer, (size_t) Length, 1, fp);
-    fclose (fp);
+    Actual = fwrite (Buffer, 1, (size_t) Length, File);
+    if (Actual != Length)
+    {
+        printf ("Could not write to file %s\n", Filename);
+    }
+
+    fclose (File);
     return ((INT32) Actual);
 }
 
diff --git a/src/add-ons/kernel/bus_managers/acpi/acpica/common/adisasm.c 
b/src/add-ons/kernel/bus_managers/acpi/acpica/common/adisasm.c
index 0d944c2..f14ae17 100644
--- a/src/add-ons/kernel/bus_managers/acpi/acpica/common/adisasm.c
+++ b/src/add-ons/kernel/bus_managers/acpi/acpica/common/adisasm.c
@@ -8,7 +8,7 @@
  *
  * 1. Copyright Notice
  *
- * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2013, Intel Corp.
  * All rights reserved.
  *
  * 2. License
@@ -141,11 +141,11 @@ extern int                  AslCompilerdebug;
 #endif
 
 ACPI_STATUS
-LsDisplayNamespace (
+NsDisplayNamespace (
     void);
 
 void
-LsSetupNsList (
+NsSetupNamespaceListing (
     void                    *Handle);
 
 
@@ -160,17 +160,6 @@ AdCreateTableHeader (
     char                    *Filename,
     ACPI_TABLE_HEADER       *Table);
 
-static ACPI_STATUS
-AdDeferredParse (
-    ACPI_PARSE_OBJECT       *Op,
-    UINT8                   *Aml,
-    UINT32                  AmlLength);
-
-static ACPI_STATUS
-AdParseDeferredOps (
-    ACPI_PARSE_OBJECT       *Root);
-
-
 /* Stubs for ASL compiler */
 
 #ifndef ACPI_ASL_COMPILER
@@ -424,6 +413,10 @@ AdAmlDisassemble (
         {
             AcpiDmClearExternalList ();
         }
+
+        /* Load any externals defined in the optional external ref file */
+
+        AcpiDmGetExternalsFromFile ();
     }
     else
     {
@@ -455,7 +448,7 @@ AdAmlDisassemble (
     }
 
     /*
-     * Output:  ASL code. Redirect to a file if requested
+     * Output: ASL code. Redirect to a file if requested
      */
     if (OutToFile)
     {
@@ -512,8 +505,8 @@ AdAmlDisassemble (
         {
             AcpiOsPrintf ("/**** Before second load\n");
 
-            LsSetupNsList (File);
-            LsDisplayNamespace ();
+            NsSetupNamespaceListing (File);
+            NsDisplayNamespace ();
             AcpiOsPrintf ("*****/\n");
         }
 
@@ -581,8 +574,8 @@ AdAmlDisassemble (
             if (AslCompilerdebug)
             {
                 AcpiOsPrintf ("/**** After second load and resource 
conversion\n");
-                LsSetupNsList (File);
-                LsDisplayNamespace ();
+                NsSetupNamespaceListing (File);
+                NsDisplayNamespace ();
                 AcpiOsPrintf ("*****/\n");
 
                 AcpiDmDumpTree (AcpiGbl_ParseOpRoot);
@@ -623,17 +616,12 @@ Cleanup:
         ACPI_FREE (Table);
     }
 
-    if (DisasmFilename)
-    {
-        ACPI_FREE (DisasmFilename);
-    }
-
     if (OutToFile && File)
     {
         if (AslCompilerdebug) /* Display final namespace, with transforms */
         {
-            LsSetupNsList (File);
-            LsDisplayNamespace ();
+            NsSetupNamespaceListing (File);
+            NsDisplayNamespace ();
         }
 
         fclose (File);
@@ -716,10 +704,12 @@ AdCreateTableHeader (
     switch (Table->Revision)
     {
     case 0:
+
         AcpiOsPrintf (" **** Invalid Revision");
         break;
 
     case 1:
+
         /* Revision of DSDT controls the ACPI integer width */
 
         if (ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_DSDT))
@@ -729,6 +719,7 @@ AdCreateTableHeader (
         break;
 
     default:
+
         break;
     }
     AcpiOsPrintf ("\n");
@@ -750,7 +741,7 @@ AdCreateTableHeader (
     AcpiOsPrintf (" *     OEM Revision     0x%8.8X (%u)\n", 
Table->OemRevision, Table->OemRevision);
     AcpiOsPrintf (" *     Compiler ID      \"%.4s\"\n",     
Table->AslCompilerId);
     AcpiOsPrintf (" *     Compiler Version 0x%8.8X (%u)\n", 
Table->AslCompilerRevision, Table->AslCompilerRevision);
-    AcpiOsPrintf (" */\n\n");
+    AcpiOsPrintf (" */\n");
 
     /* Create AML output filename based on input filename */
 
@@ -825,207 +816,6 @@ AdDisplayTables (
 
 /******************************************************************************
  *
- * FUNCTION:    AdDeferredParse
- *
- * PARAMETERS:  Op                  - Root Op of the deferred opcode
- *              Aml                 - Pointer to the raw AML
- *              AmlLength           - Length of the AML
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Parse one deferred opcode
- *              (Methods, operation regions, etc.)
- *
- *****************************************************************************/
-
-static ACPI_STATUS
-AdDeferredParse (
-    ACPI_PARSE_OBJECT       *Op,
-    UINT8                   *Aml,
-    UINT32                  AmlLength)
-{
-    ACPI_WALK_STATE         *WalkState;
-    ACPI_STATUS             Status;
-    ACPI_PARSE_OBJECT       *SearchOp;
-    ACPI_PARSE_OBJECT       *StartOp;
-    UINT32                  BaseAmlOffset;
-    ACPI_PARSE_OBJECT       *ExtraOp;
-
-
-    ACPI_FUNCTION_TRACE (AdDeferredParse);
-
-
-    fprintf (stderr, ".");
-
-    if (!Aml || !AmlLength)
-    {
-        return_ACPI_STATUS (AE_OK);
-    }
-
-    ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Parsing %s [%4.4s]\n",
-        Op->Common.AmlOpName, (char *) &Op->Named.Name));
-
-    WalkState = AcpiDsCreateWalkState (0, Op, NULL, NULL);
-    if (!WalkState)
-    {
-        return_ACPI_STATUS (AE_NO_MEMORY);
-    }
-
-    Status = AcpiDsInitAmlWalk (WalkState, Op, NULL, Aml,
-                    AmlLength, NULL, ACPI_IMODE_LOAD_PASS1);
-    if (ACPI_FAILURE (Status))
-    {
-        return_ACPI_STATUS (Status);
-    }
-
-    /* Parse the method */
-
-    WalkState->ParseFlags &= ~ACPI_PARSE_DELETE_TREE;
-    WalkState->ParseFlags |= ACPI_PARSE_DISASSEMBLE;
-    Status = AcpiPsParseAml (WalkState);
-
-    /*
-     * We need to update all of the Aml offsets, since the parser thought
-     * that the method began at offset zero. In reality, it began somewhere
-     * within the ACPI table, at the BaseAmlOffset. Walk the entire tree that
-     * was just created and update the AmlOffset in each Op
-     */
-    BaseAmlOffset = (Op->Common.Value.Arg)->Common.AmlOffset + 1;
-    StartOp = (Op->Common.Value.Arg)->Common.Next;
-    SearchOp = StartOp;
-
-    /* Walk the parse tree */
-
-    while (SearchOp)
-    {
-        SearchOp->Common.AmlOffset += BaseAmlOffset;
-        SearchOp = AcpiPsGetDepthNext (StartOp, SearchOp);
-    }
-
-    /*
-     * Link the newly parsed subtree into the main parse tree
-     */
-    switch (Op->Common.AmlOpcode)
-    {
-    case AML_BUFFER_OP:
-    case AML_PACKAGE_OP:
-    case AML_VAR_PACKAGE_OP:
-
-        switch (Op->Common.AmlOpcode)
-        {
-        case AML_PACKAGE_OP:
-            ExtraOp = Op->Common.Value.Arg;
-            ExtraOp = ExtraOp->Common.Next;
-            Op->Common.Value.Arg = ExtraOp->Common.Value.Arg;
-            break;
-
-        case AML_VAR_PACKAGE_OP:
-        case AML_BUFFER_OP:
-        default:
-            ExtraOp = Op->Common.Value.Arg;
-            Op->Common.Value.Arg = ExtraOp->Common.Value.Arg;
-            break;
-        }
-
-        /* Must point all parents to the main tree */
-
-        StartOp = Op;
-        SearchOp = StartOp;
-        while (SearchOp)
-        {
-            if (SearchOp->Common.Parent == ExtraOp)
-            {
-                SearchOp->Common.Parent = Op;
-            }
-            SearchOp = AcpiPsGetDepthNext (StartOp, SearchOp);
-        }
-        break;
-
-    default:
-        break;
-    }
-
-    return_ACPI_STATUS (AE_OK);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION:    AdParseDeferredOps
- *
- * PARAMETERS:  Root                - Root of the parse tree
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Parse the deferred opcodes (Methods, regions, etc.)
- *
- *****************************************************************************/
-
-static ACPI_STATUS
-AdParseDeferredOps (
-    ACPI_PARSE_OBJECT       *Root)
-{
-    ACPI_PARSE_OBJECT       *Op = Root;
-    ACPI_STATUS             Status = AE_OK;
-    const ACPI_OPCODE_INFO  *OpInfo;
-
-
-    ACPI_FUNCTION_NAME (AdParseDeferredOps);
-    fprintf (stderr, "Parsing Deferred Opcodes 
(Methods/Buffers/Packages/Regions)\n");
-
-    while (Op)
-    {
-        OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
-        if (!(OpInfo->Flags & AML_DEFER))
-        {
-            Op = AcpiPsGetDepthNext (Root, Op);
-            continue;
-        }
-
-        switch (Op->Common.AmlOpcode)
-        {
-        case AML_METHOD_OP:
-        case AML_BUFFER_OP:
-        case AML_PACKAGE_OP:
-        case AML_VAR_PACKAGE_OP:
-
-            Status = AdDeferredParse (Op, Op->Named.Data, Op->Named.Length);
-            if (ACPI_FAILURE (Status))
-            {
-                return (Status);
-            }
-            break;
-
-        case AML_REGION_OP:
-        case AML_DATA_REGION_OP:
-        case AML_CREATE_QWORD_FIELD_OP:
-        case AML_CREATE_DWORD_FIELD_OP:
-        case AML_CREATE_WORD_FIELD_OP:
-        case AML_CREATE_BYTE_FIELD_OP:
-        case AML_CREATE_BIT_FIELD_OP:
-        case AML_CREATE_FIELD_OP:
-        case AML_BANK_FIELD_OP:
-
-            /* Nothing to do in these cases */
-
-            break;
-
-        default:
-            ACPI_ERROR ((AE_INFO, "Unhandled deferred opcode [%s]",
-                Op->Common.AmlOpName));
-            break;
-        }
-
-        Op = AcpiPsGetDepthNext (Root, Op);
-    }
-
-    fprintf (stderr, "\n");
-    return (Status);
-}
-
-
-/******************************************************************************
- *
  * FUNCTION:    AdGetLocalTables
  *
  * PARAMETERS:  Filename            - Not used
@@ -1263,7 +1053,9 @@ AdParseTable (
 
     /* Pass 3: Parse control methods and link their parse trees into the main 
parse tree */
 
-    Status = AdParseDeferredOps (AcpiGbl_ParseOpRoot);
+    fprintf (stderr, "Parsing Deferred Opcodes 
(Methods/Buffers/Packages/Regions)\n");
+    Status = AcpiDmParseDeferredOps (AcpiGbl_ParseOpRoot);
+    fprintf (stderr, "\n");
 
     /* Process Resource Templates */
 
diff --git a/src/add-ons/kernel/bus_managers/acpi/acpica/common/adwalk.c 
b/src/add-ons/kernel/bus_managers/acpi/acpica/common/adwalk.c
index 7fdb063..76ef5df 100644
--- a/src/add-ons/kernel/bus_managers/acpi/acpica/common/adwalk.c
+++ b/src/add-ons/kernel/bus_managers/acpi/acpica/common/adwalk.c
@@ -8,7 +8,7 @@
  *
  * 1. Copyright Notice
  *
- * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2013, Intel Corp.
  * All rights reserved.
  *
  * 2. License
@@ -445,16 +445,27 @@ AcpiDmDumpDescending (
     switch (Op->Common.AmlOpcode)
     {
     case AML_BYTE_OP:
+
+        AcpiOsPrintf ("%2.2X", (UINT32) Op->Common.Value.Integer);
+        break;
+
     case AML_WORD_OP:
+
+        AcpiOsPrintf ("%4.4X", (UINT32) Op->Common.Value.Integer);
+        break;
+
     case AML_DWORD_OP:
-        AcpiOsPrintf ("%X", (UINT32) Op->Common.Value.Integer);
+
+        AcpiOsPrintf ("%8.8X", (UINT32) Op->Common.Value.Integer);
         break;
 
     case AML_QWORD_OP:
+
         AcpiOsPrintf ("%8.8X%8.8X", ACPI_FORMAT_UINT64 
(Op->Common.Value.Integer));
         break;
 
     case AML_INT_NAMEPATH_OP:
+
         if (Op->Common.Value.String)
         {
             AcpiNsExternalizeName (ACPI_UINT32_MAX, Op->Common.Value.String,
@@ -472,10 +483,12 @@ AcpiDmDumpDescending (
     case AML_METHOD_OP:
     case AML_DEVICE_OP:
     case AML_INT_NAMEDFIELD_OP:
+
         AcpiOsPrintf ("%4.4s", ACPI_CAST_PTR (char, &Op->Named.Name));
         break;
 
     default:
+
         break;
     }
 
@@ -522,6 +535,7 @@ AcpiDmFindOrphanDescending (
     {
 #ifdef ACPI_UNDER_DEVELOPMENT
     case AML_ADD_OP:
+
         ChildOp = Op->Common.Value.Arg;
         if ((ChildOp->Common.AmlOpcode == AML_INT_NAMEPATH_OP) &&
             !ChildOp->Common.Node)
@@ -628,6 +642,7 @@ AcpiDmFindOrphanDescending (
         break;
 
     default:
+
         break;
     }
 
@@ -909,7 +924,7 @@ AcpiDmXrefDescendingOp (
             }
         }
 
-        AcpiDmAddToExternalList (Op, Path, (UINT8) ObjectType2, ParamCount);
+        AcpiDmAddToExternalList (Op, Path, (UINT8) ObjectType2, ParamCount | 
0x80);
         Op->Common.Node = Node;
     }
     else
diff --git a/src/add-ons/kernel/bus_managers/acpi/acpica/common/ahpredef.c 
b/src/add-ons/kernel/bus_managers/acpi/acpica/common/ahpredef.c
index f919fcf..78e1960 100644
--- a/src/add-ons/kernel/bus_managers/acpi/acpica/common/ahpredef.c
+++ b/src/add-ons/kernel/bus_managers/acpi/acpica/common/ahpredef.c
@@ -8,7 +8,7 @@
  *
  * 1. Copyright Notice
  *
- * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2013, Intel Corp.
  * All rights reserved.
  *
  * 2. License
@@ -133,7 +133,7 @@
 const AH_PREDEFINED_NAME    AslPredefinedInfo[] =
 {
     AH_PREDEF ("_ACx",    "Active Cooling", "Returns the active cooling policy 
threshold values"),
-    AH_PREDEF ("_ADR",    "Address", "Returns the address of a device on its 
parent bus"),
+    AH_PREDEF ("_ADR",    "Address", "Returns address of a device on parent 
bus, and resource field"),
     AH_PREDEF ("_AEI",    "ACPI Event Interrupts", "Returns a list of GPIO 
events to be used as ACPI events"),
     AH_PREDEF ("_ALC",    "Ambient Light Chromaticity", "Returns the ambient 
light color chromaticity"),
     AH_PREDEF ("_ALI",    "Ambient Light Illuminance", "Returns the ambient 
light brightness"),
@@ -185,7 +185,7 @@ const AH_PREDEFINED_NAME    AslPredefinedInfo[] =
     AH_PREDEF ("_DGS",    "Display Graphics State", "Return the current state 
of the output device"),
     AH_PREDEF ("_DIS",    "Disable Device", "Disables a device"),
     AH_PREDEF ("_DLM",    "Device Lock Mutex", "Defines mutex for OS/AML 
sharing"),
-    AH_PREDEF ("_DMA",    "Direct Memory Access", "Returns a device's current 
resources for DMA transactions"),
+    AH_PREDEF ("_DMA",    "Direct Memory Access", "Returns device current 
resources for DMA transactions, and resource field"),
     AH_PREDEF ("_DOD",    "Display Output Devices", "Enumerate all devices 
attached to the display adapter"),
     AH_PREDEF ("_DOS",    "Disable Output Switching", "Sets the display output 
switching mode"),
     AH_PREDEF ("_DPL",    "Device Selection Polarity", "Polarity of Device 
Selection signal, Resource Descriptor field"),
diff --git a/src/add-ons/kernel/bus_managers/acpi/acpica/common/dmextern.c 
b/src/add-ons/kernel/bus_managers/acpi/acpica/common/dmextern.c
index 8256b65..9ad8093 100644
--- a/src/add-ons/kernel/bus_managers/acpi/acpica/common/dmextern.c
+++ b/src/add-ons/kernel/bus_managers/acpi/acpica/common/dmextern.c
@@ -8,7 +8,7 @@
  *
  * 1. Copyright Notice
  *
- * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2013, Intel Corp.
  * All rights reserved.
  *
  * 2. License
@@ -118,6 +118,9 @@
 #include "amlcode.h"
 #include "acnamesp.h"
 #include "acdisasm.h"
+#include "aslcompiler.h"
+#include <stdio.h>
+#include <errno.h>
 
 
 /*
@@ -158,6 +161,8 @@ static const char           *AcpiGbl_DmTypeNames[] =
     /* 19 */ ", FieldUnitObj"
 };
 
+#define METHOD_SEPARATORS           " \t,()\n"
+
 
 /* Local prototypes */
 
@@ -170,6 +175,12 @@ AcpiDmNormalizeParentPrefix (
     ACPI_PARSE_OBJECT       *Op,
     char                    *Path);
 
+static void
+AcpiDmAddToExternalListFromFile (
+    char                    *Path,
+    UINT8                   Type,
+    UINT32                  Value);
+
 
 
/*******************************************************************************
  *
@@ -225,10 +236,17 @@ AcpiDmNormalizeParentPrefix (
     char                    *Fullpath;
     char                    *ParentPath;
     ACPI_SIZE               Length;
+    UINT32                  Index = 0;
 
 
-    /* Search upwards in the parse tree until we reach a namespace node */
+    if (!Op)
+    {
+        return (NULL);
+    }
+
+    /* Search upwards in the parse tree until we reach the next namespace node 
*/
 
+    Op = Op->Common.Parent;
     while (Op)
     {
         if (Op->Common.Node)
@@ -277,6 +295,13 @@ AcpiDmNormalizeParentPrefix (
          * for the required dot separator (ParentPath.Path)
          */
         Length++;
+
+        /* For External() statements, we do not want a leading '\' */
+
+        if (*ParentPath == AML_ROOT_PREFIX)
+        {
+            Index = 1;
+        }
     }
 
     Fullpath = ACPI_ALLOCATE_ZEROED (Length);
@@ -291,7 +316,7 @@ AcpiDmNormalizeParentPrefix (
      *
      * Copy the parent path
      */
-    ACPI_STRCAT (Fullpath, ParentPath);
+    ACPI_STRCPY (Fullpath, &ParentPath[Index]);
 
     /*
      * Add dot separator
@@ -431,6 +456,7 @@ AcpiDmAddToExternalList (
     ACPI_EXTERNAL_LIST      *NextExternal;
     ACPI_EXTERNAL_LIST      *PrevExternal = NULL;
     ACPI_STATUS             Status;
+    BOOLEAN                 Resolved = FALSE;
 
 
     if (!Path)
@@ -438,7 +464,31 @@ AcpiDmAddToExternalList (
         return;
     }
 
-    /* Externalize the ACPI path */
+    if (Type == ACPI_TYPE_METHOD)
+    {
+        if (Value & 0x80)
+        {
+            Resolved = TRUE;
+        }
+        Value &= 0x07;
+    }
+
+    /*
+     * We don't want External() statements to contain a leading '\'.
+     * This prevents duplicate external statements of the form:
+     *
+     *    External (\ABCD)
+     *    External (ABCD)
+     *
+     * This would cause a compile time error when the disassembled
+     * output file is recompiled.
+     */
+    if ((*Path == AML_ROOT_PREFIX) && (Path[1]))
+    {
+        Path++;
+    }
+
+    /* Externalize the ACPI pathname */
 
     Status = AcpiNsExternalizeName (ACPI_UINT32_MAX, Path,
                 NULL, &ExternalPath);
@@ -447,8 +497,10 @@ AcpiDmAddToExternalList (
         return;
     }
 
-    /* Get the full pathname from root if "Path" has a parent prefix */
-
+    /*
+     * Get the full pathname from the root if "Path" has one or more
+     * parent prefixes (^). Note: path will not contain a leading '\'.
+     */
     if (*Path == (UINT8) AML_PARENT_PREFIX)
     {
         Fullpath = AcpiDmNormalizeParentPrefix (Op, ExternalPath);
@@ -474,7 +526,7 @@ AcpiDmAddToExternalList (
                 (NextExternal->Value != Value))
             {
                 ACPI_ERROR ((AE_INFO,
-                    "Argument count mismatch for method %s %u %u",
+                    "External method arg count mismatch %s: Current %u, 
attempted %u",
                     NextExternal->Path, NextExternal->Value, Value));
             }
 
@@ -505,6 +557,7 @@ AcpiDmAddToExternalList (
     NewExternal->Path = ExternalPath;
     NewExternal->Type = Type;
     NewExternal->Value = Value;
+    NewExternal->Resolved = Resolved;
     NewExternal->Length = (UINT16) ACPI_STRLEN (ExternalPath);
 
     /* Was the external path with parent prefix normalized to a fullpath? */
@@ -565,6 +618,275 @@ AcpiDmAddToExternalList (
 
 
/*******************************************************************************
  *
+ * FUNCTION:    AcpiDmGetExternalsFromFile
+ *
+ * PARAMETERS:  None
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Process the optional external reference file.
+ *
+ * Each line in the file should be of the form:
+ *      External (<Method namepath>, MethodObj, <ArgCount>)
+ *
+ * Example:
+ *      External (_SB_.PCI0.XHC_.PS0X, MethodObj, 4)
+ *
+ 
******************************************************************************/
+
+void
+AcpiDmGetExternalsFromFile (
+    void)
+{
+    FILE                    *ExternalRefFile;
+    char                    *Token;
+    char                    *MethodName;
+    UINT32                  ArgCount;
+    UINT32                  ImportCount = 0;
+
+
+    if (!Gbl_ExternalRefFilename)
+    {
+        return;
+    }
+
+    /* Open the file */
+
+    ExternalRefFile = fopen (Gbl_ExternalRefFilename, "r");
+    if (!ExternalRefFile)
+    {
+        fprintf (stderr, "Could not open external reference file \"%s\"\n",
+            Gbl_ExternalRefFilename);
+        return;
+    }
+
+    /* Each line defines a method */
+
+    while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ExternalRefFile))
+    {
+        Token = strtok (StringBuffer, METHOD_SEPARATORS);   /* "External" */
+        if (!Token) continue;
+        if (strcmp (Token, "External")) continue;
+
+        MethodName = strtok (NULL, METHOD_SEPARATORS);      /* Method namepath 
*/
+        if (!MethodName) continue;
+
+        Token = strtok (NULL, METHOD_SEPARATORS);           /* "MethodObj" */
+        if (!Token) continue;
+        if (strcmp (Token, "MethodObj")) continue;
+
+        Token = strtok (NULL, METHOD_SEPARATORS);           /* Arg count */
+        if (!Token) continue;
+
+        /* Convert arg count string to an integer */
+
+        errno = 0;
+        ArgCount = strtoul (Token, NULL, 0);
+        if (errno)
+        {
+            fprintf (stderr, "Invalid argument count (%s)\n", Token);
+            continue;
+        }
+        if (ArgCount > 7)
+        {
+            fprintf (stderr, "Invalid argument count (%u)\n", ArgCount);
+            continue;
+        }
+
+        /* Add this external to the global list */
+
+        AcpiOsPrintf ("%s: Importing method external (%u arguments) %s\n",
+            Gbl_ExternalRefFilename, ArgCount, MethodName);
+
+        AcpiDmAddToExternalListFromFile (MethodName, ACPI_TYPE_METHOD, 
ArgCount | 0x80);
+        ImportCount++;
+    }
+
+    if (!ImportCount)
+    {
+        fprintf (stderr, "Did not find any external methods in reference file 
\"%s\"\n",
+            Gbl_ExternalRefFilename);
+    }
+    else
+    {
+        /* Add the external(s) to the namespace */
+
+        AcpiDmAddExternalsToNamespace ();
+
+        AcpiOsPrintf ("%s: Imported %u external method definitions\n",
+            Gbl_ExternalRefFilename, ImportCount);
+    }
+
+    fclose (ExternalRefFile);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiDmAddToExternalListFromFile
+ *
+ * PARAMETERS:  Path                - Internal (AML) path to the object
+ *              Type                - ACPI object type to be added
+ *              Value               - Arg count if adding a Method object
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Insert a new name into the global list of Externals which
+ *              will in turn be later emitted as an External() declaration
+ *              in the disassembled output.
+ *
+ 
******************************************************************************/
+
+static void
+AcpiDmAddToExternalListFromFile (
+    char                    *Path,
+    UINT8                   Type,
+    UINT32                  Value)
+{
+    char                    *InternalPath;
+    char                    *ExternalPath;
+    ACPI_EXTERNAL_LIST      *NewExternal;
+    ACPI_EXTERNAL_LIST      *NextExternal;
+    ACPI_EXTERNAL_LIST      *PrevExternal = NULL;
+    ACPI_STATUS             Status;
+    BOOLEAN                 Resolved = FALSE;
+
+
+    if (!Path)
+    {
+        return;
+    }
+
+    /* TBD: Add a flags parameter */
+
+    if (Type == ACPI_TYPE_METHOD)
+    {
+        if (Value & 0x80)
+        {
+            Resolved = TRUE;
+        }
+        Value &= 0x07;
+    }
+
+    /*
+     * We don't want External() statements to contain a leading '\'.
+     * This prevents duplicate external statements of the form:
+     *
+     *    External (\ABCD)
+     *    External (ABCD)
+     *
+     * This would cause a compile time error when the disassembled
+     * output file is recompiled.
+     */
+    if ((*Path == AML_ROOT_PREFIX) && (Path[1]))
+    {
+        Path++;
+    }
+
+    /* Check all existing externals to ensure no duplicates */
+
+    NextExternal = AcpiGbl_ExternalList;
+    while (NextExternal)
+    {
+        if (!ACPI_STRCMP (Path, NextExternal->Path))
+        {
+            /* Duplicate method, check that the Value (ArgCount) is the same */
+
+            if ((NextExternal->Type == ACPI_TYPE_METHOD) &&
+                (NextExternal->Value != Value))
+            {
+                ACPI_ERROR ((AE_INFO,
+                    "(File) External method arg count mismatch %s: Current %u, 
override to %u",
+                    NextExternal->Path, NextExternal->Value, Value));
+
+                /* Override, since new value came from external reference file 
*/
+
+                NextExternal->Value = Value;
+            }
+
+            /* Allow upgrade of type from ANY */
+
+            else if (NextExternal->Type == ACPI_TYPE_ANY)
+            {
+                NextExternal->Type = Type;
+                NextExternal->Value = Value;
+            }
+
+            return;
+        }
+
+        NextExternal = NextExternal->Next;
+    }
+
+    /* Get the internal pathname (AML format) */
+
+    Status = AcpiNsInternalizeName (Path, &InternalPath);
+    if (ACPI_FAILURE (Status))
+    {
+        return;
+    }
+
+    /* Allocate and init a new External() descriptor */
+
+    NewExternal = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_EXTERNAL_LIST));
+    if (!NewExternal)
+    {
+        ACPI_FREE (InternalPath);
+        return;
+    }
+
+    /* Must copy and normalize the input path */
+
+    AcpiNsExternalizeName (ACPI_UINT32_MAX, InternalPath, NULL, &ExternalPath);
+
+    NewExternal->Path = ExternalPath;
+    NewExternal->Type = Type;
+    NewExternal->Value = Value;
+    NewExternal->Resolved = Resolved;
+    NewExternal->Length = (UINT16) ACPI_STRLEN (Path);
+    NewExternal->InternalPath = InternalPath;
+
+    /* Set flag to indicate External->InternalPath needs to be freed */
+
+    NewExternal->Flags |= ACPI_IPATH_ALLOCATED | ACPI_FROM_REFERENCE_FILE;
+
+    /* Link the new descriptor into the global list, alphabetically ordered */
+
+    NextExternal = AcpiGbl_ExternalList;
+    while (NextExternal)
+    {
+        if (AcpiUtStricmp (NewExternal->Path, NextExternal->Path) < 0)
+        {
+            if (PrevExternal)
+            {
+                PrevExternal->Next = NewExternal;
+            }
+            else
+            {
+                AcpiGbl_ExternalList = NewExternal;
+            }
+
+            NewExternal->Next = NextExternal;
+            return;
+        }
+
+        PrevExternal = NextExternal;
+        NextExternal = NextExternal->Next;
+    }
+
+    if (PrevExternal)
+    {
+        PrevExternal->Next = NewExternal;
+    }
+    else
+    {
+        AcpiGbl_ExternalList = NewExternal;
+    }
+}
+
+
+/*******************************************************************************
+ *
  * FUNCTION:    AcpiDmAddExternalsToNamespace
  *
  * PARAMETERS:  None
@@ -592,7 +914,7 @@ AcpiDmAddExternalsToNamespace (
 
         Status = AcpiNsLookup (NULL, External->InternalPath, External->Type,
                    ACPI_IMODE_LOAD_PASS1,
-                   ACPI_NS_EXTERNAL | ACPI_NS_DONT_OPEN_SCOPE,
+                   ACPI_NS_ERROR_IF_FOUND | ACPI_NS_EXTERNAL | 
ACPI_NS_DONT_OPEN_SCOPE,
                    NULL, &Node);
 
         if (ACPI_FAILURE (Status))
@@ -623,6 +945,7 @@ AcpiDmAddExternalsToNamespace (
             break;
 
         default:
+
             break;
         }
 
@@ -725,23 +1048,112 @@ AcpiDmEmitExternals (
     }
 
     /*
-     * Walk the list of externals (unresolved references)
-     * found during the AML parsing
+     * Determine the number of control methods in the external list, and
+     * also how many of those externals were resolved via the namespace.
      */
-    while (AcpiGbl_ExternalList)
+    NextExternal = AcpiGbl_ExternalList;
+    while (NextExternal)
     {
-        AcpiOsPrintf ("    External (%s%s",
-            AcpiGbl_ExternalList->Path,
-            AcpiDmGetObjectTypeName (AcpiGbl_ExternalList->Type));
+        if (NextExternal->Type == ACPI_TYPE_METHOD)
+        {
+            AcpiGbl_NumExternalMethods++;
+            if (NextExternal->Resolved)
+            {
+                AcpiGbl_ResolvedExternalMethods++;
+            }
+        }
 
-        if (AcpiGbl_ExternalList->Type == ACPI_TYPE_METHOD)
+        NextExternal = NextExternal->Next;
+    }
+
+    /* Check if any control methods were unresolved */
+
+    AcpiDmUnresolvedWarning (1);
+
+    /* Emit any unresolved method externals in a single text block */
+
+    NextExternal = AcpiGbl_ExternalList;
+    while (NextExternal)
+    {
+        if ((NextExternal->Type == ACPI_TYPE_METHOD) &&
+            (!NextExternal->Resolved))
         {
-            AcpiOsPrintf (")    // %u Arguments\n",
-                AcpiGbl_ExternalList->Value);
+            AcpiOsPrintf ("    External (%s%s",
+                NextExternal->Path,
+                AcpiDmGetObjectTypeName (NextExternal->Type));
+
+            AcpiOsPrintf (
+                ")    // Warning: Unresolved Method, "
+                "guessing %u arguments (may be incorrect, see warning 
above)\n",
+                NextExternal->Value);
+
+            NextExternal->Emitted = TRUE;
         }
-        else
+
+        NextExternal = NextExternal->Next;
+    }
+
+    AcpiOsPrintf ("\n");
+
+
+    /* Emit externals that were imported from a file */
+
+    if (Gbl_ExternalRefFilename)
+    {
+        AcpiOsPrintf (
+            "    /*\n     * External declarations that were imported from\n"
+            "     * the reference file [%s]\n     */\n",
+            Gbl_ExternalRefFilename);
+
+        NextExternal = AcpiGbl_ExternalList;
+        while (NextExternal)
+        {
+            if (!NextExternal->Emitted && (NextExternal->Flags & 
ACPI_FROM_REFERENCE_FILE))
+            {
+                AcpiOsPrintf ("    External (%s%s",
+                    NextExternal->Path,
+                    AcpiDmGetObjectTypeName (NextExternal->Type));
+
+                if (NextExternal->Type == ACPI_TYPE_METHOD)
+                {
+                    AcpiOsPrintf (")    // %u Arguments\n",
+                        NextExternal->Value);
+                }
+                else
+                {
+                    AcpiOsPrintf (")\n");
+                }
+                NextExternal->Emitted = TRUE;
+            }
+
+            NextExternal = NextExternal->Next;
+        }
+
+        AcpiOsPrintf ("\n");
+    }
+
+    /*
+     * Walk the list of externals found during the AML parsing
+     */
+    while (AcpiGbl_ExternalList)
+    {
+        if (!AcpiGbl_ExternalList->Emitted)
         {
-            AcpiOsPrintf (")\n");
+            AcpiOsPrintf ("    External (%s%s",
+                AcpiGbl_ExternalList->Path,
+                AcpiDmGetObjectTypeName (AcpiGbl_ExternalList->Type));
+
+            /* For methods, add a comment with the number of arguments */
+
+            if (AcpiGbl_ExternalList->Type == ACPI_TYPE_METHOD)
+            {
+                AcpiOsPrintf (")    // %u Arguments\n",
+                    AcpiGbl_ExternalList->Value);
+            }
+            else
+            {
+                AcpiOsPrintf (")\n");
+            }
         }
 
         /* Free this external info block and move on to next external */
@@ -759,3 +1171,172 @@ AcpiDmEmitExternals (
 
     AcpiOsPrintf ("\n");
 }
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiDmUnresolvedWarning
+ *
+ * PARAMETERS:  Type                - Where to output the warning.
+ *                                    0 means write to stderr
+ *                                    1 means write to AcpiOsPrintf
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Issue warning message if there are unresolved external control
+ *              methods within the disassembly.
+ *
+ 
******************************************************************************/
+
+#if 0
+Summary of the external control method problem:
+
+When the -e option is used with disassembly, the various SSDTs are simply
+loaded into a global namespace for the disassembler to use in order to
+resolve control method references (invocations).
+
+The disassembler tracks any such references, and will emit an External()
+statement for these types of methods, with the proper number of arguments .
+
+Without the SSDTs, the AML does not contain enough information to properly
+disassemble the control method invocation -- because the disassembler does
+not know how many arguments to parse.
+
+An example: Assume we have two control methods. ABCD has one argument, and
+EFGH has zero arguments. Further, we have two additional control methods
+that invoke ABCD and EFGH, named T1 and T2:
+
+    Method (ABCD, 1)
+    {
+    }
+    Method (EFGH, 0)
+    {
+    }
+    Method (T1)
+    {
+        ABCD (Add (2, 7, Local0))
+    }
+    Method (T2)
+    {
+        EFGH ()
+        Add (2, 7, Local0)
+    }
+
+Here is the AML code that is generated for T1 and T2:
+
+     185:      Method (T1)
+
+0000034C:  14 10 54 31 5F 5F 00 ...    "..T1__."
+
+     186:      {
+     187:          ABCD (Add (2, 7, Local0))
+
+00000353:  41 42 43 44 ............    "ABCD"
+00000357:  72 0A 02 0A 07 60 ......    "r....`"
+
+     188:      }
+
+     190:      Method (T2)
+
+0000035D:  14 10 54 32 5F 5F 00 ...    "..T2__."
+
+     191:      {
+     192:          EFGH ()
+
+00000364:  45 46 47 48 ............    "EFGH"
+
+     193:          Add (2, 7, Local0)
+
+00000368:  72 0A 02 0A 07 60 ......    "r....`"
+     194:      }
+
+Note that the AML code for T1 and T2 is essentially identical. When
+disassembling this code, the methods ABCD and EFGH must be known to the
+disassembler, otherwise it does not know how to handle the method invocations.
+
+In other words, if ABCD and EFGH are actually external control methods
+appearing in an SSDT, the disassembler does not know what to do unless
+the owning SSDT has been loaded via the -e option.
+#endif
+
+void
+AcpiDmUnresolvedWarning (
+    UINT8                   Type)
+{
+
+    if (!AcpiGbl_NumExternalMethods)
+    {
+        return;
+    }
+
+    if (Type)
+    {
+        if (!AcpiGbl_ExternalFileList)
+        {
+            /* The -e option was not specified */
+
+           AcpiOsPrintf ("    /*\n"
+                "     * iASL Warning: There were %u external control methods 
found during\n"
+                "     * disassembly, but additional ACPI tables to resolve 
these externals\n"
+                "     * were not specified. This resulting disassembler output 
file may not\n"
+                "     * compile because the disassembler did not know how many 
arguments\n"
+                "     * to assign to these methods. To specify the tables 
needed to resolve\n"
+                "     * external control method references, use the one of the 
following\n"
+                "     * example iASL invocations:\n"
+                "     *     iasl -e <ssdt1.aml,ssdt2.aml...> -d <dsdt.aml>\n"
+                "     *     iasl -e <dsdt.aml,ssdt2.aml...> -d <ssdt1.aml>\n"
+                "     */\n",
+                AcpiGbl_NumExternalMethods);
+        }
+        else if (AcpiGbl_NumExternalMethods != AcpiGbl_ResolvedExternalMethods)
+        {
+            /* The -e option was specified, but there are still some 
unresolved externals */
+
+            AcpiOsPrintf ("    /*\n"
+                "     * iASL Warning: There were %u external control methods 
found during\n"
+                "     * disassembly, but only %u %s resolved (%u unresolved). 
Additional\n"
+                "     * ACPI tables are required to properly disassemble the 
code. This\n"
+                "     * resulting disassembler output file may not compile 
because the\n"
+                "     * disassembler did not know how many arguments to assign 
to the\n"
+                "     * unresolved methods.\n"
+                "     */\n",
+                AcpiGbl_NumExternalMethods, AcpiGbl_ResolvedExternalMethods,
+                (AcpiGbl_ResolvedExternalMethods > 1 ? "were" : "was"),
+                (AcpiGbl_NumExternalMethods - 
AcpiGbl_ResolvedExternalMethods));
+        }
+    }
+    else
+    {
+        if (!AcpiGbl_ExternalFileList)
+        {
+            /* The -e option was not specified */
+
+            fprintf (stderr, "\n"
+                "iASL Warning: There were %u external control methods found 
during\n"
+                "disassembly, but additional ACPI tables to resolve these 
externals\n"
+                "were not specified. The resulting disassembler output file 
may not\n"
+                "compile because the disassembler did not know how many 
arguments\n"
+                "to assign to these methods. To specify the tables needed to 
resolve\n"
+                "external control method references, use the one of the 
following\n"
+                "example iASL invocations:\n"
+                "    iasl -e <ssdt1.aml,ssdt2.aml...> -d <dsdt.aml>\n"
+                "    iasl -e <dsdt.aml,ssdt2.aml...> -d <ssdt1.aml>\n",
+                AcpiGbl_NumExternalMethods);
+        }
+        else if (AcpiGbl_NumExternalMethods != AcpiGbl_ResolvedExternalMethods)
+        {
+            /* The -e option was specified, but there are still some 
unresolved externals */
+
+            fprintf (stderr, "\n"
+                "iASL Warning: There were %u external control methods found 
during\n"
+                "disassembly, but only %u %s resolved (%u unresolved). 
Additional\n"
+                "ACPI tables are required to properly disassemble the code. 
The\n"
+                "resulting disassembler output file may not compile because 
the\n"
+                "disassembler did not know how many arguments to assign to 
the\n"
+                "unresolved methods.\n",
+                AcpiGbl_NumExternalMethods, AcpiGbl_ResolvedExternalMethods,
+                (AcpiGbl_ResolvedExternalMethods > 1 ? "were" : "was"),
+                (AcpiGbl_NumExternalMethods - 
AcpiGbl_ResolvedExternalMethods));
+        }
+    }
+}
diff --git a/src/add-ons/kernel/bus_managers/acpi/acpica/common/dmrestag.c 
b/src/add-ons/kernel/bus_managers/acpi/acpica/common/dmrestag.c
index 39e42d1..6f12f74 100644
--- a/src/add-ons/kernel/bus_managers/acpi/acpica/common/dmrestag.c
+++ b/src/add-ons/kernel/bus_managers/acpi/acpica/common/dmrestag.c
@@ -8,7 +8,7 @@
  *
  * 1. Copyright Notice
  *
- * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2013, Intel Corp.
  * All rights reserved.
  *
  * 2. License
@@ -161,7 +161,7 @@ AcpiDmAddResourceToNamespace (
     UINT32                  Length,
     UINT32                  Offset,
     UINT8                   ResourceIndex,
-    void                    *Context);
+    void                    **Context);
 
 static void
 AcpiDmAddResourcesToNamespace (
@@ -697,7 +697,7 @@ AcpiGetTagPathname (
     Aml = ACPI_CAST_PTR (AML_RESOURCE,
             &Op->Named.Data[ResourceNode->Value]);
 
-    Status = AcpiUtValidateResource (Aml, &ResourceTableIndex);
+    Status = AcpiUtValidateResource (NULL, Aml, &ResourceTableIndex);
     if (ACPI_FAILURE (Status))
     {
         return (NULL);
@@ -738,6 +738,7 @@ AcpiGetTagPathname (
     Status = AcpiNsBuildExternalPath (BufferNode, RequiredSize, Pathname);
     if (ACPI_FAILURE (Status))
     {
+        ACPI_FREE (Pathname);
         return (NULL);
     }
 
@@ -870,7 +871,6 @@ AcpiDmGetResourceTag (
     case ACPI_RESOURCE_NAME_ADDRESS32:
     case ACPI_RESOURCE_NAME_ADDRESS64:
     case ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64:
-
         /*
          * Subtype differentiation is the flags.
          * Kindof brute force, but just blindly search for an index match
@@ -918,6 +918,7 @@ AcpiDmGetResourceTag (
         break;
 
     default:
+
         break;
     }
 
@@ -1010,7 +1011,7 @@ AcpiDmFindResources (
                  * resource descriptors to the namespace, as children of the
                  * buffer node.
                  */
-                if (ACPI_SUCCESS (AcpiDmIsResourceTemplate (Op)))
+                if (ACPI_SUCCESS (AcpiDmIsResourceTemplate (NULL, Op)))
                 {
                     Op->Common.DisasmOpcode = ACPI_DASM_RESOURCE;
                     AcpiDmAddResourcesToNamespace (Parent->Common.Node, Op);
@@ -1063,9 +1064,9 @@ AcpiDmAddResourcesToNamespace (
      * Insert each resource into the namespace
      * NextOp contains the Aml pointer and the Aml length
      */
-    AcpiUtWalkAmlResources ((UINT8 *) NextOp->Named.Data,
+    AcpiUtWalkAmlResources (NULL, (UINT8 *) NextOp->Named.Data,
         (ACPI_SIZE) NextOp->Common.Value.Integer,
-        AcpiDmAddResourceToNamespace, BufferNode);
+        AcpiDmAddResourceToNamespace, (void **) BufferNode);
 }
 
 
@@ -1091,7 +1092,7 @@ AcpiDmAddResourceToNamespace (
     UINT32                  Length,
     UINT32                  Offset,
     UINT8                   ResourceIndex,
-    void                    *Context)
+    void                    **Context)
 {
     ACPI_STATUS             Status;
     ACPI_GENERIC_STATE      ScopeInfo;
diff --git a/src/add-ons/kernel/bus_managers/acpi/acpica/common/dmtable.c 
b/src/add-ons/kernel/bus_managers/acpi/acpica/common/dmtable.c
index 46cde10..fa7b300 100644
--- a/src/add-ons/kernel/bus_managers/acpi/acpica/common/dmtable.c
+++ b/src/add-ons/kernel/bus_managers/acpi/acpica/common/dmtable.c
@@ -8,7 +8,7 @@
  *
  * 1. Copyright Notice
  *
- * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2013, Intel Corp.
  * All rights reserved.
  *
  * 2. License
@@ -172,6 +172,7 @@ static const char           *AcpiDmEinjActions[] =
     "Execute Operation",
     "Check Busy Status",
     "Get Command Status",
+    "Set Error Type With Address",
     "Unknown Action"
 };
 
@@ -182,6 +183,7 @@ static const char           *AcpiDmEinjInstructions[] =
     "Write Register",
     "Write Register Value",
     "Noop",
+    "Flush Cacheline",
     "Unknown Instruction"
 };
 
@@ -252,6 +254,8 @@ static const char           *AcpiDmHestNotifySubnames[] =
     "Local Interrupt",
     "SCI",
     "NMI",
+    "CMCI",                         /* ACPI 5.0 */
+    "MCE",                          /* ACPI 5.0 */
     "Unknown Notify Type"           /* Reserved */
 };
 
@@ -353,7 +357,7 @@ ACPI_DMTABLE_DATA    AcpiDmTableData[] =
     {ACPI_SIG_BGRT, AcpiDmTableInfoBgrt,    NULL,           NULL,           
TemplateBgrt,   "Boot Graphics Resource Table"},
     {ACPI_SIG_BOOT, AcpiDmTableInfoBoot,    NULL,           NULL,           
TemplateBoot,   "Simple Boot Flag Table"},
     {ACPI_SIG_CPEP, NULL,                   AcpiDmDumpCpep, DtCompileCpep,  
TemplateCpep,   "Corrected Platform Error Polling table"},
-    {ACPI_SIG_CSRT, NULL,                   AcpiDmDumpCsrt, NULL,           
NULL,           "Core System Resource Table"},
+    {ACPI_SIG_CSRT, NULL,                   AcpiDmDumpCsrt, DtCompileCsrt,  
TemplateCsrt,   "Core System Resource Table"},
     {ACPI_SIG_DBG2, NULL,                   AcpiDmDumpDbg2, NULL,           
NULL,           "Debug Port table type 2"},
     {ACPI_SIG_DBGP, AcpiDmTableInfoDbgp,    NULL,           NULL,           
TemplateDbgp,   "Debug Port table"},
     {ACPI_SIG_DMAR, NULL,                   AcpiDmDumpDmar, DtCompileDmar,  
TemplateDmar,   "DMA Remapping table"},
@@ -371,6 +375,7 @@ ACPI_DMTABLE_DATA    AcpiDmTableData[] =
     {ACPI_SIG_MCHI, AcpiDmTableInfoMchi,    NULL,           NULL,           
TemplateMchi,   "Management Controller Host Interface table"},
     {ACPI_SIG_MPST, AcpiDmTableInfoMpst,    AcpiDmDumpMpst, DtCompileMpst,  
TemplateMpst,   "Memory Power State Table"},
     {ACPI_SIG_MSCT, NULL,                   AcpiDmDumpMsct, DtCompileMsct,  
TemplateMsct,   "Maximum System Characteristics Table"},
+    {ACPI_SIG_MTMR, NULL,                   AcpiDmDumpMtmr, DtCompileMtmr,  
TemplateMtmr,   "MID Timer Table"},
     {ACPI_SIG_PCCT, NULL,                   AcpiDmDumpPcct, NULL,           
NULL,           "Platform Communications Channel Table"},
     {ACPI_SIG_PMTT, NULL,                   AcpiDmDumpPmtt, DtCompilePmtt,  
TemplatePmtt,   "Platform Memory Topology Table"},
     {ACPI_SIG_RSDT, NULL,                   AcpiDmDumpRsdt, DtCompileRsdt,  
TemplateRsdt,   "Root System Description Table"},
@@ -382,7 +387,9 @@ ACPI_DMTABLE_DATA    AcpiDmTableData[] =
     {ACPI_SIG_SPMI, AcpiDmTableInfoSpmi,    NULL,           NULL,           
TemplateSpmi,   "Server Platform Management Interface table"},
     {ACPI_SIG_SRAT, NULL,                   AcpiDmDumpSrat, DtCompileSrat,  
TemplateSrat,   "System Resource Affinity Table"},
     {ACPI_SIG_TCPA, AcpiDmTableInfoTcpa,    NULL,           NULL,           
TemplateTcpa,   "Trusted Computing Platform Alliance table"},
+    {ACPI_SIG_TPM2, AcpiDmTableInfoTpm2,    NULL,           NULL,           
TemplateTpm2,   "Trusted Platform Module hardware interface table"},
     {ACPI_SIG_UEFI, AcpiDmTableInfoUefi,    NULL,           DtCompileUefi,  
TemplateUefi,   "UEFI Boot Optimization Table"},
+    {ACPI_SIG_VRTC, AcpiDmTableInfoVrtc,    AcpiDmDumpVrtc, DtCompileVrtc,  
TemplateVrtc,   "Virtual Real-Time Clock Table"},
     {ACPI_SIG_WAET, AcpiDmTableInfoWaet,    NULL,           NULL,           
TemplateWaet,   "Windows ACPI Emulated Devices Table"},
     {ACPI_SIG_WDAT, NULL,                   AcpiDmDumpWdat, DtCompileWdat,  
TemplateWdat,   "Watchdog Action Table"},
     {ACPI_SIG_WDDT, AcpiDmTableInfoWddt,    NULL,           NULL,           
TemplateWddt,   "Watchdog Description Table"},
@@ -511,7 +518,7 @@ AcpiDmDumpDataTable (
         Length = Table->Length;
         AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoFacs);
     }
-    else if (ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_RSDP))
+    else if (ACPI_VALIDATE_RSDP_SIG (Table->Signature))
     {
         Length = AcpiDmDumpRsdp (Table);
     }
@@ -546,6 +553,8 @@ AcpiDmDumpDataTable (
             {
                 AcpiOsPrintf ("\n**** Unknown ACPI table type [%4.4s]\n\n",
                     Table->Signature);
+                fprintf (stderr, "Unknown ACPI table signature [%4.4s], 
decoding header only\n",
+                    Table->Signature);
             }
         }
         else if (TableData->TableHandler)
@@ -764,48 +773,76 @@ AcpiDmDumpTable (
         case ACPI_DMT_EINJINST:
         case ACPI_DMT_ERSTACT:
         case ACPI_DMT_ERSTINST:
+
             ByteLength = 1;
             break;
+
         case ACPI_DMT_UINT16:
         case ACPI_DMT_DMAR:
         case ACPI_DMT_HEST:
+
             ByteLength = 2;
             break;
+
         case ACPI_DMT_UINT24:
+
             ByteLength = 3;
             break;
+
         case ACPI_DMT_UINT32:
         case ACPI_DMT_NAME4:
         case ACPI_DMT_SIG:
         case ACPI_DMT_SLIC:
+
             ByteLength = 4;
             break;
+
         case ACPI_DMT_UINT40:
+
             ByteLength = 5;
             break;
+
         case ACPI_DMT_UINT48:
         case ACPI_DMT_NAME6:
+
             ByteLength = 6;
             break;
+
         case ACPI_DMT_UINT56:
         case ACPI_DMT_BUF7:
+
             ByteLength = 7;
             break;
+
         case ACPI_DMT_UINT64:
         case ACPI_DMT_NAME8:
+
             ByteLength = 8;
             break;
+
+        case ACPI_DMT_BUF10:
+
+            ByteLength = 10;
+            break;
+
         case ACPI_DMT_BUF16:
         case ACPI_DMT_UUID:
+
             ByteLength = 16;
             break;
+
         case ACPI_DMT_BUF128:
+
             ByteLength = 128;
             break;
+
         case ACPI_DMT_STRING:
+
             ByteLength = ACPI_STRLEN (ACPI_CAST_PTR (char, Target)) + 1;
             break;
+
         case ACPI_DMT_GAS:
+
             if (!LastOutputBlankLine)
             {
                 AcpiOsPrintf ("\n");
@@ -813,7 +850,9 @@ AcpiDmDumpTable (
             }
             ByteLength = sizeof (ACPI_GENERIC_ADDRESS);
             break;
+
         case ACPI_DMT_HESTNTFY:
+
             if (!LastOutputBlankLine)
             {
                 AcpiOsPrintf ("\n");
@@ -821,7 +860,9 @@ AcpiDmDumpTable (
             }
             ByteLength = sizeof (ACPI_HEST_NOTIFY);
             break;
+
         default:
+
             ByteLength = 0;
             break;
         }
@@ -902,9 +943,9 @@ AcpiDmDumpTable (
             break;
 
         case ACPI_DMT_BUF7:
+        case ACPI_DMT_BUF10:
         case ACPI_DMT_BUF16:
         case ACPI_DMT_BUF128:
-
             /*
              * Buffer: Size depends on the opcode and was set above.
              * Each hex byte is separated with a space.
@@ -1213,16 +1254,19 @@ AcpiDmDumpTable (
             switch (Temp8)
             {
             case ACPI_IVRS_TYPE_HARDWARE:
+
                 Name = AcpiDmIvrsSubnames[0];
                 break;
 
             case ACPI_IVRS_TYPE_MEMORY1:
             case ACPI_IVRS_TYPE_MEMORY2:
             case ACPI_IVRS_TYPE_MEMORY3:
+
                 Name = AcpiDmIvrsSubnames[1];
                 break;
 
             default:
+
                 Name = AcpiDmIvrsSubnames[2];
                 break;
             }
@@ -1231,9 +1275,11 @@ AcpiDmDumpTable (
             break;
 
         case ACPI_DMT_EXIT:
+
             return (AE_OK);
 
         default:
+
             ACPI_ERROR ((AE_INFO,
                 "**** Invalid table opcode [0x%X] ****\n", Info->Opcode));
             return (AE_SUPPORT);
diff --git a/src/add-ons/kernel/bus_managers/acpi/acpica/common/dmtbdump.c 
b/src/add-ons/kernel/bus_managers/acpi/acpica/common/dmtbdump.c
index 6affbea..84c646a 100644
--- a/src/add-ons/kernel/bus_managers/acpi/acpica/common/dmtbdump.c
+++ b/src/add-ons/kernel/bus_managers/acpi/acpica/common/dmtbdump.c
@@ -8,7 +8,7 @@
  *
  * 1. Copyright Notice
  *
- * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2013, Intel Corp.
  * All rights reserved.
  *
  * 2. License
@@ -421,27 +421,33 @@ AcpiDmValidateFadtLength (
     switch (Revision)
     {
     case 0:
+
         AcpiOsPrintf ("// ACPI Warning: Invalid FADT revision: 0\n");
         return;
 
     case 1:
+
         ExpectedLength = ACPI_FADT_V1_SIZE;
         break;
 
     case 2:
+
         ExpectedLength = ACPI_FADT_V2_SIZE;
         break;
 
     case 3:
     case 4:
+
         ExpectedLength = ACPI_FADT_V3_SIZE;
         break;
 
     case 5:
+
         ExpectedLength = ACPI_FADT_V5_SIZE;
         break;
 
     default:
+
         return;
     }
 
@@ -506,10 +512,12 @@ AcpiDmDumpAsf (
         switch (Type)
         {
         case ACPI_ASF_TYPE_INFO:
+
             InfoTable = AcpiDmTableInfoAsf0;
             break;
 
         case ACPI_ASF_TYPE_ALERT:
+
             InfoTable = AcpiDmTableInfoAsf1;
             DataInfoTable = AcpiDmTableInfoAsf1a;
             DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof 
(ACPI_ASF_ALERT));
@@ -519,6 +527,7 @@ AcpiDmDumpAsf (
             break;
 
         case ACPI_ASF_TYPE_CONTROL:
+
             InfoTable = AcpiDmTableInfoAsf2;
             DataInfoTable = AcpiDmTableInfoAsf2a;
             DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof 
(ACPI_ASF_REMOTE));
@@ -528,10 +537,12 @@ AcpiDmDumpAsf (
             break;
 
         case ACPI_ASF_TYPE_BOOT:
+
             InfoTable = AcpiDmTableInfoAsf3;
             break;
 
         case ACPI_ASF_TYPE_ADDRESS:
+
             InfoTable = AcpiDmTableInfoAsf4;
             DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof 
(ACPI_ASF_ADDRESS));
             DataLength = ACPI_CAST_PTR (ACPI_ASF_ADDRESS, SubTable)->Devices;
@@ -539,6 +550,7 @@ AcpiDmDumpAsf (
             break;
 
         default:
+
             AcpiOsPrintf ("\n**** Unknown ASF sub-table type 0x%X\n", 
SubTable->Header.Type);
             return;
         }
@@ -595,6 +607,7 @@ AcpiDmDumpAsf (
             break;
 
         default:
+
             break;
         }
 
@@ -686,6 +699,7 @@ AcpiDmDumpCsrt (
 {
     ACPI_STATUS             Status;
     ACPI_CSRT_GROUP         *SubTable;
+    ACPI_CSRT_SHARED_INFO   *SharedInfoTable;
     ACPI_CSRT_DESCRIPTOR    *SubSubTable;
     UINT32                  Length = Table->Length;
     UINT32                  Offset = sizeof (ACPI_TABLE_CSRT);
@@ -701,6 +715,8 @@ AcpiDmDumpCsrt (
     SubTable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Table, Offset);
     while (Offset < Table->Length)
     {
+        /* Resource group subtable */
+
         AcpiOsPrintf ("\n");
         Status = AcpiDmDumpTable (Length, Offset, SubTable,
                     SubTable->Length, AcpiDmTableInfoCsrt0);
@@ -709,15 +725,23 @@ AcpiDmDumpCsrt (
             return;
         }
 
+        /* Shared info subtable (One per resource group) */
+
         SubOffset = sizeof (ACPI_CSRT_GROUP);
+        SharedInfoTable = ACPI_ADD_PTR (ACPI_CSRT_SHARED_INFO, Table,
+            Offset + SubOffset);
 
-        /* Shared resource group info buffer */
+        AcpiOsPrintf ("\n");
+        Status = AcpiDmDumpTable (Length, Offset + SubOffset, SharedInfoTable,
+                    sizeof (ACPI_CSRT_SHARED_INFO), AcpiDmTableInfoCsrt1);
+        if (ACPI_FAILURE (Status))
+        {
+            return;
+        }
 
-        AcpiDmDumpBuffer (SubTable, SubOffset, SubTable->InfoLength,
-            Offset+SubOffset, "Shared Data");
-        SubOffset += SubTable->InfoLength;
+        SubOffset += SubTable->SharedInfoLength;
 
-        /* Sub-Sub-tables (Resource Descriptors) */
+        /* Sub-Subtables (Resource Descriptors) */
 
         SubSubTable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, Table,
             Offset + SubOffset);
@@ -727,7 +751,7 @@ AcpiDmDumpCsrt (
         {
             AcpiOsPrintf ("\n");
             Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubTable,
-                        SubSubTable->Length, AcpiDmTableInfoCsrt1);
+                        SubSubTable->Length, AcpiDmTableInfoCsrt2);
             if (ACPI_FAILURE (Status))
             {
                 return;
@@ -743,7 +767,7 @@ AcpiDmDumpCsrt (
                 Offset + SubOffset + SubSubOffset, "ResourceInfo");
             SubSubOffset += InfoLength;
 
-            /* Point to next sub-sub-table */
+            /* Point to next sub-subtable */
 
             SubOffset += SubSubTable->Length;
             SubSubTable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, SubSubTable,
@@ -920,26 +944,36 @@ AcpiDmDumpDmar (
         {
             return;
         }
+        AcpiOsPrintf ("\n");
 
         switch (SubTable->Type)
         {
         case ACPI_DMAR_TYPE_HARDWARE_UNIT:
+
             InfoTable = AcpiDmTableInfoDmar0;
             ScopeOffset = sizeof (ACPI_DMAR_HARDWARE_UNIT);
             break;
+
         case ACPI_DMAR_TYPE_RESERVED_MEMORY:
+
             InfoTable = AcpiDmTableInfoDmar1;
             ScopeOffset = sizeof (ACPI_DMAR_RESERVED_MEMORY);
             break;
+
         case ACPI_DMAR_TYPE_ATSR:
+
             InfoTable = AcpiDmTableInfoDmar2;
             ScopeOffset = sizeof (ACPI_DMAR_ATSR);
             break;
+
         case ACPI_DMAR_HARDWARE_AFFINITY:
+
             InfoTable = AcpiDmTableInfoDmar3;
             ScopeOffset = sizeof (ACPI_DMAR_RHSA);
             break;
+
         default:
+
             AcpiOsPrintf ("\n**** Unknown DMAR sub-table type 0x%X\n\n", 
SubTable->Type);
             return;
         }
@@ -963,6 +997,7 @@ AcpiDmDumpDmar (
             {
                 return;
             }
+            AcpiOsPrintf ("\n");
 
             /* Dump the PCI Path entries for this device scope */
 
@@ -980,6 +1015,7 @@ AcpiDmDumpDmar (
 
                 PathOffset += 2;
                 PciPath += 2;
+                AcpiOsPrintf ("\n");
             }
 
             /* Point to next device scope entry */
@@ -1147,12 +1183,17 @@ AcpiDmDumpFpdt (
         switch (SubTable->Type)
         {
         case ACPI_FPDT_TYPE_BOOT:
+
             InfoTable = AcpiDmTableInfoFpdt0;
             break;
+
         case ACPI_FPDT_TYPE_S3PERF:
+
             InfoTable = AcpiDmTableInfoFpdt1;
             break;
+
         default:
+
             AcpiOsPrintf ("\n**** Unknown FPDT sub-table type 0x%X\n\n", 
SubTable->Type);
 
             /* Attempt to continue */
@@ -1225,6 +1266,7 @@ AcpiDmDumpHest (
         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,
@@ -1232,6 +1274,7 @@ AcpiDmDumpHest (
             break;
 
         case ACPI_HEST_TYPE_IA32_CORRECTED_CHECK:
+
             InfoTable = AcpiDmTableInfoHest1;
             SubTableLength = sizeof (ACPI_HEST_IA_CORRECTED);
             BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_CORRECTED,
@@ -1239,31 +1282,37 @@ AcpiDmDumpHest (
             break;
 
         case ACPI_HEST_TYPE_IA32_NMI:
+
             InfoTable = AcpiDmTableInfoHest2;
             SubTableLength = sizeof (ACPI_HEST_IA_NMI);
             break;
 
         case ACPI_HEST_TYPE_AER_ROOT_PORT:
+
             InfoTable = AcpiDmTableInfoHest6;
             SubTableLength = sizeof (ACPI_HEST_AER_ROOT);
             break;
 
         case ACPI_HEST_TYPE_AER_ENDPOINT:
+
             InfoTable = AcpiDmTableInfoHest7;
             SubTableLength = sizeof (ACPI_HEST_AER);
             break;
 
         case ACPI_HEST_TYPE_AER_BRIDGE:
+
             InfoTable = AcpiDmTableInfoHest8;
             SubTableLength = sizeof (ACPI_HEST_AER_BRIDGE);
             break;
 
         case ACPI_HEST_TYPE_GENERIC_ERROR:
+
             InfoTable = AcpiDmTableInfoHest9;
             SubTableLength = sizeof (ACPI_HEST_GENERIC);
             break;
 
         default:
+
             /* Cannot continue on unknown type - no length */
 
             AcpiOsPrintf ("\n**** Unknown HEST sub-table type 0x%X\n", 
SubTable->Type);
@@ -1365,14 +1414,19 @@ AcpiDmDumpIvrs (
         switch (SubTable->Type)
         {
         case ACPI_IVRS_TYPE_HARDWARE:
+
             InfoTable = AcpiDmTableInfoIvrs0;
             break;
+
         case ACPI_IVRS_TYPE_MEMORY1:
         case ACPI_IVRS_TYPE_MEMORY2:
         case ACPI_IVRS_TYPE_MEMORY3:
+
             InfoTable = AcpiDmTableInfoIvrs1;
             break;
+
         default:
+
             AcpiOsPrintf ("\n**** Unknown IVRS sub-table type 0x%X\n",
                 SubTable->Type);
 
@@ -1534,45 +1588,72 @@ AcpiDmDumpMadt (
         switch (SubTable->Type)
         {
         case ACPI_MADT_TYPE_LOCAL_APIC:
+
             InfoTable = AcpiDmTableInfoMadt0;
             break;
+
         case ACPI_MADT_TYPE_IO_APIC:
+
             InfoTable = AcpiDmTableInfoMadt1;
             break;
+
         case ACPI_MADT_TYPE_INTERRUPT_OVERRIDE:
+
             InfoTable = AcpiDmTableInfoMadt2;
             break;
+
         case ACPI_MADT_TYPE_NMI_SOURCE:
+
             InfoTable = AcpiDmTableInfoMadt3;
             break;
+
         case ACPI_MADT_TYPE_LOCAL_APIC_NMI:
+
             InfoTable = AcpiDmTableInfoMadt4;
             break;
+
         case ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE:
+
             InfoTable = AcpiDmTableInfoMadt5;
             break;
+
         case ACPI_MADT_TYPE_IO_SAPIC:
+
             InfoTable = AcpiDmTableInfoMadt6;
             break;
+
         case ACPI_MADT_TYPE_LOCAL_SAPIC:
+
             InfoTable = AcpiDmTableInfoMadt7;
             break;
+
         case ACPI_MADT_TYPE_INTERRUPT_SOURCE:
+
             InfoTable = AcpiDmTableInfoMadt8;
             break;
+
         case ACPI_MADT_TYPE_LOCAL_X2APIC:
+
             InfoTable = AcpiDmTableInfoMadt9;
             break;
+
         case ACPI_MADT_TYPE_LOCAL_X2APIC_NMI:
+
             InfoTable = AcpiDmTableInfoMadt10;
             break;
+
         case ACPI_MADT_TYPE_GENERIC_INTERRUPT:
+
             InfoTable = AcpiDmTableInfoMadt11;
             break;
+
         case ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR:
+
             InfoTable = AcpiDmTableInfoMadt12;
             break;
+
         default:
+
             AcpiOsPrintf ("\n**** Unknown MADT sub-table type 0x%X\n\n", 
SubTable->Type);
 
             /* Attempt to continue */
@@ -1857,6 +1938,58 @@ AcpiDmDumpMsct (
 
 
/*******************************************************************************
  *
+ * FUNCTION:    AcpiDmDumpMtmr
+ *
+ * PARAMETERS:  Table               - A MTMR table
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Format the contents of a MTMR
+ *
+ 
******************************************************************************/
+
+void
+AcpiDmDumpMtmr (
+    ACPI_TABLE_HEADER       *Table)
+{
+    ACPI_STATUS             Status;
+    UINT32                  Offset = sizeof (ACPI_TABLE_MTMR);
+    ACPI_MTMR_ENTRY         *SubTable;
+
+
+    /* Main table */
+
+    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMtmr);
+    if (ACPI_FAILURE (Status))
+    {
+        return;
+    }
+
+    /* Sub-tables */
+
+    SubTable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Table, Offset);
+    while (Offset < Table->Length)
+    {
+        /* Common sub-table header */
+
+        AcpiOsPrintf ("\n");
+        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
+                    sizeof (ACPI_MTMR_ENTRY), AcpiDmTableInfoMtmr0);
+        if (ACPI_FAILURE (Status))
+        {
+            return;
+        }
+
+        /* Point to next sub-table */
+
+        Offset += sizeof (ACPI_MTMR_ENTRY);
+        SubTable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, SubTable, sizeof 
(ACPI_MTMR_ENTRY));
+    }
+}
+
+
+/*******************************************************************************
+ *
  * FUNCTION:    AcpiDmDumpPcct
  *
  * PARAMETERS:  Table               - A PCCT table
@@ -2161,12 +2294,17 @@ AcpiDmDumpS3pt (
         switch (SubTable->Type)
         {
         case ACPI_S3PT_TYPE_RESUME:
+
             InfoTable = AcpiDmTableInfoS3pt0;
             break;
+
         case ACPI_S3PT_TYPE_SUSPEND:
+
             InfoTable = AcpiDmTableInfoS3pt1;
             break;
+
         default:
+
             AcpiOsPrintf ("\n**** Unknown S3PT sub-table type 0x%X\n", 
SubTable->Type);
 
             /* Attempt to continue */
@@ -2238,12 +2376,17 @@ AcpiDmDumpSlic (
         switch (SubTable->Type)
         {
         case ACPI_SLIC_TYPE_PUBLIC_KEY:
+
             InfoTable = AcpiDmTableInfoSlic0;
             break;
+
         case ACPI_SLIC_TYPE_WINDOWS_MARKER:
+
             InfoTable = AcpiDmTableInfoSlic1;
             break;
+
         default:
+
             AcpiOsPrintf ("\n**** Unknown SLIC sub-table type 0x%X\n", 
SubTable->Type);
 
             /* Attempt to continue */
@@ -2399,14 +2542,20 @@ AcpiDmDumpSrat (
         switch (SubTable->Type)
         {
         case ACPI_SRAT_TYPE_CPU_AFFINITY:
+
             InfoTable = AcpiDmTableInfoSrat0;
             break;
+
         case ACPI_SRAT_TYPE_MEMORY_AFFINITY:
+
             InfoTable = AcpiDmTableInfoSrat1;
             break;
+
         case ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY:
+
             InfoTable = AcpiDmTableInfoSrat2;
             break;
+
         default:
             AcpiOsPrintf ("\n**** Unknown SRAT sub-table type 0x%X\n", 
SubTable->Type);
 
@@ -2439,6 +2588,58 @@ NextSubTable:
 
 
/*******************************************************************************
  *
+ * FUNCTION:    AcpiDmDumpVrtc
+ *
+ * PARAMETERS:  Table               - A VRTC table
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Format the contents of a VRTC
+ *
+ 
******************************************************************************/
+
+void
+AcpiDmDumpVrtc (
+    ACPI_TABLE_HEADER       *Table)
+{
+    ACPI_STATUS             Status;
+    UINT32                  Offset = sizeof (ACPI_TABLE_VRTC);
+    ACPI_VRTC_ENTRY         *SubTable;
+
+
+    /* Main table */
+
+    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoVrtc);
+    if (ACPI_FAILURE (Status))
+    {
+        return;
+    }
+
+    /* Sub-tables */
+
+    SubTable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, Table, Offset);
+    while (Offset < Table->Length)
+    {
+        /* Common sub-table header */
+
+        AcpiOsPrintf ("\n");
+        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
+                    sizeof (ACPI_VRTC_ENTRY), AcpiDmTableInfoVrtc0);
+        if (ACPI_FAILURE (Status))
+        {
+            return;
+        }
+
+        /* Point to next sub-table */
+
+        Offset += sizeof (ACPI_VRTC_ENTRY);
+        SubTable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, SubTable, sizeof 
(ACPI_VRTC_ENTRY));
+    }
+}
+
+
+/*******************************************************************************
+ *
  * FUNCTION:    AcpiDmDumpWdat
  *
  * PARAMETERS:  Table               - A WDAT table
diff --git a/src/add-ons/kernel/bus_managers/acpi/acpica/common/dmtbinfo.c 
b/src/add-ons/kernel/bus_managers/acpi/acpica/common/dmtbinfo.c
index c2d4d9f..def6de8 100644
--- a/src/add-ons/kernel/bus_managers/acpi/acpica/common/dmtbinfo.c
+++ b/src/add-ons/kernel/bus_managers/acpi/acpica/common/dmtbinfo.c
@@ -8,7 +8,7 @@
  *
  * 1. Copyright Notice
  *
- * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2013, Intel Corp.
  * All rights reserved.
  *
  * 2. License
@@ -183,6 +183,7 @@
 #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_TCPA_OFFSET(f)             (UINT16) ACPI_OFFSET 
(ACPI_TABLE_TCPA,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)
 #define ACPI_WDAT_OFFSET(f)             (UINT16) ACPI_OFFSET 
(ACPI_TABLE_WDAT,f)
@@ -200,7 +201,8 @@
 #define ACPI_ASF4_OFFSET(f)             (UINT16) ACPI_OFFSET 
(ACPI_ASF_ADDRESS,f)
 #define ACPI_CPEP0_OFFSET(f)            (UINT16) ACPI_OFFSET 
(ACPI_CPEP_POLLING,f)
 #define ACPI_CSRT0_OFFSET(f)            (UINT16) ACPI_OFFSET 
(ACPI_CSRT_GROUP,f)
-#define ACPI_CSRT1_OFFSET(f)            (UINT16) ACPI_OFFSET 
(ACPI_CSRT_DESCRIPTOR,f)
+#define ACPI_CSRT1_OFFSET(f)            (UINT16) ACPI_OFFSET 
(ACPI_CSRT_SHARED_INFO,f)
+#define ACPI_CSRT2_OFFSET(f)            (UINT16) ACPI_OFFSET 
(ACPI_CSRT_DESCRIPTOR,f)
 #define ACPI_DBG20_OFFSET(f)            (UINT16) ACPI_OFFSET 
(ACPI_DBG2_DEVICE,f)
 #define ACPI_DMARS_OFFSET(f)            (UINT16) ACPI_OFFSET 
(ACPI_DMAR_DEVICE_SCOPE,f)
 #define ACPI_DMAR0_OFFSET(f)            (UINT16) ACPI_OFFSET 
(ACPI_DMAR_HARDWARE_UNIT,f)
@@ -249,6 +251,7 @@
 #define ACPI_MPST1_OFFSET(f)            (UINT16) ACPI_OFFSET 
(ACPI_MPST_DATA_HDR,f)
 #define ACPI_MPST2_OFFSET(f)            (UINT16) ACPI_OFFSET 
(ACPI_MPST_POWER_DATA,f)
 #define ACPI_MSCT0_OFFSET(f)            (UINT16) ACPI_OFFSET 
(ACPI_MSCT_PROXIMITY,f)
+#define ACPI_MTMR0_OFFSET(f)            (UINT16) ACPI_OFFSET 
(ACPI_MTMR_ENTRY,f)
 #define ACPI_PCCT0_OFFSET(f)            (UINT16) ACPI_OFFSET 
(ACPI_PCCT_SUBSPACE,f)
 #define ACPI_PMTT0_OFFSET(f)            (UINT16) ACPI_OFFSET 
(ACPI_PMTT_SOCKET,f)
 #define ACPI_PMTT1_OFFSET(f)            (UINT16) ACPI_OFFSET 
(ACPI_PMTT_CONTROLLER,f)
@@ -265,6 +268,7 @@
 #define ACPI_SRAT0_OFFSET(f)            (UINT16) ACPI_OFFSET 
(ACPI_SRAT_CPU_AFFINITY,f)
 #define ACPI_SRAT1_OFFSET(f)            (UINT16) ACPI_OFFSET 
(ACPI_SRAT_MEM_AFFINITY,f)
 #define ACPI_SRAT2_OFFSET(f)            (UINT16) ACPI_OFFSET 
(ACPI_SRAT_X2APIC_CPU_AFFINITY,f)
+#define ACPI_VRTC0_OFFSET(f)            (UINT16) ACPI_OFFSET 
(ACPI_VRTC_ENTRY,f)
 #define ACPI_WDAT0_OFFSET(f)            (UINT16) ACPI_OFFSET 
(ACPI_WDAT_ENTRY,f)
 
 /*
@@ -734,18 +738,38 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoCsrt0[] =
     {ACPI_DMT_UINT16,   ACPI_CSRT0_OFFSET (SubdeviceId),            "Subdevice 
ID", 0},
     {ACPI_DMT_UINT16,   ACPI_CSRT0_OFFSET (Revision),               
"Revision", 0},
     {ACPI_DMT_UINT16,   ACPI_CSRT0_OFFSET (Reserved),               
"Reserved", 0},
-    {ACPI_DMT_UINT32,   ACPI_CSRT0_OFFSET (InfoLength),             
"InfoLength", 0},
+    {ACPI_DMT_UINT32,   ACPI_CSRT0_OFFSET (SharedInfoLength),       "Shared 
Info Length", 0},
     ACPI_DMT_TERMINATOR
 };
 
-/* Resource Descriptor subtable */
+/* Shared Info subtable */
 
 ACPI_DMTABLE_INFO           AcpiDmTableInfoCsrt1[] =
 {
-    {ACPI_DMT_UINT32,   ACPI_CSRT1_OFFSET (Length),                 "Length", 
0},
-    {ACPI_DMT_UINT16,   ACPI_CSRT1_OFFSET (Type),                   "Type", 0},
-    {ACPI_DMT_UINT16,   ACPI_CSRT1_OFFSET (Subtype),                "Subtype", 
0},
-    {ACPI_DMT_UINT32,   ACPI_CSRT1_OFFSET (Uid),                    "UID", 0},
+    {ACPI_DMT_UINT16,   ACPI_CSRT1_OFFSET (MajorVersion),           "Major 
Version", 0},
+    {ACPI_DMT_UINT16,   ACPI_CSRT1_OFFSET (MinorVersion),           "Minor 
Version", 0},
+    {ACPI_DMT_UINT32,   ACPI_CSRT1_OFFSET (MmioBaseLow),            "MMIO Base 
Address Low", 0},
+    {ACPI_DMT_UINT32,   ACPI_CSRT1_OFFSET (MmioBaseHigh),           "MMIO Base 
Address High", 0},
+    {ACPI_DMT_UINT32,   ACPI_CSRT1_OFFSET (GsiInterrupt),           "GSI 
Interrupt", 0},
+    {ACPI_DMT_UINT8,    ACPI_CSRT1_OFFSET (InterruptPolarity),      "Interrupt 
Polarity", 0},
+    {ACPI_DMT_UINT8,    ACPI_CSRT1_OFFSET (InterruptMode),          "Interrupt 
Mode", 0},
+    {ACPI_DMT_UINT8,    ACPI_CSRT1_OFFSET (NumChannels),            "Num 
Channels", 0},
+    {ACPI_DMT_UINT8,    ACPI_CSRT1_OFFSET (DmaAddressWidth),        "DMA 
Address Width", 0},
+    {ACPI_DMT_UINT16,   ACPI_CSRT1_OFFSET (BaseRequestLine),        "Base 
Request Line", 0},
+    {ACPI_DMT_UINT16,   ACPI_CSRT1_OFFSET (NumHandshakeSignals),    "Num 
Handshake Signals", 0},
+    {ACPI_DMT_UINT32,   ACPI_CSRT1_OFFSET (MaxBlockSize),           "Max Block 
Size", 0},
+    ACPI_DMT_TERMINATOR
+};
+
+
+/* Resource Descriptor subtable */
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoCsrt2[] =
+{
+    {ACPI_DMT_UINT32,   ACPI_CSRT2_OFFSET (Length),                 "Length", 
0},
+    {ACPI_DMT_UINT16,   ACPI_CSRT2_OFFSET (Type),                   "Type", 0},
+    {ACPI_DMT_UINT16,   ACPI_CSRT2_OFFSET (Subtype),                "Subtype", 
0},
+    {ACPI_DMT_UINT32,   ACPI_CSRT2_OFFSET (Uid),                    "UID", 0},
     ACPI_DMT_TERMINATOR
 };
 
@@ -828,6 +852,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoDmar[] =
 {
     {ACPI_DMT_UINT8,    ACPI_DMAR_OFFSET (Width),                   "Host 
Address Width", 0},
     {ACPI_DMT_UINT8,    ACPI_DMAR_OFFSET (Flags),                   "Flags", 
0},
+    {ACPI_DMT_BUF10,    ACPI_DMAR_OFFSET (Reserved[0]),             
"Reserved", 0},
     ACPI_DMT_TERMINATOR
 };
 
@@ -1694,6 +1719,28 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoMsct0[] =
 
 
/*******************************************************************************
  *
+ * MTMR - MID Timer Table
+ *
+ 
******************************************************************************/
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoMtmr[] =
+{
+    ACPI_DMT_TERMINATOR
+};
+
+/* MTMR Subtables - MTMR Entry */
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoMtmr0[] =
+{
+    {ACPI_DMT_GAS,      ACPI_MTMR0_OFFSET (PhysicalAddress),        
"PhysicalAddress", 0},
+    {ACPI_DMT_UINT32,   ACPI_MTMR0_OFFSET (Frequency),              
"Frequency", 0},
+    {ACPI_DMT_UINT32,   ACPI_MTMR0_OFFSET (Irq),                    "IRQ", 0},
+    ACPI_DMT_TERMINATOR
+};
+
+
+/*******************************************************************************
+ *
  * PCCT - Platform Communications Channel Table (ACPI 5.0)
  *
  
******************************************************************************/
@@ -2056,6 +2103,21 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoTcpa[] =
 
 
/*******************************************************************************
  *
+ * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table
+ *
+ 
******************************************************************************/
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoTpm2[] =
+{
+    {ACPI_DMT_UINT32,   ACPI_TPM2_OFFSET (Flags),                   "Flags", 
0},
+    {ACPI_DMT_UINT64,   ACPI_TPM2_OFFSET (ControlAddress),          "Control 
Address", 0},
+    {ACPI_DMT_UINT32,   ACPI_TPM2_OFFSET (StartMethod),             "Start 
Method", 0},
+    ACPI_DMT_TERMINATOR
+};
+
+
+/*******************************************************************************
+ *
  * UEFI - UEFI Boot optimization Table
  *
  
******************************************************************************/
@@ -2070,6 +2132,27 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoUefi[] =
 
 
/*******************************************************************************
  *
+ * VRTC - Virtual Real Time Clock Table
+ *
+ 
******************************************************************************/
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoVrtc[] =
+{
+    ACPI_DMT_TERMINATOR
+};
+
+/* VRTC Subtables - VRTC Entry */
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoVrtc0[] =
+{
+    {ACPI_DMT_GAS,      ACPI_VRTC0_OFFSET (PhysicalAddress),        
"PhysicalAddress", 0},
+    {ACPI_DMT_UINT32,   ACPI_VRTC0_OFFSET (Irq),                    "IRQ", 0},
+    ACPI_DMT_TERMINATOR
+};
+
+
+/*******************************************************************************
+ *
  * WAET - Windows ACPI Emulated devices Table
  *
  
******************************************************************************/
diff --git a/src/add-ons/kernel/bus_managers/acpi/acpica/common/getopt.c 
b/src/add-ons/kernel/bus_managers/acpi/acpica/common/getopt.c
index 36f2ac2..f3d8fba 100644
--- a/src/add-ons/kernel/bus_managers/acpi/acpica/common/getopt.c
+++ b/src/add-ons/kernel/bus_managers/acpi/acpica/common/getopt.c
@@ -8,7 +8,7 @@
  *
  * 1. Copyright Notice
  *
- * Some or all of this work - Copyright (c) 1999 - 2012, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2013, Intel Corp.
  * All rights reserved.
  *
  * 2. License
@@ -113,6 +113,15 @@
  *
  *****************************************************************************/
 
+/*
+ * ACPICA getopt() implementation
+ *
+ * Option strings:
+ *    "f"       - Option has no arguments
+ *    "f:"      - Option requires an argument
+ *    "f^"      - Option has optional single-char sub-options
+ *    "f|"      - Option has required single-char sub-options
+ */
 
 #include <stdio.h>
 #include <string.h>
@@ -124,9 +133,59 @@
     if (AcpiGbl_Opterr) {fprintf (stderr, "%s%c\n", msg, badchar);}
 
 
-int   AcpiGbl_Opterr = 1;
-int   AcpiGbl_Optind = 1;
-char  *AcpiGbl_Optarg;
+int                 AcpiGbl_Opterr = 1;
+int                 AcpiGbl_Optind = 1;
+int                 AcpiGbl_SubOptChar = 0;
+char                *AcpiGbl_Optarg;
+
+static int          CurrentCharPtr = 1;
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiGetoptArgument
+ *
+ * PARAMETERS:  argc, argv          - from main
+ *
+ * RETURN:      0 if an argument was found, -1 otherwise. Sets AcpiGbl_Optarg
+ *              to point to the next argument.
+ *
+ * DESCRIPTION: Get the next argument. Used to obtain arguments for the
+ *              two-character options after the original call to AcpiGetopt.
+ *              Note: Either the argument starts at the next character after
+ *              the option, or it is pointed to by the next argv entry.
+ *              (After call to AcpiGetopt, we need to backup to the previous
+ *              argv entry).
+ *
+ 
******************************************************************************/
+
+int
+AcpiGetoptArgument (
+    int                     argc,
+    char                    **argv)
+{
+    AcpiGbl_Optind--;
+    CurrentCharPtr++;
+
+    if (argv[AcpiGbl_Optind][(int) (CurrentCharPtr+1)] != '\0')
+    {
+        AcpiGbl_Optarg = &argv[AcpiGbl_Optind++][(int) (CurrentCharPtr+1)];
+    }
+    else if (++AcpiGbl_Optind >= argc)
+    {
+        ACPI_OPTION_ERROR ("Option requires an argument: -", 'v');
+
+        CurrentCharPtr = 1;
+        return (-1);
+    }
+    else
+    {
+        AcpiGbl_Optarg = argv[AcpiGbl_Optind++];
+    }
+
+    CurrentCharPtr = 1;
+    return (0);
+}
 
 
 
/*******************************************************************************
@@ -148,7 +207,6 @@ AcpiGetopt(
     char                    **argv,
     char                    *opts)
 {
-    static int              CurrentCharPtr = 1;
     int                     CurrentChar;
     char                    *OptsPtr;
 
@@ -211,6 +269,26 @@ AcpiGetopt(
         CurrentCharPtr = 1;
     }
 
+    /* Option has an optional argument? */
+
+    else if (*OptsPtr == '+')
+    {
+        if (argv[AcpiGbl_Optind][(int) (CurrentCharPtr+1)] != '\0')
+        {
+            AcpiGbl_Optarg = &argv[AcpiGbl_Optind++][(int) (CurrentCharPtr+1)];
+        }
+        else if (++AcpiGbl_Optind >= argc)
+        {
+            AcpiGbl_Optarg = NULL;
+        }
+        else
+        {
+            AcpiGbl_Optarg = argv[AcpiGbl_Optind++];
+        }
+
+        CurrentCharPtr = 1;
+    }
+
     /* Option has optional single-char arguments? */
 

[ *** diff truncated: 28431 lines dropped *** ]


############################################################################

Revision:    hrev46307
Commit:      d5e0bd341208a4536103d2e98118d339e46df99c
URL:         http://cgit.haiku-os.org/haiku/commit/?id=d5e0bd3
Author:      Jérôme Duval <jerome.duval@xxxxxxxxx>
Date:        Fri Nov  1 11:48:37 2013 UTC

acpi: removed iasl tool

* it didn't build since at least five years.
* it should become a user package anyway.

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


Other related posts: