ACK: [PATCH 1/2] ACPICA: Update to version 20170929

ivanhu ivan.hu at canonical.com
Fri Oct 6 08:09:04 UTC 2017



On 09/30/2017 02:35 AM, Colin King wrote:
> From: Colin Ian King <colin.king at canonical.com>
> 
> Changes in this release of ACPICA are detailed at the following
> link on the ACPICA developer mailing list:
> 
> https://lists.acpica.org/pipermail/devel/2017-September/001484.html
> 
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
>   src/acpica/fwts_acpica.c                           |    1 +
>   src/acpica/source/common/adfile.c                  |    4 +-
>   src/acpica/source/common/ahtable.c                 |    2 +
>   src/acpica/source/common/dmtable.c                 |   71 +-
>   src/acpica/source/common/dmtbdump.c                | 1024 +++++++++++++-------
>   src/acpica/source/common/dmtbinfo.c                |  160 ++-
>   src/acpica/source/compiler/Makefile.am             |    2 +
>   src/acpica/source/compiler/aslallocate.c           |  303 ++++++
>   src/acpica/source/compiler/aslcache.c              |  481 +++++++++
>   src/acpica/source/compiler/aslcompile.c            |   66 +-
>   src/acpica/source/compiler/aslcompiler.h           |   71 +-
>   src/acpica/source/compiler/aslcompiler.l           |    4 +-
>   src/acpica/source/compiler/asldebug.c              |    2 +-
>   src/acpica/source/compiler/aslerror.c              |  794 +++++++++------
>   src/acpica/source/compiler/aslfiles.c              |    7 +-
>   src/acpica/source/compiler/aslload.c               |   30 +-
>   src/acpica/source/compiler/aslmaputils.c           |    4 +-
>   src/acpica/source/compiler/aslmessages.c           |    4 +-
>   src/acpica/source/compiler/aslmessages.h           |    2 +
>   src/acpica/source/compiler/aslmethod.c             |   43 +-
>   src/acpica/source/compiler/asloperands.c           |    4 +-
>   src/acpica/source/compiler/aslopt.c                |    2 +-
>   src/acpica/source/compiler/aslparseop.c            |   55 +-
>   src/acpica/source/compiler/aslprintf.c             |    4 +-
>   src/acpica/source/compiler/aslstartup.c            |    4 +-
>   src/acpica/source/compiler/aslsupport.l            |    4 +-
>   src/acpica/source/compiler/asltypes.h              |    9 +-
>   src/acpica/source/compiler/aslutils.c              |  221 +----
>   src/acpica/source/compiler/cvcompiler.c            |   16 +-
>   src/acpica/source/compiler/cvparser.c              |    2 +-
>   src/acpica/source/compiler/dtcompile.c             |    8 +-
>   src/acpica/source/compiler/dtcompiler.h            |   33 +-
>   src/acpica/source/compiler/dtexpress.c             |    1 -
>   src/acpica/source/compiler/dtfield.c               |    1 -
>   src/acpica/source/compiler/dtio.c                  |    5 +-
>   src/acpica/source/compiler/dtparser.y              |    1 -
>   src/acpica/source/compiler/dtsubtable.c            |    3 +-
>   src/acpica/source/compiler/dttable.c               |    1 -
>   src/acpica/source/compiler/dttable1.c              |    1 -
>   src/acpica/source/compiler/dttable2.c              |  377 ++++++-
>   src/acpica/source/compiler/dttemplate.c            |    3 +-
>   src/acpica/source/compiler/dttemplate.h            |   46 +-
>   src/acpica/source/compiler/dtutils.c               |  153 +--
>   src/acpica/source/compiler/prexpress.c             |    2 -
>   src/acpica/source/compiler/prmacros.c              |    2 -
>   src/acpica/source/compiler/prparser.y              |    1 -
>   src/acpica/source/compiler/prscan.c                |    1 -
>   src/acpica/source/compiler/prutils.c               |    4 +-
>   .../source/components/dispatcher/dscontrol.c       |   17 +-
>   src/acpica/source/components/namespace/nsaccess.c  |   14 +-
>   src/acpica/source/components/namespace/nssearch.c  |    1 +
>   src/acpica/source/components/parser/psobject.c     |    9 +-
>   src/acpica/source/components/parser/psutils.c      |    8 +-
>   src/acpica/source/components/utilities/utinit.c    |    1 -
>   src/acpica/source/components/utilities/utmath.c    |    4 +-
>   src/acpica/source/include/acapps.h                 |    3 +
>   src/acpica/source/include/acconfig.h               |    4 +-
>   src/acpica/source/include/acdisasm.h               |   27 +-
>   src/acpica/source/include/acexcep.h                |    4 +-
>   src/acpica/source/include/aclocal.h                |    2 +-
>   src/acpica/source/include/acpixf.h                 |    6 +-
>   src/acpica/source/include/actbl1.h                 |   92 +-
>   src/acpica/source/include/actbl2.h                 |   14 +-
>   src/acpica/source/include/actypes.h                |    2 +
>   src/acpica/source/tools/acpiexec/aecommon.h        |    1 +
>   src/acpica/source/tools/acpiexec/aeexception.c     |   11 +-
>   src/lib/src/fwts_acpi_object_eval.c                |    2 +-
>   67 files changed, 2929 insertions(+), 1332 deletions(-)
>   create mode 100644 src/acpica/source/compiler/aslallocate.c
>   create mode 100644 src/acpica/source/compiler/aslcache.c
> 
> diff --git a/src/acpica/fwts_acpica.c b/src/acpica/fwts_acpica.c
> index e634daf3..b7d2f861 100644
> --- a/src/acpica/fwts_acpica.c
> +++ b/src/acpica/fwts_acpica.c
> @@ -78,6 +78,7 @@ typedef struct {
>   
>   typedef void * (*pthread_callback)(void *);
>   
> +BOOLEAN AcpiGbl_AbortLoopOnTimeout = FALSE;
>   BOOLEAN AcpiGbl_IgnoreErrors = FALSE;
>   UINT8   AcpiGbl_RegionFillValue = 0;
>   
> diff --git a/src/acpica/source/common/adfile.c b/src/acpica/source/common/adfile.c
> index ac96156d..80462f17 100644
> --- a/src/acpica/source/common/adfile.c
> +++ b/src/acpica/source/common/adfile.c
> @@ -314,7 +314,7 @@ FlGenerateFilename (
>        * Copy the original filename to a new buffer. Leave room for the worst
>        * case where we append the suffix, an added dot and the null terminator.
>        */
> -    NewFilename = UtStringCacheCalloc ((ACPI_SIZE)
> +    NewFilename = UtLocalCacheCalloc ((ACPI_SIZE)
>           strlen (InputFilename) + strlen (Suffix) + 2);
>       strcpy (NewFilename, InputFilename);
>   
> @@ -358,7 +358,7 @@ FlStrdup (
>       char                *NewString;
>   
>   
> -    NewString = UtStringCacheCalloc ((ACPI_SIZE) strlen (String) + 1);
> +    NewString = UtLocalCacheCalloc ((ACPI_SIZE) strlen (String) + 1);
>       strcpy (NewString, String);
>       return (NewString);
>   }
> diff --git a/src/acpica/source/common/ahtable.c b/src/acpica/source/common/ahtable.c
> index 7aee3c66..be68ed48 100644
> --- a/src/acpica/source/common/ahtable.c
> +++ b/src/acpica/source/common/ahtable.c
> @@ -232,6 +232,7 @@ const AH_TABLE      Gbl_AcpiSupportedTables[] =
>       {ACPI_SIG_MTMR, "MID Timer Table"},
>       {ACPI_SIG_NFIT, "NVDIMM Firmware Interface Table"},
>       {ACPI_SIG_PCCT, "Platform Communications Channel Table"},
> +    {ACPI_SIG_PDTT, "Platform Debug Trigger Table"},
>       {ACPI_SIG_PMTT, "Platform Memory Topology Table"},
>       {ACPI_SIG_PPTT, "Processor Properties Topology Table"},
>       {ACPI_SIG_RASF, "RAS Features Table"},
> @@ -240,6 +241,7 @@ const AH_TABLE      Gbl_AcpiSupportedTables[] =
>       {ACPI_SIG_S3PT, "S3 Performance Table"},
>       {ACPI_SIG_SBST, "Smart Battery Specification Table"},
>       {ACPI_SIG_SDEI, "Software Delegated Exception Interface Table"},
> +    {ACPI_SIG_SDEV, "Secure Devices table"},
>       {ACPI_SIG_SLIC, "Software Licensing Description Table"},
>       {ACPI_SIG_SLIT, "System Locality Information Table"},
>       {ACPI_SIG_SPCR, "Serial Port Console Redirection table"},
> diff --git a/src/acpica/source/common/dmtable.c b/src/acpica/source/common/dmtable.c
> index 38248c2c..07d27faf 100644
> --- a/src/acpica/source/common/dmtable.c
> +++ b/src/acpica/source/common/dmtable.c
> @@ -154,7 +154,6 @@
>   #include "acdisasm.h"
>   #include "actables.h"
>   #include "aslcompiler.h"
> -#include "dtcompiler.h"
>   
>   /* This module used for application-level code only */
>   
> @@ -290,9 +289,9 @@ static const char           *AcpiDmHestSubnames[] =
>       "IA-32 Machine Check Exception",
>       "IA-32 Corrected Machine Check",
>       "IA-32 Non-Maskable Interrupt",
> -    "Unknown SubTable Type",        /* 3 - Reserved */
> -    "Unknown SubTable Type",        /* 4 - Reserved */
> -    "Unknown SubTable Type",        /* 5 - Reserved */
> +    "Unknown Subtable Type",        /* 3 - Reserved */
> +    "Unknown Subtable Type",        /* 4 - Reserved */
> +    "Unknown Subtable Type",        /* 5 - Reserved */
>       "PCI Express Root Port AER",
>       "PCI Express AER (AER Endpoint)",
>       "PCI Express/PCI-X Bridge AER",
> @@ -374,7 +373,7 @@ static const char           *AcpiDmPmttSubnames[] =
>   {
>       "Socket",                       /* ACPI_PMTT_TYPE_SOCKET */
>       "Memory Controller",            /* ACPI_PMTT_TYPE_CONTROLLER */
> -    "Physical Component (DIMM)",    /* ACPI_PMTT_TYPE_DIMM  */
> +    "Physical Component (DIMM)",    /* ACPI_PMTT_TYPE_DIMM */
>       "Unknown Subtable Type"         /* Reserved */
>   };
>   
> @@ -382,7 +381,14 @@ static const char           *AcpiDmPpttSubnames[] =
>   {
>       "Processor Hierarchy Node",     /* ACPI_PPTT_TYPE_PROCESSOR */
>       "Cache Type",                   /* ACPI_PPTT_TYPE_CACHE */
> -    "ID",                           /* ACPI_PMTT_TYPE_ID  */
> +    "ID",                           /* ACPI_PPTT_TYPE_ID */
> +    "Unknown Subtable Type"         /* Reserved */
> +};
> +
> +static const char           *AcpiDmSdevSubnames[] =
> +{
> +    "Namespace Device",             /* ACPI_SDEV_TYPE_NAMESPACE_DEVICE */
> +    "PCIe Endpoint Device",         /* ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE */
>       "Unknown Subtable Type"         /* Reserved */
>   };
>   
> @@ -396,6 +402,23 @@ static const char           *AcpiDmSratSubnames[] =
>       "Unknown Subtable Type"         /* Reserved */
>   };
>   
> +static const char           *AcpiDmTpm2Subnames[] =
> +{
> +    "Illegal Start Method value",
> +    "Reserved",
> +    "ACPI Start Method",
> +    "Reserved",
> +    "Reserved",
> +    "Reserved",
> +    "Memory Mapped I/O",
> +    "Command Response Buffer",
> +    "Command Response Buffer with ACPI Start Method",
> +    "Reserved",
> +    "Reserved",
> +    "Command Response Buffer with ARM SMC",
> +    "Unknown Subtable Type"         /* Reserved */
> +};
> +
>   static const char           *AcpiDmIvrsSubnames[] =
>   {
>       "Hardware Definition Block",
> @@ -487,6 +510,7 @@ const ACPI_DMTABLE_DATA     AcpiDmTableData[] =
>       {ACPI_SIG_MTMR, NULL,                   AcpiDmDumpMtmr, DtCompileMtmr,  TemplateMtmr},
>       {ACPI_SIG_NFIT, AcpiDmTableInfoNfit,    AcpiDmDumpNfit, DtCompileNfit,  TemplateNfit},
>       {ACPI_SIG_PCCT, AcpiDmTableInfoPcct,    AcpiDmDumpPcct, DtCompilePcct,  TemplatePcct},
> +    {ACPI_SIG_PDTT, AcpiDmTableInfoPdtt,    AcpiDmDumpPdtt, DtCompilePdtt,  TemplatePdtt},
>       {ACPI_SIG_PMTT, NULL,                   AcpiDmDumpPmtt, DtCompilePmtt,  TemplatePmtt},
>       {ACPI_SIG_PPTT, NULL,                   AcpiDmDumpPptt, DtCompilePptt,  TemplatePptt},
>       {ACPI_SIG_RASF, AcpiDmTableInfoRasf,    NULL,           NULL,           TemplateRasf},
> @@ -494,6 +518,7 @@ const ACPI_DMTABLE_DATA     AcpiDmTableData[] =
>       {ACPI_SIG_S3PT, NULL,                   NULL,           NULL,           TemplateS3pt},
>       {ACPI_SIG_SBST, AcpiDmTableInfoSbst,    NULL,           NULL,           TemplateSbst},
>       {ACPI_SIG_SDEI, AcpiDmTableInfoSdei,    NULL,           NULL,           TemplateSdei},
> +    {ACPI_SIG_SDEV, AcpiDmTableInfoSdev,    AcpiDmDumpSdev, DtCompileSdev,  TemplateSdev},
>       {ACPI_SIG_SLIC, NULL,                   AcpiDmDumpSlic, DtCompileSlic,  TemplateSlic},
>       {ACPI_SIG_SLIT, NULL,                   AcpiDmDumpSlit, DtCompileSlit,  TemplateSlit},
>       {ACPI_SIG_SPCR, AcpiDmTableInfoSpcr,    NULL,           NULL,           TemplateSpcr},
> @@ -501,7 +526,7 @@ const ACPI_DMTABLE_DATA     AcpiDmTableData[] =
>       {ACPI_SIG_SRAT, NULL,                   AcpiDmDumpSrat, DtCompileSrat,  TemplateSrat},
>       {ACPI_SIG_STAO, NULL,                   AcpiDmDumpStao, DtCompileStao,  TemplateStao},
>       {ACPI_SIG_TCPA, NULL,                   AcpiDmDumpTcpa, DtCompileTcpa,  TemplateTcpa},
> -    {ACPI_SIG_TPM2, AcpiDmTableInfoTpm2,    NULL,           NULL,           TemplateTpm2},
> +    {ACPI_SIG_TPM2, AcpiDmTableInfoTpm2,    AcpiDmDumpTpm2, DtCompileTpm2,  TemplateTpm2},
>       {ACPI_SIG_UEFI, AcpiDmTableInfoUefi,    NULL,           DtCompileUefi,  TemplateUefi},
>       {ACPI_SIG_VRTC, AcpiDmTableInfoVrtc,    AcpiDmDumpVrtc, DtCompileVrtc,  TemplateVrtc},
>       {ACPI_SIG_WAET, AcpiDmTableInfoWaet,    NULL,           NULL,           TemplateWaet},
> @@ -917,6 +942,7 @@ AcpiDmDumpTable (
>           case ACPI_DMT_PCCT:
>           case ACPI_DMT_PMTT:
>           case ACPI_DMT_PPTT:
> +        case ACPI_DMT_SDEV:
>           case ACPI_DMT_SRAT:
>           case ACPI_DMT_ASF:
>           case ACPI_DMT_HESTNTYP:
> @@ -948,6 +974,7 @@ AcpiDmDumpTable (
>           case ACPI_DMT_NAME4:
>           case ACPI_DMT_SIG:
>           case ACPI_DMT_LPIT:
> +        case ACPI_DMT_TPM2:
>   
>               ByteLength = 4;
>               break;
> @@ -1583,6 +1610,20 @@ AcpiDmDumpTable (
>                   CurrentOffset, NULL);
>               break;
>   
> +        case ACPI_DMT_SDEV:
> +
> +            /* SDEV subtable types */
> +
> +            Temp8 = *Target;
> +            if (Temp8 > ACPI_SDEV_TYPE_RESERVED)
> +            {
> +                Temp8 = ACPI_SDEV_TYPE_RESERVED;
> +            }
> +
> +            AcpiOsPrintf (UINT8_FORMAT, *Target,
> +                AcpiDmSdevSubnames[Temp8]);
> +            break;
> +
>           case ACPI_DMT_SRAT:
>   
>               /* SRAT subtable types */
> @@ -1597,6 +1638,22 @@ AcpiDmDumpTable (
>                   AcpiDmSratSubnames[Temp8]);
>               break;
>   
> +        case ACPI_DMT_TPM2:
> +
> +            /* TPM2 Start Method types */
> +
> +            Temp8 = *Target;
> +            if (Temp8 > ACPI_TPM2_RESERVED)
> +            {
> +                Temp8 = ACPI_TPM2_RESERVED;
> +            }
> +
> +            AcpiOsPrintf (UINT8_FORMAT, *Target,
> +                AcpiDmTpm2Subnames[Temp8]);
> +            break;
> +
> +
> +
>           case ACPI_DMT_FADTPM:
>   
>               /* FADT Preferred PM Profile names */
> diff --git a/src/acpica/source/common/dmtbdump.c b/src/acpica/source/common/dmtbdump.c
> index 9441ca49..0f0697e3 100644
> --- a/src/acpica/source/common/dmtbdump.c
> +++ b/src/acpica/source/common/dmtbdump.c
> @@ -623,7 +623,7 @@ AcpiDmDumpAsf (
>   {
>       ACPI_STATUS             Status;
>       UINT32                  Offset = sizeof (ACPI_TABLE_HEADER);
> -    ACPI_ASF_INFO           *SubTable;
> +    ACPI_ASF_INFO           *Subtable;
>       ACPI_DMTABLE_INFO       *InfoTable;
>       ACPI_DMTABLE_INFO       *DataInfoTable = NULL;
>       UINT8                   *DataTable = NULL;
> @@ -636,13 +636,13 @@ AcpiDmDumpAsf (
>   
>       /* No main table, only subtables */
>   
> -    SubTable = ACPI_ADD_PTR (ACPI_ASF_INFO, Table, Offset);
> +    Subtable = ACPI_ADD_PTR (ACPI_ASF_INFO, Table, Offset);
>       while (Offset < Table->Length)
>       {
>           /* Common subtable header */
>   
> -        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
> -            SubTable->Header.Length, AcpiDmTableInfoAsfHdr);
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
> +            Subtable->Header.Length, AcpiDmTableInfoAsfHdr);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
> @@ -650,7 +650,7 @@ AcpiDmDumpAsf (
>   
>           /* The actual type is the lower 7 bits of Type */
>   
> -        Type = (UINT8) (SubTable->Header.Type & 0x7F);
> +        Type = (UINT8) (Subtable->Header.Type & 0x7F);
>   
>           switch (Type)
>           {
> @@ -663,9 +663,9 @@ AcpiDmDumpAsf (
>   
>               InfoTable = AcpiDmTableInfoAsf1;
>               DataInfoTable = AcpiDmTableInfoAsf1a;
> -            DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof (ACPI_ASF_ALERT));
> -            DataCount = ACPI_CAST_PTR (ACPI_ASF_ALERT, SubTable)->Alerts;
> -            DataLength = ACPI_CAST_PTR (ACPI_ASF_ALERT, SubTable)->DataLength;
> +            DataTable = ACPI_ADD_PTR (UINT8, Subtable, sizeof (ACPI_ASF_ALERT));
> +            DataCount = ACPI_CAST_PTR (ACPI_ASF_ALERT, Subtable)->Alerts;
> +            DataLength = ACPI_CAST_PTR (ACPI_ASF_ALERT, Subtable)->DataLength;
>               DataOffset = Offset + sizeof (ACPI_ASF_ALERT);
>               break;
>   
> @@ -673,9 +673,9 @@ AcpiDmDumpAsf (
>   
>               InfoTable = AcpiDmTableInfoAsf2;
>               DataInfoTable = AcpiDmTableInfoAsf2a;
> -            DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof (ACPI_ASF_REMOTE));
> -            DataCount = ACPI_CAST_PTR (ACPI_ASF_REMOTE, SubTable)->Controls;
> -            DataLength = ACPI_CAST_PTR (ACPI_ASF_REMOTE, SubTable)->DataLength;
> +            DataTable = ACPI_ADD_PTR (UINT8, Subtable, sizeof (ACPI_ASF_REMOTE));
> +            DataCount = ACPI_CAST_PTR (ACPI_ASF_REMOTE, Subtable)->Controls;
> +            DataLength = ACPI_CAST_PTR (ACPI_ASF_REMOTE, Subtable)->DataLength;
>               DataOffset = Offset + sizeof (ACPI_ASF_REMOTE);
>               break;
>   
> @@ -687,20 +687,20 @@ AcpiDmDumpAsf (
>           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;
> +            DataTable = ACPI_ADD_PTR (UINT8, Subtable, sizeof (ACPI_ASF_ADDRESS));
> +            DataLength = ACPI_CAST_PTR (ACPI_ASF_ADDRESS, Subtable)->Devices;
>               DataOffset = Offset + sizeof (ACPI_ASF_ADDRESS);
>               break;
>   
>           default:
>   
>               AcpiOsPrintf ("\n**** Unknown ASF subtable type 0x%X\n",
> -                SubTable->Header.Type);
> +                Subtable->Header.Type);
>               return;
>           }
>   
> -        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
> -            SubTable->Header.Length, InfoTable);
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
> +            Subtable->Header.Length, InfoTable);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
> @@ -762,15 +762,15 @@ AcpiDmDumpAsf (
>   
>           /* Point to next subtable */
>   
> -        if (!SubTable->Header.Length)
> +        if (!Subtable->Header.Length)
>           {
>               AcpiOsPrintf ("Invalid zero subtable header length\n");
>               return;
>           }
>   
> -        Offset += SubTable->Header.Length;
> -        SubTable = ACPI_ADD_PTR (ACPI_ASF_INFO, SubTable,
> -            SubTable->Header.Length);
> +        Offset += Subtable->Header.Length;
> +        Subtable = ACPI_ADD_PTR (ACPI_ASF_INFO, Subtable,
> +            Subtable->Header.Length);
>       }
>   }
>   
> @@ -793,7 +793,7 @@ AcpiDmDumpCpep (
>       ACPI_TABLE_HEADER       *Table)
>   {
>       ACPI_STATUS             Status;
> -    ACPI_CPEP_POLLING       *SubTable;
> +    ACPI_CPEP_POLLING       *Subtable;
>       UINT32                  Length = Table->Length;
>       UINT32                  Offset = sizeof (ACPI_TABLE_CPEP);
>   
> @@ -808,12 +808,12 @@ AcpiDmDumpCpep (
>   
>       /* Subtables */
>   
> -    SubTable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Table, Offset);
> +    Subtable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Table, Offset);
>       while (Offset < Table->Length)
>       {
>           AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> -            SubTable->Header.Length, AcpiDmTableInfoCpep0);
> +        Status = AcpiDmDumpTable (Length, Offset, Subtable,
> +            Subtable->Header.Length, AcpiDmTableInfoCpep0);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
> @@ -821,9 +821,9 @@ AcpiDmDumpCpep (
>   
>           /* Point to next subtable */
>   
> -        Offset += SubTable->Header.Length;
> -        SubTable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, SubTable,
> -            SubTable->Header.Length);
> +        Offset += Subtable->Header.Length;
> +        Subtable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Subtable,
> +            Subtable->Header.Length);
>       }
>   }
>   
> @@ -846,9 +846,9 @@ AcpiDmDumpCsrt (
>       ACPI_TABLE_HEADER       *Table)
>   {
>       ACPI_STATUS             Status;
> -    ACPI_CSRT_GROUP         *SubTable;
> +    ACPI_CSRT_GROUP         *Subtable;
>       ACPI_CSRT_SHARED_INFO   *SharedInfoTable;
> -    ACPI_CSRT_DESCRIPTOR    *SubSubTable;
> +    ACPI_CSRT_DESCRIPTOR    *SubSubtable;
>       UINT32                  Length = Table->Length;
>       UINT32                  Offset = sizeof (ACPI_TABLE_CSRT);
>       UINT32                  SubOffset;
> @@ -860,14 +860,14 @@ AcpiDmDumpCsrt (
>   
>       /* Subtables (Resource Groups) */
>   
> -    SubTable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Table, Offset);
> +    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);
> +        Status = AcpiDmDumpTable (Length, Offset, Subtable,
> +            Subtable->Length, AcpiDmTableInfoCsrt0);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
> @@ -887,19 +887,19 @@ AcpiDmDumpCsrt (
>               return;
>           }
>   
> -        SubOffset += SubTable->SharedInfoLength;
> +        SubOffset += Subtable->SharedInfoLength;
>   
>           /* Sub-Subtables (Resource Descriptors) */
>   
> -        SubSubTable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, Table,
> +        SubSubtable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, Table,
>               Offset + SubOffset);
>   
> -        while ((SubOffset < SubTable->Length) &&
> +        while ((SubOffset < Subtable->Length) &&
>                 ((Offset + SubOffset) < Table->Length))
>           {
>               AcpiOsPrintf ("\n");
> -            Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubTable,
> -                SubSubTable->Length, AcpiDmTableInfoCsrt2);
> +            Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubtable,
> +                SubSubtable->Length, AcpiDmTableInfoCsrt2);
>               if (ACPI_FAILURE (Status))
>               {
>                   return;
> @@ -909,7 +909,7 @@ AcpiDmDumpCsrt (
>   
>               /* Resource-specific info buffer */
>   
> -            InfoLength = SubSubTable->Length - SubSubOffset;
> +            InfoLength = SubSubtable->Length - SubSubOffset;
>               if (InfoLength)
>               {
>                   Status = AcpiDmDumpTable (Length,
> @@ -924,16 +924,16 @@ AcpiDmDumpCsrt (
>   
>               /* Point to next sub-subtable */
>   
> -            SubOffset += SubSubTable->Length;
> -            SubSubTable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, SubSubTable,
> -                SubSubTable->Length);
> +            SubOffset += SubSubtable->Length;
> +            SubSubtable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, SubSubtable,
> +                SubSubtable->Length);
>           }
>   
>           /* Point to next subtable */
>   
> -        Offset += SubTable->Length;
> -        SubTable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, SubTable,
> -            SubTable->Length);
> +        Offset += Subtable->Length;
> +        Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Subtable,
> +            Subtable->Length);
>       }
>   }
>   
> @@ -956,7 +956,7 @@ AcpiDmDumpDbg2 (
>       ACPI_TABLE_HEADER       *Table)
>   {
>       ACPI_STATUS             Status;
> -    ACPI_DBG2_DEVICE        *SubTable;
> +    ACPI_DBG2_DEVICE        *Subtable;
>       UINT32                  Length = Table->Length;
>       UINT32                  Offset = sizeof (ACPI_TABLE_DBG2);
>       UINT32                  i;
> @@ -975,12 +975,12 @@ AcpiDmDumpDbg2 (
>   
>       /* Subtables */
>   
> -    SubTable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Table, Offset);
> +    Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Table, Offset);
>       while (Offset < Table->Length)
>       {
>           AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> -            SubTable->Length, AcpiDmTableInfoDbg2Device);
> +        Status = AcpiDmDumpTable (Length, Offset, Subtable,
> +            Subtable->Length, AcpiDmTableInfoDbg2Device);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
> @@ -988,15 +988,15 @@ AcpiDmDumpDbg2 (
>   
>           /* Dump the BaseAddress array */
>   
> -        for (i = 0; i < SubTable->RegisterCount; i++)
> +        for (i = 0; i < Subtable->RegisterCount; i++)
>           {
> -            ArrayOffset = SubTable->BaseAddressOffset +
> +            ArrayOffset = Subtable->BaseAddressOffset +
>                   (sizeof (ACPI_GENERIC_ADDRESS) * i);
>               AbsoluteOffset = Offset + ArrayOffset;
> -            Array = (UINT8 *) SubTable + ArrayOffset;
> +            Array = (UINT8 *) Subtable + ArrayOffset;
>   
>               Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
> -                SubTable->Length, AcpiDmTableInfoDbg2Addr);
> +                Subtable->Length, AcpiDmTableInfoDbg2Addr);
>               if (ACPI_FAILURE (Status))
>               {
>                   return;
> @@ -1005,15 +1005,15 @@ AcpiDmDumpDbg2 (
>   
>           /* Dump the AddressSize array */
>   
> -        for (i = 0; i < SubTable->RegisterCount; i++)
> +        for (i = 0; i < Subtable->RegisterCount; i++)
>           {
> -            ArrayOffset = SubTable->AddressSizeOffset +
> +            ArrayOffset = Subtable->AddressSizeOffset +
>                   (sizeof (UINT32) * i);
>               AbsoluteOffset = Offset + ArrayOffset;
> -            Array = (UINT8 *) SubTable + ArrayOffset;
> +            Array = (UINT8 *) Subtable + ArrayOffset;
>   
>               Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
> -                SubTable->Length, AcpiDmTableInfoDbg2Size);
> +                Subtable->Length, AcpiDmTableInfoDbg2Size);
>               if (ACPI_FAILURE (Status))
>               {
>                   return;
> @@ -1023,12 +1023,12 @@ AcpiDmDumpDbg2 (
>           /* Dump the Namestring (required) */
>   
>           AcpiOsPrintf ("\n");
> -        ArrayOffset = SubTable->NamepathOffset;
> +        ArrayOffset = Subtable->NamepathOffset;
>           AbsoluteOffset = Offset + ArrayOffset;
> -        Array = (UINT8 *) SubTable + ArrayOffset;
> +        Array = (UINT8 *) Subtable + ArrayOffset;
>   
>           Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
> -            SubTable->Length, AcpiDmTableInfoDbg2Name);
> +            Subtable->Length, AcpiDmTableInfoDbg2Name);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
> @@ -1036,10 +1036,10 @@ AcpiDmDumpDbg2 (
>   
>           /* Dump the OemData (optional) */
>   
> -        if (SubTable->OemDataOffset)
> +        if (Subtable->OemDataOffset)
>           {
> -            Status = AcpiDmDumpTable (Length, Offset + SubTable->OemDataOffset,
> -                Table, SubTable->OemDataLength,
> +            Status = AcpiDmDumpTable (Length, Offset + Subtable->OemDataOffset,
> +                Table, Subtable->OemDataLength,
>                   AcpiDmTableInfoDbg2OemData);
>               if (ACPI_FAILURE (Status))
>               {
> @@ -1049,9 +1049,9 @@ AcpiDmDumpDbg2 (
>   
>           /* Point to next subtable */
>   
> -        Offset += SubTable->Length;
> -        SubTable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, SubTable,
> -            SubTable->Length);
> +        Offset += Subtable->Length;
> +        Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Subtable,
> +            Subtable->Length);
>       }
>   }
>   
> @@ -1074,7 +1074,7 @@ AcpiDmDumpDmar (
>       ACPI_TABLE_HEADER       *Table)
>   {
>       ACPI_STATUS             Status;
> -    ACPI_DMAR_HEADER        *SubTable;
> +    ACPI_DMAR_HEADER        *Subtable;
>       UINT32                  Length = Table->Length;
>       UINT32                  Offset = sizeof (ACPI_TABLE_DMAR);
>       ACPI_DMTABLE_INFO       *InfoTable;
> @@ -1094,14 +1094,14 @@ AcpiDmDumpDmar (
>   
>       /* Subtables */
>   
> -    SubTable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Table, Offset);
> +    Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Table, Offset);
>       while (Offset < Table->Length)
>       {
>           /* Common subtable header */
>   
>           AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> -            SubTable->Length, AcpiDmTableInfoDmarHdr);
> +        Status = AcpiDmDumpTable (Length, Offset, Subtable,
> +            Subtable->Length, AcpiDmTableInfoDmarHdr);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
> @@ -1109,7 +1109,7 @@ AcpiDmDumpDmar (
>   
>           AcpiOsPrintf ("\n");
>   
> -        switch (SubTable->Type)
> +        switch (Subtable->Type)
>           {
>           case ACPI_DMAR_TYPE_HARDWARE_UNIT:
>   
> @@ -1144,12 +1144,12 @@ AcpiDmDumpDmar (
>           default:
>   
>               AcpiOsPrintf ("\n**** Unknown DMAR subtable type 0x%X\n\n",
> -                SubTable->Type);
> +                Subtable->Type);
>               return;
>           }
>   
> -        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> -            SubTable->Length, InfoTable);
> +        Status = AcpiDmDumpTable (Length, Offset, Subtable,
> +            Subtable->Length, InfoTable);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
> @@ -1158,16 +1158,16 @@ AcpiDmDumpDmar (
>           /*
>            * Dump the optional device scope entries
>            */
> -        if ((SubTable->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
> -            (SubTable->Type == ACPI_DMAR_TYPE_NAMESPACE))
> +        if ((Subtable->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
> +            (Subtable->Type == ACPI_DMAR_TYPE_NAMESPACE))
>           {
>               /* These types do not support device scopes */
>   
>               goto NextSubtable;
>           }
>   
> -        ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, SubTable, ScopeOffset);
> -        while (ScopeOffset < SubTable->Length)
> +        ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, Subtable, ScopeOffset);
> +        while (ScopeOffset < Subtable->Length)
>           {
>               AcpiOsPrintf ("\n");
>               Status = AcpiDmDumpTable (Length, Offset + ScopeOffset, ScopeTable,
> @@ -1208,9 +1208,9 @@ AcpiDmDumpDmar (
>   NextSubtable:
>           /* Point to next subtable */
>   
> -        Offset += SubTable->Length;
> -        SubTable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, SubTable,
> -            SubTable->Length);
> +        Offset += Subtable->Length;
> +        Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Subtable,
> +            Subtable->Length);
>       }
>   }
>   
> @@ -1343,7 +1343,7 @@ AcpiDmDumpEinj (
>       ACPI_TABLE_HEADER       *Table)
>   {
>       ACPI_STATUS             Status;
> -    ACPI_WHEA_HEADER        *SubTable;
> +    ACPI_WHEA_HEADER        *Subtable;
>       UINT32                  Length = Table->Length;
>       UINT32                  Offset = sizeof (ACPI_TABLE_EINJ);
>   
> @@ -1358,11 +1358,11 @@ AcpiDmDumpEinj (
>   
>       /* Subtables */
>   
> -    SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);
> +    Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);
>       while (Offset < Table->Length)
>       {
>           AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> +        Status = AcpiDmDumpTable (Length, Offset, Subtable,
>               sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoEinj0);
>           if (ACPI_FAILURE (Status))
>           {
> @@ -1372,7 +1372,7 @@ AcpiDmDumpEinj (
>           /* Point to next subtable (each subtable is of fixed length) */
>   
>           Offset += sizeof (ACPI_WHEA_HEADER);
> -        SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, SubTable,
> +        Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Subtable,
>               sizeof (ACPI_WHEA_HEADER));
>       }
>   }
> @@ -1396,7 +1396,7 @@ AcpiDmDumpErst (
>       ACPI_TABLE_HEADER       *Table)
>   {
>       ACPI_STATUS             Status;
> -    ACPI_WHEA_HEADER        *SubTable;
> +    ACPI_WHEA_HEADER        *Subtable;
>       UINT32                  Length = Table->Length;
>       UINT32                  Offset = sizeof (ACPI_TABLE_ERST);
>   
> @@ -1411,11 +1411,11 @@ AcpiDmDumpErst (
>   
>       /* Subtables */
>   
> -    SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);
> +    Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);
>       while (Offset < Table->Length)
>       {
>           AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> +        Status = AcpiDmDumpTable (Length, Offset, Subtable,
>               sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoErst0);
>           if (ACPI_FAILURE (Status))
>           {
> @@ -1425,7 +1425,7 @@ AcpiDmDumpErst (
>           /* Point to next subtable (each subtable is of fixed length) */
>   
>           Offset += sizeof (ACPI_WHEA_HEADER);
> -        SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, SubTable,
> +        Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Subtable,
>               sizeof (ACPI_WHEA_HEADER));
>       }
>   }
> @@ -1449,7 +1449,7 @@ AcpiDmDumpFpdt (
>       ACPI_TABLE_HEADER       *Table)
>   {
>       ACPI_STATUS             Status;
> -    ACPI_FPDT_HEADER        *SubTable;
> +    ACPI_FPDT_HEADER        *Subtable;
>       UINT32                  Length = Table->Length;
>       UINT32                  Offset = sizeof (ACPI_TABLE_FPDT);
>       ACPI_DMTABLE_INFO       *InfoTable;
> @@ -1459,20 +1459,20 @@ AcpiDmDumpFpdt (
>   
>       /* Subtables */
>   
> -    SubTable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Table, Offset);
> +    Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Table, Offset);
>       while (Offset < Table->Length)
>       {
>           /* Common subtable header */
>   
>           AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> -            SubTable->Length, AcpiDmTableInfoFpdtHdr);
> +        Status = AcpiDmDumpTable (Length, Offset, Subtable,
> +            Subtable->Length, AcpiDmTableInfoFpdtHdr);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
>           }
>   
> -        switch (SubTable->Type)
> +        switch (Subtable->Type)
>           {
>           case ACPI_FPDT_TYPE_BOOT:
>   
> @@ -1487,31 +1487,31 @@ AcpiDmDumpFpdt (
>           default:
>   
>               AcpiOsPrintf ("\n**** Unknown FPDT subtable type 0x%X\n\n",
> -                SubTable->Type);
> +                Subtable->Type);
>   
>               /* Attempt to continue */
>   
> -            if (!SubTable->Length)
> +            if (!Subtable->Length)
>               {
>                   AcpiOsPrintf ("Invalid zero length subtable\n");
>                   return;
>               }
> -            goto NextSubTable;
> +            goto NextSubtable;
>           }
>   
> -        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> -            SubTable->Length, InfoTable);
> +        Status = AcpiDmDumpTable (Length, Offset, Subtable,
> +            Subtable->Length, InfoTable);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
>           }
>   
> -NextSubTable:
> +NextSubtable:
>           /* Point to next subtable */
>   
> -        Offset += SubTable->Length;
> -        SubTable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, SubTable,
> -            SubTable->Length);
> +        Offset += Subtable->Length;
> +        Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Subtable,
> +            Subtable->Length);
>       }
>   }
>   
> @@ -1534,11 +1534,11 @@ AcpiDmDumpGtdt (
>       ACPI_TABLE_HEADER       *Table)
>   {
>       ACPI_STATUS             Status;
> -    ACPI_GTDT_HEADER        *SubTable;
> +    ACPI_GTDT_HEADER        *Subtable;
>       UINT32                  Length = Table->Length;
>       UINT32                  Offset = sizeof (ACPI_TABLE_GTDT);
>       ACPI_DMTABLE_INFO       *InfoTable;
> -    UINT32                  SubTableLength;
> +    UINT32                  SubtableLength;
>       UINT32                  GtCount;
>       ACPI_GTDT_TIMER_ENTRY   *GtxTable;
>   
> @@ -1553,34 +1553,34 @@ AcpiDmDumpGtdt (
>   
>       /* Subtables */
>   
> -    SubTable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Table, Offset);
> +    Subtable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Table, Offset);
>       while (Offset < Table->Length)
>       {
>           /* Common subtable header */
>   
>           AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> -            SubTable->Length, AcpiDmTableInfoGtdtHdr);
> +        Status = AcpiDmDumpTable (Length, Offset, Subtable,
> +            Subtable->Length, AcpiDmTableInfoGtdtHdr);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
>           }
>   
>           GtCount = 0;
> -        switch (SubTable->Type)
> +        switch (Subtable->Type)
>           {
>           case ACPI_GTDT_TYPE_TIMER_BLOCK:
>   
> -            SubTableLength = sizeof (ACPI_GTDT_TIMER_BLOCK);
> +            SubtableLength = sizeof (ACPI_GTDT_TIMER_BLOCK);
>               GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
> -                SubTable))->TimerCount;
> +                Subtable))->TimerCount;
>   
>               InfoTable = AcpiDmTableInfoGtdt0;
>               break;
>   
>           case ACPI_GTDT_TYPE_WATCHDOG:
>   
> -            SubTableLength = sizeof (ACPI_GTDT_WATCHDOG);
> +            SubtableLength = sizeof (ACPI_GTDT_WATCHDOG);
>   
>               InfoTable = AcpiDmTableInfoGtdt1;
>               break;
> @@ -1590,12 +1590,12 @@ AcpiDmDumpGtdt (
>               /* Cannot continue on unknown type - no length */
>   
>               AcpiOsPrintf ("\n**** Unknown GTDT subtable type 0x%X\n",
> -                SubTable->Type);
> +                Subtable->Type);
>               return;
>           }
>   
> -        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> -            SubTable->Length, InfoTable);
> +        Status = AcpiDmDumpTable (Length, Offset, Subtable,
> +            Subtable->Length, InfoTable);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
> @@ -1603,15 +1603,15 @@ AcpiDmDumpGtdt (
>   
>           /* Point to end of current subtable (each subtable above is of fixed length) */
>   
> -        Offset += SubTableLength;
> +        Offset += SubtableLength;
>   
>           /* If there are any Gt Timer Blocks from above, dump them now */
>   
>           if (GtCount)
>           {
>               GtxTable = ACPI_ADD_PTR (
> -                ACPI_GTDT_TIMER_ENTRY, SubTable, SubTableLength);
> -            SubTableLength += GtCount * sizeof (ACPI_GTDT_TIMER_ENTRY);
> +                ACPI_GTDT_TIMER_ENTRY, Subtable, SubtableLength);
> +            SubtableLength += GtCount * sizeof (ACPI_GTDT_TIMER_ENTRY);
>   
>               while (GtCount)
>               {
> @@ -1630,7 +1630,7 @@ AcpiDmDumpGtdt (
>   
>           /* Point to next subtable */
>   
> -        SubTable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, SubTable, SubTableLength);
> +        Subtable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Subtable, SubtableLength);
>       }
>   }
>   
> @@ -1653,11 +1653,11 @@ AcpiDmDumpHest (
>       ACPI_TABLE_HEADER       *Table)
>   {
>       ACPI_STATUS             Status;
> -    ACPI_HEST_HEADER        *SubTable;
> +    ACPI_HEST_HEADER        *Subtable;
>       UINT32                  Length = Table->Length;
>       UINT32                  Offset = sizeof (ACPI_TABLE_HEST);
>       ACPI_DMTABLE_INFO       *InfoTable;
> -    UINT32                  SubTableLength;
> +    UINT32                  SubtableLength;
>       UINT32                  BankCount;
>       ACPI_HEST_IA_ERROR_BANK *BankTable;
>   
> @@ -1672,70 +1672,70 @@ AcpiDmDumpHest (
>   
>       /* Subtables */
>   
> -    SubTable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Table, Offset);
> +    Subtable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Table, Offset);
>       while (Offset < Table->Length)
>       {
>           BankCount = 0;
> -        switch (SubTable->Type)
> +        switch (Subtable->Type)
>           {
>           case ACPI_HEST_TYPE_IA32_CHECK:
>   
>               InfoTable = AcpiDmTableInfoHest0;
> -            SubTableLength = sizeof (ACPI_HEST_IA_MACHINE_CHECK);
> +            SubtableLength = sizeof (ACPI_HEST_IA_MACHINE_CHECK);
>               BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_MACHINE_CHECK,
> -                SubTable))->NumHardwareBanks;
> +                Subtable))->NumHardwareBanks;
>               break;
>   
>           case ACPI_HEST_TYPE_IA32_CORRECTED_CHECK:
>   
>               InfoTable = AcpiDmTableInfoHest1;
> -            SubTableLength = sizeof (ACPI_HEST_IA_CORRECTED);
> +            SubtableLength = sizeof (ACPI_HEST_IA_CORRECTED);
>               BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_CORRECTED,
> -                SubTable))->NumHardwareBanks;
> +                Subtable))->NumHardwareBanks;
>               break;
>   
>           case ACPI_HEST_TYPE_IA32_NMI:
>   
>               InfoTable = AcpiDmTableInfoHest2;
> -            SubTableLength = sizeof (ACPI_HEST_IA_NMI);
> +            SubtableLength = sizeof (ACPI_HEST_IA_NMI);
>               break;
>   
>           case ACPI_HEST_TYPE_AER_ROOT_PORT:
>   
>               InfoTable = AcpiDmTableInfoHest6;
> -            SubTableLength = sizeof (ACPI_HEST_AER_ROOT);
> +            SubtableLength = sizeof (ACPI_HEST_AER_ROOT);
>               break;
>   
>           case ACPI_HEST_TYPE_AER_ENDPOINT:
>   
>               InfoTable = AcpiDmTableInfoHest7;
> -            SubTableLength = sizeof (ACPI_HEST_AER);
> +            SubtableLength = sizeof (ACPI_HEST_AER);
>               break;
>   
>           case ACPI_HEST_TYPE_AER_BRIDGE:
>   
>               InfoTable = AcpiDmTableInfoHest8;
> -            SubTableLength = sizeof (ACPI_HEST_AER_BRIDGE);
> +            SubtableLength = sizeof (ACPI_HEST_AER_BRIDGE);
>               break;
>   
>           case ACPI_HEST_TYPE_GENERIC_ERROR:
>   
>               InfoTable = AcpiDmTableInfoHest9;
> -            SubTableLength = sizeof (ACPI_HEST_GENERIC);
> +            SubtableLength = sizeof (ACPI_HEST_GENERIC);
>               break;
>   
>           case ACPI_HEST_TYPE_GENERIC_ERROR_V2:
>   
>               InfoTable = AcpiDmTableInfoHest10;
> -            SubTableLength = sizeof (ACPI_HEST_GENERIC_V2);
> +            SubtableLength = sizeof (ACPI_HEST_GENERIC_V2);
>               break;
>   
>           case ACPI_HEST_TYPE_IA32_DEFERRED_CHECK:
>   
>               InfoTable = AcpiDmTableInfoHest11;
> -            SubTableLength = sizeof (ACPI_HEST_IA_DEFERRED_CHECK);
> +            SubtableLength = sizeof (ACPI_HEST_IA_DEFERRED_CHECK);
>               BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_DEFERRED_CHECK,
> -                SubTable))->NumHardwareBanks;
> +                Subtable))->NumHardwareBanks;
>               break;
>   
>           default:
> @@ -1743,13 +1743,13 @@ AcpiDmDumpHest (
>               /* Cannot continue on unknown type - no length */
>   
>               AcpiOsPrintf ("\n**** Unknown HEST subtable type 0x%X\n",
> -                SubTable->Type);
> +                Subtable->Type);
>               return;
>           }
>   
>           AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> -            SubTableLength, InfoTable);
> +        Status = AcpiDmDumpTable (Length, Offset, Subtable,
> +            SubtableLength, InfoTable);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
> @@ -1757,15 +1757,15 @@ AcpiDmDumpHest (
>   
>           /* Point to end of current subtable (each subtable above is of fixed length) */
>   
> -        Offset += SubTableLength;
> +        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);
> +            BankTable = ACPI_ADD_PTR (ACPI_HEST_IA_ERROR_BANK, Subtable,
> +                SubtableLength);
> +            SubtableLength += BankCount * sizeof (ACPI_HEST_IA_ERROR_BANK);
>   
>               while (BankCount)
>               {
> @@ -1785,7 +1785,7 @@ AcpiDmDumpHest (
>   
>           /* Point to next subtable */
>   
> -        SubTable = ACPI_ADD_PTR (ACPI_HEST_HEADER, SubTable, SubTableLength);
> +        Subtable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Subtable, SubtableLength);
>       }
>   }
>   
> @@ -1811,7 +1811,7 @@ AcpiDmDumpHmat (
>       ACPI_HMAT_LOCALITY      *HmatLocality;
>       ACPI_HMAT_CACHE         *HmatCache;
>       UINT32                  Offset;
> -    UINT32                  SubTableOffset;
> +    UINT32                  SubtableOffset;
>       UINT32                  Length;
>       ACPI_DMTABLE_INFO       *InfoTable;
>       UINT32                  i, j;
> @@ -1829,7 +1829,7 @@ AcpiDmDumpHmat (
>       while (Offset < Table->Length)
>       {
>           AcpiOsPrintf ("\n");
> -        SubTableOffset = 0;
> +        SubtableOffset = 0;
>   
>           /* Dump HMAT structure header */
>   
> @@ -1873,7 +1873,7 @@ AcpiDmDumpHmat (
>   
>               /* Attempt to continue */
>   
> -            goto NextSubTable;
> +            goto NextSubtable;
>           }
>   
>           /* Dump HMAT structure body */
> @@ -1897,11 +1897,11 @@ AcpiDmDumpHmat (
>           case ACPI_HMAT_TYPE_LOCALITY:
>   
>               HmatLocality = ACPI_CAST_PTR (ACPI_HMAT_LOCALITY, HmatStruct);
> -            SubTableOffset = sizeof (ACPI_HMAT_LOCALITY);
> +            SubtableOffset = sizeof (ACPI_HMAT_LOCALITY);
>   
>               /* Dump initiator proximity domains */
>   
> -            if ((UINT32)(HmatStruct->Length - SubTableOffset) <
> +            if ((UINT32)(HmatStruct->Length - SubtableOffset) <
>                   (UINT32)(HmatLocality->NumberOfInitiatorPDs * 4))
>               {
>                   AcpiOsPrintf ("Invalid initiator proximity domain number\n");
> @@ -1909,15 +1909,15 @@ AcpiDmDumpHmat (
>               }
>               for (i = 0; i < HmatLocality->NumberOfInitiatorPDs; i++)
>               {
> -                Status = AcpiDmDumpTable (Table->Length, Offset + SubTableOffset,
> -                    ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubTableOffset),
> +                Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
> +                    ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset),
>                       4, AcpiDmTableInfoHmat1a);
> -                SubTableOffset += 4;
> +                SubtableOffset += 4;
>               }
>   
>               /* Dump target proximity domains */
>   
> -            if ((UINT32)(HmatStruct->Length - SubTableOffset) <
> +            if ((UINT32)(HmatStruct->Length - SubtableOffset) <
>                   (UINT32)(HmatLocality->NumberOfTargetPDs * 4))
>               {
>                   AcpiOsPrintf ("Invalid target proximity domain number\n");
> @@ -1925,15 +1925,15 @@ AcpiDmDumpHmat (
>               }
>               for (i = 0; i < HmatLocality->NumberOfTargetPDs; i++)
>               {
> -                Status = AcpiDmDumpTable (Table->Length, Offset + SubTableOffset,
> -                    ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubTableOffset),
> +                Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
> +                    ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset),
>                       4, AcpiDmTableInfoHmat1b);
> -                SubTableOffset += 4;
> +                SubtableOffset += 4;
>               }
>   
>               /* Dump latency/bandwidth entris */
>   
> -            if ((UINT32)(HmatStruct->Length - SubTableOffset) <
> +            if ((UINT32)(HmatStruct->Length - SubtableOffset) <
>                   (UINT32)(HmatLocality->NumberOfInitiatorPDs *
>                            HmatLocality->NumberOfTargetPDs * 2))
>               {
> @@ -1944,10 +1944,10 @@ AcpiDmDumpHmat (
>               {
>                   for (j = 0; j < HmatLocality->NumberOfTargetPDs; j++)
>                   {
> -                    Status = AcpiDmDumpTable (Table->Length, Offset + SubTableOffset,
> -                        ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubTableOffset),
> +                    Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
> +                        ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset),
>                           2, AcpiDmTableInfoHmat1c);
> -                    SubTableOffset += 2;
> +                    SubtableOffset += 2;
>                   }
>               }
>               break;
> @@ -1955,11 +1955,11 @@ AcpiDmDumpHmat (
>           case ACPI_HMAT_TYPE_CACHE:
>   
>               HmatCache = ACPI_CAST_PTR (ACPI_HMAT_CACHE, HmatStruct);
> -            SubTableOffset = sizeof (ACPI_HMAT_CACHE);
> +            SubtableOffset = sizeof (ACPI_HMAT_CACHE);
>   
>               /* Dump SMBIOS handles */
>   
> -            if ((UINT32)(HmatStruct->Length - SubTableOffset) <
> +            if ((UINT32)(HmatStruct->Length - SubtableOffset) <
>                   (UINT32)(HmatCache->NumberOfSMBIOSHandles * 2))
>               {
>                   AcpiOsPrintf ("Invalid SMBIOS handle number\n");
> @@ -1967,10 +1967,10 @@ AcpiDmDumpHmat (
>               }
>               for (i = 0; i < HmatCache->NumberOfSMBIOSHandles; i++)
>               {
> -                Status = AcpiDmDumpTable (Table->Length, Offset + SubTableOffset,
> -                    ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubTableOffset),
> +                Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
> +                    ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset),
>                       2, AcpiDmTableInfoHmat2a);
> -                SubTableOffset += 2;
> +                SubtableOffset += 2;
>               }
>               break;
>   
> @@ -1979,7 +1979,7 @@ AcpiDmDumpHmat (
>               break;
>           }
>   
> -NextSubTable:
> +NextSubtable:
>           /* Point to next HMAT structure subtable */
>   
>           Offset += (HmatStruct->Length);
> @@ -2104,7 +2104,7 @@ AcpiDmDumpIort (
>                   AcpiOsPrintf ("Invalid zero length IORT node\n");
>                   return;
>               }
> -            goto NextSubTable;
> +            goto NextSubtable;
>           }
>   
>           /* Dump the node subtable header */
> @@ -2227,7 +2227,7 @@ AcpiDmDumpIort (
>               NodeOffset += Length;
>           }
>   
> -NextSubTable:
> +NextSubtable:
>           /* Point to next node subtable */
>   
>           Offset += IortNode->Length;
> @@ -2260,7 +2260,7 @@ AcpiDmDumpIvrs (
>       UINT32                  EntryLength;
>       UINT32                  EntryType;
>       ACPI_IVRS_DE_HEADER     *DeviceEntry;
> -    ACPI_IVRS_HEADER        *SubTable;
> +    ACPI_IVRS_HEADER        *Subtable;
>       ACPI_DMTABLE_INFO       *InfoTable;
>   
>   
> @@ -2274,20 +2274,20 @@ AcpiDmDumpIvrs (
>   
>       /* Subtables */
>   
> -    SubTable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset);
> +    Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset);
>       while (Offset < Table->Length)
>       {
>           /* Common subtable header */
>   
>           AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
> -            SubTable->Length, AcpiDmTableInfoIvrsHdr);
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
> +            Subtable->Length, AcpiDmTableInfoIvrsHdr);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
>           }
>   
> -        switch (SubTable->Type)
> +        switch (Subtable->Type)
>           {
>           case ACPI_IVRS_TYPE_HARDWARE:
>   
> @@ -2304,23 +2304,23 @@ AcpiDmDumpIvrs (
>           default:
>   
>               AcpiOsPrintf ("\n**** Unknown IVRS subtable type 0x%X\n",
> -                SubTable->Type);
> +                Subtable->Type);
>   
>               /* Attempt to continue */
>   
> -            if (!SubTable->Length)
> +            if (!Subtable->Length)
>               {
>                   AcpiOsPrintf ("Invalid zero length subtable\n");
>                   return;
>               }
> -            goto NextSubTable;
> +            goto NextSubtable;
>           }
>   
>           /* Dump the subtable */
>   
>           AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
> -            SubTable->Length, InfoTable);
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
> +            Subtable->Length, InfoTable);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
> @@ -2328,13 +2328,13 @@ AcpiDmDumpIvrs (
>   
>           /* The hardware subtable can contain multiple device entries */
>   
> -        if (SubTable->Type == ACPI_IVRS_TYPE_HARDWARE)
> +        if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE)
>           {
>               EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE);
> -            DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, SubTable,
> +            DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable,
>                   sizeof (ACPI_IVRS_HARDWARE));
>   
> -            while (EntryOffset < (Offset + SubTable->Length))
> +            while (EntryOffset < (Offset + Subtable->Length))
>               {
>                   AcpiOsPrintf ("\n");
>                   /*
> @@ -2409,11 +2409,11 @@ AcpiDmDumpIvrs (
>               }
>           }
>   
> -NextSubTable:
> +NextSubtable:
>           /* Point to next subtable */
>   
> -        Offset += SubTable->Length;
> -        SubTable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, SubTable, SubTable->Length);
> +        Offset += Subtable->Length;
> +        Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Subtable, Subtable->Length);
>       }
>   }
>   
> @@ -2438,33 +2438,33 @@ AcpiDmDumpLpit (
>       ACPI_TABLE_HEADER       *Table)
>   {
>       ACPI_STATUS             Status;
> -    ACPI_LPIT_HEADER        *SubTable;
> +    ACPI_LPIT_HEADER        *Subtable;
>       UINT32                  Length = Table->Length;
>       UINT32                  Offset = sizeof (ACPI_TABLE_LPIT);
>       ACPI_DMTABLE_INFO       *InfoTable;
> -    UINT32                  SubTableLength;
> +    UINT32                  SubtableLength;
>   
>   
>       /* Subtables */
>   
> -    SubTable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Table, Offset);
> +    Subtable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Table, Offset);
>       while (Offset < Table->Length)
>       {
>           /* Common subtable header */
>   
> -        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> +        Status = AcpiDmDumpTable (Length, Offset, Subtable,
>               sizeof (ACPI_LPIT_HEADER), AcpiDmTableInfoLpitHdr);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
>           }
>   
> -        switch (SubTable->Type)
> +        switch (Subtable->Type)
>           {
>           case ACPI_LPIT_TYPE_NATIVE_CSTATE:
>   
>               InfoTable = AcpiDmTableInfoLpit0;
> -            SubTableLength = sizeof (ACPI_LPIT_NATIVE);
> +            SubtableLength = sizeof (ACPI_LPIT_NATIVE);
>               break;
>   
>           default:
> @@ -2472,12 +2472,12 @@ AcpiDmDumpLpit (
>               /* Cannot continue on unknown type - no length */
>   
>               AcpiOsPrintf ("\n**** Unknown LPIT subtable type 0x%X\n",
> -                SubTable->Type);
> +                Subtable->Type);
>               return;
>           }
>   
> -        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> -            SubTableLength, InfoTable);
> +        Status = AcpiDmDumpTable (Length, Offset, Subtable,
> +            SubtableLength, InfoTable);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
> @@ -2487,8 +2487,8 @@ AcpiDmDumpLpit (
>   
>           /* Point to next subtable */
>   
> -        Offset += SubTableLength;
> -        SubTable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, SubTable, SubTableLength);
> +        Offset += SubtableLength;
> +        Subtable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Subtable, SubtableLength);
>       }
>   }
>   
> @@ -2511,7 +2511,7 @@ AcpiDmDumpMadt (
>       ACPI_TABLE_HEADER       *Table)
>   {
>       ACPI_STATUS             Status;
> -    ACPI_SUBTABLE_HEADER    *SubTable;
> +    ACPI_SUBTABLE_HEADER    *Subtable;
>       UINT32                  Length = Table->Length;
>       UINT32                  Offset = sizeof (ACPI_TABLE_MADT);
>       ACPI_DMTABLE_INFO       *InfoTable;
> @@ -2527,20 +2527,20 @@ AcpiDmDumpMadt (
>   
>       /* Subtables */
>   
> -    SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
> +    Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
>       while (Offset < Table->Length)
>       {
>           /* Common subtable header */
>   
>           AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> -            SubTable->Length, AcpiDmTableInfoMadtHdr);
> +        Status = AcpiDmDumpTable (Length, Offset, Subtable,
> +            Subtable->Length, AcpiDmTableInfoMadtHdr);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
>           }
>   
> -        switch (SubTable->Type)
> +        switch (Subtable->Type)
>           {
>           case ACPI_MADT_TYPE_LOCAL_APIC:
>   
> @@ -2625,32 +2625,32 @@ AcpiDmDumpMadt (
>           default:
>   
>               AcpiOsPrintf ("\n**** Unknown MADT subtable type 0x%X\n\n",
> -                SubTable->Type);
> +                Subtable->Type);
>   
>               /* Attempt to continue */
>   
> -            if (!SubTable->Length)
> +            if (!Subtable->Length)
>               {
>                   AcpiOsPrintf ("Invalid zero length subtable\n");
>                   return;
>               }
>   
> -            goto NextSubTable;
> +            goto NextSubtable;
>           }
>   
> -        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> -            SubTable->Length, InfoTable);
> +        Status = AcpiDmDumpTable (Length, Offset, Subtable,
> +            Subtable->Length, InfoTable);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
>           }
>   
> -NextSubTable:
> +NextSubtable:
>           /* Point to next subtable */
>   
> -        Offset += SubTable->Length;
> -        SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, SubTable,
> -            SubTable->Length);
> +        Offset += Subtable->Length;
> +        Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable,
> +            Subtable->Length);
>       }
>   }
>   
> @@ -2673,7 +2673,7 @@ AcpiDmDumpMcfg (
>   {
>       ACPI_STATUS             Status;
>       UINT32                  Offset = sizeof (ACPI_TABLE_MCFG);
> -    ACPI_MCFG_ALLOCATION    *SubTable;
> +    ACPI_MCFG_ALLOCATION    *Subtable;
>   
>   
>       /* Main table */
> @@ -2686,7 +2686,7 @@ AcpiDmDumpMcfg (
>   
>       /* Subtables */
>   
> -    SubTable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Table, Offset);
> +    Subtable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Table, Offset);
>       while (Offset < Table->Length)
>       {
>           if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > Table->Length)
> @@ -2697,7 +2697,7 @@ AcpiDmDumpMcfg (
>           }
>   
>           AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
>               sizeof (ACPI_MCFG_ALLOCATION), AcpiDmTableInfoMcfg0);
>           if (ACPI_FAILURE (Status))
>           {
> @@ -2707,7 +2707,7 @@ AcpiDmDumpMcfg (
>           /* Point to next subtable (each subtable is of fixed length) */
>   
>           Offset += sizeof (ACPI_MCFG_ALLOCATION);
> -        SubTable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, SubTable,
> +        Subtable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Subtable,
>               sizeof (ACPI_MCFG_ALLOCATION));
>       }
>   }
> @@ -2731,11 +2731,11 @@ AcpiDmDumpMpst (
>   {
>       ACPI_STATUS             Status;
>       UINT32                  Offset = sizeof (ACPI_TABLE_MPST);
> -    ACPI_MPST_POWER_NODE    *SubTable0;
> -    ACPI_MPST_POWER_STATE   *SubTable0A;
> -    ACPI_MPST_COMPONENT     *SubTable0B;
> -    ACPI_MPST_DATA_HDR      *SubTable1;
> -    ACPI_MPST_POWER_DATA    *SubTable2;
> +    ACPI_MPST_POWER_NODE    *Subtable0;
> +    ACPI_MPST_POWER_STATE   *Subtable0A;
> +    ACPI_MPST_COMPONENT     *Subtable0B;
> +    ACPI_MPST_DATA_HDR      *Subtable1;
> +    ACPI_MPST_POWER_DATA    *Subtable2;
>       UINT16                  SubtableCount;
>       UINT32                  PowerStateCount;
>       UINT32                  ComponentCount;
> @@ -2752,12 +2752,12 @@ AcpiDmDumpMpst (
>       /* Subtable: Memory Power Node(s) */
>   
>       SubtableCount = (ACPI_CAST_PTR (ACPI_TABLE_MPST, Table))->PowerNodeCount;
> -    SubTable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Table, Offset);
> +    Subtable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Table, Offset);
>   
>       while ((Offset < Table->Length) && SubtableCount)
>       {
>           AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable0,
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0,
>               sizeof (ACPI_MPST_POWER_NODE), AcpiDmTableInfoMpst0);
>           if (ACPI_FAILURE (Status))
>           {
> @@ -2766,33 +2766,33 @@ AcpiDmDumpMpst (
>   
>           /* Extract the sub-subtable counts */
>   
> -        PowerStateCount = SubTable0->NumPowerStates;
> -        ComponentCount = SubTable0->NumPhysicalComponents;
> +        PowerStateCount = Subtable0->NumPowerStates;
> +        ComponentCount = Subtable0->NumPhysicalComponents;
>           Offset += sizeof (ACPI_MPST_POWER_NODE);
>   
>           /* Sub-subtables - Memory Power State Structure(s) */
>   
> -        SubTable0A = ACPI_ADD_PTR (ACPI_MPST_POWER_STATE, SubTable0,
> +        Subtable0A = ACPI_ADD_PTR (ACPI_MPST_POWER_STATE, Subtable0,
>               sizeof (ACPI_MPST_POWER_NODE));
>   
>           while (PowerStateCount)
>           {
>               AcpiOsPrintf ("\n");
> -            Status = AcpiDmDumpTable (Table->Length, Offset, SubTable0A,
> +            Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0A,
>                   sizeof (ACPI_MPST_POWER_STATE), AcpiDmTableInfoMpst0A);
>               if (ACPI_FAILURE (Status))
>               {
>                   return;
>               }
>   
> -            SubTable0A++;
> +            Subtable0A++;
>               PowerStateCount--;
>               Offset += sizeof (ACPI_MPST_POWER_STATE);
>          }
>   
>           /* Sub-subtables - Physical Component ID Structure(s) */
>   
> -        SubTable0B = ACPI_CAST_PTR (ACPI_MPST_COMPONENT, SubTable0A);
> +        Subtable0B = ACPI_CAST_PTR (ACPI_MPST_COMPONENT, Subtable0A);
>   
>           if (ComponentCount)
>           {
> @@ -2801,14 +2801,14 @@ AcpiDmDumpMpst (
>   
>           while (ComponentCount)
>           {
> -            Status = AcpiDmDumpTable (Table->Length, Offset, SubTable0B,
> +            Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0B,
>                   sizeof (ACPI_MPST_COMPONENT), AcpiDmTableInfoMpst0B);
>               if (ACPI_FAILURE (Status))
>               {
>                   return;
>               }
>   
> -            SubTable0B++;
> +            Subtable0B++;
>               ComponentCount--;
>               Offset += sizeof (ACPI_MPST_COMPONENT);
>           }
> @@ -2816,42 +2816,42 @@ AcpiDmDumpMpst (
>           /* Point to next Memory Power Node subtable */
>   
>           SubtableCount--;
> -        SubTable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, SubTable0,
> +        Subtable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Subtable0,
>               sizeof (ACPI_MPST_POWER_NODE) +
> -            (sizeof (ACPI_MPST_POWER_STATE) * SubTable0->NumPowerStates) +
> -            (sizeof (ACPI_MPST_COMPONENT) * SubTable0->NumPhysicalComponents));
> +            (sizeof (ACPI_MPST_POWER_STATE) * Subtable0->NumPowerStates) +
> +            (sizeof (ACPI_MPST_COMPONENT) * Subtable0->NumPhysicalComponents));
>       }
>   
>       /* Subtable: Count of Memory Power State Characteristic structures */
>   
>       AcpiOsPrintf ("\n");
> -    SubTable1 = ACPI_CAST_PTR (ACPI_MPST_DATA_HDR, SubTable0);
> -    Status = AcpiDmDumpTable (Table->Length, Offset, SubTable1,
> +    Subtable1 = ACPI_CAST_PTR (ACPI_MPST_DATA_HDR, Subtable0);
> +    Status = AcpiDmDumpTable (Table->Length, Offset, Subtable1,
>           sizeof (ACPI_MPST_DATA_HDR), AcpiDmTableInfoMpst1);
>       if (ACPI_FAILURE (Status))
>       {
>           return;
>       }
>   
> -    SubtableCount = SubTable1->CharacteristicsCount;
> +    SubtableCount = Subtable1->CharacteristicsCount;
>       Offset += sizeof (ACPI_MPST_DATA_HDR);
>   
>       /* Subtable: Memory Power State Characteristics structure(s) */
>   
> -    SubTable2 = ACPI_ADD_PTR (ACPI_MPST_POWER_DATA, SubTable1,
> +    Subtable2 = ACPI_ADD_PTR (ACPI_MPST_POWER_DATA, Subtable1,
>           sizeof (ACPI_MPST_DATA_HDR));
>   
>       while ((Offset < Table->Length) && SubtableCount)
>       {
>           AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable2,
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable2,
>               sizeof (ACPI_MPST_POWER_DATA), AcpiDmTableInfoMpst2);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
>           }
>   
> -        SubTable2++;
> +        Subtable2++;
>           SubtableCount--;
>           Offset += sizeof (ACPI_MPST_POWER_DATA);
>       }
> @@ -2876,7 +2876,7 @@ AcpiDmDumpMsct (
>   {
>       ACPI_STATUS             Status;
>       UINT32                  Offset = sizeof (ACPI_TABLE_MSCT);
> -    ACPI_MSCT_PROXIMITY     *SubTable;
> +    ACPI_MSCT_PROXIMITY     *Subtable;
>   
>   
>       /* Main table */
> @@ -2889,13 +2889,13 @@ AcpiDmDumpMsct (
>   
>       /* Subtables */
>   
> -    SubTable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Table, Offset);
> +    Subtable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Table, Offset);
>       while (Offset < Table->Length)
>       {
>           /* Common subtable header */
>   
>           AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
>               sizeof (ACPI_MSCT_PROXIMITY), AcpiDmTableInfoMsct0);
>           if (ACPI_FAILURE (Status))
>           {
> @@ -2905,7 +2905,7 @@ AcpiDmDumpMsct (
>           /* Point to next subtable */
>   
>           Offset += sizeof (ACPI_MSCT_PROXIMITY);
> -        SubTable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, SubTable,
> +        Subtable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Subtable,
>               sizeof (ACPI_MSCT_PROXIMITY));
>       }
>   }
> @@ -2929,7 +2929,7 @@ AcpiDmDumpMtmr (
>   {
>       ACPI_STATUS             Status;
>       UINT32                  Offset = sizeof (ACPI_TABLE_MTMR);
> -    ACPI_MTMR_ENTRY         *SubTable;
> +    ACPI_MTMR_ENTRY         *Subtable;
>   
>   
>       /* Main table */
> @@ -2942,13 +2942,13 @@ AcpiDmDumpMtmr (
>   
>       /* Subtables */
>   
> -    SubTable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Table, Offset);
> +    Subtable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Table, Offset);
>       while (Offset < Table->Length)
>       {
>           /* Common subtable header */
>   
>           AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
>               sizeof (ACPI_MTMR_ENTRY), AcpiDmTableInfoMtmr0);
>           if (ACPI_FAILURE (Status))
>           {
> @@ -2958,7 +2958,7 @@ AcpiDmDumpMtmr (
>           /* Point to next subtable */
>   
>           Offset += sizeof (ACPI_MTMR_ENTRY);
> -        SubTable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, SubTable,
> +        Subtable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Subtable,
>               sizeof (ACPI_MTMR_ENTRY));
>       }
>   }
> @@ -2984,7 +2984,7 @@ AcpiDmDumpNfit (
>       UINT32                  Offset = sizeof (ACPI_TABLE_NFIT);
>       UINT32                  FieldOffset = 0;
>       UINT32                  Length;
> -    ACPI_NFIT_HEADER        *SubTable;
> +    ACPI_NFIT_HEADER        *Subtable;
>       ACPI_DMTABLE_INFO       *InfoTable;
>       ACPI_NFIT_INTERLEAVE    *Interleave = NULL;
>       ACPI_NFIT_SMBIOS        *SmbiosInfo = NULL;
> @@ -3002,20 +3002,20 @@ AcpiDmDumpNfit (
>   
>       /* Subtables */
>   
> -    SubTable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Table, Offset);
> +    Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Table, Offset);
>       while (Offset < Table->Length)
>       {
>           /* NFIT subtable header */
>   
>           AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
> -            SubTable->Length, AcpiDmTableInfoNfitHdr);
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
> +            Subtable->Length, AcpiDmTableInfoNfitHdr);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
>           }
>   
> -        switch (SubTable->Type)
> +        switch (Subtable->Type)
>           {
>           case ACPI_NFIT_TYPE_SYSTEM_ADDRESS:
>   
> @@ -3032,13 +3032,13 @@ AcpiDmDumpNfit (
>               /* Has a variable number of 32-bit values at the end */
>   
>               InfoTable = AcpiDmTableInfoNfit2;
> -            Interleave = ACPI_CAST_PTR (ACPI_NFIT_INTERLEAVE, SubTable);
> +            Interleave = ACPI_CAST_PTR (ACPI_NFIT_INTERLEAVE, Subtable);
>               FieldOffset = sizeof (ACPI_NFIT_INTERLEAVE);
>               break;
>   
>           case ACPI_NFIT_TYPE_SMBIOS:
>   
> -            SmbiosInfo = ACPI_CAST_PTR (ACPI_NFIT_SMBIOS, SubTable);
> +            SmbiosInfo = ACPI_CAST_PTR (ACPI_NFIT_SMBIOS, Subtable);
>               InfoTable = AcpiDmTableInfoNfit3;
>               break;
>   
> @@ -3057,27 +3057,27 @@ AcpiDmDumpNfit (
>               /* Has a variable number of 64-bit addresses at the end */
>   
>               InfoTable = AcpiDmTableInfoNfit6;
> -            Hint = ACPI_CAST_PTR (ACPI_NFIT_FLUSH_ADDRESS, SubTable);
> +            Hint = ACPI_CAST_PTR (ACPI_NFIT_FLUSH_ADDRESS, Subtable);
>               FieldOffset = sizeof (ACPI_NFIT_FLUSH_ADDRESS) - sizeof (UINT64);
>               break;
>   
>           default:
>               AcpiOsPrintf ("\n**** Unknown NFIT subtable type 0x%X\n",
> -                SubTable->Type);
> +                Subtable->Type);
>   
>               /* Attempt to continue */
>   
> -            if (!SubTable->Length)
> +            if (!Subtable->Length)
>               {
>                   AcpiOsPrintf ("Invalid zero length subtable\n");
>                   return;
>               }
> -            goto NextSubTable;
> +            goto NextSubtable;
>           }
>   
>           AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
> -            SubTable->Length, InfoTable);
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
> +            Subtable->Length, InfoTable);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
> @@ -3085,7 +3085,7 @@ AcpiDmDumpNfit (
>   
>           /* Per-subtable variable-length fields */
>   
> -        switch (SubTable->Type)
> +        switch (Subtable->Type)
>           {
>           case ACPI_NFIT_TYPE_INTERLEAVE:
>   
> @@ -3105,7 +3105,7 @@ AcpiDmDumpNfit (
>   
>           case ACPI_NFIT_TYPE_SMBIOS:
>   
> -            Length = SubTable->Length -
> +            Length = Subtable->Length -
>                   sizeof (ACPI_NFIT_SMBIOS) + sizeof (UINT8);
>   
>               if (Length)
> @@ -3142,11 +3142,11 @@ AcpiDmDumpNfit (
>               break;
>           }
>   
> -NextSubTable:
> +NextSubtable:
>           /* Point to next subtable */
>   
> -        Offset += SubTable->Length;
> -        SubTable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, SubTable, SubTable->Length);
> +        Offset += Subtable->Length;
> +        Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Subtable, Subtable->Length);
>       }
>   }
>   
> @@ -3169,7 +3169,7 @@ AcpiDmDumpPcct (
>       ACPI_TABLE_HEADER       *Table)
>   {
>       ACPI_STATUS             Status;
> -    ACPI_PCCT_SUBSPACE      *SubTable;
> +    ACPI_PCCT_SUBSPACE      *Subtable;
>       ACPI_DMTABLE_INFO       *InfoTable;
>       UINT32                  Length = Table->Length;
>       UINT32                  Offset = sizeof (ACPI_TABLE_PCCT);
> @@ -3185,20 +3185,20 @@ AcpiDmDumpPcct (
>   
>       /* Subtables */
>   
> -    SubTable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Table, Offset);
> +    Subtable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Table, Offset);
>       while (Offset < Table->Length)
>       {
>           /* Common subtable header */
>   
>           AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> -            SubTable->Header.Length, AcpiDmTableInfoPcctHdr);
> +        Status = AcpiDmDumpTable (Length, Offset, Subtable,
> +            Subtable->Header.Length, AcpiDmTableInfoPcctHdr);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
>           }
>   
> -        switch (SubTable->Header.Type)
> +        switch (Subtable->Header.Type)
>           {
>           case ACPI_PCCT_TYPE_GENERIC_SUBSPACE:
>   
> @@ -3229,13 +3229,67 @@ AcpiDmDumpPcct (
>   
>               AcpiOsPrintf (
>                   "\n**** Unexpected or unknown PCCT subtable type 0x%X\n\n",
> -                SubTable->Header.Type);
> +                Subtable->Header.Type);
> +            return;
> +        }
> +
> +        AcpiOsPrintf ("\n");
> +        Status = AcpiDmDumpTable (Length, Offset, Subtable,
> +            Subtable->Header.Length, InfoTable);
> +        if (ACPI_FAILURE (Status))
> +        {
>               return;
>           }
>   
> +        /* Point to next subtable */
> +
> +        Offset += Subtable->Header.Length;
> +        Subtable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Subtable,
> +            Subtable->Header.Length);
> +    }
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiDmDumpPdtt
> + *
> + * PARAMETERS:  Table               - A PDTT table
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Format the contents of a Pdtt. This is a variable-length
> + *              table that contains an open-ended number of IDs
> + *              at the end of the table.
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmDumpPdtt (
> +    ACPI_TABLE_HEADER       *Table)
> +{
> +    ACPI_STATUS             Status;
> +    ACPI_PDTT_CHANNEL       *Subtable;
> +    UINT32                  Length = Table->Length;
> +    UINT32                  Offset = sizeof (ACPI_TABLE_PDTT);
> +
> +
> +    /* Main table */
> +
> +    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPdtt);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return;
> +    }
> +
> +    /* Subtables. Currently there is only one type, but can be multiples */
> +
> +    Subtable = ACPI_ADD_PTR (ACPI_PDTT_CHANNEL, Table, Offset);
> +    while (Offset < Table->Length)
> +    {
>           AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> -            SubTable->Header.Length, InfoTable);
> +        Status = AcpiDmDumpTable (Length, Offset, Subtable,
> +            sizeof (ACPI_PDTT_CHANNEL), AcpiDmTableInfoPdtt0);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
> @@ -3243,9 +3297,9 @@ AcpiDmDumpPcct (
>   
>           /* Point to next subtable */
>   
> -        Offset += SubTable->Header.Length;
> -        SubTable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, SubTable,
> -            SubTable->Header.Length);
> +        Offset += sizeof (ACPI_PDTT_CHANNEL);
> +        Subtable = ACPI_ADD_PTR (ACPI_PDTT_CHANNEL, Subtable,
> +            sizeof (ACPI_PDTT_CHANNEL));
>       }
>   }
>   
> @@ -3268,9 +3322,9 @@ AcpiDmDumpPmtt (
>       ACPI_TABLE_HEADER       *Table)
>   {
>       ACPI_STATUS             Status;
> -    ACPI_PMTT_HEADER        *SubTable;
> -    ACPI_PMTT_HEADER        *MemSubTable;
> -    ACPI_PMTT_HEADER        *DimmSubTable;
> +    ACPI_PMTT_HEADER        *Subtable;
> +    ACPI_PMTT_HEADER        *MemSubtable;
> +    ACPI_PMTT_HEADER        *DimmSubtable;
>       ACPI_PMTT_DOMAIN        *DomainArray;
>       UINT32                  Length = Table->Length;
>       UINT32                  Offset = sizeof (ACPI_TABLE_PMTT);
> @@ -3290,14 +3344,14 @@ AcpiDmDumpPmtt (
>   
>       /* Subtables */
>   
> -    SubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Table, Offset);
> +    Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Table, Offset);
>       while (Offset < Table->Length)
>       {
>           /* Common subtable header */
>   
>           AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> -            SubTable->Length, AcpiDmTableInfoPmttHdr);
> +        Status = AcpiDmDumpTable (Length, Offset, Subtable,
> +            Subtable->Length, AcpiDmTableInfoPmttHdr);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
> @@ -3305,18 +3359,18 @@ AcpiDmDumpPmtt (
>   
>           /* Only Socket subtables are expected at this level */
>   
> -        if (SubTable->Type != ACPI_PMTT_TYPE_SOCKET)
> +        if (Subtable->Type != ACPI_PMTT_TYPE_SOCKET)
>           {
>               AcpiOsPrintf (
>                   "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n",
> -                SubTable->Type);
> +                Subtable->Type);
>               return;
>           }
>   
>           /* Dump the fixed-length portion of the subtable */
>   
> -        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> -            SubTable->Length, AcpiDmTableInfoPmtt0);
> +        Status = AcpiDmDumpTable (Length, Offset, Subtable,
> +            Subtable->Length, AcpiDmTableInfoPmtt0);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
> @@ -3325,18 +3379,18 @@ AcpiDmDumpPmtt (
>           /* Walk the memory controller subtables */
>   
>           MemOffset = sizeof (ACPI_PMTT_SOCKET);
> -        MemSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, SubTable,
> +        MemSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Subtable,
>               sizeof (ACPI_PMTT_SOCKET));
>   
>           while (((Offset + MemOffset) < Table->Length) &&
> -            (MemOffset < SubTable->Length))
> +            (MemOffset < Subtable->Length))
>           {
>               /* Common subtable header */
>   
>               AcpiOsPrintf ("\n");
>               Status = AcpiDmDumpTable (Length,
> -                Offset + MemOffset, MemSubTable,
> -                MemSubTable->Length, AcpiDmTableInfoPmttHdr);
> +                Offset + MemOffset, MemSubtable,
> +                MemSubtable->Length, AcpiDmTableInfoPmttHdr);
>               if (ACPI_FAILURE (Status))
>               {
>                   return;
> @@ -3344,19 +3398,19 @@ AcpiDmDumpPmtt (
>   
>               /* Only memory controller subtables are expected at this level */
>   
> -            if (MemSubTable->Type != ACPI_PMTT_TYPE_CONTROLLER)
> +            if (MemSubtable->Type != ACPI_PMTT_TYPE_CONTROLLER)
>               {
>                   AcpiOsPrintf (
>                       "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n",
> -                    MemSubTable->Type);
> +                    MemSubtable->Type);
>                   return;
>               }
>   
>               /* Dump the fixed-length portion of the controller subtable */
>   
>               Status = AcpiDmDumpTable (Length,
> -                Offset + MemOffset, MemSubTable,
> -                MemSubTable->Length, AcpiDmTableInfoPmtt1);
> +                Offset + MemOffset, MemSubtable,
> +                MemSubtable->Length, AcpiDmTableInfoPmtt1);
>               if (ACPI_FAILURE (Status))
>               {
>                   return;
> @@ -3364,13 +3418,13 @@ AcpiDmDumpPmtt (
>   
>               /* Walk the variable count of proximity domains */
>   
> -            DomainCount = ((ACPI_PMTT_CONTROLLER *) MemSubTable)->DomainCount;
> +            DomainCount = ((ACPI_PMTT_CONTROLLER *) MemSubtable)->DomainCount;
>               DomainOffset = sizeof (ACPI_PMTT_CONTROLLER);
> -            DomainArray = ACPI_ADD_PTR (ACPI_PMTT_DOMAIN, MemSubTable,
> +            DomainArray = ACPI_ADD_PTR (ACPI_PMTT_DOMAIN, MemSubtable,
>                   sizeof (ACPI_PMTT_CONTROLLER));
>   
>               while (((Offset + MemOffset + DomainOffset) < Table->Length) &&
> -                ((MemOffset + DomainOffset) < SubTable->Length) &&
> +                ((MemOffset + DomainOffset) < Subtable->Length) &&
>                   DomainCount)
>               {
>                   Status = AcpiDmDumpTable (Length,
> @@ -3395,18 +3449,18 @@ AcpiDmDumpPmtt (
>               /* Walk the physical component (DIMM) subtables */
>   
>               DimmOffset = DomainOffset;
> -            DimmSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, MemSubTable,
> +            DimmSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, MemSubtable,
>                   DomainOffset);
>   
>               while (((Offset + MemOffset + DimmOffset) < Table->Length) &&
> -                (DimmOffset < MemSubTable->Length))
> +                (DimmOffset < MemSubtable->Length))
>               {
>                   /* Common subtable header */
>   
>                   AcpiOsPrintf ("\n");
>                   Status = AcpiDmDumpTable (Length,
> -                    Offset + MemOffset + DimmOffset, DimmSubTable,
> -                    DimmSubTable->Length, AcpiDmTableInfoPmttHdr);
> +                    Offset + MemOffset + DimmOffset, DimmSubtable,
> +                    DimmSubtable->Length, AcpiDmTableInfoPmttHdr);
>                   if (ACPI_FAILURE (Status))
>                   {
>                       return;
> @@ -3414,19 +3468,19 @@ AcpiDmDumpPmtt (
>   
>                   /* Only DIMM subtables are expected at this level */
>   
> -                if (DimmSubTable->Type != ACPI_PMTT_TYPE_DIMM)
> +                if (DimmSubtable->Type != ACPI_PMTT_TYPE_DIMM)
>                   {
>                       AcpiOsPrintf (
>                           "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n",
> -                        DimmSubTable->Type);
> +                        DimmSubtable->Type);
>                       return;
>                   }
>   
>                   /* Dump the fixed-length DIMM subtable */
>   
>                   Status = AcpiDmDumpTable (Length,
> -                    Offset + MemOffset + DimmOffset, DimmSubTable,
> -                    DimmSubTable->Length, AcpiDmTableInfoPmtt2);
> +                    Offset + MemOffset + DimmOffset, DimmSubtable,
> +                    DimmSubtable->Length, AcpiDmTableInfoPmtt2);
>                   if (ACPI_FAILURE (Status))
>                   {
>                       return;
> @@ -3434,23 +3488,23 @@ AcpiDmDumpPmtt (
>   
>                   /* Point to next DIMM subtable */
>   
> -                DimmOffset += DimmSubTable->Length;
> -                DimmSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
> -                    DimmSubTable, DimmSubTable->Length);
> +                DimmOffset += DimmSubtable->Length;
> +                DimmSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
> +                    DimmSubtable, DimmSubtable->Length);
>               }
>   
>               /* Point to next Controller subtable */
>   
> -            MemOffset += MemSubTable->Length;
> -            MemSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
> -                MemSubTable, MemSubTable->Length);
> +            MemOffset += MemSubtable->Length;
> +            MemSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
> +                MemSubtable, MemSubtable->Length);
>           }
>   
>           /* Point to next Socket subtable */
>   
> -        Offset += SubTable->Length;
> -        SubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
> -            SubTable, SubTable->Length);
> +        Offset += Subtable->Length;
> +        Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
> +            Subtable, Subtable->Length);
>       }
>   }
>   
> @@ -3473,10 +3527,10 @@ AcpiDmDumpPptt (
>       ACPI_TABLE_HEADER       *Table)
>   {
>       ACPI_STATUS             Status;
> -    ACPI_SUBTABLE_HEADER    *SubTable;
> +    ACPI_SUBTABLE_HEADER    *Subtable;
>       ACPI_PPTT_PROCESSOR     *PpttProcessor;
>       UINT8                   Length;
> -    UINT8                   SubTableOffset;
> +    UINT8                   SubtableOffset;
>       UINT32                  Offset = sizeof (ACPI_TABLE_FPDT);
>       ACPI_DMTABLE_INFO       *InfoTable;
>       UINT32                  i;
> @@ -3493,20 +3547,20 @@ AcpiDmDumpPptt (
>   
>           /* Common subtable header */
>   
> -        SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
> -        if (SubTable->Length < sizeof (ACPI_SUBTABLE_HEADER))
> +        Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
> +        if (Subtable->Length < sizeof (ACPI_SUBTABLE_HEADER))
>           {
>               AcpiOsPrintf ("Invalid subtable length\n");
>               return;
>           }
> -        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
> -            SubTable->Length, AcpiDmTableInfoPpttHdr);
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
> +            Subtable->Length, AcpiDmTableInfoPpttHdr);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
>           }
>   
> -        switch (SubTable->Type)
> +        switch (Subtable->Type)
>           {
>           case ACPI_PPTT_TYPE_PROCESSOR:
>   
> @@ -3529,35 +3583,35 @@ AcpiDmDumpPptt (
>           default:
>   
>               AcpiOsPrintf ("\n**** Unknown PPTT subtable type 0x%X\n\n",
> -                SubTable->Type);
> +                Subtable->Type);
>   
>               /* Attempt to continue */
>   
> -            goto NextSubTable;
> +            goto NextSubtable;
>           }
>   
> -        if (SubTable->Length < Length)
> +        if (Subtable->Length < Length)
>           {
>               AcpiOsPrintf ("Invalid subtable length\n");
>               return;
>           }
> -        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
> -            SubTable->Length, InfoTable);
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
> +            Subtable->Length, InfoTable);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
>           }
> -        SubTableOffset = Length;
> +        SubtableOffset = Length;
>   
> -        switch (SubTable->Type)
> +        switch (Subtable->Type)
>           {
>           case ACPI_PPTT_TYPE_PROCESSOR:
>   
> -            PpttProcessor = ACPI_CAST_PTR (ACPI_PPTT_PROCESSOR, SubTable);
> +            PpttProcessor = ACPI_CAST_PTR (ACPI_PPTT_PROCESSOR, Subtable);
>   
>               /* Dump SMBIOS handles */
>   
> -            if ((UINT8)(SubTable->Length - SubTableOffset) <
> +            if ((UINT8)(Subtable->Length - SubtableOffset) <
>                   (UINT8)(PpttProcessor->NumberOfPrivResources * 4))
>               {
>                   AcpiOsPrintf ("Invalid private resource number\n");
> @@ -3565,10 +3619,10 @@ AcpiDmDumpPptt (
>               }
>               for (i = 0; i < PpttProcessor->NumberOfPrivResources; i++)
>               {
> -                Status = AcpiDmDumpTable (Table->Length, Offset + SubTableOffset,
> -                    ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, SubTable, SubTableOffset),
> +                Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
> +                    ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, SubtableOffset),
>                       4, AcpiDmTableInfoPptt0a);
> -                SubTableOffset += 4;
> +                SubtableOffset += 4;
>               }
>               break;
>   
> @@ -3577,10 +3631,10 @@ AcpiDmDumpPptt (
>               break;
>           }
>   
> -NextSubTable:
> +NextSubtable:
>           /* Point to next subtable */
>   
> -        Offset += SubTable->Length;
> +        Offset += Subtable->Length;
>       }
>   }
>   
> @@ -3603,7 +3657,7 @@ AcpiDmDumpS3pt (
>   {
>       ACPI_STATUS             Status;
>       UINT32                  Offset = sizeof (ACPI_TABLE_S3PT);
> -    ACPI_FPDT_HEADER        *SubTable;
> +    ACPI_FPDT_HEADER        *Subtable;
>       ACPI_DMTABLE_INFO       *InfoTable;
>       ACPI_TABLE_S3PT         *S3ptTable = ACPI_CAST_PTR (ACPI_TABLE_S3PT, Tables);
>   
> @@ -3616,20 +3670,20 @@ AcpiDmDumpS3pt (
>           return 0;
>       }
>   
> -    SubTable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, S3ptTable, Offset);
> +    Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, S3ptTable, Offset);
>       while (Offset < S3ptTable->Length)
>       {
>           /* Common subtable header */
>   
>           AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (S3ptTable->Length, Offset, SubTable,
> -            SubTable->Length, AcpiDmTableInfoS3ptHdr);
> +        Status = AcpiDmDumpTable (S3ptTable->Length, Offset, Subtable,
> +            Subtable->Length, AcpiDmTableInfoS3ptHdr);
>           if (ACPI_FAILURE (Status))
>           {
>               return 0;
>           }
>   
> -        switch (SubTable->Type)
> +        switch (Subtable->Type)
>           {
>           case ACPI_S3PT_TYPE_RESUME:
>   
> @@ -3644,37 +3698,205 @@ AcpiDmDumpS3pt (
>           default:
>   
>               AcpiOsPrintf ("\n**** Unknown S3PT subtable type 0x%X\n",
> -                SubTable->Type);
> +                Subtable->Type);
>   
>               /* Attempt to continue */
>   
> -            if (!SubTable->Length)
> +            if (!Subtable->Length)
>               {
>                   AcpiOsPrintf ("Invalid zero length subtable\n");
>                   return 0;
>               }
> -            goto NextSubTable;
> +            goto NextSubtable;
>           }
>   
>           AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (S3ptTable->Length, Offset, SubTable,
> -            SubTable->Length, InfoTable);
> +        Status = AcpiDmDumpTable (S3ptTable->Length, Offset, Subtable,
> +            Subtable->Length, InfoTable);
>           if (ACPI_FAILURE (Status))
>           {
>               return 0;
>           }
>   
> -NextSubTable:
> +NextSubtable:
>           /* Point to next subtable */
>   
> -        Offset += SubTable->Length;
> -        SubTable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, SubTable, SubTable->Length);
> +        Offset += Subtable->Length;
> +        Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Subtable, Subtable->Length);
>       }
>   
>       return (S3ptTable->Length);
>   }
>   
>   
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiDmDumpSdev
> + *
> + * PARAMETERS:  Table               - A SDEV table
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Format the contents of a SDEV. This is a variable-length
> + *              table that contains variable strings and vendor data.
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmDumpSdev (
> +    ACPI_TABLE_HEADER       *Table)
> +{
> +    ACPI_STATUS             Status;
> +    ACPI_SDEV_HEADER        *Subtable;
> +    ACPI_SDEV_PCIE          *Pcie;
> +    ACPI_SDEV_NAMESPACE     *Namesp;
> +    ACPI_DMTABLE_INFO       *InfoTable;
> +    UINT32                  Length = Table->Length;
> +    UINT32                  Offset = sizeof (ACPI_TABLE_SDEV);
> +    UINT16                  PathOffset;
> +    UINT16                  PathLength;
> +    UINT16                  VendorDataOffset;
> +    UINT16                  VendorDataLength;
> +
> +
> +    /* Main table */
> +
> +    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoSdev);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return;
> +    }
> +
> +    /* Subtables */
> +
> +    Subtable = ACPI_ADD_PTR (ACPI_SDEV_HEADER, Table, Offset);
> +    while (Offset < Table->Length)
> +    {
> +        /* Common subtable header */
> +
> +        AcpiOsPrintf ("\n");
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
> +            Subtable->Length, AcpiDmTableInfoSdevHdr);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return;
> +        }
> +
> +        switch (Subtable->Type)
> +        {
> +        case ACPI_SDEV_TYPE_NAMESPACE_DEVICE:
> +
> +            InfoTable = AcpiDmTableInfoSdev0;
> +            break;
> +
> +        case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE:
> +
> +            InfoTable = AcpiDmTableInfoSdev1;
> +            break;
> +
> +        default:
> +            goto NextSubtable;
> +        }
> +
> +        AcpiOsPrintf ("\n");
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
> +            Subtable->Length, InfoTable);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return;
> +        }
> +
> +        switch (Subtable->Type)
> +        {
> +        case ACPI_SDEV_TYPE_NAMESPACE_DEVICE:
> +
> +            /* Dump the PCIe device ID(s) */
> +
> +            Namesp = ACPI_CAST_PTR (ACPI_SDEV_NAMESPACE, Subtable);
> +            PathOffset = Namesp->DeviceIdOffset;
> +            PathLength = Namesp->DeviceIdLength;
> +
> +            if (PathLength)
> +            {
> +                Status = AcpiDmDumpTable (Table->Length, 0,
> +                    ACPI_ADD_PTR (UINT8, Namesp, PathOffset),
> +                    PathLength, AcpiDmTableInfoSdev0a);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return;
> +                }
> +            }
> +
> +            /* Dump the vendor-specific data */
> +
> +            VendorDataLength =
> +                Namesp->VendorDataLength;
> +            VendorDataOffset =
> +                Namesp->DeviceIdOffset + Namesp->DeviceIdLength;
> +
> +            if (VendorDataLength)
> +            {
> +                Status = AcpiDmDumpTable (Table->Length, 0,
> +                    ACPI_ADD_PTR (UINT8, Namesp, VendorDataOffset),
> +                    VendorDataLength, AcpiDmTableInfoSdev1b);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return;
> +                }
> +            }
> +            break;
> +
> +        case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE:
> +
> +            /* PCI path substructures */
> +
> +            Pcie = ACPI_CAST_PTR (ACPI_SDEV_PCIE, Subtable);
> +            PathOffset = Pcie->PathOffset;
> +            PathLength = Pcie->PathLength;
> +
> +            while (PathLength)
> +            {
> +                Status = AcpiDmDumpTable (Table->Length,
> +                    PathOffset + Offset,
> +                    ACPI_ADD_PTR (UINT8, Pcie, PathOffset),
> +                    sizeof (ACPI_SDEV_PCIE_PATH), AcpiDmTableInfoSdev1a);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return;
> +                }
> +
> +                PathOffset += sizeof (ACPI_SDEV_PCIE_PATH);
> +                PathLength -= sizeof (ACPI_SDEV_PCIE_PATH);
> +            }
> +
> +            /* VendorData */
> +
> +            VendorDataLength = Pcie->VendorDataLength;
> +            VendorDataOffset = Pcie->PathOffset + Pcie->PathLength;
> +
> +            if (VendorDataLength)
> +            {
> +                Status = AcpiDmDumpTable (Table->Length, 0,
> +                    ACPI_ADD_PTR (UINT8, Pcie, VendorDataOffset),
> +                    VendorDataLength, AcpiDmTableInfoSdev1b);
> +            }
> +            break;
> +
> +        default:
> +            goto NextSubtable;
> +        }
> +
> +NextSubtable:
> +        /* Point to next subtable */
> +
> +        Offset += Subtable->Length;
> +        Subtable = ACPI_ADD_PTR (ACPI_SDEV_HEADER, Subtable,
> +            Subtable->Length);
> +    }
> +}
> +
> +
>   /*******************************************************************************
>    *
>    * FUNCTION:    AcpiDmDumpSlic
> @@ -3794,7 +4016,7 @@ AcpiDmDumpSrat (
>   {
>       ACPI_STATUS             Status;
>       UINT32                  Offset = sizeof (ACPI_TABLE_SRAT);
> -    ACPI_SUBTABLE_HEADER    *SubTable;
> +    ACPI_SUBTABLE_HEADER    *Subtable;
>       ACPI_DMTABLE_INFO       *InfoTable;
>   
>   
> @@ -3808,20 +4030,20 @@ AcpiDmDumpSrat (
>   
>       /* Subtables */
>   
> -    SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
> +    Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
>       while (Offset < Table->Length)
>       {
>           /* Common subtable header */
>   
>           AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
> -            SubTable->Length, AcpiDmTableInfoSratHdr);
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
> +            Subtable->Length, AcpiDmTableInfoSratHdr);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
>           }
>   
> -        switch (SubTable->Type)
> +        switch (Subtable->Type)
>           {
>           case ACPI_SRAT_TYPE_CPU_AFFINITY:
>   
> @@ -3850,32 +4072,32 @@ AcpiDmDumpSrat (
>   
>           default:
>               AcpiOsPrintf ("\n**** Unknown SRAT subtable type 0x%X\n",
> -                SubTable->Type);
> +                Subtable->Type);
>   
>               /* Attempt to continue */
>   
> -            if (!SubTable->Length)
> +            if (!Subtable->Length)
>               {
>                   AcpiOsPrintf ("Invalid zero length subtable\n");
>                   return;
>               }
> -            goto NextSubTable;
> +            goto NextSubtable;
>           }
>   
>           AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
> -            SubTable->Length, InfoTable);
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
> +            Subtable->Length, InfoTable);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
>           }
>   
> -NextSubTable:
> +NextSubtable:
>           /* Point to next subtable */
>   
> -        Offset += SubTable->Length;
> -        SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, SubTable,
> -            SubTable->Length);
> +        Offset += Subtable->Length;
> +        Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable,
> +            Subtable->Length);
>       }
>   }
>   
> @@ -3954,7 +4176,7 @@ AcpiDmDumpTcpa (
>       UINT32                  Offset = sizeof (ACPI_TABLE_TCPA_HDR);
>       ACPI_TABLE_TCPA_HDR     *CommonHeader = ACPI_CAST_PTR (
>                                   ACPI_TABLE_TCPA_HDR, Table);
> -    ACPI_TABLE_TCPA_HDR     *SubTable = ACPI_ADD_PTR (
> +    ACPI_TABLE_TCPA_HDR     *Subtable = ACPI_ADD_PTR (
>                                   ACPI_TABLE_TCPA_HDR, Table, Offset);
>       ACPI_STATUS             Status;
>   
> @@ -3976,13 +4198,13 @@ AcpiDmDumpTcpa (
>       {
>       case ACPI_TCPA_CLIENT_TABLE:
>   
> -        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
>               Table->Length - Offset, AcpiDmTableInfoTcpaClient);
>           break;
>   
>       case ACPI_TCPA_SERVER_TABLE:
>   
> -        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
>               Table->Length - Offset, AcpiDmTableInfoTcpaServer);
>           break;
>   
> @@ -4001,6 +4223,64 @@ AcpiDmDumpTcpa (
>   }
>   
>   
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiDmDumpTpm2
> + *
> + * PARAMETERS:  Table               - A TPM2 table
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Format the contents of a TPM2.
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmDumpTpm2 (
> +    ACPI_TABLE_HEADER       *Table)
> +{
> +    UINT32                  Offset = sizeof (ACPI_TABLE_TPM2);
> +    ACPI_TABLE_TPM2         *CommonHeader = ACPI_CAST_PTR (ACPI_TABLE_TPM2, Table);
> +    ACPI_TPM2_TRAILER       *Subtable = ACPI_ADD_PTR (ACPI_TPM2_TRAILER, Table, Offset);
> +    ACPI_TPM2_ARM_SMC       *ArmSubtable;
> +    ACPI_STATUS             Status;
> +
> +
> +    /* Main table */
> +
> +    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoTpm2);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return;
> +    }
> +
> +    AcpiOsPrintf ("\n");
> +    Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
> +        Table->Length - Offset, AcpiDmTableInfoTpm2a);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return;
> +    }
> +
> +    switch (CommonHeader->StartMethod)
> +    {
> +    case ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC:
> +
> +        ArmSubtable = ACPI_ADD_PTR (ACPI_TPM2_ARM_SMC, Subtable,
> +            sizeof (ACPI_TPM2_TRAILER));
> +        Offset += sizeof (ACPI_TPM2_TRAILER);
> +
> +        AcpiOsPrintf ("\n");
> +        Status = AcpiDmDumpTable (Table->Length, Offset, ArmSubtable,
> +            Table->Length - Offset, AcpiDmTableInfoTpm211);
> +        break;
> +
> +    default:
> +        break;
> +    }
> +}
> +
> +
>   /*******************************************************************************
>    *
>    * FUNCTION:    AcpiDmDumpVrtc
> @@ -4019,7 +4299,7 @@ AcpiDmDumpVrtc (
>   {
>       ACPI_STATUS             Status;
>       UINT32                  Offset = sizeof (ACPI_TABLE_VRTC);
> -    ACPI_VRTC_ENTRY         *SubTable;
> +    ACPI_VRTC_ENTRY         *Subtable;
>   
>   
>       /* Main table */
> @@ -4032,13 +4312,13 @@ AcpiDmDumpVrtc (
>   
>       /* Subtables */
>   
> -    SubTable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, Table, Offset);
> +    Subtable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, Table, Offset);
>       while (Offset < Table->Length)
>       {
>           /* Common subtable header */
>   
>           AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
>               sizeof (ACPI_VRTC_ENTRY), AcpiDmTableInfoVrtc0);
>           if (ACPI_FAILURE (Status))
>           {
> @@ -4048,7 +4328,7 @@ AcpiDmDumpVrtc (
>           /* Point to next subtable */
>   
>           Offset += sizeof (ACPI_VRTC_ENTRY);
> -        SubTable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, SubTable,
> +        Subtable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, Subtable,
>               sizeof (ACPI_VRTC_ENTRY));
>       }
>   }
> @@ -4072,7 +4352,7 @@ AcpiDmDumpWdat (
>   {
>       ACPI_STATUS             Status;
>       UINT32                  Offset = sizeof (ACPI_TABLE_WDAT);
> -    ACPI_WDAT_ENTRY         *SubTable;
> +    ACPI_WDAT_ENTRY         *Subtable;
>   
>   
>       /* Main table */
> @@ -4085,13 +4365,13 @@ AcpiDmDumpWdat (
>   
>       /* Subtables */
>   
> -    SubTable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Table, Offset);
> +    Subtable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Table, Offset);
>       while (Offset < Table->Length)
>       {
>           /* Common subtable header */
>   
>           AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
>               sizeof (ACPI_WDAT_ENTRY), AcpiDmTableInfoWdat0);
>           if (ACPI_FAILURE (Status))
>           {
> @@ -4101,7 +4381,7 @@ AcpiDmDumpWdat (
>           /* Point to next subtable */
>   
>           Offset += sizeof (ACPI_WDAT_ENTRY);
> -        SubTable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, SubTable,
> +        Subtable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Subtable,
>               sizeof (ACPI_WDAT_ENTRY));
>       }
>   }
> @@ -4125,7 +4405,7 @@ AcpiDmDumpWpbt (
>       ACPI_TABLE_HEADER       *Table)
>   {
>       ACPI_STATUS             Status;
> -    ACPI_TABLE_WPBT         *SubTable;
> +    ACPI_TABLE_WPBT         *Subtable;
>       UINT32                  Length = Table->Length;
>       UINT16                  ArgumentsLength;
>   
> @@ -4140,8 +4420,8 @@ AcpiDmDumpWpbt (
>   
>       /* Extract the arguments buffer length from the main table */
>   
> -    SubTable = ACPI_CAST_PTR (ACPI_TABLE_WPBT, Table);
> -    ArgumentsLength = SubTable->ArgumentsLength;
> +    Subtable = ACPI_CAST_PTR (ACPI_TABLE_WPBT, Table);
> +    ArgumentsLength = Subtable->ArgumentsLength;
>   
>       /* Dump the arguments buffer */
>   
> diff --git a/src/acpica/source/common/dmtbinfo.c b/src/acpica/source/common/dmtbinfo.c
> index 5180b4db..ad546e8a 100644
> --- a/src/acpica/source/common/dmtbinfo.c
> +++ b/src/acpica/source/common/dmtbinfo.c
> @@ -214,11 +214,13 @@
>   #define ACPI_MSCT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_MSCT,f)
>   #define ACPI_NFIT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_NFIT,f)
>   #define ACPI_PCCT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_PCCT,f)
> +#define ACPI_PDTT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_PDTT,f)
>   #define ACPI_PMTT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_PMTT,f)
>   #define ACPI_RASF_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_RASF,f)
>   #define ACPI_S3PT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_S3PT,f)
>   #define ACPI_SBST_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SBST,f)
>   #define ACPI_SDEI_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SDEI,f)
> +#define ACPI_SDEV_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SDEV,f)
>   #define ACPI_SLIT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SLIT,f)
>   #define ACPI_SPCR_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SPCR,f)
>   #define ACPI_SPMI_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SPMI,f)
> @@ -339,6 +341,7 @@
>   #define ACPI_PCCT2_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PCCT_HW_REDUCED_TYPE2,f)
>   #define ACPI_PCCT3_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PCCT_EXT_PCC_MASTER,f)
>   #define ACPI_PCCT4_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PCCT_EXT_PCC_SLAVE,f)
> +#define ACPI_PDTT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PDTT_CHANNEL,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)
>   #define ACPI_PMTT1A_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_PMTT_DOMAIN,f)
> @@ -351,6 +354,10 @@
>   #define ACPI_S3PTH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_FPDT_HEADER,f)
>   #define ACPI_S3PT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_S3PT_RESUME,f)
>   #define ACPI_S3PT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_S3PT_SUSPEND,f)
> +#define ACPI_SDEVH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_SDEV_HEADER,f)
> +#define ACPI_SDEV0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_SDEV_NAMESPACE,f)
> +#define ACPI_SDEV1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_SDEV_PCIE,f)
> +#define ACPI_SDEV1A_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_SDEV_PCIE_PATH,f)
>   #define ACPI_SLIC_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SLIC,f)
>   #define ACPI_SRATH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_SUBTABLE_HEADER,f)
>   #define ACPI_SRAT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_SRAT_CPU_AFFINITY,f)
> @@ -360,6 +367,8 @@
>   #define ACPI_SRAT4_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_SRAT_GIC_ITS_AFFINITY,f)
>   #define ACPI_TCPA_CLIENT_OFFSET(f)      (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_CLIENT,f)
>   #define ACPI_TCPA_SERVER_OFFSET(f)      (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_SERVER,f)
> +#define ACPI_TPM2A_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_TPM2_TRAILER,f)
> +#define ACPI_TPM211_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_TPM2_ARM_SMC,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)
>   
> @@ -415,7 +424,9 @@
>   #define ACPI_PCCT2_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_PCCT_HW_REDUCED_TYPE2,f,o)
>   #define ACPI_PCCT3_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_PCCT_EXT_PCC_MASTER,f,o)
>   #define ACPI_PCCT4_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_PCCT_EXT_PCC_SLAVE,f,o)
> +#define ACPI_PDTT0_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_PDTT_CHANNEL,f,o)
>   #define ACPI_PMTTH_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_PMTT_HEADER,f,o)
> +#define ACPI_SDEVH_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_SDEV_HEADER,f,o)
>   #define ACPI_WDDT_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_WDDT,f,o)
>   #define ACPI_WSMT_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_WSMT,f,o)
>   #define ACPI_EINJ0_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_WHEA_HEADER,f,o)
> @@ -896,7 +907,6 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoCsrt1[] =
>       ACPI_DMT_TERMINATOR
>   };
>   
> -
>   /* Resource Descriptor subtable */
>   
>   ACPI_DMTABLE_INFO           AcpiDmTableInfoCsrt2[] =
> @@ -1260,6 +1270,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoFpdt1[] =
>       {ACPI_DMT_UINT64,   ACPI_FPDT0_OFFSET (ExitServicesExit),       "Exit Services Exit", 0},
>   #endif
>   
> +
>   /*******************************************************************************
>    *
>    * GTDT - Generic Timer Description Table
> @@ -1853,6 +1864,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoIort4[] =
>       ACPI_DMT_TERMINATOR
>   };
>   
> +
>   /*******************************************************************************
>    *
>    * IVRS - I/O Virtualization Reporting Structure
> @@ -2219,6 +2231,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoMadt15[] =
>      ACPI_DMT_TERMINATOR
>   };
>   
> +
>   /*******************************************************************************
>    *
>    * MCFG - PCI Memory Mapped Configuration table and Subtable
> @@ -2696,6 +2709,31 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoPcct4[] =
>       ACPI_DMT_TERMINATOR
>   };
>   
> +
> +/*******************************************************************************
> + *
> + * PDTT - Platform Debug Trigger Table (ACPI 6.2)
> + *
> + ******************************************************************************/
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoPdtt[] =
> +{
> +    {ACPI_DMT_UINT8,    ACPI_PDTT_OFFSET (TriggerCount),            "Trigger Count", 0},
> +    {ACPI_DMT_UINT24,   ACPI_PDTT_OFFSET (Reserved),                "Reserved", 0},
> +    {ACPI_DMT_UINT32,   ACPI_PDTT_OFFSET (ArrayOffset),             "Array Offset", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoPdtt0[] =
> +{
> +    {ACPI_DMT_UINT8,    ACPI_PDTT0_OFFSET (SubchannelId),           "Subchannel Id", 0},
> +    {ACPI_DMT_UINT8,    ACPI_PDTT0_OFFSET (Flags),                  "Flags (Decoded Below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_PDTT0_FLAG_OFFSET (Flags,0),           "Runtime Trigger", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_PDTT0_FLAG_OFFSET (Flags,0),           "Wait for Completion", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +
>   /*******************************************************************************
>    *
>    * PMTT - Platform Memory Topology Table
> @@ -2768,16 +2806,6 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoPmtt2[] =
>       ACPI_DMT_TERMINATOR
>   };
>   
> -/*******************************************************************************
> - *
> - * SDEI - Software Delegated Execption Interface Descriptor Table
> - *
> - ******************************************************************************/
> -
> -ACPI_DMTABLE_INFO           AcpiDmTableInfoSdei[] =
> -{
> -    ACPI_DMT_TERMINATOR
> -};
>   
>   /*******************************************************************************
>    *
> @@ -2801,7 +2829,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoPpttHdr[] =
>   ACPI_DMTABLE_INFO           AcpiDmTableInfoPptt0[] =
>   {
>       {ACPI_DMT_UINT16,   ACPI_PPTT0_OFFSET (Reserved),               "Reserved", 0},
> -    {ACPI_DMT_UINT32,   ACPI_PPTT0_OFFSET (Flags),                  "Flags", 0},
> +    {ACPI_DMT_UINT32,   ACPI_PPTT0_OFFSET (Flags),                  "Flags (decoded below)", 0},
>       {ACPI_DMT_FLAG0,    ACPI_PPTT0_FLAG_OFFSET (Flags,0),           "Physical package", 0},
>       {ACPI_DMT_FLAG1,    ACPI_PPTT0_FLAG_OFFSET (Flags,0),           "ACPI Processor ID valid", 0},
>       {ACPI_DMT_UINT32,   ACPI_PPTT0_OFFSET (Parent),                 "Parent", 0},
> @@ -2821,7 +2849,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoPptt0a[] =
>   ACPI_DMTABLE_INFO           AcpiDmTableInfoPptt1[] =
>   {
>       {ACPI_DMT_UINT16,   ACPI_PPTT1_OFFSET (Reserved),               "Reserved", 0},
> -    {ACPI_DMT_UINT32,   ACPI_PPTT1_OFFSET (Flags),                  "Flags", 0},
> +    {ACPI_DMT_UINT32,   ACPI_PPTT1_OFFSET (Flags),                  "Flags (decoded below)", 0},
>       {ACPI_DMT_FLAG0,    ACPI_PPTT1_FLAG_OFFSET (Flags,0),           "Size valid", 0},
>       {ACPI_DMT_FLAG1,    ACPI_PPTT1_FLAG_OFFSET (Flags,0),           "Number of Sets valid", 0},
>       {ACPI_DMT_FLAG2,    ACPI_PPTT1_FLAG_OFFSET (Flags,0),           "Associativity valid", 0},
> @@ -2855,6 +2883,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoPptt2[] =
>       ACPI_DMT_TERMINATOR
>   };
>   
> +
>   /*******************************************************************************
>    *
>    * RASF -  RAS Feature table
> @@ -2867,6 +2896,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoRasf[] =
>       ACPI_DMT_TERMINATOR
>   };
>   
> +
>   /*******************************************************************************
>    *
>    * S3PT - S3 Performance Table
> @@ -2925,6 +2955,86 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoSbst[] =
>   };
>   
>   
> +/*******************************************************************************
> + *
> + * SDEI - Software Delegated Execption Interface Descriptor Table
> + *
> + ******************************************************************************/
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoSdei[] =
> +{
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +
> +/*******************************************************************************
> + *
> + * SDEV - Secure Devices Table (ACPI 6.2)
> + *
> + ******************************************************************************/
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoSdev[] =
> +{
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* Common Subtable header (one per Subtable) */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoSdevHdr[] =
> +{
> +    {ACPI_DMT_SDEV,     ACPI_SDEVH_OFFSET (Type),                   "Subtable Type", 0},
> +    {ACPI_DMT_UINT8,    ACPI_SDEVH_OFFSET (Flags),                  "Flags (decoded below)", 0},
> +    {ACPI_DMT_FLAG0,    ACPI_SDEVH_FLAG_OFFSET (Flags,0),           "Allow handoff to unsecure OS", 0},
> +    {ACPI_DMT_UINT16,   ACPI_SDEVH_OFFSET (Length),                 "Length", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* SDEV Subtables */
> +
> +/* 0: Namespace Device Based Secure Device Structure */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoSdev0[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_SDEV0_OFFSET (DeviceIdOffset),         "Device ID Offset", 0},
> +    {ACPI_DMT_UINT16,   ACPI_SDEV0_OFFSET (DeviceIdLength),         "Device ID Length", 0},
> +    {ACPI_DMT_UINT16,   ACPI_SDEV0_OFFSET (VendorDataOffset),       "Vendor Data Offset", 0},
> +    {ACPI_DMT_UINT16,   ACPI_SDEV0_OFFSET (VendorDataLength),       "Vendor Data Length", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoSdev0a[] =
> +{
> +    {ACPI_DMT_STRING,   0,                                          "Namepath", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 1: PCIe Endpoint Device Based Device Structure */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoSdev1[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_SDEV1_OFFSET (Segment),                "Segment", 0},
> +    {ACPI_DMT_UINT16,   ACPI_SDEV1_OFFSET (StartBus),               "Start Bus", 0},
> +    {ACPI_DMT_UINT16,   ACPI_SDEV1_OFFSET (PathOffset),             "Path Offset", 0},
> +    {ACPI_DMT_UINT16,   ACPI_SDEV1_OFFSET (PathLength),             "Path Length", 0},
> +    {ACPI_DMT_UINT16,   ACPI_SDEV1_OFFSET (VendorDataOffset),       "Vendor Data Offset", 0},
> +    {ACPI_DMT_UINT16,   ACPI_SDEV1_OFFSET (VendorDataLength),       "Vendor Data Length", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoSdev1a[] =
> +{
> +    {ACPI_DMT_UINT8,    ACPI_SDEV1A_OFFSET (Device),                "Device", 0},
> +    {ACPI_DMT_UINT8,    ACPI_SDEV1A_OFFSET (Function),              "Function", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoSdev1b[] =
> +{
> +    {ACPI_DMT_RAW_BUFFER, 0,                                        "Vendor Data", 0}, /*, DT_OPTIONAL}, */
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +
>   /*******************************************************************************
>    *
>    * SLIC - Software Licensing Description Table. This table contains the standard
> @@ -3186,7 +3296,29 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoTpm2[] =
>       {ACPI_DMT_UINT16,   ACPI_TPM2_OFFSET (PlatformClass),           "Platform Class", 0},
>       {ACPI_DMT_UINT16,   ACPI_TPM2_OFFSET (Reserved),                "Reserved", 0},
>       {ACPI_DMT_UINT64,   ACPI_TPM2_OFFSET (ControlAddress),          "Control Address", 0},
> -    {ACPI_DMT_UINT32,   ACPI_TPM2_OFFSET (StartMethod),             "Start Method", 0},
> +    {ACPI_DMT_TPM2,     ACPI_TPM2_OFFSET (StartMethod),             "Start Method", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* Optional trailer. LogLength and LogAddress are additionally optional */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoTpm2a[] =
> +{
> +    {ACPI_DMT_BUF12,    ACPI_TPM2A_OFFSET (MethodParameters),       "Method Parameters", DT_OPTIONAL},
> +    {ACPI_DMT_UINT32,   ACPI_TPM2A_OFFSET (MinimumLogLength),       "Minimum Log Length", DT_OPTIONAL},
> +    {ACPI_DMT_UINT64,   ACPI_TPM2A_OFFSET (LogAddress),             "Log Address", DT_OPTIONAL},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 11: Start Method for ARM SMC */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoTpm211[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_TPM211_OFFSET (GlobalInterrupt),       "Global Interrupt", 0},
> +    {ACPI_DMT_UINT8,    ACPI_TPM211_OFFSET (InterruptFlags),        "Interrupt Flags", 0},
> +    {ACPI_DMT_UINT8,    ACPI_TPM211_OFFSET (OperationFlags),        "Operation Flags", 0},
> +    {ACPI_DMT_UINT16,   ACPI_TPM211_OFFSET (Reserved),              "Reserved", 0},
> +    {ACPI_DMT_UINT32,   ACPI_TPM211_OFFSET (FunctionId),            "Function ID", 0},
>       ACPI_DMT_TERMINATOR
>   };
>   
> diff --git a/src/acpica/source/compiler/Makefile.am b/src/acpica/source/compiler/Makefile.am
> index 5c0e75d2..634daf25 100644
> --- a/src/acpica/source/compiler/Makefile.am
> +++ b/src/acpica/source/compiler/Makefile.am
> @@ -77,8 +77,10 @@ CLEANFILES = y.output y.tab.c y.tab.h aslcompiler.y.h $(BUILT_SOURCES)
>   libfwtsiasl_la_CPPFLAGS = $(AM_CPPFLAGS)
>   libfwtsiasl_la_SOURCES = 			\
>   	fwts_iasl_interface.c 			\
> +	aslallocate.c				\
>   	aslanalyze.c 				\
>   	aslascii.c				\
> +	aslcache.c				\
>   	aslcompile.c 				\
>   	aslcompilerlex.c 			\
>   	aslcompiler.c 				\
> diff --git a/src/acpica/source/compiler/aslallocate.c b/src/acpica/source/compiler/aslallocate.c
> new file mode 100644
> index 00000000..e9898dff
> --- /dev/null
> +++ b/src/acpica/source/compiler/aslallocate.c
> @@ -0,0 +1,303 @@
> +/******************************************************************************
> + *
> + * Module Name: aslallocate -- Local memory allocation
> + *
> + *****************************************************************************/
> +
> +/******************************************************************************
> + *
> + * 1. Copyright Notice
> + *
> + * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp.
> + * All rights reserved.
> + *
> + * 2. License
> + *
> + * 2.1. This is your license from Intel Corp. under its intellectual property
> + * rights. You may have additional license terms from the party that provided
> + * you this software, covering your right to use that party's intellectual
> + * property rights.
> + *
> + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
> + * copy of the source code appearing in this file ("Covered Code") an
> + * irrevocable, perpetual, worldwide license under Intel's copyrights in the
> + * base code distributed originally by Intel ("Original Intel Code") to copy,
> + * make derivatives, distribute, use and display any portion of the Covered
> + * Code in any form, with the right to sublicense such rights; and
> + *
> + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
> + * license (with the right to sublicense), under only those claims of Intel
> + * patents that are infringed by the Original Intel Code, to make, use, sell,
> + * offer to sell, and import the Covered Code and derivative works thereof
> + * solely to the minimum extent necessary to exercise the above copyright
> + * license, and in no event shall the patent license extend to any additions
> + * to or modifications of the Original Intel Code. No other license or right
> + * is granted directly or by implication, estoppel or otherwise;
> + *
> + * The above copyright and patent license is granted only if the following
> + * conditions are met:
> + *
> + * 3. Conditions
> + *
> + * 3.1. Redistribution of Source with Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification with rights to further distribute source must include
> + * the above Copyright Notice, the above License, this list of Conditions,
> + * and the following Disclaimer and Export Compliance provision. In addition,
> + * Licensee must cause all Covered Code to which Licensee contributes to
> + * contain a file documenting the changes Licensee made to create that Covered
> + * Code and the date of any change. Licensee must include in that file the
> + * documentation of any changes made by any predecessor Licensee. Licensee
> + * must include a prominent statement that the modification is derived,
> + * directly or indirectly, from Original Intel Code.
> + *
> + * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification without rights to further distribute source must
> + * include the following Disclaimer and Export Compliance provision in the
> + * documentation and/or other materials provided with distribution. In
> + * addition, Licensee may not authorize further sublicense of source of any
> + * portion of the Covered Code, and must include terms to the effect that the
> + * license from Licensee to its licensee is limited to the intellectual
> + * property embodied in the software Licensee provides to its licensee, and
> + * not to intellectual property embodied in modifications its licensee may
> + * make.
> + *
> + * 3.3. Redistribution of Executable. Redistribution in executable form of any
> + * substantial portion of the Covered Code or modification must reproduce the
> + * above Copyright Notice, and the following Disclaimer and Export Compliance
> + * provision in the documentation and/or other materials provided with the
> + * distribution.
> + *
> + * 3.4. Intel retains all right, title, and interest in and to the Original
> + * Intel Code.
> + *
> + * 3.5. Neither the name Intel nor any other trademark owned or controlled by
> + * Intel shall be used in advertising or otherwise to promote the sale, use or
> + * other dealings in products derived from or relating to the Covered Code
> + * without prior written authorization from Intel.
> + *
> + * 4. Disclaimer and Export Compliance
> + *
> + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
> + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
> + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
> + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
> + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
> + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
> + * PARTICULAR PURPOSE.
> + *
> + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
> + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
> + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
> + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
> + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
> + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
> + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
> + * LIMITED REMEDY.
> + *
> + * 4.3. Licensee shall not export, either directly or indirectly, any of this
> + * software or system incorporating such software without first obtaining any
> + * required license or other approval from the U. S. Department of Commerce or
> + * any other agency or department of the United States Government. In the
> + * event Licensee exports any such software from the United States or
> + * re-exports any such software from a foreign destination, Licensee shall
> + * ensure that the distribution and export/re-export of the software is in
> + * compliance with all laws, regulations, orders, or other restrictions of the
> + * U.S. Export Administration Regulations. Licensee agrees that neither it nor
> + * any of its subsidiaries will export/re-export any technical data, process,
> + * software, or service, directly or indirectly, to any country for which the
> + * United States government or any agency thereof requires an export license,
> + * other governmental approval, or letter of assurance, without first obtaining
> + * such license, approval or letter.
> + *
> + *****************************************************************************
> + *
> + * Alternatively, you may choose to be licensed under the terms of the
> + * following license:
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + *    notice, this list of conditions, and the following disclaimer,
> + *    without modification.
> + * 2. Redistributions in binary form must reproduce at minimum a disclaimer
> + *    substantially similar to the "NO WARRANTY" disclaimer below
> + *    ("Disclaimer") and any redistribution must be conditioned upon
> + *    including a substantially similar Disclaimer requirement for further
> + *    binary redistribution.
> + * 3. Neither the names of the above-listed copyright holders nor the names
> + *    of any contributors may be used to endorse or promote products derived
> + *    from this software without specific prior written permission.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
> + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
> + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
> + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
> + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
> + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> + *
> + * Alternatively, you may choose to be licensed under the terms of the
> + * GNU General Public License ("GPL") version 2 as published by the Free
> + * Software Foundation.
> + *
> + *****************************************************************************/
> +
> +#include "aslcompiler.h"
> +
> +/*
> + * Local heap allocation wrappers. See aslcache.c for allocation from local
> + * cache alloctions
> + */
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    UtLocalCalloc
> + *
> + * PARAMETERS:  Size                - Bytes to be allocated
> + *
> + * RETURN:      Pointer to the allocated memory. If this function returns
> + *              (the compiler is not aborted), the pointer is guaranteed to
> + *              be valid.
> + *
> + * DESCRIPTION: Allocate zero-initialized memory. The point of this function
> + *              is to abort the compile on an allocation failure, on the
> + *              assumption that nothing more can be accomplished.
> + *
> + * NOTE:        For allocation from the local caches, see aslcache.c
> + *
> + ******************************************************************************/
> +
> +void *
> +UtLocalCalloc (
> +    UINT32                  Size)
> +{
> +    void                    *Allocated;
> +
> +
> +    Allocated = ACPI_ALLOCATE_ZEROED (Size);
> +    if (!Allocated)
> +    {
> +        AslCommonError (ASL_ERROR, ASL_MSG_MEMORY_ALLOCATION,
> +            Gbl_CurrentLineNumber, Gbl_LogicalLineNumber,
> +            Gbl_InputByteCount, Gbl_CurrentColumn,
> +            Gbl_Files[ASL_FILE_INPUT].Filename, NULL);
> +
> +        CmCleanupAndExit ();
> +        exit (1);
> +    }
> +
> +    TotalAllocations++;
> +    TotalAllocated += Size;
> +    return (Allocated);
> +}
> +
> +
> +/******************************************************************************
> + *
> + * FUNCTION:    UtExpandLineBuffers
> + *
> + * PARAMETERS:  None. Updates global line buffer pointers.
> + *
> + * RETURN:      None. Reallocates the global line buffers
> + *
> + * DESCRIPTION: Called if the current line buffer becomes filled. Reallocates
> + *              all global line buffers and updates Gbl_LineBufferSize. NOTE:
> + *              Also used for the initial allocation of the buffers, when
> + *              all of the buffer pointers are NULL. Initial allocations are
> + *              of size ASL_DEFAULT_LINE_BUFFER_SIZE
> + *
> + *****************************************************************************/
> +
> +void
> +UtExpandLineBuffers (
> +    void)
> +{
> +    UINT32                  NewSize;
> +
> +
> +    /* Attempt to double the size of all line buffers */
> +
> +    NewSize = Gbl_LineBufferSize * 2;
> +    if (Gbl_CurrentLineBuffer)
> +    {
> +        DbgPrint (ASL_DEBUG_OUTPUT,
> +            "Increasing line buffer size from %u to %u\n",
> +            Gbl_LineBufferSize, NewSize);
> +    }
> +
> +    UtReallocLineBuffers (&Gbl_CurrentLineBuffer, Gbl_LineBufferSize, NewSize);
> +    UtReallocLineBuffers (&Gbl_MainTokenBuffer, Gbl_LineBufferSize, NewSize);
> +    UtReallocLineBuffers (&Gbl_MacroTokenBuffer, Gbl_LineBufferSize, NewSize);
> +    UtReallocLineBuffers (&Gbl_ExpressionTokenBuffer, Gbl_LineBufferSize, NewSize);
> +
> +    Gbl_LineBufPtr = Gbl_CurrentLineBuffer;
> +    Gbl_LineBufferSize = NewSize;
> +}
> +
> +
> +/******************************************************************************
> + *
> + * FUNCTION:    UtReallocLineBuffers
> + *
> + * PARAMETERS:  Buffer              - Buffer to realloc
> + *              OldSize             - Old size of Buffer
> + *              NewSize             - New size of Buffer
> + *
> + * RETURN:      none
> + *
> + * DESCRIPTION: Reallocate and initialize Buffer
> + *
> + *****************************************************************************/
> +
> +void
> +UtReallocLineBuffers (
> +    char                    **Buffer,
> +    UINT32                  OldSize,
> +    UINT32                  NewSize)
> +{
> +
> +    *Buffer = realloc (*Buffer, NewSize);
> +    if (*Buffer)
> +    {
> +        memset (*Buffer + OldSize, 0, NewSize - OldSize);
> +        return;
> +    }
> +
> +    printf ("Could not increase line buffer size from %u to %u\n",
> +        OldSize, NewSize);
> +
> +    AslError (ASL_ERROR, ASL_MSG_BUFFER_ALLOCATION, NULL, NULL);
> +    AslAbort ();
> +}
> +
> +
> +/******************************************************************************
> + *
> + * FUNCTION:    UtFreeLineBuffers
> + *
> + * PARAMETERS:  None
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Free all line buffers
> + *
> + *****************************************************************************/
> +
> +void
> +UtFreeLineBuffers (
> +    void)
> +{
> +
> +    free (Gbl_CurrentLineBuffer);
> +    free (Gbl_MainTokenBuffer);
> +    free (Gbl_MacroTokenBuffer);
> +    free (Gbl_ExpressionTokenBuffer);
> +}
> diff --git a/src/acpica/source/compiler/aslcache.c b/src/acpica/source/compiler/aslcache.c
> new file mode 100644
> index 00000000..41543950
> --- /dev/null
> +++ b/src/acpica/source/compiler/aslcache.c
> @@ -0,0 +1,481 @@
> +/******************************************************************************
> + *
> + * Module Name: aslcache -- Local cache support for iASL
> + *
> + *****************************************************************************/
> +
> +/******************************************************************************
> + *
> + * 1. Copyright Notice
> + *
> + * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp.
> + * All rights reserved.
> + *
> + * 2. License
> + *
> + * 2.1. This is your license from Intel Corp. under its intellectual property
> + * rights. You may have additional license terms from the party that provided
> + * you this software, covering your right to use that party's intellectual
> + * property rights.
> + *
> + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
> + * copy of the source code appearing in this file ("Covered Code") an
> + * irrevocable, perpetual, worldwide license under Intel's copyrights in the
> + * base code distributed originally by Intel ("Original Intel Code") to copy,
> + * make derivatives, distribute, use and display any portion of the Covered
> + * Code in any form, with the right to sublicense such rights; and
> + *
> + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
> + * license (with the right to sublicense), under only those claims of Intel
> + * patents that are infringed by the Original Intel Code, to make, use, sell,
> + * offer to sell, and import the Covered Code and derivative works thereof
> + * solely to the minimum extent necessary to exercise the above copyright
> + * license, and in no event shall the patent license extend to any additions
> + * to or modifications of the Original Intel Code. No other license or right
> + * is granted directly or by implication, estoppel or otherwise;
> + *
> + * The above copyright and patent license is granted only if the following
> + * conditions are met:
> + *
> + * 3. Conditions
> + *
> + * 3.1. Redistribution of Source with Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification with rights to further distribute source must include
> + * the above Copyright Notice, the above License, this list of Conditions,
> + * and the following Disclaimer and Export Compliance provision. In addition,
> + * Licensee must cause all Covered Code to which Licensee contributes to
> + * contain a file documenting the changes Licensee made to create that Covered
> + * Code and the date of any change. Licensee must include in that file the
> + * documentation of any changes made by any predecessor Licensee. Licensee
> + * must include a prominent statement that the modification is derived,
> + * directly or indirectly, from Original Intel Code.
> + *
> + * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification without rights to further distribute source must
> + * include the following Disclaimer and Export Compliance provision in the
> + * documentation and/or other materials provided with distribution. In
> + * addition, Licensee may not authorize further sublicense of source of any
> + * portion of the Covered Code, and must include terms to the effect that the
> + * license from Licensee to its licensee is limited to the intellectual
> + * property embodied in the software Licensee provides to its licensee, and
> + * not to intellectual property embodied in modifications its licensee may
> + * make.
> + *
> + * 3.3. Redistribution of Executable. Redistribution in executable form of any
> + * substantial portion of the Covered Code or modification must reproduce the
> + * above Copyright Notice, and the following Disclaimer and Export Compliance
> + * provision in the documentation and/or other materials provided with the
> + * distribution.
> + *
> + * 3.4. Intel retains all right, title, and interest in and to the Original
> + * Intel Code.
> + *
> + * 3.5. Neither the name Intel nor any other trademark owned or controlled by
> + * Intel shall be used in advertising or otherwise to promote the sale, use or
> + * other dealings in products derived from or relating to the Covered Code
> + * without prior written authorization from Intel.
> + *
> + * 4. Disclaimer and Export Compliance
> + *
> + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
> + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
> + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
> + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
> + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
> + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
> + * PARTICULAR PURPOSE.
> + *
> + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
> + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
> + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
> + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
> + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
> + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
> + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
> + * LIMITED REMEDY.
> + *
> + * 4.3. Licensee shall not export, either directly or indirectly, any of this
> + * software or system incorporating such software without first obtaining any
> + * required license or other approval from the U. S. Department of Commerce or
> + * any other agency or department of the United States Government. In the
> + * event Licensee exports any such software from the United States or
> + * re-exports any such software from a foreign destination, Licensee shall
> + * ensure that the distribution and export/re-export of the software is in
> + * compliance with all laws, regulations, orders, or other restrictions of the
> + * U.S. Export Administration Regulations. Licensee agrees that neither it nor
> + * any of its subsidiaries will export/re-export any technical data, process,
> + * software, or service, directly or indirectly, to any country for which the
> + * United States government or any agency thereof requires an export license,
> + * other governmental approval, or letter of assurance, without first obtaining
> + * such license, approval or letter.
> + *
> + *****************************************************************************
> + *
> + * Alternatively, you may choose to be licensed under the terms of the
> + * following license:
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + *    notice, this list of conditions, and the following disclaimer,
> + *    without modification.
> + * 2. Redistributions in binary form must reproduce at minimum a disclaimer
> + *    substantially similar to the "NO WARRANTY" disclaimer below
> + *    ("Disclaimer") and any redistribution must be conditioned upon
> + *    including a substantially similar Disclaimer requirement for further
> + *    binary redistribution.
> + * 3. Neither the names of the above-listed copyright holders nor the names
> + *    of any contributors may be used to endorse or promote products derived
> + *    from this software without specific prior written permission.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
> + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
> + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
> + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
> + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
> + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> + *
> + * Alternatively, you may choose to be licensed under the terms of the
> + * GNU General Public License ("GPL") version 2 as published by the Free
> + * Software Foundation.
> + *
> + *****************************************************************************/
> +
> +#include "aslcompiler.h"
> +
> +/*
> + * Local caches. The caches are fully deleted after the compilation/disassembly
> + * of each individual input file. Thus, individual allocations from the cache
> + * memory do not need to be freed or even released back into the cache.
> + *
> + * See aslallocate.c for standard heap allocations.
> + */
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    UtLocalCacheCalloc
> + *
> + * PARAMETERS:  Length              - Size of buffer requested
> + *
> + * RETURN:      Pointer to the buffer. Aborts compiler on allocation failure
> + *
> + * DESCRIPTION: Allocate a string buffer. Bypass the local
> + *              dynamic memory manager for performance reasons (This has a
> + *              major impact on the speed of the compiler.)
> + *
> + ******************************************************************************/
> +
> +char *
> +UtLocalCacheCalloc (
> +    UINT32                  Length)
> +{
> +    char                    *Buffer;
> +    ASL_CACHE_INFO          *Cache;
> +    UINT32                  CacheSize = ASL_STRING_CACHE_SIZE;
> +
> +
> +    if (Length > CacheSize)
> +    {
> +        CacheSize = Length;
> +
> +        if (Gbl_StringCacheList)
> +        {
> +            Cache = UtLocalCalloc (sizeof (Cache->Next) + CacheSize);
> +
> +            /* Link new cache buffer just following head of list */
> +
> +            Cache->Next = Gbl_StringCacheList->Next;
> +            Gbl_StringCacheList->Next = Cache;
> +
> +            /* Leave cache management pointers alone as they pertain to head */
> +
> +            Gbl_StringCount++;
> +            Gbl_StringSize += Length;
> +
> +            return (Cache->Buffer);
> +        }
> +    }
> +
> +    if ((Gbl_StringCacheNext + Length) >= Gbl_StringCacheLast)
> +    {
> +        /* Allocate a new buffer */
> +
> +        Cache = UtLocalCalloc (sizeof (Cache->Next) + CacheSize);
> +
> +        /* Link new cache buffer to head of list */
> +
> +        Cache->Next = Gbl_StringCacheList;
> +        Gbl_StringCacheList = Cache;
> +
> +        /* Setup cache management pointers */
> +
> +        Gbl_StringCacheNext = Cache->Buffer;
> +        Gbl_StringCacheLast = Gbl_StringCacheNext + CacheSize;
> +    }
> +
> +    Gbl_StringCount++;
> +    Gbl_StringSize += Length;
> +
> +    Buffer = Gbl_StringCacheNext;
> +    Gbl_StringCacheNext += Length;
> +    return (Buffer);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    UtParseOpCacheCalloc
> + *
> + * PARAMETERS:  None
> + *
> + * RETURN:      New parse op. Aborts on allocation failure
> + *
> + * DESCRIPTION: Allocate a new parse op for the parse tree. Bypass the local
> + *              dynamic memory manager for performance reasons (This has a
> + *              major impact on the speed of the compiler.)
> + *
> + ******************************************************************************/
> +
> +ACPI_PARSE_OBJECT *
> +UtParseOpCacheCalloc (
> +    void)
> +{
> +    ASL_CACHE_INFO          *Cache;
> +
> +
> +    if (Gbl_ParseOpCacheNext >= Gbl_ParseOpCacheLast)
> +    {
> +        /* Allocate a new buffer */
> +
> +        Cache = UtLocalCalloc (sizeof (Cache->Next) +
> +            (sizeof (ACPI_PARSE_OBJECT) * ASL_PARSEOP_CACHE_SIZE));
> +
> +        /* Link new cache buffer to head of list */
> +
> +        Cache->Next = Gbl_ParseOpCacheList;
> +        Gbl_ParseOpCacheList = Cache;
> +
> +        /* Setup cache management pointers */
> +
> +        Gbl_ParseOpCacheNext = ACPI_CAST_PTR (ACPI_PARSE_OBJECT, Cache->Buffer);
> +        Gbl_ParseOpCacheLast = Gbl_ParseOpCacheNext + ASL_PARSEOP_CACHE_SIZE;
> +    }
> +
> +    Gbl_ParseOpCount++;
> +    return (Gbl_ParseOpCacheNext++);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    UtSubtableCacheCalloc - Data Table compiler
> + *
> + * PARAMETERS:  None
> + *
> + * RETURN:      Pointer to the buffer. Aborts on allocation failure
> + *
> + * DESCRIPTION: Allocate a subtable object buffer. Bypass the local
> + *              dynamic memory manager for performance reasons (This has a
> + *              major impact on the speed of the compiler.)
> + *
> + ******************************************************************************/
> +
> +DT_SUBTABLE *
> +UtSubtableCacheCalloc (
> +    void)
> +{
> +    ASL_CACHE_INFO          *Cache;
> +
> +
> +    if (Gbl_SubtableCacheNext >= Gbl_SubtableCacheLast)
> +    {
> +        /* Allocate a new buffer */
> +
> +        Cache = UtLocalCalloc (sizeof (Cache->Next) +
> +            (sizeof (DT_SUBTABLE) * ASL_SUBTABLE_CACHE_SIZE));
> +
> +        /* Link new cache buffer to head of list */
> +
> +        Cache->Next = Gbl_SubtableCacheList;
> +        Gbl_SubtableCacheList = Cache;
> +
> +        /* Setup cache management pointers */
> +
> +        Gbl_SubtableCacheNext = ACPI_CAST_PTR (DT_SUBTABLE, Cache->Buffer);
> +        Gbl_SubtableCacheLast = Gbl_SubtableCacheNext + ASL_SUBTABLE_CACHE_SIZE;
> +    }
> +
> +    Gbl_SubtableCount++;
> +    return (Gbl_SubtableCacheNext++);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    UtFieldCacheCalloc - Data Table compiler
> + *
> + * PARAMETERS:  None
> + *
> + * RETURN:      Pointer to the buffer. Aborts on allocation failure
> + *
> + * DESCRIPTION: Allocate a field object buffer. Bypass the local
> + *              dynamic memory manager for performance reasons (This has a
> + *              major impact on the speed of the compiler.)
> + *
> + ******************************************************************************/
> +
> +DT_FIELD *
> +UtFieldCacheCalloc (
> +    void)
> +{
> +    ASL_CACHE_INFO          *Cache;
> +
> +
> +    if (Gbl_FieldCacheNext >= Gbl_FieldCacheLast)
> +    {
> +        /* Allocate a new buffer */
> +
> +        Cache = UtLocalCalloc (sizeof (Cache->Next) +
> +            (sizeof (DT_FIELD) * ASL_FIELD_CACHE_SIZE));
> +
> +        /* Link new cache buffer to head of list */
> +
> +        Cache->Next = Gbl_FieldCacheList;
> +        Gbl_FieldCacheList = Cache;
> +
> +        /* Setup cache management pointers */
> +
> +        Gbl_FieldCacheNext = ACPI_CAST_PTR (DT_FIELD, Cache->Buffer);
> +        Gbl_FieldCacheLast = Gbl_FieldCacheNext + ASL_FIELD_CACHE_SIZE;
> +    }
> +
> +    Gbl_FieldCount++;
> +    return (Gbl_FieldCacheNext++);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    UtDeleteLocalCaches
> + *
> + * PARAMETERS:  None
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Delete all local cache buffer blocks
> + *
> + ******************************************************************************/
> +
> +void
> +UtDeleteLocalCaches (
> +    void)
> +{
> +    UINT32                  BufferCount;
> +    ASL_CACHE_INFO          *Next;
> +
> +
> +    /*
> +     * Generic cache, arbitrary size allocations
> +     */
> +    BufferCount = 0;
> +    while (Gbl_StringCacheList)
> +    {
> +        Next = Gbl_StringCacheList->Next;
> +        ACPI_FREE (Gbl_StringCacheList);
> +        Gbl_StringCacheList = Next;
> +        BufferCount++;
> +    }
> +
> +    DbgPrint (ASL_DEBUG_OUTPUT,
> +        "%u Strings (%u bytes), Buffer size: %u bytes, %u Buffers\n",
> +        Gbl_StringCount, Gbl_StringSize, ASL_STRING_CACHE_SIZE, BufferCount);
> +
> +    /* Reset cache globals */
> +
> +    Gbl_StringSize = 0;
> +    Gbl_StringCount = 0;
> +    Gbl_StringCacheNext = NULL;
> +    Gbl_StringCacheLast = NULL;
> +
> +
> +    /*
> +     * Parse Op cache
> +     */
> +    BufferCount = 0;
> +    while (Gbl_ParseOpCacheList)
> +    {
> +        Next = Gbl_ParseOpCacheList->Next;
> +        ACPI_FREE (Gbl_ParseOpCacheList);
> +        Gbl_ParseOpCacheList = Next;
> +        BufferCount++;
> +    }
> +
> +    DbgPrint (ASL_DEBUG_OUTPUT,
> +        "%u ParseOps, Buffer size: %u ops (%u bytes), %u Buffers\n",
> +        Gbl_ParseOpCount, ASL_PARSEOP_CACHE_SIZE,
> +        (sizeof (ACPI_PARSE_OBJECT) * ASL_PARSEOP_CACHE_SIZE), BufferCount);
> +
> +    /* Reset cache globals */
> +
> +    Gbl_ParseOpCount = 0;
> +    Gbl_ParseOpCacheNext = NULL;
> +    Gbl_ParseOpCacheLast = NULL;
> +    Gbl_ParseTreeRoot = NULL;
> +
> +
> +    /*
> +     * Table Compiler - Field cache
> +     */
> +    BufferCount = 0;
> +    while (Gbl_FieldCacheList)
> +    {
> +        Next = Gbl_FieldCacheList->Next;
> +        ACPI_FREE (Gbl_FieldCacheList);
> +        Gbl_FieldCacheList = Next;
> +        BufferCount++;
> +    }
> +
> +    DbgPrint (ASL_DEBUG_OUTPUT,
> +        "%u Fields, Buffer size: %u fields (%u bytes), %u Buffers\n",
> +        Gbl_FieldCount, ASL_FIELD_CACHE_SIZE,
> +        (sizeof (DT_FIELD) * ASL_FIELD_CACHE_SIZE), BufferCount);
> +
> +    /* Reset cache globals */
> +
> +    Gbl_FieldCount = 0;
> +    Gbl_FieldCacheNext = NULL;
> +    Gbl_FieldCacheLast = NULL;
> +
> +
> +    /*
> +     * Table Compiler - Subtable cache
> +     */
> +    BufferCount = 0;
> +    while (Gbl_SubtableCacheList)
> +    {
> +        Next = Gbl_SubtableCacheList->Next;
> +        ACPI_FREE (Gbl_SubtableCacheList);
> +        Gbl_SubtableCacheList = Next;
> +        BufferCount++;
> +    }
> +
> +    DbgPrint (ASL_DEBUG_OUTPUT,
> +        "%u Subtables, Buffer size: %u subtables (%u bytes), %u Buffers\n",
> +        Gbl_SubtableCount, ASL_SUBTABLE_CACHE_SIZE,
> +        (sizeof (DT_SUBTABLE) * ASL_SUBTABLE_CACHE_SIZE), BufferCount);
> +
> +    /* Reset cache globals */
> +
> +    Gbl_SubtableCount = 0;
> +    Gbl_SubtableCacheNext = NULL;
> +    Gbl_SubtableCacheLast = NULL;
> +}
> diff --git a/src/acpica/source/compiler/aslcompile.c b/src/acpica/source/compiler/aslcompile.c
> index 38568440..1ddb8864 100644
> --- a/src/acpica/source/compiler/aslcompile.c
> +++ b/src/acpica/source/compiler/aslcompile.c
> @@ -150,7 +150,6 @@
>    *****************************************************************************/
>   
>   #include "aslcompiler.h"
> -#include "dtcompiler.h"
>   #include "acnamesp.h"
>   
>   #include <stdio.h>
> @@ -932,70 +931,7 @@ CmCleanupAndExit (
>   
>       if (!Gbl_DoAslConversion)
>       {
> -        CmDeleteCaches ();
> +        UtDeleteLocalCaches ();
>       }
>   
>   }
> -
> -
> -/*******************************************************************************
> - *
> - * FUNCTION:    CmDeleteCaches
> - *
> - * PARAMETERS:  None
> - *
> - * RETURN:      None
> - *
> - * DESCRIPTION: Delete all local cache buffer blocks
> - *
> - ******************************************************************************/
> -
> -void
> -CmDeleteCaches (
> -    void)
> -{
> -    UINT32                  BufferCount;
> -    ASL_CACHE_INFO          *Next;
> -
> -
> -    /* Parse Op cache */
> -
> -    BufferCount = 0;
> -    while (Gbl_ParseOpCacheList)
> -    {
> -        Next = Gbl_ParseOpCacheList->Next;
> -        ACPI_FREE (Gbl_ParseOpCacheList);
> -        Gbl_ParseOpCacheList = Next;
> -        BufferCount++;
> -    }
> -
> -    DbgPrint (ASL_DEBUG_OUTPUT,
> -        "%u ParseOps, Buffer size: %u ops (%u bytes), %u Buffers\n",
> -        Gbl_ParseOpCount, ASL_PARSEOP_CACHE_SIZE,
> -        (sizeof (ACPI_PARSE_OBJECT) * ASL_PARSEOP_CACHE_SIZE), BufferCount);
> -
> -    Gbl_ParseOpCount = 0;
> -    Gbl_ParseOpCacheNext = NULL;
> -    Gbl_ParseOpCacheLast = NULL;
> -    Gbl_ParseTreeRoot = NULL;
> -
> -    /* Generic string cache */
> -
> -    BufferCount = 0;
> -    while (Gbl_StringCacheList)
> -    {
> -        Next = Gbl_StringCacheList->Next;
> -        ACPI_FREE (Gbl_StringCacheList);
> -        Gbl_StringCacheList = Next;
> -        BufferCount++;
> -    }
> -
> -    DbgPrint (ASL_DEBUG_OUTPUT,
> -        "%u Strings (%u bytes), Buffer size: %u bytes, %u Buffers\n",
> -        Gbl_StringCount, Gbl_StringSize, ASL_STRING_CACHE_SIZE, BufferCount);
> -
> -    Gbl_StringSize = 0;
> -    Gbl_StringCount = 0;
> -    Gbl_StringCacheNext = NULL;
> -    Gbl_StringCacheLast = NULL;
> -}
> diff --git a/src/acpica/source/compiler/aslcompiler.h b/src/acpica/source/compiler/aslcompiler.h
> index 3b6a9c1d..fdf7ea96 100644
> --- a/src/acpica/source/compiler/aslcompiler.h
> +++ b/src/acpica/source/compiler/aslcompiler.h
> @@ -181,6 +181,7 @@
>   #include "aslmessages.h"
>   #include "aslglobal.h"
>   #include "preprocess.h"
> +#include "dtcompiler.h"
>   
>   
>   /*******************************************************************************
> @@ -265,8 +266,50 @@ void
>   CmCleanupAndExit (
>       void);
>   
> +
> +/*
> + * aslallocate - memory allocation
> + */
> +void *
> +UtLocalCalloc (
> +    UINT32                  Size);
> +
> +void
> +UtExpandLineBuffers (
> +    void);
> +
> +void
> +UtReallocLineBuffers (
> +    char                    **Buffer,
> +    UINT32                  OldSize,
> +    UINT32                  NewSize);
> +
> +void
> +UtFreeLineBuffers (
> +    void);
> +
> +
> +/*
> + * aslcache - local cache support
> + */
> +char *
> +UtLocalCacheCalloc (
> +    UINT32                  Length);
> +
> +ACPI_PARSE_OBJECT *
> +UtParseOpCacheCalloc (
> +    void);
> +
> +DT_SUBTABLE *
> +UtSubtableCacheCalloc (
> +    void);
> +
> +DT_FIELD *
> +UtFieldCacheCalloc (
> +    void);
> +
>   void
> -CmDeleteCaches (
> +UtDeleteLocalCaches (
>       void);
>   
>   
> @@ -406,6 +449,16 @@ void
>   AslAbort (
>       void);
>   
> +void
> +AslDualParseOpError (
> +    UINT8                   Level,
> +    UINT16                  MainMessageId,
> +    ACPI_PARSE_OBJECT       *MainOp,
> +    char                    *MainMessage,
> +    UINT16                  SecondMessageId,
> +    ACPI_PARSE_OBJECT       *SecondOp,
> +    char                    *SecondaryMessage);
> +
>   void
>   AslError (
>       UINT8                   Level,
> @@ -1150,10 +1203,6 @@ void
>   UtEndEvent (
>       UINT8                   Event);
>   
> -void *
> -UtLocalCalloc (
> -    UINT32                  Size);
> -
>   void
>   UtDisplaySummary (
>       UINT32                  FileId);
> @@ -1176,18 +1225,6 @@ void
>   UtSetParseOpName (
>       ACPI_PARSE_OBJECT       *Op);
>   
> -char *
> -UtStringCacheCalloc (
> -    UINT32                  Length);
> -
> -void
> -UtExpandLineBuffers (
> -    void);
> -
> -void
> -UtFreeLineBuffers (
> -    void);
> -
>   ACPI_STATUS
>   UtInternalizeName (
>       char                    *ExternalName,
> diff --git a/src/acpica/source/compiler/aslcompiler.l b/src/acpica/source/compiler/aslcompiler.l
> index 5fcfc188..a5d0ee9a 100644
> --- a/src/acpica/source/compiler/aslcompiler.l
> +++ b/src/acpica/source/compiler/aslcompiler.l
> @@ -813,7 +813,7 @@ NamePathTail                [.]{NameSeg}
>   
>   {NameSeg}                   { char *s;
>                                   count (0);
> -                                s=UtStringCacheCalloc (ACPI_NAME_SIZE + 1);
> +                                s=UtLocalCacheCalloc (ACPI_NAME_SIZE + 1);
>                                   if (strcmp (AslCompilertext, "\\"))
>                                   {
>                                       strcpy (s, "____");
> @@ -826,7 +826,7 @@ NamePathTail                [.]{NameSeg}
>   
>   {NameString}                { char *s;
>                                   count (0);
> -                                s=UtStringCacheCalloc (strlen (AslCompilertext)+1);
> +                                s=UtLocalCacheCalloc (strlen (AslCompilertext)+1);
>                                   AcpiUtStrupr (AslCompilertext);
>                                   strcpy (s, AslCompilertext);
>                                   AslCompilerlval.s = s;
> diff --git a/src/acpica/source/compiler/asldebug.c b/src/acpica/source/compiler/asldebug.c
> index 9640a841..ba252251 100644
> --- a/src/acpica/source/compiler/asldebug.c
> +++ b/src/acpica/source/compiler/asldebug.c
> @@ -356,7 +356,7 @@ UtCreateEscapeSequences (
>   
>       /* New string buffer, 3 extra chars per escape (4 total) */
>   
> -    OutString = UtStringCacheCalloc (InStringLength + (EscapeCount * 3));
> +    OutString = UtLocalCacheCalloc (InStringLength + (EscapeCount * 3));
>       OutStringPtr = OutString;
>   
>       /* Convert non-ascii or non-printable chars to escape sequences */
> diff --git a/src/acpica/source/compiler/aslerror.c b/src/acpica/source/compiler/aslerror.c
> index 56b5cabb..087f06ef 100644
> --- a/src/acpica/source/compiler/aslerror.c
> +++ b/src/acpica/source/compiler/aslerror.c
> @@ -170,6 +170,37 @@ AslIsExceptionDisabled (
>       UINT8                   Level,
>       UINT16                  MessageId);
>   
> +static void AslInitEnode (
> +    ASL_ERROR_MSG           **Enode,
> +    UINT8                   Level,
> +    UINT16                  MessageId,
> +    UINT32                  LineNumber,
> +    UINT32                  LogicalLineNumber,
> +    UINT32                  LogicalByteOffset,
> +    UINT32                  Column,
> +    char                    *Filename,
> +    char                    *Message,
> +    char                    *SourceLine,
> +    ASL_ERROR_MSG           *SubError);
> +
> +static void
> +AslLogNewError (
> +    UINT8                   Level,
> +    UINT16                  MessageId,
> +    UINT32                  LineNumber,
> +    UINT32                  LogicalLineNumber,
> +    UINT32                  LogicalByteOffset,
> +    UINT32                  Column,
> +    char                    *Filename,
> +    char                    *Message,
> +    char                    *SourceLine,
> +    ASL_ERROR_MSG           *SubError);
> +
> +static void
> +AePrintSubError (
> +    FILE                    *OutputFile,
> +    ASL_ERROR_MSG           *Enode);
> +
>   
>   /*******************************************************************************
>    *
> @@ -220,6 +251,7 @@ AeClearErrorLog (
>       ASL_ERROR_MSG           *Enode = Gbl_ErrorLog;
>       ASL_ERROR_MSG           *Next;
>   
> +
>       /* Walk the error node list */
>   
>       while (Enode)
> @@ -270,8 +302,7 @@ AeAddToErrorLog (
>       Prev = NULL;
>       Next = Gbl_ErrorLog;
>   
> -    while ((Next) &&
> -           (Next->LogicalLineNumber <= Enode->LogicalLineNumber))
> +    while ((Next) && (Next->LogicalLineNumber <= Enode->LogicalLineNumber))
>       {
>           Prev = Next;
>           Next = Next->Next;
> @@ -294,94 +325,143 @@ AeAddToErrorLog (
>   
>   /*******************************************************************************
>    *
> - * FUNCTION:    AePrintException
> + * FUNCTION:    AeDecodeErrorMessageId
>    *
> - * PARAMETERS:  FileId          - ID of output file
> + * PARAMETERS:  OutputFile      - Output file
>    *              Enode           - Error node to print
> - *              Header          - Additional text before each message
> + *              PrematureEOF    - True = PrematureEOF has been reached
> + *              Total           - Total legth of line
>    *
>    * RETURN:      None
>    *
> - * DESCRIPTION: Print the contents of an error node.
> - *
> - * NOTE:        We don't use the FlxxxFile I/O functions here because on error
> - *              they abort the compiler and call this function!  Since we
> - *              are reporting errors here, we ignore most output errors and
> - *              just try to get out as much as we can.
> + * DESCRIPTION: Print the source line of an error.
>    *
>    ******************************************************************************/
>   
> -void
> -AePrintException (
> -    UINT32                  FileId,
> +static void
> +AeDecodeErrorMessageId (
> +    FILE                    *OutputFile,
>       ASL_ERROR_MSG           *Enode,
> -    char                    *Header)
> +    BOOLEAN                 PrematureEOF,
> +    UINT32                  Total)
>   {
> -    UINT8                   SourceByte;
> -    int                     Actual;
> -    size_t                  RActual;
>       UINT32                  MsgLength;
>       const char              *MainMessage;
>       char                    *ExtraMessage;
>       UINT32                  SourceColumn;
>       UINT32                  ErrorColumn;
> -    FILE                    *OutputFile;
> -    FILE                    *SourceFile = NULL;
> -    long                    FileSize;
> -    BOOLEAN                 PrematureEOF = FALSE;
> -    UINT32                  Total = 0;
>   
>   
> -    if (Gbl_NoErrors)
> +    fprintf (OutputFile, "%s %4.4d -",
> +        AeDecodeExceptionLevel (Enode->Level),
> +        AeBuildFullExceptionCode (Enode->Level, Enode->MessageId));
> +
> +    MainMessage = AeDecodeMessageId (Enode->MessageId);
> +    ExtraMessage = Enode->Message;
> +
> +    /* If a NULL line number, just print the decoded message */
> +
> +    if (!Enode->LineNumber)
>       {
> +        fprintf (OutputFile, " %s %s\n\n", MainMessage, ExtraMessage);
>           return;
>       }
>   
> -    /*
> -     * Only listing files have a header, and remarks/optimizations
> -     * are always output
> -     */
> -    if (!Header)
> +    MsgLength = strlen (MainMessage);
> +    if (MsgLength == 0)
>       {
> -        /* Ignore remarks if requested */
> +        /* Use the secondary/extra message as main message */
>   
> -        switch (Enode->Level)
> +        MainMessage = Enode->Message;
> +        if (!MainMessage)
>           {
> -        case ASL_WARNING:
> -        case ASL_WARNING2:
> -        case ASL_WARNING3:
> +            MainMessage = "";
> +        }
>   
> -            if (!Gbl_DisplayWarnings)
> -            {
> -                return;
> -            }
> -            break;
> +        MsgLength = strlen (MainMessage);
> +        ExtraMessage = NULL;
> +    }
>   
> -        case ASL_REMARK:
> +    if (Gbl_VerboseErrors && !PrematureEOF)
> +    {
> +        if (Total >= 256)
> +        {
> +            fprintf (OutputFile, "    %s",
> +                MainMessage);
> +        }
> +        else
> +        {
> +            SourceColumn = Enode->Column + Enode->FilenameLength + 6 + 2;
> +            ErrorColumn = ASL_ERROR_LEVEL_LENGTH + 5 + 2 + 1;
>   
> -            if (!Gbl_DisplayRemarks)
> +            if ((MsgLength + ErrorColumn) < (SourceColumn - 1))
>               {
> -                return;
> +                fprintf (OutputFile, "%*s%s",
> +                    (int) ((SourceColumn - 1) - ErrorColumn),
> +                    MainMessage, " ^ ");
>               }
> -            break;
> -
> -        case ASL_OPTIMIZATION:
> -
> -            if (!Gbl_DisplayOptimizations)
> +            else
>               {
> -                return;
> +                fprintf (OutputFile, "%*s %s",
> +                    (int) ((SourceColumn - ErrorColumn) + 1), "^",
> +                    MainMessage);
>               }
> -            break;
> +        }
> +    }
> +    else
> +    {
> +        fprintf (OutputFile, " %s", MainMessage);
> +    }
>   
> -        default:
> +    /* Print the extra info message if present */
>   
> -            break;
> -        }
> +    if (ExtraMessage)
> +    {
> +        fprintf (OutputFile, " (%s)", ExtraMessage);
>       }
>   
> -    /* Get the various required file handles */
> +    if (PrematureEOF)
> +    {
> +        fprintf (OutputFile, " and premature End-Of-File");
> +    }
> +
> +    fprintf (OutputFile, "\n");
> +    if (Gbl_VerboseErrors && !Enode->SubError)
> +    {
> +        fprintf (OutputFile, "\n");
> +    }
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AePrintErrorSourceLine
> + *
> + * PARAMETERS:  OutputFile      - Output file
> + *              Enode           - Error node to print
> + *              PrematureEOF    - True = PrematureEOF has been reached
> + *              Total           - amount of characters printed so far
> + *
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Print the source line of an error.
> + *
> + ******************************************************************************/
> +
> +static ACPI_STATUS
> +AePrintErrorSourceLine (
> +    FILE                    *OutputFile,
> +    ASL_ERROR_MSG           *Enode,
> +    BOOLEAN                 *PrematureEOF,
> +    UINT32                  *Total)
> +{
> +    UINT8                   SourceByte;
> +    int                     Actual;
> +    size_t                  RActual;
> +    FILE                    *SourceFile = NULL;
> +    long                    FileSize;
>   
> -    OutputFile = Gbl_Files[FileId].Handle;
>   
>       if (!Enode->SourceLine)
>       {
> @@ -404,211 +484,270 @@ AePrintException (
>   
>               if ((long) Enode->LogicalByteOffset >= FileSize)
>               {
> -                PrematureEOF = TRUE;
> +                *PrematureEOF = TRUE;
>               }
>           }
> -    }
> -
> -    if (Header)
> -    {
> -        fprintf (OutputFile, "%s", Header);
> +        else
> +        {
> +            fprintf (OutputFile,
> +                "[*** iASL: Source File Does not exist ***]\n");
> +            return AE_IO_ERROR;
> +        }
>       }
>   
>       /* Print filename and line number if present and valid */
>   
> -    if (Enode->Filename)
> +    if (Gbl_VerboseErrors)
>       {
> -        if (Gbl_VerboseErrors)
> +        fprintf (OutputFile, "%-8s", Enode->Filename);
> +
> +        if (Enode->SourceLine && Enode->LineNumber)
> +        {
> +            fprintf (OutputFile, " %6u: %s",
> +                Enode->LineNumber, Enode->SourceLine);
> +        }
> +        else if (Enode->LineNumber)
>           {
> -            fprintf (OutputFile, "%-8s", Enode->Filename);
> +            fprintf (OutputFile, " %6u: ", Enode->LineNumber);
>   
> -            if (Enode->LineNumber)
> +            /*
> +             * If not at EOF, get the corresponding source code line
> +             * and display it. Don't attempt this if we have a
> +             * premature EOF condition.
> +             */
> +            if (*PrematureEOF)
>               {
> -                if (Enode->SourceLine)
> -                {
> -                    fprintf (OutputFile, " %6u: %s",
> -                        Enode->LineNumber, Enode->SourceLine);
> -                }
> -                else
> +                fprintf (OutputFile, "\n");
> +                return AE_OK;
> +            }
> +            /*
> +             * Seek to the offset in the combined source file,
> +             * read the source line, and write it to the output.
> +             */
> +            Actual = fseek (SourceFile,
> +                (long) Enode->LogicalByteOffset, (int) SEEK_SET);
> +            if (Actual)
> +            {
> +                fprintf (OutputFile,
> +                    "[*** iASL: Seek error on source code temp file %s ***]",
> +                    Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename);
> +
> +                fprintf (OutputFile, "\n");
> +                return AE_OK;
> +            }
> +            RActual = fread (&SourceByte, 1, 1, SourceFile);
> +            if (RActual != 1)
> +            {
> +                fprintf (OutputFile,
> +                    "[*** iASL: Read error on source code temp file %s ***]",
> +                    Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename);
> +                return AE_IO_ERROR;
> +            }
> +                /* Read/write the source line, up to the maximum line length */
> +
> +            while (RActual && SourceByte && (SourceByte != '\n'))
> +            {
> +                if (*Total < 256)
>                   {
> -                    fprintf (OutputFile, " %6u: ", Enode->LineNumber);
> -
> -                    /*
> -                     * If not at EOF, get the corresponding source code line
> -                     * and display it. Don't attempt this if we have a
> -                     * premature EOF condition.
> -                     */
> -                    if (!PrematureEOF)
> +                    /* After the max line length, we will just read the line, no write */
> +
> +                    if (fwrite (&SourceByte, 1, 1, OutputFile) != 1)
>                       {
> -                        /*
> -                         * Seek to the offset in the combined source file,
> -                         * read the source line, and write it to the output.
> -                         */
> -                        Actual = fseek (SourceFile,
> -                            (long) Enode->LogicalByteOffset, (int) SEEK_SET);
> -                        if (Actual)
> -                        {
> -                            fprintf (OutputFile,
> -                                "[*** iASL: Seek error on source code temp file %s ***]",
> -                                Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename);
> -                        }
> -                        else
> -                        {
> -                            RActual = fread (&SourceByte, 1, 1, SourceFile);
> -                            if (RActual != 1)
> -                            {
> -                                fprintf (OutputFile,
> -                                    "[*** iASL: Read error on source code temp file %s ***]",
> -                                    Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename);
> -                            }
> -                            else
> -                            {
> -                                /* Read/write the source line, up to the maximum line length */
> -
> -                                while (RActual && SourceByte && (SourceByte != '\n'))
> -                                {
> -                                    if (Total < 256)
> -                                    {
> -                                        /* After the max line length, we will just read the line, no write */
> -
> -                                        if (fwrite (&SourceByte, 1, 1, OutputFile) != 1)
> -                                        {
> -                                            printf ("[*** iASL: Write error on output file ***]\n");
> -                                            return;
> -                                        }
> -                                    }
> -                                    else if (Total == 256)
> -                                    {
> -                                        fprintf (OutputFile,
> -                                            "\n[*** iASL: Very long input line, message below refers to column %u ***]",
> -                                            Enode->Column);
> -                                    }
> -
> -                                    RActual = fread (&SourceByte, 1, 1, SourceFile);
> -                                    if (RActual != 1)
> -                                    {
> -                                        fprintf (OutputFile,
> -                                            "[*** iASL: Read error on source code temp file %s ***]",
> -                                            Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename);
> -                                        return;
> -                                    }
> -                                    Total++;
> -                                }
> -                            }
> -                        }
> +                        printf ("[*** iASL: Write error on output file ***]\n");
> +                        return AE_IO_ERROR;
>                       }
> +                }
> +                else if (*Total == 256)
> +                {
> +                    fprintf (OutputFile,
> +                        "\n[*** iASL: Very long input line, message below refers to column %u ***]",
> +                        Enode->Column);
> +                }
> +
> +                RActual = fread (&SourceByte, 1, 1, SourceFile);
> +                if (RActual != 1)
> +                {
> +                    fprintf (OutputFile,
> +                        "[*** iASL: Read error on source code temp file %s ***]",
> +                        Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename);
>   
> -                    fprintf (OutputFile, "\n");
> +                    return AE_IO_ERROR;
>                   }
> +                *Total += 1;
>               }
> -        }
> -        else
> -        {
> -            /*
> -             * Less verbose version of the error message, enabled via the
> -             * -vi switch. The format is compatible with MS Visual Studio.
> -             */
> -            fprintf (OutputFile, "%s", Enode->Filename);
>   
> -            if (Enode->LineNumber)
> -            {
> -                fprintf (OutputFile, "(%u) : ",
> -                    Enode->LineNumber);
> -            }
> +            fprintf (OutputFile, "\n");
>           }
>       }
> -
> -    /* If a NULL message ID, just print the raw message */
> -
> -    if (Enode->MessageId == 0)
> +    else
>       {
> -        fprintf (OutputFile, "%s\n", Enode->Message);
> -        return;
> +        /*
> +         * Less verbose version of the error message, enabled via the
> +         * -vi switch. The format is compatible with MS Visual Studio.
> +         */
> +        fprintf (OutputFile, "%s", Enode->Filename);
> +
> +        if (Enode->LineNumber)
> +        {
> +            fprintf (OutputFile, "(%u) : ",
> +                Enode->LineNumber);
> +        }
>       }
>   
> -    /* Decode the message ID */
> +    return AE_OK;
> +}
>   
> -    fprintf (OutputFile, "%s %4.4d -",
> -        AeDecodeExceptionLevel (Enode->Level),
> -        AeBuildFullExceptionCode (Enode->Level, Enode->MessageId));
> +/*******************************************************************************
> + *
> + * FUNCTION:    AePrintException
> + *
> + * PARAMETERS:  FileId          - ID of output file
> + *              Enode           - Error node to print
> + *              Header          - Additional text before each message
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Print the contents of an error node.
> + *
> + * NOTE:        We don't use the FlxxxFile I/O functions here because on error
> + *              they abort the compiler and call this function!  Since we
> + *              are reporting errors here, we ignore most output errors and
> + *              just try to get out as much as we can.
> + *
> + ******************************************************************************/
>   
> -    MainMessage = AeDecodeMessageId (Enode->MessageId);
> -    ExtraMessage = Enode->Message;
> +void
> +AePrintException (
> +    UINT32                  FileId,
> +    ASL_ERROR_MSG           *Enode,
> +    char                    *Header)
> +{
> +    FILE                    *OutputFile;
> +    BOOLEAN                 PrematureEOF = FALSE;
> +    UINT32                  Total = 0;
> +    ACPI_STATUS             Status;
> +    ASL_ERROR_MSG           *Child = Enode->SubError;
>   
> -    /* If a NULL line number, just print the decoded message */
>   
> -    if (!Enode->LineNumber)
> +    if (Gbl_NoErrors)
>       {
> -        fprintf (OutputFile, " %s %s\n\n", MainMessage, ExtraMessage);
>           return;
>       }
>   
> -    MsgLength = strlen (MainMessage);
> -    if (MsgLength == 0)
> +    /*
> +     * Only listing files have a header, and remarks/optimizations
> +     * are always output
> +     */
> +    if (!Header)
>       {
> -        /* Use the secondary/extra message as main message */
> +        /* Ignore remarks if requested */
>   
> -        MainMessage = Enode->Message;
> -        if (!MainMessage)
> +        switch (Enode->Level)
>           {
> -            MainMessage = "";
> -        }
> +        case ASL_WARNING:
> +        case ASL_WARNING2:
> +        case ASL_WARNING3:
>   
> -        MsgLength = strlen (MainMessage);
> -        ExtraMessage = NULL;
> -    }
> +            if (!Gbl_DisplayWarnings)
> +            {
> +                return;
> +            }
> +            break;
>   
> -    if (Gbl_VerboseErrors && !PrematureEOF)
> -    {
> -        if (Total >= 256)
> -        {
> -            fprintf (OutputFile, "    %s",
> -                MainMessage);
> -        }
> -        else
> -        {
> -            SourceColumn = Enode->Column + Enode->FilenameLength + 6 + 2;
> -            ErrorColumn = ASL_ERROR_LEVEL_LENGTH + 5 + 2 + 1;
> +        case ASL_REMARK:
>   
> -            if ((MsgLength + ErrorColumn) < (SourceColumn - 1))
> +            if (!Gbl_DisplayRemarks)
>               {
> -                fprintf (OutputFile, "%*s%s",
> -                    (int) ((SourceColumn - 1) - ErrorColumn),
> -                    MainMessage, " ^ ");
> +                return;
>               }
> -            else
> +            break;
> +
> +        case ASL_OPTIMIZATION:
> +
> +            if (!Gbl_DisplayOptimizations)
>               {
> -                fprintf (OutputFile, "%*s %s",
> -                    (int) ((SourceColumn - ErrorColumn) + 1), "^",
> -                    MainMessage);
> +                return;
>               }
> +            break;
> +
> +        default:
> +
> +            break;
>           }
>       }
> -    else
> +
> +    /* Get the various required file handles */
> +
> +    OutputFile = Gbl_Files[FileId].Handle;
> +
> +    if (Header)
>       {
> -        fprintf (OutputFile, " %s", MainMessage);
> +        fprintf (OutputFile, "%s", Header);
>       }
>   
> -    /* Print the extra info message if present */
> +    if (!Enode->Filename)
> +    {
> +        AeDecodeErrorMessageId (OutputFile, Enode, PrematureEOF, Total);
> +        return;
> +    }
>   
> -    if (ExtraMessage)
> +    Status = AePrintErrorSourceLine (OutputFile, Enode, &PrematureEOF, &Total);
> +    if (ACPI_FAILURE (Status))
>       {
> -        fprintf (OutputFile, " (%s)", ExtraMessage);
> +        return;
>       }
>   
> -    if (PrematureEOF)
> +    /* If a NULL message ID, just print the raw message */
> +
> +    if (Enode->MessageId == 0)
>       {
> -        fprintf (OutputFile, " and premature End-Of-File");
> +        fprintf (OutputFile, "%s\n", Enode->Message);
> +        return;
>       }
>   
> -    fprintf (OutputFile, "\n");
> -    if (Gbl_VerboseErrors)
> +    AeDecodeErrorMessageId (OutputFile, Enode, PrematureEOF, Total);
> +
> +    while (Child)
>       {
>           fprintf (OutputFile, "\n");
> +        AePrintSubError (OutputFile, Child);
> +        Child = Child->SubError;
>       }
>   }
>   
>   
> +/*******************************************************************************
> + *
> + * FUNCTION:    AePrintSubError
> + *
> + * PARAMETERS:  OutputFile      - Output file
> + *              Enode           - Error node to print
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Print the contents of an error nodes. This function is tailored
> + *              to print error nodes that are SubErrors within ASL_ERROR_MSG
> + *
> + ******************************************************************************/
> +
> +static void
> +AePrintSubError (
> +    FILE                    *OutputFile,
> +    ASL_ERROR_MSG           *Enode)
> +{
> +    UINT32                  Total = 0;
> +    BOOLEAN                 PrematureEOF = FALSE;
> +    const char              *MainMessage;
> +
> +
> +    MainMessage = AeDecodeMessageId (Enode->MessageId);
> +
> +    fprintf (OutputFile, "    %s%s", MainMessage, "\n    ");
> +    (void) AePrintErrorSourceLine (OutputFile, Enode, &PrematureEOF, &Total);
> +    fprintf (OutputFile, "\n");
> +}
> +
> +
>   /*******************************************************************************
>    *
>    * FUNCTION:    AePrintErrorLog
> @@ -640,54 +779,72 @@ AePrintErrorLog (
>   
>   /*******************************************************************************
>    *
> - * FUNCTION:    AslCommonError2
> + * FUNCTION:    AslInitEnode
>    *
> - * PARAMETERS:  Level               - Seriousness (Warning/error, etc.)
> + * PARAMETERS:  InputEnode          - Input Error node to initialize
> + *              Level               - Seriousness (Warning/error, etc.)
>    *              MessageId           - Index into global message buffer
> - *              LineNumber          - Actual file line number
> + *              CurrentLineNumber   - Actual file line number
> + *              LogicalLineNumber   - Cumulative line number
> + *              LogicalByteOffset   - Byte offset in source file
>    *              Column              - Column in current line
> - *              SourceLine          - Actual source code line
>    *              Filename            - source filename
>    *              ExtraMessage        - additional error message
> + *              SourceLine          - Line of error source code
> + *              SubError            - SubError of this InputEnode
>    *
>    * RETURN:      None
>    *
> - * DESCRIPTION: Create a new error node and add it to the error log
> + * DESCRIPTION: Initialize an Error node
>    *
>    ******************************************************************************/
>   
> -void
> -AslCommonError2 (
> +static void AslInitEnode (
> +    ASL_ERROR_MSG           **InputEnode,
>       UINT8                   Level,
>       UINT16                  MessageId,
>       UINT32                  LineNumber,
> +    UINT32                  LogicalLineNumber,
> +    UINT32                  LogicalByteOffset,
>       UINT32                  Column,
> -    char                    *SourceLine,
>       char                    *Filename,
> -    char                    *ExtraMessage)
> +    char                    *ExtraMessage,
> +    char                    *SourceLine,
> +    ASL_ERROR_MSG           *SubError)
>   {
> -    char                    *MessageBuffer = NULL;
> -    char                    *LineBuffer;
>       ASL_ERROR_MSG           *Enode;
>   
>   
> -    Enode = UtLocalCalloc (sizeof (ASL_ERROR_MSG));
> +    *InputEnode = UtLocalCalloc (sizeof (ASL_ERROR_MSG));
> +    Enode = *InputEnode;
> +    Enode->Level                = Level;
> +    Enode->MessageId            = MessageId;
> +    Enode->LineNumber           = LineNumber;
> +    Enode->LogicalLineNumber    = LogicalLineNumber;
> +    Enode->LogicalByteOffset    = LogicalByteOffset;
> +    Enode->Column               = Column;
> +    Enode->SubError             = SubError;
> +    Enode->Message              = NULL;
> +    Enode->SourceLine           = NULL;
> +    Enode->Filename             = NULL;
>   
>       if (ExtraMessage)
>       {
>           /* Allocate a buffer for the message and a new error node */
>   
> -        MessageBuffer = UtStringCacheCalloc (strlen (ExtraMessage) + 1);
> +        Enode->Message = UtLocalCacheCalloc (strlen (ExtraMessage) + 1);
>   
>           /* Keep a copy of the extra message */
>   
> -        strcpy (MessageBuffer, ExtraMessage);
> +        strcpy (Enode->Message, ExtraMessage);
>       }
>   
> -    LineBuffer = UtLocalCalloc (strlen (SourceLine) + 1);
> -    strcpy (LineBuffer, SourceLine);
> +    if (SourceLine)
> +    {
> +        Enode->SourceLine = UtLocalCalloc (strlen (SourceLine) + 1);
> +        strcpy (Enode->SourceLine, SourceLine);
> +    }
>   
> -    /* Initialize the error node */
>   
>       if (Filename)
>       {
> @@ -698,28 +855,39 @@ AslCommonError2 (
>               Enode->FilenameLength = 6;
>           }
>       }
> +}
>   
> -    Enode->MessageId            = MessageId;
> -    Enode->Level                = Level;
> -    Enode->LineNumber           = LineNumber;
> -    Enode->LogicalLineNumber    = LineNumber;
> -    Enode->LogicalByteOffset    = 0;
> -    Enode->Column               = Column;
> -    Enode->Message              = MessageBuffer;
> -    Enode->SourceLine           = LineBuffer;
> -
> -    /* Add the new node to the error node list */
> -
> -    AeAddToErrorLog (Enode);
> -
> -    if (Gbl_DebugFlag)
> -    {
> -        /* stderr is a file, send error to it immediately */
>   
> -        AePrintException (ASL_FILE_STDERR, Enode, NULL);
> -    }
> +/*******************************************************************************
> + *
> + * FUNCTION:    AslCommonError2
> + *
> + * PARAMETERS:  Level               - Seriousness (Warning/error, etc.)
> + *              MessageId           - Index into global message buffer
> + *              LineNumber          - Actual file line number
> + *              Column              - Column in current line
> + *              SourceLine          - Actual source code line
> + *              Filename            - source filename
> + *              ExtraMessage        - additional error message
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Create a new error node and add it to the error log
> + *
> + ******************************************************************************/
>   
> -    Gbl_ExceptionCount[Level]++;
> +void
> +AslCommonError2 (
> +    UINT8                   Level,
> +    UINT16                  MessageId,
> +    UINT32                  LineNumber,
> +    UINT32                  Column,
> +    char                    *SourceLine,
> +    char                    *Filename,
> +    char                    *ExtraMessage)
> +{
> +    AslLogNewError (Level, MessageId, LineNumber, LineNumber, 0, Column,
> +        Filename, ExtraMessage, SourceLine, NULL);
>   }
>   
>   
> @@ -753,48 +921,51 @@ AslCommonError (
>       char                    *Filename,
>       char                    *ExtraMessage)
>   {
> -    char                    *MessageBuffer = NULL;
> -    ASL_ERROR_MSG           *Enode;
> -
> -
> -    if (AslIsExceptionIgnored (Level, MessageId))
> -    {
> -        return;
> -    }
> -
> -    Enode = UtLocalCalloc (sizeof (ASL_ERROR_MSG));
> -
> -    if (ExtraMessage)
> -    {
> -        /* Allocate a buffer for the message and a new error node */
> -
> -        MessageBuffer = UtStringCacheCalloc (strlen (ExtraMessage) + 1);
> -
> -        /* Keep a copy of the extra message */
> +    AslLogNewError (Level, MessageId, CurrentLineNumber, LogicalLineNumber,
> +        LogicalByteOffset, Column, Filename, ExtraMessage,
> +        NULL, NULL);
> +}
>   
> -        strcpy (MessageBuffer, ExtraMessage);
> -    }
>   
> -    /* Initialize the error node */
> +/*******************************************************************************
> + *
> + * FUNCTION:    AslLogNewError
> + *
> + * PARAMETERS:  Level               - Seriousness (Warning/error, etc.)
> + *              MessageId           - Index into global message buffer
> + *              CurrentLineNumber   - Actual file line number
> + *              LogicalLineNumber   - Cumulative line number
> + *              LogicalByteOffset   - Byte offset in source file
> + *              Column              - Column in current line
> + *              Filename            - source filename
> + *              Message             - additional error message
> + *              SourceLine          - Actual line of source code
> + *              SubError            - Sub-error associated with this error
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Create a new error node and add it to the error log
> + *
> + ******************************************************************************/
> +static void
> +AslLogNewError (
> +    UINT8                   Level,
> +    UINT16                  MessageId,
> +    UINT32                  LineNumber,
> +    UINT32                  LogicalLineNumber,
> +    UINT32                  LogicalByteOffset,
> +    UINT32                  Column,
> +    char                    *Filename,
> +    char                    *Message,
> +    char                    *SourceLine,
> +    ASL_ERROR_MSG           *SubError)
> +{
> +    ASL_ERROR_MSG           *Enode = NULL;
>   
> -    if (Filename)
> -    {
> -        Enode->Filename = Filename;
> -        Enode->FilenameLength = strlen (Filename);
> -        if (Enode->FilenameLength < 6)
> -        {
> -            Enode->FilenameLength = 6;
> -        }
> -    }
>   
> -    Enode->MessageId            = MessageId;
> -    Enode->Level                = Level;
> -    Enode->LineNumber           = CurrentLineNumber;
> -    Enode->LogicalLineNumber    = LogicalLineNumber;
> -    Enode->LogicalByteOffset    = LogicalByteOffset;
> -    Enode->Column               = Column;
> -    Enode->Message              = MessageBuffer;
> -    Enode->SourceLine           = NULL;
> +    AslInitEnode (&Enode, Level, MessageId, LineNumber, LogicalLineNumber,
> +        LogicalByteOffset, Column, Filename, Message, SourceLine,
> +        SubError);
>   
>       /* Add the new node to the error node list */
>   
> @@ -825,8 +996,8 @@ AslCommonError (
>    *
>    * FUNCTION:    AslIsExceptionIgnored
>    *
> - * PARAMETERS:  Level               - Seriousness (Warning/error, etc.)
> - *              MessageId           - Index into global message buffer
> + * PARAMETERS:  Level           - Seriousness (Warning/error, etc.)
> + *              MessageId       - Index into global message buffer
>    *
>    * RETURN:      BOOLEAN
>    *
> @@ -840,7 +1011,7 @@ AslIsExceptionIgnored (
>       UINT8                   Level,
>       UINT16                  MessageId)
>   {
> -    BOOLEAN ExceptionIgnored;
> +    BOOLEAN                 ExceptionIgnored;
>   
>   
>       /* Note: this allows exception to be disabled and expected */
> @@ -869,7 +1040,8 @@ void
>   AslCheckExpectedExceptions (
>       void)
>   {
> -    UINT8 i;
> +    UINT8                   i;
> +
>   
>       for (i = 0; i < Gbl_ExpectedMessagesIndex; ++i)
>       {
> @@ -980,8 +1152,8 @@ AslDisableException (
>    *
>    * FUNCTION:    AslIsExceptionDisabled
>    *
> - * PARAMETERS:  Level               - Seriousness (Warning/error, etc.)
> - *              MessageId           - Index into global message buffer
> + * PARAMETERS:  Level           - Seriousness (Warning/error, etc.)
> + *              MessageId       - Index into global message buffer
>    *
>    * RETURN:      TRUE if exception/message should be ignored
>    *
> @@ -999,9 +1171,8 @@ AslIsExceptionExpected (
>       UINT32                  i;
>   
>   
> -    /*
> -     * Mark this exception as received
> -     */
> +    /* Mark this exception as received */
> +
>       EncodedMessageId = AeBuildFullExceptionCode (Level, MessageId);
>       for (i = 0; i < Gbl_ExpectedMessagesIndex; i++)
>       {
> @@ -1080,6 +1251,61 @@ AslIsExceptionDisabled (
>   }
>   
>   
> +/*******************************************************************************
> + *
> + * FUNCTION:    AslDualParseOpError
> + *
> + * PARAMETERS:  Level           - Seriousness (Warning/error, etc.)
> + *              MainMsgId       - Index into global message buffer
> + *              MainOp          - Parse node where error happened
> + *              MainMsg         - Message pertaining to the MainOp
> + *              SubMsgId        - Index into global message buffer
> + *              SubOp           - Additional parse node for better message
> + *              SubMsg          - Message pertainint to SubOp
> + *
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Main error reporting routine for the ASL compiler for error
> + *              messages that point to multiple parse objects.
> + *
> + ******************************************************************************/
> +
> +void
> +AslDualParseOpError (
> +    UINT8                   Level,
> +    UINT16                  MainMsgId,
> +    ACPI_PARSE_OBJECT       *MainOp,
> +    char                    *MainMsg,
> +    UINT16                  SubMsgId,
> +    ACPI_PARSE_OBJECT       *SubOp,
> +    char                    *SubMsg)
> +{
> +    ASL_ERROR_MSG           *SubEnode = NULL;
> +
> +
> +    /* Check if user wants to ignore this exception */
> +
> +    if (AslIsExceptionIgnored (Level, MainMsgId) || !MainOp)
> +    {
> +        return;
> +    }
> +
> +    if (SubOp)
> +    {
> +        AslInitEnode (&SubEnode, Level, SubMsgId, SubOp->Asl.LineNumber,
> +            SubOp->Asl.LogicalLineNumber, SubOp->Asl.LogicalByteOffset,
> +            SubOp->Asl.Column, SubOp->Asl.Filename, SubMsg,
> +            NULL, NULL);
> +    }
> +
> +    AslLogNewError (Level, MainMsgId, MainOp->Asl.LineNumber,
> +        MainOp->Asl.LogicalLineNumber, MainOp->Asl.LogicalByteOffset,
> +        MainOp->Asl.Column, MainOp->Asl.Filename, MainMsg,
> +        NULL, SubEnode);
> +}
> +
> +
>   /*******************************************************************************
>    *
>    * FUNCTION:    AslError
> diff --git a/src/acpica/source/compiler/aslfiles.c b/src/acpica/source/compiler/aslfiles.c
> index 46307ab0..53df683e 100644
> --- a/src/acpica/source/compiler/aslfiles.c
> +++ b/src/acpica/source/compiler/aslfiles.c
> @@ -151,7 +151,6 @@
>   
>   #include "aslcompiler.h"
>   #include "acapps.h"
> -#include "dtcompiler.h"
>   
>   #define _COMPONENT          ACPI_COMPILER
>           ACPI_MODULE_NAME    ("aslfiles")
> @@ -326,14 +325,14 @@ FlMergePathnames (
>           (*FilePathname == '/') ||
>            (FilePathname[1] == ':'))
>       {
> -        Pathname = UtStringCacheCalloc (strlen (FilePathname) + 1);
> +        Pathname = UtLocalCacheCalloc (strlen (FilePathname) + 1);
>           strcpy (Pathname, FilePathname);
>           goto ConvertBackslashes;
>       }
>   
>       /* Need a local copy of the prefix directory path */
>   
> -    CommonPath = UtStringCacheCalloc (strlen (PrefixDir) + 1);
> +    CommonPath = UtLocalCacheCalloc (strlen (PrefixDir) + 1);
>       strcpy (CommonPath, PrefixDir);
>   
>       /*
> @@ -369,7 +368,7 @@ FlMergePathnames (
>       /* Build the final merged pathname */
>   
>   ConcatenatePaths:
> -    Pathname = UtStringCacheCalloc (
> +    Pathname = UtLocalCacheCalloc (
>           strlen (CommonPath) + strlen (FilePathname) + 2);
>       if (LastElement && *CommonPath)
>       {
> diff --git a/src/acpica/source/compiler/aslload.c b/src/acpica/source/compiler/aslload.c
> index 2c825f0f..7ccc0b58 100644
> --- a/src/acpica/source/compiler/aslload.c
> +++ b/src/acpica/source/compiler/aslload.c
> @@ -327,8 +327,9 @@ LdLoadFieldElements (
>                        * The name already exists in this scope
>                        * But continue processing the elements
>                        */
> -                    AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Child,
> -                        Child->Asl.Value.String);
> +                    AslDualParseOpError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Child,
> +                        Child->Asl.Value.String, ASL_MSG_FOUND_HERE, Node->Op,
> +                        Node->Op->Asl.ExternalName);
>                   }
>               }
>               else
> @@ -388,8 +389,10 @@ LdLoadResourceElements (
>           {
>               /* Actual node causing the error was saved in ParentMethod */
>   
> -            AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS,
> -                (ACPI_PARSE_OBJECT *) Op->Asl.ParentMethod, Op->Asl.Namepath);
> +            AslDualParseOpError (ASL_ERROR, ASL_MSG_NAME_EXISTS,
> +                (ACPI_PARSE_OBJECT *) Op->Asl.ParentMethod,
> +                Op->Asl.Namepath, ASL_MSG_FOUND_HERE, Node->Op,
> +                Node->Op->Asl.ExternalName);
>               return (AE_OK);
>           }
>           return (Status);
> @@ -805,8 +808,8 @@ LdNamespace1Begin (
>                   /*
>                    * Allow one create on an object or segment that was
>                    * previously declared External only if WalkState->OwnerId and
> -                 * Node->OwnerId are found in different tables (meaning that
> -                 * they have differnt OwnerIds).
> +                 * Node->OwnerId are different (meaning that the current WalkState
> +                 * and the Node are in different tables).
>                    */
>                   Node->Flags &= ~ANOBJ_IS_EXTERNAL;
>                   Node->Type = (UINT8) ObjectType;
> @@ -827,8 +830,9 @@ LdNamespace1Begin (
>                   if (Node->OwnerId == WalkState->OwnerId &&
>                       !(Node->Flags & IMPLICIT_EXTERNAL))
>                   {
> -                    AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op,
> -                        Op->Asl.ExternalName);
> +                    AslDualParseOpError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op,
> +                        Op->Asl.ExternalName, ASL_MSG_FOUND_HERE, Node->Op,
> +                        Node->Op->Asl.ExternalName);
>                   }
>                   if (Node->Flags & IMPLICIT_EXTERNAL)
>                   {
> @@ -849,8 +853,9 @@ LdNamespace1Begin (
>   
>                   if (Node->OwnerId == WalkState->OwnerId)
>                   {
> -                    AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op,
> -                        Op->Asl.ExternalName);
> +                    AslDualParseOpError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op,
> +                        Op->Asl.ExternalName, ASL_MSG_FOUND_HERE, Node->Op,
> +                        Node->Op->Asl.ExternalName);
>                   }
>               }
>               else if ((Node->Flags & ANOBJ_IS_EXTERNAL) &&
> @@ -905,8 +910,9 @@ LdNamespace1Begin (
>               {
>                   /* Valid error, object already exists */
>   
> -                AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op,
> -                    Op->Asl.ExternalName);
> +                AslDualParseOpError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op,
> +                    Op->Asl.ExternalName, ASL_MSG_FOUND_HERE, Node->Op,
> +                    Node->Op->Asl.ExternalName);
>                   return_ACPI_STATUS (AE_OK);
>               }
>           }
> diff --git a/src/acpica/source/compiler/aslmaputils.c b/src/acpica/source/compiler/aslmaputils.c
> index b66d176d..82b1d280 100644
> --- a/src/acpica/source/compiler/aslmaputils.c
> +++ b/src/acpica/source/compiler/aslmaputils.c
> @@ -212,7 +212,7 @@ MpGetHidFromParseTree (
>   
>               /* Convert EISAID to a string */
>   
> -            HidString = UtStringCacheCalloc (ACPI_EISAID_STRING_SIZE);
> +            HidString = UtLocalCacheCalloc (ACPI_EISAID_STRING_SIZE);
>               AcpiExEisaIdToString (HidString, Arg->Asl.Value.Integer);
>               return (HidString);
>   
> @@ -277,7 +277,7 @@ MpGetHidValue (
>   
>           /* Convert EISAID to a string */
>   
> -        HidString = UtStringCacheCalloc (ACPI_EISAID_STRING_SIZE);
> +        HidString = UtLocalCacheCalloc (ACPI_EISAID_STRING_SIZE);
>           AcpiExEisaIdToString (HidString, HidNode->Object->Integer.Value);
>           return (HidString);
>   
> diff --git a/src/acpica/source/compiler/aslmessages.c b/src/acpica/source/compiler/aslmessages.c
> index 159f9d23..5cff70a5 100644
> --- a/src/acpica/source/compiler/aslmessages.c
> +++ b/src/acpica/source/compiler/aslmessages.c
> @@ -350,7 +350,9 @@ const char                      *AslCompilerMsgs [] =
>   /*    ASL_MSG_CONSTANT_REQUIRED */          "Non-reducible expression",
>   /*    ASL_MSG_CROSS_TABLE_SCOPE */          "Illegal open scope on external object from within DSDT",
>   /*    ASL_MSG_EXCEPTION_NOT_RECEIVED */     "Expected remark, warning, or error did not occur. Message ID:",
> -/*    ASL_MSG_NULL_RESOURCE_TEMPLATE */     "Empty Resource Template (END_TAG only)"
> +/*    ASL_MSG_NULL_RESOURCE_TEMPLATE */     "Empty Resource Template (END_TAG only)",
> +/*    ASL_MSG_FOUND_HERE */                 "Original name creation/declaration below: ",
> +/*    ASL_MSG_ILLEGAL_RECURSION */          "Illegal recursive call to method that creates named objects"
>   };
>   
>   /* Table compiler */
> diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h
> index d69c05a1..a8018401 100644
> --- a/src/acpica/source/compiler/aslmessages.h
> +++ b/src/acpica/source/compiler/aslmessages.h
> @@ -353,6 +353,8 @@ typedef enum
>       ASL_MSG_CROSS_TABLE_SCOPE,
>       ASL_MSG_EXCEPTION_NOT_RECEIVED,
>       ASL_MSG_NULL_RESOURCE_TEMPLATE,
> +    ASL_MSG_FOUND_HERE,
> +    ASL_MSG_ILLEGAL_RECURSION,
>   
>       /* These messages are used by the Data Table compiler only */
>   
> diff --git a/src/acpica/source/compiler/aslmethod.c b/src/acpica/source/compiler/aslmethod.c
> index 9734b643..b2bb89c5 100644
> --- a/src/acpica/source/compiler/aslmethod.c
> +++ b/src/acpica/source/compiler/aslmethod.c
> @@ -347,10 +347,31 @@ MtMethodAnalysisWalkBegin (
>   
>       case PARSEOP_METHODCALL:
>   
> +        /* Check for a recursive method call */
> +
>           if (MethodInfo &&
>              (Op->Asl.Node == MethodInfo->Op->Asl.Node))
>           {
> -            AslError (ASL_REMARK, ASL_MSG_RECURSION, Op, Op->Asl.ExternalName);
> +            if (MethodInfo->CreatesNamedObjects)
> +            {
> +                /*
> +                 * This is an error, as it will fail at runtime on all ACPI
> +                 * implementations. Any named object declarations will be
> +                 * executed twice, causing failure the second time. Note,
> +                 * this is independent of whether the method is declared
> +                 * Serialized, because the same thread is attempting to
> +                 * reenter the method, and this will always succeed.
> +                 */
> +                AslDualParseOpError (ASL_ERROR, ASL_MSG_ILLEGAL_RECURSION, Op,
> +                    Op->Asl.Value.String, ASL_MSG_FOUND_HERE, MethodInfo->Op,
> +                    MethodInfo->Op->Asl.ExternalName);
> +            }
> +            else
> +            {
> +                /* Method does not create objects, issue a remark */
> +
> +                AslError (ASL_REMARK, ASL_MSG_RECURSION, Op, Op->Asl.ExternalName);
> +            }
>           }
>           break;
>   
> @@ -622,20 +643,28 @@ MtCheckNamedObjectInMethod (
>           return;
>       }
>   
> -    /* Determine if we are creating a named object */
> +    /* Determine if we are creating a named object within a method */
> +
> +    if (!MethodInfo)
> +    {
> +        return;
> +    }
>   
>       OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode);
>       if (OpInfo->Class == AML_CLASS_NAMED_OBJECT)
>       {
>           /*
> -         * If we have a named object created within a non-serialized method,
> -         * emit a remark that the method should be serialized.
> +         * 1) Mark the method as a method that creates named objects.
> +         *
> +         * 2) If the method is non-serialized, emit a remark that the method
> +         * should be serialized.
>            *
>            * Reason: If a thread blocks within the method for any reason, and
> -         * another thread enters the method, the method will fail because an
> -         * attempt will be made to create the same object twice.
> +         * another thread enters the method, the method will fail because
> +         * an attempt will be made to create the same object twice.
>            */
> -        if (MethodInfo && !MethodInfo->ShouldBeSerialized)
> +        MethodInfo->CreatesNamedObjects = TRUE;
> +        if (!MethodInfo->ShouldBeSerialized)
>           {
>               AslError (ASL_REMARK, ASL_MSG_SERIALIZED_REQUIRED, MethodInfo->Op,
>                   "due to creation of named objects within");
> diff --git a/src/acpica/source/compiler/asloperands.c b/src/acpica/source/compiler/asloperands.c
> index 03403a39..9e5788fa 100644
> --- a/src/acpica/source/compiler/asloperands.c
> +++ b/src/acpica/source/compiler/asloperands.c
> @@ -1037,7 +1037,7 @@ OpnDoDefinitionBlock (
>            * We will use the AML filename that is embedded in the source file
>            * for the output filename.
>            */
> -        Filename = UtStringCacheCalloc (strlen (Gbl_DirectoryPath) +
> +        Filename = UtLocalCacheCalloc (strlen (Gbl_DirectoryPath) +
>               strlen ((char *) Child->Asl.Value.Buffer) + 1);
>   
>           /* Prepend the current directory path */
> @@ -1094,7 +1094,7 @@ OpnDoDefinitionBlock (
>       if (Child->Asl.Value.String)
>       {
>           Length = strlen (Child->Asl.Value.String);
> -        Gbl_TableId = UtStringCacheCalloc (Length + 1);
> +        Gbl_TableId = UtLocalCacheCalloc (Length + 1);
>           strcpy (Gbl_TableId, Child->Asl.Value.String);
>   
>           /*
> diff --git a/src/acpica/source/compiler/aslopt.c b/src/acpica/source/compiler/aslopt.c
> index 79e41da2..fa92d711 100644
> --- a/src/acpica/source/compiler/aslopt.c
> +++ b/src/acpica/source/compiler/aslopt.c
> @@ -275,7 +275,7 @@ OptSearchToRoot (
>   
>       /* We must allocate a new string for the name (TargetPath gets deleted) */
>   
> -    *NewPath = UtStringCacheCalloc (ACPI_NAME_SIZE + 1);
> +    *NewPath = UtLocalCacheCalloc (ACPI_NAME_SIZE + 1);
>       strcpy (*NewPath, Path);
>   
>       if (strncmp (*NewPath, "_T_", 3))
> diff --git a/src/acpica/source/compiler/aslparseop.c b/src/acpica/source/compiler/aslparseop.c
> index 41badcee..438e5a28 100644
> --- a/src/acpica/source/compiler/aslparseop.c
> +++ b/src/acpica/source/compiler/aslparseop.c
> @@ -158,13 +158,6 @@
>           ACPI_MODULE_NAME    ("aslparseop")
>   
>   
> -/* Local prototypes */
> -
> -static ACPI_PARSE_OBJECT *
> -TrGetOpFromCache (
> -    void);
> -
> -
>   /*******************************************************************************
>    *
>    * FUNCTION:    TrCreateOp
> @@ -490,7 +483,7 @@ TrCreateTargetOp (
>           return (NULL);
>       }
>   
> -    Op = TrGetOpFromCache ();
> +    Op = UtParseOpCacheCalloc ();
>   
>       /* Copy the pertinent values (omit link pointer fields) */
>   
> @@ -788,7 +781,7 @@ TrAllocateOp (
>       ACPI_PARSE_OBJECT       *LatestOp;
>   
>   
> -    Op = TrGetOpFromCache ();
> +    Op = UtParseOpCacheCalloc ();
>   
>       Op->Asl.ParseOpcode       = (UINT16) ParseOpcode;
>       Op->Asl.Filename          = Gbl_Files[ASL_FILE_INPUT].Filename;
> @@ -875,50 +868,6 @@ TrAllocateOp (
>   }
>   
>   
> -/*******************************************************************************
> - *
> - * FUNCTION:    TrGetOpFromCache
> - *
> - * PARAMETERS:  None
> - *
> - * RETURN:      New parse op. Aborts on allocation failure
> - *
> - * DESCRIPTION: Allocate a new parse op for the parse tree. Bypass the local
> - *              dynamic memory manager for performance reasons (This has a
> - *              major impact on the speed of the compiler.)
> - *
> - ******************************************************************************/
> -
> -static ACPI_PARSE_OBJECT *
> -TrGetOpFromCache (
> -    void)
> -{
> -    ASL_CACHE_INFO          *Cache;
> -
> -
> -    if (Gbl_ParseOpCacheNext >= Gbl_ParseOpCacheLast)
> -    {
> -        /* Allocate a new buffer */
> -
> -        Cache = UtLocalCalloc (sizeof (Cache->Next) +
> -            (sizeof (ACPI_PARSE_OBJECT) * ASL_PARSEOP_CACHE_SIZE));
> -
> -        /* Link new cache buffer to head of list */
> -
> -        Cache->Next = Gbl_ParseOpCacheList;
> -        Gbl_ParseOpCacheList = Cache;
> -
> -        /* Setup cache management pointers */
> -
> -        Gbl_ParseOpCacheNext = ACPI_CAST_PTR (ACPI_PARSE_OBJECT, Cache->Buffer);
> -        Gbl_ParseOpCacheLast = Gbl_ParseOpCacheNext + ASL_PARSEOP_CACHE_SIZE;
> -    }
> -
> -    Gbl_ParseOpCount++;
> -    return (Gbl_ParseOpCacheNext++);
> -}
> -
> -
>   /*******************************************************************************
>    *
>    * FUNCTION:    TrPrintOpFlags
> diff --git a/src/acpica/source/compiler/aslprintf.c b/src/acpica/source/compiler/aslprintf.c
> index e5f56f11..48c2fb1f 100644
> --- a/src/acpica/source/compiler/aslprintf.c
> +++ b/src/acpica/source/compiler/aslprintf.c
> @@ -293,7 +293,7 @@ OpcParsePrintf (
>   
>           if (StringToProcess)
>           {
> -            NewString = UtStringCacheCalloc (StringLength + 1);
> +            NewString = UtLocalCacheCalloc (StringLength + 1);
>               strncpy (NewString, StartPosition, StringLength);
>   
>               NewOp = TrAllocateOp (PARSEOP_STRING_LITERAL);
> @@ -382,7 +382,7 @@ OpcParsePrintf (
>   
>       if (StringToProcess)
>       {
> -        NewString = UtStringCacheCalloc (StringLength + 1);
> +        NewString = UtLocalCacheCalloc (StringLength + 1);
>           strncpy (NewString, StartPosition, StringLength);
>   
>           NewOp = TrAllocateOp (PARSEOP_STRING_LITERAL);
> diff --git a/src/acpica/source/compiler/aslstartup.c b/src/acpica/source/compiler/aslstartup.c
> index 72c0d641..fa1ac25b 100644
> --- a/src/acpica/source/compiler/aslstartup.c
> +++ b/src/acpica/source/compiler/aslstartup.c
> @@ -410,7 +410,7 @@ AslDoDisassembly (
>   
>       Gbl_Files[ASL_FILE_INPUT].Filename = NULL;
>   
> -    CmDeleteCaches ();
> +    UtDeleteLocalCaches ();
>       return (AE_OK);
>   }
>   
> @@ -453,7 +453,7 @@ AslDoOneFile (
>       /* Take a copy of the input filename, convert any backslashes */
>   
>       Gbl_Files[ASL_FILE_INPUT].Filename =
> -        UtStringCacheCalloc (strlen (Filename) + 1);
> +        UtLocalCacheCalloc (strlen (Filename) + 1);
>   
>       strcpy (Gbl_Files[ASL_FILE_INPUT].Filename, Filename);
>       UtConvertBackslashes (Gbl_Files[ASL_FILE_INPUT].Filename);
> diff --git a/src/acpica/source/compiler/aslsupport.l b/src/acpica/source/compiler/aslsupport.l
> index 42cee752..40cead33 100644
> --- a/src/acpica/source/compiler/aslsupport.l
> +++ b/src/acpica/source/compiler/aslsupport.l
> @@ -382,7 +382,7 @@ AslPushInputFileStack (
>       /* Reset the global line count and filename */
>   
>       Gbl_Files[ASL_FILE_INPUT].Filename =
> -        UtStringCacheCalloc (strlen (Filename) + 1);
> +        UtLocalCacheCalloc (strlen (Filename) + 1);
>   
>       strcpy (Gbl_Files[ASL_FILE_INPUT].Filename, Filename);
>   
> @@ -1009,7 +1009,7 @@ CompletedString:
>        */
>       *StringBuffer = 0;
>   
> -    CleanString = UtStringCacheCalloc (strlen (MsgBuffer) + 1);
> +    CleanString = UtLocalCacheCalloc (strlen (MsgBuffer) + 1);
>       strcpy (CleanString, MsgBuffer);
>       AslCompilerlval.s = CleanString;
>       return (TRUE);
> diff --git a/src/acpica/source/compiler/asltypes.h b/src/acpica/source/compiler/asltypes.h
> index e4250871..f72226d5 100644
> --- a/src/acpica/source/compiler/asltypes.h
> +++ b/src/acpica/source/compiler/asltypes.h
> @@ -202,6 +202,7 @@ typedef struct asl_method_info
>       UINT8                   ArgInitialized[ACPI_METHOD_NUM_ARGS];
>       UINT8                   HasBeenTyped;
>       UINT8                   ShouldBeSerialized;
> +    UINT8                   CreatesNamedObjects;
>   
>   } ASL_METHOD_INFO;
>   
> @@ -337,8 +338,11 @@ typedef struct asl_include_dir
>   } ASL_INCLUDE_DIR;
>   
>   
> -/* An entry in the exception list, one for each error/warning */
> -
> +/*
> + * An entry in the exception list, one for each error/warning
> + * Note: SubError nodes would be treated with the same messageId and Level
> + * as the parent error node.
> + */
>   typedef struct asl_error_msg
>   {
>       UINT32                      LineNumber;
> @@ -347,6 +351,7 @@ typedef struct asl_error_msg
>       UINT32                      Column;
>       char                        *Message;
>       struct asl_error_msg        *Next;
> +    struct asl_error_msg        *SubError;
>       char                        *Filename;
>       char                        *SourceLine;
>       UINT32                      FilenameLength;
> diff --git a/src/acpica/source/compiler/aslutils.c b/src/acpica/source/compiler/aslutils.c
> index 8b46d38b..82d11b4b 100644
> --- a/src/acpica/source/compiler/aslutils.c
> +++ b/src/acpica/source/compiler/aslutils.c
> @@ -174,12 +174,6 @@ UtAttachNameseg (
>       ACPI_PARSE_OBJECT       *Op,
>       char                    *Name);
>   
> -static void
> -UtReallocLineBuffers (
> -    char                    **Buffer,
> -    UINT32                  OldSize,
> -    UINT32                  NewSize);
> -
>   
>   /*******************************************************************************
>    *
> @@ -309,45 +303,6 @@ UtDisplayConstantOpcodes (
>   }
>   
>   
> -/*******************************************************************************
> - *
> - * FUNCTION:    UtLocalCalloc
> - *
> - * PARAMETERS:  Size                - Bytes to be allocated
> - *
> - * RETURN:      Pointer to the allocated memory. Guaranteed to be valid.
> - *
> - * DESCRIPTION: Allocate zero-initialized memory. Aborts the compile on an
> - *              allocation failure, on the assumption that nothing more can be
> - *              accomplished.
> - *
> - ******************************************************************************/
> -
> -void *
> -UtLocalCalloc (
> -    UINT32                  Size)
> -{
> -    void                    *Allocated;
> -
> -
> -    Allocated = ACPI_ALLOCATE_ZEROED (Size);
> -    if (!Allocated)
> -    {
> -        AslCommonError (ASL_ERROR, ASL_MSG_MEMORY_ALLOCATION,
> -            Gbl_CurrentLineNumber, Gbl_LogicalLineNumber,
> -            Gbl_InputByteCount, Gbl_CurrentColumn,
> -            Gbl_Files[ASL_FILE_INPUT].Filename, NULL);
> -
> -        CmCleanupAndExit ();
> -        exit (1);
> -    }
> -
> -    TotalAllocations++;
> -    TotalAllocated += Size;
> -    return (Allocated);
> -}
> -
> -
>   /*******************************************************************************
>    *
>    * FUNCTION:    UtBeginEvent
> @@ -635,180 +590,6 @@ UtCheckIntegerRange (
>   }
>   
>   
> -/*******************************************************************************
> - *
> - * FUNCTION:    UtStringCacheCalloc
> - *
> - * PARAMETERS:  Length              - Size of buffer requested
> - *
> - * RETURN:      Pointer to the buffer. Aborts compiler on allocation failure
> - *
> - * DESCRIPTION: Allocate a string buffer. Bypass the local
> - *              dynamic memory manager for performance reasons (This has a
> - *              major impact on the speed of the compiler.)
> - *
> - ******************************************************************************/
> -
> -char *
> -UtStringCacheCalloc (
> -    UINT32                  Length)
> -{
> -    char                    *Buffer;
> -    ASL_CACHE_INFO          *Cache;
> -    UINT32                  CacheSize = ASL_STRING_CACHE_SIZE;
> -
> -
> -    if (Length > CacheSize)
> -    {
> -        CacheSize = Length;
> -
> -        if (Gbl_StringCacheList)
> -        {
> -            Cache = UtLocalCalloc (sizeof (Cache->Next) + CacheSize);
> -
> -            /* Link new cache buffer just following head of list */
> -
> -            Cache->Next = Gbl_StringCacheList->Next;
> -            Gbl_StringCacheList->Next = Cache;
> -
> -            /* Leave cache management pointers alone as they pertain to head */
> -
> -            Gbl_StringCount++;
> -            Gbl_StringSize += Length;
> -
> -            return (Cache->Buffer);
> -        }
> -    }
> -
> -    if ((Gbl_StringCacheNext + Length) >= Gbl_StringCacheLast)
> -    {
> -        /* Allocate a new buffer */
> -
> -        Cache = UtLocalCalloc (sizeof (Cache->Next) + CacheSize);
> -
> -        /* Link new cache buffer to head of list */
> -
> -        Cache->Next = Gbl_StringCacheList;
> -        Gbl_StringCacheList = Cache;
> -
> -        /* Setup cache management pointers */
> -
> -        Gbl_StringCacheNext = Cache->Buffer;
> -        Gbl_StringCacheLast = Gbl_StringCacheNext + CacheSize;
> -    }
> -
> -    Gbl_StringCount++;
> -    Gbl_StringSize += Length;
> -
> -    Buffer = Gbl_StringCacheNext;
> -    Gbl_StringCacheNext += Length;
> -    return (Buffer);
> -}
> -
> -
> -/******************************************************************************
> - *
> - * FUNCTION:    UtExpandLineBuffers
> - *
> - * PARAMETERS:  None. Updates global line buffer pointers.
> - *
> - * RETURN:      None. Reallocates the global line buffers
> - *
> - * DESCRIPTION: Called if the current line buffer becomes filled. Reallocates
> - *              all global line buffers and updates Gbl_LineBufferSize. NOTE:
> - *              Also used for the initial allocation of the buffers, when
> - *              all of the buffer pointers are NULL. Initial allocations are
> - *              of size ASL_DEFAULT_LINE_BUFFER_SIZE
> - *
> - *****************************************************************************/
> -
> -void
> -UtExpandLineBuffers (
> -    void)
> -{
> -    UINT32                  NewSize;
> -
> -
> -    /* Attempt to double the size of all line buffers */
> -
> -    NewSize = Gbl_LineBufferSize * 2;
> -    if (Gbl_CurrentLineBuffer)
> -    {
> -        DbgPrint (ASL_DEBUG_OUTPUT,
> -            "Increasing line buffer size from %u to %u\n",
> -            Gbl_LineBufferSize, NewSize);
> -    }
> -
> -    UtReallocLineBuffers (&Gbl_CurrentLineBuffer, Gbl_LineBufferSize, NewSize);
> -    UtReallocLineBuffers (&Gbl_MainTokenBuffer, Gbl_LineBufferSize, NewSize);
> -    UtReallocLineBuffers (&Gbl_MacroTokenBuffer, Gbl_LineBufferSize, NewSize);
> -    UtReallocLineBuffers (&Gbl_ExpressionTokenBuffer, Gbl_LineBufferSize, NewSize);
> -
> -    Gbl_LineBufPtr = Gbl_CurrentLineBuffer;
> -    Gbl_LineBufferSize = NewSize;
> -}
> -
> -
> -/******************************************************************************
> - *
> - * FUNCTION:    UtReallocLineBuffers
> - *
> - * PARAMETERS:  Buffer              - Buffer to realloc
> - *              OldSize             - Old size of Buffer
> - *              NewSize             - New size of Buffer
> - *
> - * RETURN:      none
> - *
> - * DESCRIPTION: Reallocate and initialize Buffer
> - *
> - *****************************************************************************/
> -
> -static void
> -UtReallocLineBuffers (
> -    char                    **Buffer,
> -    UINT32                  OldSize,
> -    UINT32                  NewSize)
> -{
> -
> -    *Buffer = realloc (*Buffer, NewSize);
> -    if (*Buffer)
> -    {
> -        memset (*Buffer + OldSize, 0, NewSize - OldSize);
> -        return;
> -    }
> -
> -    printf ("Could not increase line buffer size from %u to %u\n",
> -        OldSize, NewSize);
> -
> -    AslError (ASL_ERROR, ASL_MSG_BUFFER_ALLOCATION, NULL, NULL);
> -    AslAbort ();
> -}
> -
> -
> -/******************************************************************************
> - *
> - * FUNCTION:    UtFreeLineBuffers
> - *
> - * PARAMETERS:  None
> - *
> - * RETURN:      None
> - *
> - * DESCRIPTION: Free all line buffers
> - *
> - *****************************************************************************/
> -
> -void
> -UtFreeLineBuffers (
> -    void)
> -{
> -
> -    free (Gbl_CurrentLineBuffer);
> -    free (Gbl_MainTokenBuffer);
> -    free (Gbl_MacroTokenBuffer);
> -    free (Gbl_ExpressionTokenBuffer);
> -}
> -
> -
>   /*******************************************************************************
>    *
>    * FUNCTION:    UtInternalizeName
> @@ -843,7 +624,7 @@ UtInternalizeName (
>   
>       /* We need a segment to store the internal name */
>   
> -    Info.InternalName = UtStringCacheCalloc (Info.Length);
> +    Info.InternalName = UtLocalCacheCalloc (Info.Length);
>   
>       /* Build the name */
>   
> diff --git a/src/acpica/source/compiler/cvcompiler.c b/src/acpica/source/compiler/cvcompiler.c
> index afb6ea1b..d2a6c8f0 100644
> --- a/src/acpica/source/compiler/cvcompiler.c
> +++ b/src/acpica/source/compiler/cvcompiler.c
> @@ -193,7 +193,7 @@ CvProcessComment (
>           *StringBuffer = 0;
>   
>           CvDbgPrint ("Multi-line comment\n");
> -        CommentString = UtStringCacheCalloc (strlen (MsgBuffer) + 1);
> +        CommentString = UtLocalCacheCalloc (strlen (MsgBuffer) + 1);
>           strcpy (CommentString, MsgBuffer);
>   
>           CvDbgPrint ("CommentString: %s\n", CommentString);
> @@ -208,7 +208,7 @@ CvProcessComment (
>   
>           if (LineToken)
>           {
> -            FinalLineToken = UtStringCacheCalloc (strlen (LineToken) + 1);
> +            FinalLineToken = UtLocalCacheCalloc (strlen (LineToken) + 1);
>               strcpy (FinalLineToken, LineToken);
>   
>               /* Get rid of any carriage returns */
> @@ -238,7 +238,7 @@ CvProcessComment (
>                       }
>                   }
>   
> -                FinalLineToken = UtStringCacheCalloc (strlen (LineToken) + 1);
> +                FinalLineToken = UtLocalCacheCalloc (strlen (LineToken) + 1);
>                   strcat (FinalLineToken, LineToken);
>   
>                   /* Get rid of any carriage returns */
> @@ -268,7 +268,7 @@ CvProcessComment (
>               * spacing.
>               */
>               FinalCommentString =
> -                UtStringCacheCalloc (strlen (CommentString) +
> +                UtLocalCacheCalloc (strlen (CommentString) +
>                   CurrentState.SpacesBefore + 1);
>   
>               for (i = 0; (CurrentState.CommentType != ASL_COMMENT_STANDARD) &&
> @@ -313,7 +313,7 @@ CvProcessCommentType2 (
>       {
>           *StringBuffer = 0; /* null terminate */
>           CvDbgPrint ("Single-line comment\n");
> -        CommentString = UtStringCacheCalloc (strlen (MsgBuffer) + 1);
> +        CommentString = UtLocalCacheCalloc (strlen (MsgBuffer) + 1);
>           strcpy (CommentString, MsgBuffer);
>   
>           /* If this comment lies on the same line as the latest parse op,
> @@ -342,7 +342,7 @@ CvProcessCommentType2 (
>            * [ (spaces) (comment)  ( * /) ('\0') ]
>            *
>            */
> -        FinalCommentString = UtStringCacheCalloc (CurrentState.SpacesBefore +
> +        FinalCommentString = UtLocalCacheCalloc (CurrentState.SpacesBefore +
>               strlen (CommentString) + 3 + 1);
>   
>           for (i = 0; (CurrentState.CommentType != 1) &&
> @@ -507,7 +507,7 @@ CgWriteAmlDefBlockComment(
>   
>       /* First, print the file name comment after changing .asl to .dsl */
>   
> -    NewFilename = UtStringCacheCalloc (strlen (Op->Asl.Filename));
> +    NewFilename = UtLocalCacheCalloc (strlen (Op->Asl.Filename));
>       strcpy (NewFilename, Op->Asl.Filename);
>       DirectoryPosition = strrchr (NewFilename, '/');
>       Position = strrchr (NewFilename, '.');
> @@ -944,7 +944,7 @@ CvAppendInlineComment (
>   
>       Size = strlen (ToAdd);
>       Size += strlen (InlineComment);
> -    Str = UtStringCacheCalloc (Size + 1);
> +    Str = UtLocalCacheCalloc (Size + 1);
>   
>       strcpy (Str, InlineComment);
>       strcat (Str, ToAdd);
> diff --git a/src/acpica/source/compiler/cvparser.c b/src/acpica/source/compiler/cvparser.c
> index 9941582a..b2e3e767 100644
> --- a/src/acpica/source/compiler/cvparser.c
> +++ b/src/acpica/source/compiler/cvparser.c
> @@ -714,7 +714,7 @@ CvCaptureCommentsOnly (
>       UINT8                   *Aml = ParserState->Aml;
>       UINT16                  Opcode = (UINT16) ACPI_GET8 (Aml);
>       UINT32                  Length = 0;
> -    UINT8                   CommentOption = (UINT16) ACPI_GET8 (Aml+1);
> +    UINT8                   CommentOption;
>       BOOLEAN                 StdDefBlockFlag = FALSE;
>       ACPI_COMMENT_NODE       *CommentNode;
>       ACPI_FILE_NODE          *FileNode;
> diff --git a/src/acpica/source/compiler/dtcompile.c b/src/acpica/source/compiler/dtcompile.c
> index 53445624..0823196f 100644
> --- a/src/acpica/source/compiler/dtcompile.c
> +++ b/src/acpica/source/compiler/dtcompile.c
> @@ -152,7 +152,6 @@
>   #define _DECLARE_DT_GLOBALS
>   
>   #include "aslcompiler.h"
> -#include "dtcompiler.h"
>   
>   #define _COMPONENT          DT_COMPILER
>           ACPI_MODULE_NAME    ("dtcompile")
> @@ -281,7 +280,6 @@ DtDoCompile (
>   CleanupAndExit:
>   
>       AcpiUtDeleteCaches ();
> -    DtDeleteCaches ();
>       CmCleanupAndExit ();
>       return (Status);
>   }
> @@ -412,7 +410,7 @@ DtCompileDataTable (
>           return (AE_ERROR);
>       }
>   
> -    Gbl_Signature = UtStringCacheCalloc (strlen (Signature) + 1);
> +    Gbl_Signature = UtLocalCacheCalloc (strlen (Signature) + 1);
>       strcpy (Gbl_Signature, Signature);
>   
>       /*
> @@ -585,7 +583,7 @@ DtCompileTable (
>   
>       if (Length > 0)
>       {
> -        String = UtStringCacheCalloc (Length);
> +        String = UtLocalCacheCalloc (Length);
>           Subtable->Buffer = ACPI_CAST_PTR (UINT8, String);
>       }
>   
> @@ -828,7 +826,7 @@ DtCompilePadding (
>   
>       if (Length > 0)
>       {
> -        String = UtStringCacheCalloc (Length);
> +        String = UtLocalCacheCalloc (Length);
>           Subtable->Buffer = ACPI_CAST_PTR (UINT8, String);
>       }
>   
> diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h
> index 90fad889..941e2c65 100644
> --- a/src/acpica/source/compiler/dtcompiler.h
> +++ b/src/acpica/source/compiler/dtcompiler.h
> @@ -154,7 +154,6 @@
>   #ifndef _DTCOMPILER
>   #define _DTCOMPILER
>   
> -#include <stdio.h>
>   #include "acdisasm.h"
>   
>   
> @@ -510,18 +509,6 @@ void
>   DtSetTableLength(
>       void);
>   
> -DT_SUBTABLE *
> -UtSubtableCacheCalloc (
> -    void);
> -
> -DT_FIELD *
> -UtFieldCacheCalloc (
> -    void);
> -
> -void
> -DtDeleteCaches (
> -    void);
> -
>   
>   /* dttable - individual table compilation */
>   
> @@ -622,15 +609,19 @@ DtCompileNfit (
>       void                    **PFieldList);
>   
>   ACPI_STATUS
> -DtCompilePmtt (
> +DtCompilePcct (
>       void                    **PFieldList);
>   
>   ACPI_STATUS
> -DtCompilePptt (
> +DtCompilePdtt (
>       void                    **PFieldList);
>   
>   ACPI_STATUS
> -DtCompilePcct (
> +DtCompilePmtt (
> +    void                    **PFieldList);
> +
> +ACPI_STATUS
> +DtCompilePptt (
>       void                    **PFieldList);
>   
>   ACPI_STATUS
> @@ -641,6 +632,10 @@ ACPI_STATUS
>   DtCompileS3pt (
>       DT_FIELD                **PFieldList);
>   
> +ACPI_STATUS
> +DtCompileSdev (
> +    void                    **PFieldList);
> +
>   ACPI_STATUS
>   DtCompileSlic (
>       void                    **PFieldList);
> @@ -661,6 +656,10 @@ ACPI_STATUS
>   DtCompileTcpa (
>       void                    **PFieldList);
>   
> +ACPI_STATUS
> +DtCompileTpm2 (
> +    void                    **PFieldList);
> +
>   ACPI_STATUS
>   DtCompileUefi (
>       void                    **PFieldList);
> @@ -724,6 +723,7 @@ extern const unsigned char  TemplateMsdm[];
>   extern const unsigned char  TemplateMtmr[];
>   extern const unsigned char  TemplateNfit[];
>   extern const unsigned char  TemplatePcct[];
> +extern const unsigned char  TemplatePdtt[];
>   extern const unsigned char  TemplatePmtt[];
>   extern const unsigned char  TemplatePptt[];
>   extern const unsigned char  TemplateRasf[];
> @@ -731,6 +731,7 @@ extern const unsigned char  TemplateRsdt[];
>   extern const unsigned char  TemplateS3pt[];
>   extern const unsigned char  TemplateSbst[];
>   extern const unsigned char  TemplateSdei[];
> +extern const unsigned char  TemplateSdev[];
>   extern const unsigned char  TemplateSlic[];
>   extern const unsigned char  TemplateSlit[];
>   extern const unsigned char  TemplateSpcr[];
> diff --git a/src/acpica/source/compiler/dtexpress.c b/src/acpica/source/compiler/dtexpress.c
> index 4e0ac89a..8b97bdc0 100644
> --- a/src/acpica/source/compiler/dtexpress.c
> +++ b/src/acpica/source/compiler/dtexpress.c
> @@ -150,7 +150,6 @@
>    *****************************************************************************/
>   
>   #include "aslcompiler.h"
> -#include "dtcompiler.h"
>   #include "dtparser.y.h"
>   
>   #define _COMPONENT          DT_COMPILER
> diff --git a/src/acpica/source/compiler/dtfield.c b/src/acpica/source/compiler/dtfield.c
> index b06877a8..290fa18b 100644
> --- a/src/acpica/source/compiler/dtfield.c
> +++ b/src/acpica/source/compiler/dtfield.c
> @@ -150,7 +150,6 @@
>    *****************************************************************************/
>   
>   #include "aslcompiler.h"
> -#include "dtcompiler.h"
>   
>   #define _COMPONENT          DT_COMPILER
>           ACPI_MODULE_NAME    ("dtfield")
> diff --git a/src/acpica/source/compiler/dtio.c b/src/acpica/source/compiler/dtio.c
> index 0112999e..1d8ee98b 100644
> --- a/src/acpica/source/compiler/dtio.c
> +++ b/src/acpica/source/compiler/dtio.c
> @@ -150,7 +150,6 @@
>    *****************************************************************************/
>   
>   #include "aslcompiler.h"
> -#include "dtcompiler.h"
>   #include "acapps.h"
>   
>   #define _COMPONENT          DT_COMPILER
> @@ -239,7 +238,7 @@ DtTrim (
>   
>       if (!strcmp (String, " "))
>       {
> -        ReturnString = UtStringCacheCalloc (1);
> +        ReturnString = UtLocalCacheCalloc (1);
>           return (ReturnString);
>       }
>   
> @@ -287,7 +286,7 @@ DtTrim (
>       /* Create the trimmed return string */
>   
>       Length = ACPI_PTR_DIFF (End, Start) + 1;
> -    ReturnString = UtStringCacheCalloc (Length + 1);
> +    ReturnString = UtLocalCacheCalloc (Length + 1);
>       if (strlen (Start))
>       {
>           strncpy (ReturnString, Start, Length);
> diff --git a/src/acpica/source/compiler/dtparser.y b/src/acpica/source/compiler/dtparser.y
> index d5990fe4..17607d96 100644
> --- a/src/acpica/source/compiler/dtparser.y
> +++ b/src/acpica/source/compiler/dtparser.y
> @@ -151,7 +151,6 @@
>    *****************************************************************************/
>   
>   #include "aslcompiler.h"
> -#include "dtcompiler.h"
>   
>   #define _COMPONENT          DT_COMPILER
>           ACPI_MODULE_NAME    ("dtparser")
> diff --git a/src/acpica/source/compiler/dtsubtable.c b/src/acpica/source/compiler/dtsubtable.c
> index 44e36492..c7b85e90 100644
> --- a/src/acpica/source/compiler/dtsubtable.c
> +++ b/src/acpica/source/compiler/dtsubtable.c
> @@ -150,7 +150,6 @@
>    *****************************************************************************/
>   
>   #include "aslcompiler.h"
> -#include "dtcompiler.h"
>   
>   #define _COMPONENT          DT_COMPILER
>           ACPI_MODULE_NAME    ("dtsubtable")
> @@ -186,7 +185,7 @@ DtCreateSubtable (
>   
>       /* Create a new buffer for the subtable data */
>   
> -    String = UtStringCacheCalloc (Length);
> +    String = UtLocalCacheCalloc (Length);
>       Subtable->Buffer = ACPI_CAST_PTR (UINT8, String);
>       memcpy (Subtable->Buffer, Buffer, Length);
>   
> diff --git a/src/acpica/source/compiler/dttable.c b/src/acpica/source/compiler/dttable.c
> index 08b862d1..91e7544a 100644
> --- a/src/acpica/source/compiler/dttable.c
> +++ b/src/acpica/source/compiler/dttable.c
> @@ -152,7 +152,6 @@
>   /* Compile routines for the basic ACPI tables */
>   
>   #include "aslcompiler.h"
> -#include "dtcompiler.h"
>   
>   #define _COMPONENT          DT_COMPILER
>           ACPI_MODULE_NAME    ("dttable")
> diff --git a/src/acpica/source/compiler/dttable1.c b/src/acpica/source/compiler/dttable1.c
> index bdf0419c..138f4f3a 100644
> --- a/src/acpica/source/compiler/dttable1.c
> +++ b/src/acpica/source/compiler/dttable1.c
> @@ -152,7 +152,6 @@
>   /* Compile all complex data tables, signatures starting with A-I */
>   
>   #include "aslcompiler.h"
> -#include "dtcompiler.h"
>   
>   #define _COMPONENT          DT_COMPILER
>           ACPI_MODULE_NAME    ("dttable1")
> diff --git a/src/acpica/source/compiler/dttable2.c b/src/acpica/source/compiler/dttable2.c
> index 356a7d0d..172354cd 100644
> --- a/src/acpica/source/compiler/dttable2.c
> +++ b/src/acpica/source/compiler/dttable2.c
> @@ -152,7 +152,6 @@
>   /* Compile all complex data tables, signatures starting with L-Z */
>   
>   #include "aslcompiler.h"
> -#include "dtcompiler.h"
>   
>   #define _COMPONENT          DT_COMPILER
>           ACPI_MODULE_NAME    ("dttable2")
> @@ -902,6 +901,66 @@ DtCompilePcct (
>   }
>   
>   
> +/******************************************************************************
> + *
> + * FUNCTION:    DtCompilePdtt
> + *
> + * PARAMETERS:  List                - Current field list pointer
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Compile PDTT.
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +DtCompilePdtt (
> +    void                    **List)
> +{
> +    ACPI_STATUS             Status;
> +    DT_SUBTABLE             *Subtable;
> +    DT_SUBTABLE             *ParentTable;
> +    DT_FIELD                **PFieldList = (DT_FIELD **) List;
> +    ACPI_TABLE_PDTT         *PdttHeader;
> +    UINT32                  Count = 0;
> +
> +
> +    /* Main table */
> +
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoPdtt, &Subtable, TRUE);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +
> +    ParentTable = DtPeekSubtable ();
> +    DtInsertSubtable (ParentTable, Subtable);
> +
> +    PdttHeader = ACPI_CAST_PTR (ACPI_TABLE_PDTT, ParentTable->Buffer);
> +    PdttHeader->ArrayOffset = sizeof (ACPI_TABLE_PDTT);
> +
> +    /* There is only one type of subtable at this time, no need to decode */
> +
> +    while (*PFieldList)
> +    {
> +        /* List of subchannel IDs, each 2 bytes */
> +
> +        Status = DtCompileTable (PFieldList, AcpiDmTableInfoPdtt0,
> +            &Subtable, TRUE);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        DtInsertSubtable (ParentTable, Subtable);
> +        Count++;
> +    }
> +
> +    PdttHeader->TriggerCount = (UINT8) Count;
> +    return (AE_OK);
> +}
> +
> +
>   /******************************************************************************
>    *
>    * FUNCTION:    DtCompilePmtt
> @@ -1283,6 +1342,219 @@ DtCompileS3pt (
>   }
>   
>   
> +/******************************************************************************
> + *
> + * FUNCTION:    DtCompileSdev
> + *
> + * PARAMETERS:  List                - Current field list pointer
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Compile SDEV.
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +DtCompileSdev (
> +    void                    **List)
> +{
> +    ACPI_STATUS             Status;
> +    ACPI_SDEV_HEADER        *SdevHeader;
> +    DT_SUBTABLE             *Subtable;
> +    DT_SUBTABLE             *ParentTable;
> +    ACPI_DMTABLE_INFO       *InfoTable;
> +    DT_FIELD                **PFieldList = (DT_FIELD **) List;
> +    DT_FIELD                *SubtableStart;
> +    ACPI_SDEV_PCIE          *Pcie = NULL;
> +    ACPI_SDEV_NAMESPACE     *Namesp = NULL;
> +    UINT32                  EntryCount;
> +
> +
> +    /* Subtables */
> +
> +    while (*PFieldList)
> +    {
> +        /* Compile common SDEV subtable header */
> +
> +        SubtableStart = *PFieldList;
> +        Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdevHdr,
> +            &Subtable, TRUE);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        ParentTable = DtPeekSubtable ();
> +        DtInsertSubtable (ParentTable, Subtable);
> +        DtPushSubtable (Subtable);
> +
> +        SdevHeader = ACPI_CAST_PTR (ACPI_SDEV_HEADER, Subtable->Buffer);
> +        SdevHeader->Length = (UINT8)(sizeof (ACPI_SDEV_HEADER));
> +
> +        switch (SdevHeader->Type)
> +        {
> +        case ACPI_SDEV_TYPE_NAMESPACE_DEVICE:
> +
> +            InfoTable = AcpiDmTableInfoSdev0;
> +            Namesp = ACPI_CAST_PTR (ACPI_SDEV_NAMESPACE, Subtable->Buffer);
> +            break;
> +
> +        case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE:
> +
> +            InfoTable = AcpiDmTableInfoSdev1;
> +            Pcie = ACPI_CAST_PTR (ACPI_SDEV_PCIE, Subtable->Buffer);
> +            break;
> +
> +        default:
> +
> +            DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "SDEV");
> +            return (AE_ERROR);
> +        }
> +
> +        /* Compile SDEV subtable body */
> +
> +        Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        ParentTable = DtPeekSubtable ();
> +        DtInsertSubtable (ParentTable, Subtable);
> +
> +        /* Optional data fields are appended to the main subtable body */
> +
> +        switch (SdevHeader->Type)
> +        {
> +        case ACPI_SDEV_TYPE_NAMESPACE_DEVICE:
> +
> +            /* Append DeviceId namespace string */
> +
> +            Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev0a,
> +                &Subtable, TRUE);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return (Status);
> +            }
> +
> +            if (!Subtable)
> +            {
> +                break;
> +            }
> +
> +            ParentTable = DtPeekSubtable ();
> +            DtInsertSubtable (ParentTable, Subtable);
> +
> +            Namesp->DeviceIdOffset = sizeof (ACPI_SDEV_NAMESPACE);
> +            Namesp->DeviceIdLength = (UINT16) Subtable->Length;
> +
> +            /* Append Vendor data */
> +
> +            Namesp->VendorDataLength = 0;
> +            Namesp->VendorDataOffset = 0;
> +
> +            if (*PFieldList)
> +            {
> +                Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev1b,
> +                    &Subtable, TRUE);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return (Status);
> +                }
> +
> +                if (Subtable)
> +                {
> +                    ParentTable = DtPeekSubtable ();
> +                    DtInsertSubtable (ParentTable, Subtable);
> +
> +                    Namesp->VendorDataOffset =
> +                        Namesp->DeviceIdOffset + Namesp->DeviceIdLength;
> +                    Namesp->VendorDataLength =
> +                        (UINT16) Subtable->Length;
> +                }
> +            }
> +
> +            /* Final size of entire namespace structure */
> +
> +            SdevHeader->Length = (UINT16) (sizeof (ACPI_SDEV_NAMESPACE) +
> +                Subtable->Length + Namesp->DeviceIdLength);
> +            break;
> +
> +        case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE:
> +
> +            /* Append the PCIe path info first */
> +
> +            EntryCount = 0;
> +            while (*PFieldList && !strcmp ((*PFieldList)->Name, "Device"))
> +            {
> +                Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev1a,
> +                    &Subtable, FALSE);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return (Status);
> +                }
> +
> +                if (!Subtable)
> +                {
> +                    DtPopSubtable ();
> +                    break;
> +                }
> +
> +                ParentTable = DtPeekSubtable ();
> +                DtInsertSubtable (ParentTable, Subtable);
> +                EntryCount++;
> +            }
> +
> +            /* Path offset will point immediately after the main subtable */
> +
> +            Pcie->PathOffset = sizeof (ACPI_SDEV_PCIE);
> +            Pcie->PathLength = (UINT16)
> +                (EntryCount * sizeof (ACPI_SDEV_PCIE_PATH));
> +
> +            /* Append the Vendor Data last */
> +
> +            Pcie->VendorDataLength = 0;
> +            Pcie->VendorDataOffset = 0;
> +
> +            if (*PFieldList)
> +            {
> +                Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev1b,
> +                    &Subtable, TRUE);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return (Status);
> +                }
> +
> +                if (Subtable)
> +                {
> +                    ParentTable = DtPeekSubtable ();
> +                    DtInsertSubtable (ParentTable, Subtable);
> +
> +                    Pcie->VendorDataOffset =
> +                        Pcie->PathOffset + Pcie->PathLength;
> +                    Pcie->VendorDataLength = (UINT16)
> +                        Subtable->Length;
> +                }
> +            }
> +
> +            SdevHeader->Length =
> +                sizeof (ACPI_SDEV_PCIE) +
> +                Pcie->PathLength + Pcie->VendorDataLength;
> +            break;
> +
> +        default:
> +
> +            DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "SDEV");
> +            return (AE_ERROR);
> +        }
> +
> +        DtPopSubtable ();
> +    }
> +
> +    return (AE_OK);
> +}
> +
> +
>   /******************************************************************************
>    *
>    * FUNCTION:    DtCompileSlic
> @@ -1601,6 +1873,109 @@ DtCompileTcpa (
>   }
>   
>   
> +/******************************************************************************
> + *
> + * FUNCTION:    DtCompileTpm2
> + *
> + * PARAMETERS:  PFieldList          - Current field list pointer
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Compile TPM2.
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +DtCompileTpm2 (
> +    void                    **List)
> +{
> +    DT_FIELD                **PFieldList = (DT_FIELD **) List;
> +    DT_SUBTABLE             *Subtable;
> +    ACPI_TABLE_TPM2         *Tpm2Header;
> +    DT_SUBTABLE             *ParentTable;
> +    ACPI_STATUS             Status = AE_OK;
> +
> +
> +    /* Compile the main table */
> +
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm2,
> +        &Subtable, TRUE);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +
> +    ParentTable = DtPeekSubtable ();
> +    DtInsertSubtable (ParentTable, Subtable);
> +
> +    Tpm2Header = ACPI_CAST_PTR (ACPI_TABLE_TPM2, ParentTable->Buffer);
> +
> +    /* Method parameters */
> +    /* Optional: Log area minimum length */
> +    /* Optional: Log area start address */
> +    /* TBD: Optional fields above not fully implemented (not optional at this time) */
> +
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm2a,
> +        &Subtable, TRUE);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +
> +    ParentTable = DtPeekSubtable ();
> +    DtInsertSubtable (ParentTable, Subtable);
> +
> +
> +    /* Subtable type depends on the StartMethod */
> +
> +    switch (Tpm2Header->StartMethod)
> +    {
> +    case ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC:
> +
> +        /* Subtable specific to to ARM_SMC */
> +
> +        Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm211,
> +            &Subtable, TRUE);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        ParentTable = DtPeekSubtable ();
> +        DtInsertSubtable (ParentTable, Subtable);
> +        break;
> +
> +    case ACPI_TPM2_START_METHOD:
> +    case ACPI_TPM2_MEMORY_MAPPED:
> +    case ACPI_TPM2_COMMAND_BUFFER:
> +    case ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD:
> +        break;
> +
> +    case ACPI_TPM2_RESERVED1:
> +    case ACPI_TPM2_RESERVED3:
> +    case ACPI_TPM2_RESERVED4:
> +    case ACPI_TPM2_RESERVED5:
> +    case ACPI_TPM2_RESERVED9:
> +    case ACPI_TPM2_RESERVED10:
> +
> +        AcpiOsPrintf ("\n**** Reserved TPM2 Start Method type 0x%X\n",
> +            Tpm2Header->StartMethod);
> +        Status = AE_ERROR;
> +        break;
> +
> +    case ACPI_TPM2_NOT_ALLOWED:
> +    default:
> +
> +        AcpiOsPrintf ("\n**** Unknown TPM2 Start Method type 0x%X\n",
> +            Tpm2Header->StartMethod);
> +        Status = AE_ERROR;
> +        break;
> +    }
> +
> +    return (Status);
> +}
> +
> +
>   /******************************************************************************
>    *
>    * FUNCTION:    DtGetGenericTableInfo
> diff --git a/src/acpica/source/compiler/dttemplate.c b/src/acpica/source/compiler/dttemplate.c
> index 55c6e9d6..4c14b688 100644
> --- a/src/acpica/source/compiler/dttemplate.c
> +++ b/src/acpica/source/compiler/dttemplate.c
> @@ -151,7 +151,6 @@
>   
>   #include "aslcompiler.h"
>   #include "acapps.h"
> -#include "dtcompiler.h"
>   #include "dttemplate.h" /* Contains the hex ACPI table templates */
>   
>   #define _COMPONENT          DT_COMPILER
> @@ -315,7 +314,7 @@ Exit:
>       /* Shutdown ACPICA subsystem */
>   
>       (void) AcpiTerminate ();
> -    CmDeleteCaches ();
> +    UtDeleteLocalCaches ();
>       return (Status);
>   }
>   
> diff --git a/src/acpica/source/compiler/dttemplate.h b/src/acpica/source/compiler/dttemplate.h
> index 8d27359d..38750f79 100644
> --- a/src/acpica/source/compiler/dttemplate.h
> +++ b/src/acpica/source/compiler/dttemplate.h
> @@ -1079,6 +1079,17 @@ const unsigned char TemplatePcct[] =
>       0x55,0x55,0x55,0x55,0x55,0x55             /* 00000248    "UUUUUU|   */
>   };
>   
> +const unsigned char TemplatePdtt[] =
> +{
> +    0x50,0x44,0x54,0x54,0x34,0x00,0x00,0x00,  /* 00000000    "PDTT4..." */
> +    0x01,0xCB,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
> +    0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65,  /* 00000010    "Template" */
> +    0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> +    0x31,0x08,0x17,0x20,0x04,0x00,0x00,0x00,  /* 00000020    "1.. ...." */
> +    0x2C,0x00,0x00,0x00,0xAA,0x03,0xBB,0x02,  /* 00000028    ",......." */
> +    0xCC,0x01,0xDD,0x00                       /* 00000030    "...."     */
> +};
> +
>   const unsigned char TemplatePmtt[] =
>   {
>       0x50,0x4D,0x54,0x54,0xB4,0x00,0x00,0x00,  /* 00000000    "PMTT...." */
> @@ -1187,6 +1198,25 @@ const unsigned char TemplateSdei[] =
>       0x30,0x09,0x16,0x20                       /* 00000028    "0.. " */
>   };
>   
> +const unsigned char TemplateSdev[] =
> +{
> +    0x53,0x44,0x45,0x56,0x72,0x00,0x00,0x00,  /* 00000000    "SDEVr..." */
> +    0x01,0x2F,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "./INTEL " */
> +    0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65,  /* 00000010    "Template" */
> +    0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> +    0x31,0x08,0x17,0x20,0x00,0x01,0x2A,0x00,  /* 00000020    "1.. ..*." */
> +    0x0C,0x00,0x16,0x00,0x22,0x00,0x08,0x00,  /* 00000028    "...."..." */
> +    0x5C,0x5C,0x5F,0x53,0x42,0x5F,0x2E,0x50,  /* 00000030    "\\_SB_.P" */
> +    0x43,0x49,0x30,0x2E,0x55,0x53,0x42,0x31,  /* 00000038    "CI0.USB1" */
> +    0x2E,0x53,0x55,0x42,0x31,0x00,0x00,0x11,  /* 00000040    ".SUB1..." */
> +    0x22,0x33,0x44,0x55,0x66,0x77,0x01,0x01,  /* 00000048    ""3DUfw.." */
> +    0x24,0x00,0x10,0x00,0x20,0x00,0x10,0x00,  /* 00000050    "$... ..." */
> +    0x04,0x00,0x14,0x00,0x10,0x00,0x11,0x22,  /* 00000058    "......."" */
> +    0x33,0x44,0xEE,0xDD,0xCC,0xBB,0xAA,0x55,  /* 00000060    "3D.....U" */
> +    0x66,0x77,0x88,0x99,0xAA,0xBB,0xCC,0xDD,  /* 00000068    "fw......" */
> +    0xEE,0xFF                                 /* 00000070    ".."       */
> +};
> +
>   const unsigned char TemplateSlic[] =
>   {
>       0x53,0x4C,0x49,0x43,0x76,0x01,0x00,0x00,  /* 00000000    "SLICv..." */
> @@ -1388,13 +1418,17 @@ const unsigned char TemplateTcpa[] =
>   
>   const unsigned char TemplateTpm2[] =
>   {
> -    0x54,0x50,0x4D,0x32,0x34,0x00,0x00,0x00,  /* 00000000    "TPM24..." */
> -    0x03,0x42,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    ".BINTEL " */
> -    0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45,  /* 00000010    "TEMPLATE" */
> +    0x54,0x50,0x4D,0x32,0x58,0x00,0x00,0x00,  /* 00000000    "TPM2X..." */
> +    0x03,0xAB,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
> +    0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65,  /* 00000010    "Template" */
>       0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> -    0x14,0x11,0x12,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "... ...." */
> -    0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,  /* 00000028    "wfUD3".." */
> -    0x01,0x00,0x00,0x00                       /* 00000030    "...."     */
> +    0x31,0x08,0x17,0x20,0x01,0x00,0x00,0x00,  /* 00000020    "1.. ...." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000028    "........" */
> +    0x0B,0x00,0x00,0x00,0x01,0x02,0x03,0x04,  /* 00000030    "........" */
> +    0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,  /* 00000038    "........" */
> +    0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000040    "........" */
> +    0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,  /* 00000048    "........" */
> +    0x01,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF   /* 00000050    "........" */
>   };
>   
>   const unsigned char TemplateUefi[] =
> diff --git a/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c
> index c6c89eaa..1e8f9b24 100644
> --- a/src/acpica/source/compiler/dtutils.c
> +++ b/src/acpica/source/compiler/dtutils.c
> @@ -150,7 +150,6 @@
>    *****************************************************************************/
>   
>   #include "aslcompiler.h"
> -#include "dtcompiler.h"
>   #include "actables.h"
>   
>   #define _COMPONENT          DT_COMPILER
> @@ -570,6 +569,7 @@ DtGetFieldLength (
>       case ACPI_DMT_PCCT:
>       case ACPI_DMT_PMTT:
>       case ACPI_DMT_PPTT:
> +    case ACPI_DMT_SDEV:
>       case ACPI_DMT_SRAT:
>       case ACPI_DMT_ASF:
>       case ACPI_DMT_HESTNTYP:
> @@ -602,6 +602,7 @@ DtGetFieldLength (
>       case ACPI_DMT_NAME4:
>       case ACPI_DMT_SIG:
>       case ACPI_DMT_LPIT:
> +    case ACPI_DMT_TPM2:
>   
>           ByteLength = 4;
>           break;
> @@ -920,153 +921,3 @@ DtWalkTableTree (
>           }
>       }
>   }
> -
> -
> -/*******************************************************************************
> - *
> - * FUNCTION:    UtSubtableCacheCalloc
> - *
> - * PARAMETERS:  None
> - *
> - * RETURN:      Pointer to the buffer. Aborts on allocation failure
> - *
> - * DESCRIPTION: Allocate a subtable object buffer. Bypass the local
> - *              dynamic memory manager for performance reasons (This has a
> - *              major impact on the speed of the compiler.)
> - *
> - ******************************************************************************/
> -
> -DT_SUBTABLE *
> -UtSubtableCacheCalloc (
> -    void)
> -{
> -    ASL_CACHE_INFO          *Cache;
> -
> -
> -    if (Gbl_SubtableCacheNext >= Gbl_SubtableCacheLast)
> -    {
> -        /* Allocate a new buffer */
> -
> -        Cache = UtLocalCalloc (sizeof (Cache->Next) +
> -            (sizeof (DT_SUBTABLE) * ASL_SUBTABLE_CACHE_SIZE));
> -
> -        /* Link new cache buffer to head of list */
> -
> -        Cache->Next = Gbl_SubtableCacheList;
> -        Gbl_SubtableCacheList = Cache;
> -
> -        /* Setup cache management pointers */
> -
> -        Gbl_SubtableCacheNext = ACPI_CAST_PTR (DT_SUBTABLE, Cache->Buffer);
> -        Gbl_SubtableCacheLast = Gbl_SubtableCacheNext + ASL_SUBTABLE_CACHE_SIZE;
> -    }
> -
> -    Gbl_SubtableCount++;
> -    return (Gbl_SubtableCacheNext++);
> -}
> -
> -
> -/*******************************************************************************
> - *
> - * FUNCTION:    UtFieldCacheCalloc
> - *
> - * PARAMETERS:  None
> - *
> - * RETURN:      Pointer to the buffer. Aborts on allocation failure
> - *
> - * DESCRIPTION: Allocate a field object buffer. Bypass the local
> - *              dynamic memory manager for performance reasons (This has a
> - *              major impact on the speed of the compiler.)
> - *
> - ******************************************************************************/
> -
> -DT_FIELD *
> -UtFieldCacheCalloc (
> -    void)
> -{
> -    ASL_CACHE_INFO          *Cache;
> -
> -
> -    if (Gbl_FieldCacheNext >= Gbl_FieldCacheLast)
> -    {
> -        /* Allocate a new buffer */
> -
> -        Cache = UtLocalCalloc (sizeof (Cache->Next) +
> -            (sizeof (DT_FIELD) * ASL_FIELD_CACHE_SIZE));
> -
> -        /* Link new cache buffer to head of list */
> -
> -        Cache->Next = Gbl_FieldCacheList;
> -        Gbl_FieldCacheList = Cache;
> -
> -        /* Setup cache management pointers */
> -
> -        Gbl_FieldCacheNext = ACPI_CAST_PTR (DT_FIELD, Cache->Buffer);
> -        Gbl_FieldCacheLast = Gbl_FieldCacheNext + ASL_FIELD_CACHE_SIZE;
> -    }
> -
> -    Gbl_FieldCount++;
> -    return (Gbl_FieldCacheNext++);
> -}
> -
> -
> -/*******************************************************************************
> - *
> - * FUNCTION:    DtDeleteCaches
> - *
> - * PARAMETERS:  None
> - *
> - * RETURN:      None
> - *
> - * DESCRIPTION: Delete all local cache buffer blocks
> - *
> - ******************************************************************************/
> -
> -void
> -DtDeleteCaches (
> -    void)
> -{
> -    UINT32                  BufferCount;
> -    ASL_CACHE_INFO          *Next;
> -
> -
> -    /* Field cache */
> -
> -    BufferCount = 0;
> -    while (Gbl_FieldCacheList)
> -    {
> -        Next = Gbl_FieldCacheList->Next;
> -        ACPI_FREE (Gbl_FieldCacheList);
> -        Gbl_FieldCacheList = Next;
> -        BufferCount++;
> -    }
> -
> -    DbgPrint (ASL_DEBUG_OUTPUT,
> -        "%u Fields, Buffer size: %u fields (%u bytes), %u Buffers\n",
> -        Gbl_FieldCount, ASL_FIELD_CACHE_SIZE,
> -        (sizeof (DT_FIELD) * ASL_FIELD_CACHE_SIZE), BufferCount);
> -
> -    Gbl_FieldCount = 0;
> -    Gbl_FieldCacheNext = NULL;
> -    Gbl_FieldCacheLast = NULL;
> -
> -    /* Subtable cache */
> -
> -    BufferCount = 0;
> -    while (Gbl_SubtableCacheList)
> -    {
> -        Next = Gbl_SubtableCacheList->Next;
> -        ACPI_FREE (Gbl_SubtableCacheList);
> -        Gbl_SubtableCacheList = Next;
> -        BufferCount++;
> -    }
> -
> -    DbgPrint (ASL_DEBUG_OUTPUT,
> -        "%u Subtables, Buffer size: %u subtables (%u bytes), %u Buffers\n",
> -        Gbl_SubtableCount, ASL_SUBTABLE_CACHE_SIZE,
> -        (sizeof (DT_SUBTABLE) * ASL_SUBTABLE_CACHE_SIZE), BufferCount);
> -
> -    Gbl_SubtableCount = 0;
> -    Gbl_SubtableCacheNext = NULL;
> -    Gbl_SubtableCacheLast = NULL;
> -}
> diff --git a/src/acpica/source/compiler/prexpress.c b/src/acpica/source/compiler/prexpress.c
> index a0ba7447..a9ed5fe7 100644
> --- a/src/acpica/source/compiler/prexpress.c
> +++ b/src/acpica/source/compiler/prexpress.c
> @@ -150,8 +150,6 @@
>    *****************************************************************************/
>   
>   #include "aslcompiler.h"
> -#include "dtcompiler.h"
> -
>   
>   #define _COMPONENT          ASL_PREPROCESSOR
>           ACPI_MODULE_NAME    ("prexpress")
> diff --git a/src/acpica/source/compiler/prmacros.c b/src/acpica/source/compiler/prmacros.c
> index 675d4522..5560c12a 100644
> --- a/src/acpica/source/compiler/prmacros.c
> +++ b/src/acpica/source/compiler/prmacros.c
> @@ -150,8 +150,6 @@
>    *****************************************************************************/
>   
>   #include "aslcompiler.h"
> -#include "dtcompiler.h"
> -
>   
>   #define _COMPONENT          ASL_PREPROCESSOR
>           ACPI_MODULE_NAME    ("prmacros")
> diff --git a/src/acpica/source/compiler/prparser.y b/src/acpica/source/compiler/prparser.y
> index d24a5bbe..17da8485 100644
> --- a/src/acpica/source/compiler/prparser.y
> +++ b/src/acpica/source/compiler/prparser.y
> @@ -151,7 +151,6 @@
>    *****************************************************************************/
>   
>   #include "aslcompiler.h"
> -#include "dtcompiler.h"
>   
>   #define _COMPONENT          ASL_PREPROCESSOR
>           ACPI_MODULE_NAME    ("prparser")
> diff --git a/src/acpica/source/compiler/prscan.c b/src/acpica/source/compiler/prscan.c
> index 75a98665..a012e111 100644
> --- a/src/acpica/source/compiler/prscan.c
> +++ b/src/acpica/source/compiler/prscan.c
> @@ -152,7 +152,6 @@
>   #define _DECLARE_PR_GLOBALS
>   
>   #include "aslcompiler.h"
> -#include "dtcompiler.h"
>   
>   /*
>    * TBDs:
> diff --git a/src/acpica/source/compiler/prutils.c b/src/acpica/source/compiler/prutils.c
> index 61641ddb..5fa77aa6 100644
> --- a/src/acpica/source/compiler/prutils.c
> +++ b/src/acpica/source/compiler/prutils.c
> @@ -150,8 +150,6 @@
>    *****************************************************************************/
>   
>   #include "aslcompiler.h"
> -#include "dtcompiler.h"
> -
>   
>   #define _COMPONENT          ASL_PREPROCESSOR
>           ACPI_MODULE_NAME    ("prutils")
> @@ -514,7 +512,7 @@ PrPushInputFileStack (
>       /* Reset the global line count and filename */
>   
>       Gbl_Files[ASL_FILE_INPUT].Filename =
> -        UtStringCacheCalloc (strlen (Filename) + 1);
> +        UtLocalCacheCalloc (strlen (Filename) + 1);
>       strcpy (Gbl_Files[ASL_FILE_INPUT].Filename, Filename);
>   
>       Gbl_Files[ASL_FILE_INPUT].Handle = InputFile;
> diff --git a/src/acpica/source/components/dispatcher/dscontrol.c b/src/acpica/source/components/dispatcher/dscontrol.c
> index 897200a5..7a06a1e6 100644
> --- a/src/acpica/source/components/dispatcher/dscontrol.c
> +++ b/src/acpica/source/components/dispatcher/dscontrol.c
> @@ -234,7 +234,8 @@ AcpiDsExecBeginControlOp (
>               WalkState->ParserState.PkgEnd;
>           ControlState->Control.Opcode =
>               Op->Common.AmlOpcode;
> -
> +        ControlState->Control.LoopTimeout = AcpiOsGetTimer () +
> +           (UINT64) (AcpiGbl_MaxLoopIterations * ACPI_100NSEC_PER_SEC);
>   
>           /* Push the control state on this walk's control stack */
>   
> @@ -327,15 +328,15 @@ AcpiDsExecEndControlOp (
>               /* Predicate was true, the body of the loop was just executed */
>   
>               /*
> -             * This loop counter mechanism allows the interpreter to escape
> -             * possibly infinite loops. This can occur in poorly written AML
> -             * when the hardware does not respond within a while loop and the
> -             * loop does not implement a timeout.
> +             * This infinite loop detection mechanism allows the interpreter
> +             * to escape possibly infinite loops. This can occur in poorly
> +             * written AML when the hardware does not respond within a while
> +             * loop and the loop does not implement a timeout.
>                */
> -            ControlState->Control.LoopCount++;
> -            if (ControlState->Control.LoopCount > AcpiGbl_MaxLoopIterations)
> +            if (ACPI_TIME_AFTER (AcpiOsGetTimer (),
> +                    ControlState->Control.LoopTimeout))
>               {
> -                Status = AE_AML_INFINITE_LOOP;
> +                Status = AE_AML_LOOP_TIMEOUT;
>                   break;
>               }
>   
> diff --git a/src/acpica/source/components/namespace/nsaccess.c b/src/acpica/source/components/namespace/nsaccess.c
> index 0ae1fbdd..8f98ca68 100644
> --- a/src/acpica/source/components/namespace/nsaccess.c
> +++ b/src/acpica/source/components/namespace/nsaccess.c
> @@ -775,19 +775,19 @@ AcpiNsLookup (
>                       ThisNode = (ACPI_NAMESPACE_NODE *) ThisNode->Object;
>                   }
>               }
> -#ifdef ACPI_ASL_COMPILER
> -            if (!AcpiGbl_DisasmFlag &&
> -                (ThisNode->Flags & ANOBJ_IS_EXTERNAL))
> -            {
> -                ThisNode->Flags |= IMPLICIT_EXTERNAL;
> -            }
> -#endif
>           }
>   
>           /* Special handling for the last segment (NumSegments == 0) */
>   
>           else
>           {
> +#ifdef ACPI_ASL_COMPILER
> +            if (!AcpiGbl_DisasmFlag && (ThisNode->Flags & ANOBJ_IS_EXTERNAL))
> +            {
> +                ThisNode->Flags &= ~IMPLICIT_EXTERNAL;
> +            }
> +#endif
> +
>               /*
>                * Sanity typecheck of the target object:
>                *
> diff --git a/src/acpica/source/components/namespace/nssearch.c b/src/acpica/source/components/namespace/nssearch.c
> index 3504092a..3697ea4b 100644
> --- a/src/acpica/source/components/namespace/nssearch.c
> +++ b/src/acpica/source/components/namespace/nssearch.c
> @@ -545,6 +545,7 @@ AcpiNsSearchAndEnter (
>           (WalkState && WalkState->Opcode == AML_SCOPE_OP))
>       {
>           NewNode->Flags |= ANOBJ_IS_EXTERNAL;
> +        NewNode->Flags |= IMPLICIT_EXTERNAL;
>       }
>   #endif
>   
> diff --git a/src/acpica/source/components/parser/psobject.c b/src/acpica/source/components/parser/psobject.c
> index 8f31750c..b6aa8025 100644
> --- a/src/acpica/source/components/parser/psobject.c
> +++ b/src/acpica/source/components/parser/psobject.c
> @@ -500,15 +500,10 @@ AcpiPsCreateOp (
>                * external declaration opcode. Setting WalkState->Aml to
>                * WalkState->ParserState.Aml + 2 moves increments the
>                * WalkState->Aml past the object type and the paramcount of the
> -             * external opcode. For the error message, only print the AML
> -             * offset. We could attempt to print the name but this may cause
> -             * a segmentation fault when printing the namepath because the
> -             * AML may be incorrect.
> +             * external opcode.
>                */
> -            AcpiOsPrintf (
> -                "// Invalid external declaration at AML offset 0x%x.\n",
> -                WalkState->Aml - WalkState->ParserState.AmlStart);
>               WalkState->Aml = WalkState->ParserState.Aml + 2;
> +            WalkState->ParserState.Aml = WalkState->Aml;
>               return_ACPI_STATUS (AE_CTRL_PARSE_CONTINUE);
>           }
>   #endif
> diff --git a/src/acpica/source/components/parser/psutils.c b/src/acpica/source/components/parser/psutils.c
> index 19ae3a9d..a04b2e50 100644
> --- a/src/acpica/source/components/parser/psutils.c
> +++ b/src/acpica/source/components/parser/psutils.c
> @@ -292,11 +292,11 @@ AcpiPsAllocOp (
>           {
>               AcpiGbl_CurrentScope = Op;
>           }
> -    }
>   
> -    if (Gbl_CaptureComments)
> -    {
> -        ASL_CV_TRANSFER_COMMENTS (Op);
> +        if (Gbl_CaptureComments)
> +        {
> +            ASL_CV_TRANSFER_COMMENTS (Op);
> +        }
>       }
>   
>       return (Op);
> diff --git a/src/acpica/source/components/utilities/utinit.c b/src/acpica/source/components/utilities/utinit.c
> index d1937a57..faa34bbd 100644
> --- a/src/acpica/source/components/utilities/utinit.c
> +++ b/src/acpica/source/components/utilities/utinit.c
> @@ -334,7 +334,6 @@ AcpiUtInitGlobals (
>       AcpiGbl_NextOwnerIdOffset           = 0;
>       AcpiGbl_DebuggerConfiguration       = DEBUGGER_THREADING;
>       AcpiGbl_OsiMutex                    = NULL;
> -    AcpiGbl_MaxLoopIterations           = ACPI_MAX_LOOP_COUNT;
>   
>       /* Hardware oriented */
>   
> diff --git a/src/acpica/source/components/utilities/utmath.c b/src/acpica/source/components/utilities/utmath.c
> index 4aa94025..a4c3fba3 100644
> --- a/src/acpica/source/components/utilities/utmath.c
> +++ b/src/acpica/source/components/utilities/utmath.c
> @@ -260,7 +260,7 @@ AcpiUtShortShiftLeft (
>       if ((Count & 63) >= 32)
>       {
>           OperandOvl.Part.Hi = OperandOvl.Part.Lo;
> -        OperandOvl.Part.Lo ^= OperandOvl.Part.Lo;
> +        OperandOvl.Part.Lo = 0;
>           Count = (Count & 63) - 32;
>       }
>       ACPI_SHIFT_LEFT_64_BY_32 (OperandOvl.Part.Hi,
> @@ -305,7 +305,7 @@ AcpiUtShortShiftRight (
>       if ((Count & 63) >= 32)
>       {
>           OperandOvl.Part.Lo = OperandOvl.Part.Hi;
> -        OperandOvl.Part.Hi ^= OperandOvl.Part.Hi;
> +        OperandOvl.Part.Hi = 0;
>           Count = (Count & 63) - 32;
>       }
>       ACPI_SHIFT_RIGHT_64_BY_32 (OperandOvl.Part.Hi,
> diff --git a/src/acpica/source/include/acapps.h b/src/acpica/source/include/acapps.h
> index 4ca3e80f..faae2fb6 100644
> --- a/src/acpica/source/include/acapps.h
> +++ b/src/acpica/source/include/acapps.h
> @@ -188,6 +188,9 @@
>       Prefix, ACPICA_COPYRIGHT, \
>       Prefix
>   
> +#define ACPI_COMMON_BUILD_TIME \
> +    "Build date/time: %s %s\n", __DATE__, __TIME__
> +
>   /* Macros for usage messages */
>   
>   #define ACPI_USAGE_HEADER(Usage) \
> diff --git a/src/acpica/source/include/acconfig.h b/src/acpica/source/include/acconfig.h
> index 6fc04363..7cff0636 100644
> --- a/src/acpica/source/include/acconfig.h
> +++ b/src/acpica/source/include/acconfig.h
> @@ -255,9 +255,9 @@
>   
>   #define ACPI_ADDRESS_RANGE_MAX          2
>   
> -/* Maximum number of While() loops before abort */
> +/* Maximum time (default 30s) of While() loops before abort */
>   
> -#define ACPI_MAX_LOOP_COUNT             0x000FFFFF
> +#define ACPI_MAX_LOOP_TIMEOUT           30
>   
>   
>   /******************************************************************************
> diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h
> index 26d4f47b..0c465602 100644
> --- a/src/acpica/source/include/acdisasm.h
> +++ b/src/acpica/source/include/acdisasm.h
> @@ -272,8 +272,10 @@ typedef enum
>       ACPI_DMT_PMTT,
>       ACPI_DMT_PPTT,
>       ACPI_DMT_SDEI,
> +    ACPI_DMT_SDEV,
>       ACPI_DMT_SLIC,
>       ACPI_DMT_SRAT,
> +    ACPI_DMT_TPM2,
>   
>       /* Special opcodes */
>   
> @@ -502,6 +504,7 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNfit4[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNfit5[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNfit6[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNfit6a[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPdtt[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPmtt[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPmtt0[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPmtt1[];
> @@ -515,6 +518,7 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPcct1[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPcct2[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPcct3[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPcct4[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPdtt0[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPptt0[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPptt0a[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPptt1[];
> @@ -529,6 +533,13 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoS3pt0[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoS3pt1[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSbst[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSdei[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSdev[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSdevHdr[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSdev0[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSdev0a[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSdev1[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSdev1a[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSdev1b[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSlic[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSlit[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSpcr[];
> @@ -546,6 +557,8 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTcpaHdr[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTcpaClient[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTcpaServer[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTpm2[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTpm2a[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTpm211[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoUefi[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoVrtc[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoVrtc0[];
> @@ -586,7 +599,7 @@ AcpiDmDumpTable (
>       UINT32                  TableLength,
>       UINT32                  TableOffset,
>       void                    *Table,
> -    UINT32                  SubTableLength,
> +    UINT32                  SubtableLength,
>       ACPI_DMTABLE_INFO        *Info);
>   
>   void
> @@ -712,6 +725,10 @@ void
>   AcpiDmDumpPcct (
>       ACPI_TABLE_HEADER       *Table);
>   
> +void
> +AcpiDmDumpPdtt (
> +    ACPI_TABLE_HEADER       *Table);
> +
>   void
>   AcpiDmDumpPmtt (
>       ACPI_TABLE_HEADER       *Table);
> @@ -732,6 +749,10 @@ UINT32
>   AcpiDmDumpS3pt (
>       ACPI_TABLE_HEADER       *Table);
>   
> +void
> +AcpiDmDumpSdev (
> +    ACPI_TABLE_HEADER       *Table);
> +
>   void
>   AcpiDmDumpSlic (
>       ACPI_TABLE_HEADER       *Table);
> @@ -752,6 +773,10 @@ void
>   AcpiDmDumpTcpa (
>       ACPI_TABLE_HEADER       *Table);
>   
> +void
> +AcpiDmDumpTpm2 (
> +    ACPI_TABLE_HEADER       *Table);
> +
>   void
>   AcpiDmDumpVrtc (
>       ACPI_TABLE_HEADER       *Table);
> diff --git a/src/acpica/source/include/acexcep.h b/src/acpica/source/include/acexcep.h
> index d808f275..21db48dc 100644
> --- a/src/acpica/source/include/acexcep.h
> +++ b/src/acpica/source/include/acexcep.h
> @@ -309,7 +309,7 @@ typedef struct acpi_exception_info
>   #define AE_AML_CIRCULAR_REFERENCE       EXCEP_AML (0x001E)
>   #define AE_AML_BAD_RESOURCE_LENGTH      EXCEP_AML (0x001F)
>   #define AE_AML_ILLEGAL_ADDRESS          EXCEP_AML (0x0020)
> -#define AE_AML_INFINITE_LOOP            EXCEP_AML (0x0021)
> +#define AE_AML_LOOP_TIMEOUT             EXCEP_AML (0x0021)
>   #define AE_AML_UNINITIALIZED_NODE       EXCEP_AML (0x0022)
>   #define AE_AML_TARGET_TYPE              EXCEP_AML (0x0023)
>   
> @@ -441,7 +441,7 @@ static const ACPI_EXCEPTION_INFO    AcpiGbl_ExceptionNames_Aml[] =
>       EXCEP_TXT ("AE_AML_CIRCULAR_REFERENCE",     "Two references refer to each other"),
>       EXCEP_TXT ("AE_AML_BAD_RESOURCE_LENGTH",    "The length of a Resource Descriptor in the AML is incorrect"),
>       EXCEP_TXT ("AE_AML_ILLEGAL_ADDRESS",        "A memory, I/O, or PCI configuration address is invalid"),
> -    EXCEP_TXT ("AE_AML_INFINITE_LOOP",          "An apparent infinite AML While loop, method was aborted"),
> +    EXCEP_TXT ("AE_AML_LOOP_TIMEOUT",           "An AML While loop exceeded the maximum execution time"),
>       EXCEP_TXT ("AE_AML_UNINITIALIZED_NODE",     "A namespace node is uninitialized or unresolved"),
>       EXCEP_TXT ("AE_AML_TARGET_TYPE",            "A target operand of an incorrect type was encountered")
>   };
> diff --git a/src/acpica/source/include/aclocal.h b/src/acpica/source/include/aclocal.h
> index 00be20ed..7a20fe6f 100644
> --- a/src/acpica/source/include/aclocal.h
> +++ b/src/acpica/source/include/aclocal.h
> @@ -834,7 +834,7 @@ typedef struct acpi_control_state
>       union acpi_parse_object         *PredicateOp;
>       UINT8                           *AmlPredicateStart;     /* Start of if/while predicate */
>       UINT8                           *PackageEnd;            /* End of if/while block */
> -    UINT32                          LoopCount;              /* While() loop counter */
> +    UINT64                          LoopTimeout;            /* While() loop timeout */
>   
>   } ACPI_CONTROL_STATE;
>   
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index 7d6c18d6..bd5fde17 100644
> --- a/src/acpica/source/include/acpixf.h
> +++ b/src/acpica/source/include/acpixf.h
> @@ -154,7 +154,7 @@
>   
>   /* Current ACPICA subsystem version in YYYYMMDD format */
>   
> -#define ACPI_CA_VERSION                 0x20170831
> +#define ACPI_CA_VERSION                 0x20170929
>   
>   #include "acconfig.h"
>   #include "actypes.h"
> @@ -370,11 +370,11 @@ ACPI_INIT_GLOBAL (UINT8,            AcpiGbl_OsiData, 0);
>   ACPI_INIT_GLOBAL (BOOLEAN,          AcpiGbl_ReducedHardware, FALSE);
>   
>   /*
> - * Maximum number of While() loop iterations before forced method abort.
> + * Maximum timeout for While() loop iterations before forced method abort.
>    * This mechanism is intended to prevent infinite loops during interpreter
>    * execution within a host kernel.
>    */
> -ACPI_INIT_GLOBAL (UINT32,           AcpiGbl_MaxLoopIterations, ACPI_MAX_LOOP_COUNT);
> +ACPI_INIT_GLOBAL (UINT32,           AcpiGbl_MaxLoopIterations, ACPI_MAX_LOOP_TIMEOUT);
>   
>   /*
>    * This mechanism is used to trace a specified AML method. The method is
> diff --git a/src/acpica/source/include/actbl1.h b/src/acpica/source/include/actbl1.h
> index 537c33e7..7eed2c55 100644
> --- a/src/acpica/source/include/actbl1.h
> +++ b/src/acpica/source/include/actbl1.h
> @@ -179,9 +179,10 @@
>   #define ACPI_SIG_HEST           "HEST"      /* Hardware Error Source Table */
>   #define ACPI_SIG_MADT           "APIC"      /* Multiple APIC Description Table */
>   #define ACPI_SIG_MSCT           "MSCT"      /* Maximum System Characteristics Table */
> -#define ACPI_SIG_PDTT           "PDTT"      /* Processor Debug Trigger Table */
> +#define ACPI_SIG_PDTT           "PDTT"      /* Platform Debug Trigger Table */
>   #define ACPI_SIG_PPTT           "PPTT"      /* Processor Properties Topology Table */
>   #define ACPI_SIG_SBST           "SBST"      /* Smart Battery Specification Table */
> +#define ACPI_SIG_SDEV           "SDEV"      /* Secure Devices table */
>   #define ACPI_SIG_SLIT           "SLIT"      /* System Locality Distance Information Table */
>   #define ACPI_SIG_SRAT           "SRAT"      /* System Resource Affinity Table */
>   #define ACPI_SIG_NFIT           "NFIT"      /* NVDIMM Firmware Interface Table */
> @@ -1603,7 +1604,7 @@ typedef struct acpi_nfit_flush_address
>   
>   /*******************************************************************************
>    *
> - * PDTT - Processor Debug Trigger Table (ACPI 6.2)
> + * PDTT - Platform Debug Trigger Table (ACPI 6.2)
>    *        Version 0
>    *
>    ******************************************************************************/
> @@ -1625,16 +1626,15 @@ typedef struct acpi_table_pdtt
>    */
>   typedef struct acpi_pdtt_channel
>   {
> -    UINT16                  SubChannelId;
> +    UINT8                   SubchannelId;
> +    UINT8                   Flags;
>   
>   } ACPI_PDTT_CHANNEL;
>   
> +/* Flags for above */
>   
> -/* Mask and Flags for above */
> -
> -#define ACPI_PDTT_SUBCHANNEL_ID_MASK        0x00FF
> -#define ACPI_PDTT_RUNTIME_TRIGGER           (1<<8)
> -#define ACPI_PPTT_WAIT_COMPLETION           (1<<9)
> +#define ACPI_PDTT_RUNTIME_TRIGGER           (1)
> +#define ACPI_PPTT_WAIT_COMPLETION           (1<<1)
>   
>   
>   /*******************************************************************************
> @@ -1746,6 +1746,82 @@ typedef struct acpi_table_sbst
>   } ACPI_TABLE_SBST;
>   
>   
> +/*******************************************************************************
> + *
> + * SDEV - Secure Devices Table (ACPI 6.2)
> + *        Version 1
> + *
> + ******************************************************************************/
> +
> +typedef struct acpi_table_sdev
> +{
> +    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
> +
> +} ACPI_TABLE_SDEV;
> +
> +
> +typedef struct acpi_sdev_header
> +{
> +    UINT8                   Type;
> +    UINT8                   Flags;
> +    UINT16                  Length;
> +
> +} ACPI_SDEV_HEADER;
> +
> +
> +/* Values for subtable type above */
> +
> +enum AcpiSdevType
> +{
> +    ACPI_SDEV_TYPE_NAMESPACE_DEVICE     = 0,
> +    ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1,
> +    ACPI_SDEV_TYPE_RESERVED             = 2     /* 2 and greater are reserved */
> +};
> +
> +/* Values for flags above */
> +
> +#define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS    (1)
> +
> +/*
> + * SDEV subtables
> + */
> +
> +/* 0: Namespace Device Based Secure Device Structure */
> +
> +typedef struct acpi_sdev_namespace
> +{
> +    ACPI_SDEV_HEADER        Header;
> +    UINT16                  DeviceIdOffset;
> +    UINT16                  DeviceIdLength;
> +    UINT16                  VendorDataOffset;
> +    UINT16                  VendorDataLength;
> +
> +} ACPI_SDEV_NAMESPACE;
> +
> +/* 1: PCIe Endpoint Device Based Device Structure */
> +
> +typedef struct acpi_sdev_pcie
> +{
> +    ACPI_SDEV_HEADER        Header;
> +    UINT16                  Segment;
> +    UINT16                  StartBus;
> +    UINT16                  PathOffset;
> +    UINT16                  PathLength;
> +    UINT16                  VendorDataOffset;
> +    UINT16                  VendorDataLength;
> +
> +} ACPI_SDEV_PCIE;
> +
> +/* 1a: PCIe Endpoint path entry */
> +
> +typedef struct acpi_sdev_pcie_path
> +{
> +    UINT8                   Device;
> +    UINT8                   Function;
> +
> +} ACPI_SDEV_PCIE_PATH;
> +
> +
>   /*******************************************************************************
>    *
>    * SLIT - System Locality Distance Information Table
> diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h
> index 951d6553..02a897b0 100644
> --- a/src/acpica/source/include/actbl2.h
> +++ b/src/acpica/source/include/actbl2.h
> @@ -1550,6 +1550,8 @@ enum AcpiSpmiInterfaceTypes
>    * TCPA - Trusted Computing Platform Alliance table
>    *        Version 2
>    *
> + * TCG Hardware Interface Table for TPM 1.2 Clients and Servers
> + *
>    * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
>    * Version 1.2, Revision 8
>    * February 27, 2017
> @@ -1622,6 +1624,8 @@ typedef struct acpi_table_tcpa_server
>    * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table
>    *        Version 4
>    *
> + * TCG Hardware Interface Table for TPM 2.0 Clients and Servers
> + *
>    * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
>    * Version 1.2, Revision 8
>    * February 27, 2017
> @@ -1643,17 +1647,25 @@ typedef struct acpi_table_tpm2
>   /* Values for StartMethod above */
>   
>   #define ACPI_TPM2_NOT_ALLOWED                       0
> +#define ACPI_TPM2_RESERVED1                         1
>   #define ACPI_TPM2_START_METHOD                      2
> +#define ACPI_TPM2_RESERVED3                         3
> +#define ACPI_TPM2_RESERVED4                         4
> +#define ACPI_TPM2_RESERVED5                         5
>   #define ACPI_TPM2_MEMORY_MAPPED                     6
>   #define ACPI_TPM2_COMMAND_BUFFER                    7
>   #define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD  8
> +#define ACPI_TPM2_RESERVED9                         9
> +#define ACPI_TPM2_RESERVED10                        10
>   #define ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC       11  /* V1.2 Rev 8 */
> +#define ACPI_TPM2_RESERVED                          12
>   
>   
> -/* Trailer appears after any StartMethod subtables */
> +/* Optional trailer appears after any StartMethod subtables */
>   
>   typedef struct acpi_tpm2_trailer
>   {
> +    UINT8                   MethodParameters[12];
>       UINT32                  MinimumLogLength;   /* Minimum length for the event log area */
>       UINT64                  LogAddress;         /* Address of the event log area */
>   
> diff --git a/src/acpica/source/include/actypes.h b/src/acpica/source/include/actypes.h
> index 1839f936..4cc6d4fd 100644
> --- a/src/acpica/source/include/actypes.h
> +++ b/src/acpica/source/include/actypes.h
> @@ -586,6 +586,8 @@ typedef void *                          ACPI_HANDLE;    /* Actually a ptr to a N
>   #define ACPI_NSEC_PER_MSEC              1000000L
>   #define ACPI_NSEC_PER_SEC               1000000000L
>   
> +#define ACPI_TIME_AFTER(a, b)           ((INT64)((b) - (a)) < 0)
> +
>   
>   /* Owner IDs are used to track namespace nodes for selective deletion */
>   
> diff --git a/src/acpica/source/tools/acpiexec/aecommon.h b/src/acpica/source/tools/acpiexec/aecommon.h
> index b4864610..00bf09b4 100644
> --- a/src/acpica/source/tools/acpiexec/aecommon.h
> +++ b/src/acpica/source/tools/acpiexec/aecommon.h
> @@ -190,6 +190,7 @@ typedef struct ae_debug_regions
>   
>   
>   extern BOOLEAN              AcpiGbl_IgnoreErrors;
> +extern BOOLEAN              AcpiGbl_AbortLoopOnTimeout;
>   extern UINT8                AcpiGbl_RegionFillValue;
>   extern UINT8                AcpiGbl_UseHwReducedFadt;
>   extern BOOLEAN              AcpiGbl_DisplayRegionAccess;
> diff --git a/src/acpica/source/tools/acpiexec/aeexception.c b/src/acpica/source/tools/acpiexec/aeexception.c
> index 62e9db0a..2e44dbc5 100644
> --- a/src/acpica/source/tools/acpiexec/aeexception.c
> +++ b/src/acpica/source/tools/acpiexec/aeexception.c
> @@ -196,13 +196,22 @@ AeExceptionHandler (
>       Exception = AcpiFormatException (AmlStatus);
>       AcpiOsPrintf (AE_PREFIX
>           "Exception %s during execution\n", Exception);
> +
>       if (Name)
>       {
>           AcpiOsPrintf (AE_PREFIX
> -            "Evaluating Method or Node: [%4.4s]",
> +            "Evaluating Method or Node: [%4.4s]\n",
>               (char *) &Name);
>       }
>   
> +    /* Be terse about loop timeouts */
> +
> +    if ((AmlStatus == AE_AML_LOOP_TIMEOUT) && AcpiGbl_AbortLoopOnTimeout)
> +    {
> +        AcpiOsPrintf (AE_PREFIX "Aborting loop after timeout\n");
> +        return (AE_OK);
> +    }
> +
>       AcpiOsPrintf ("\n" AE_PREFIX
>           "AML Opcode [%s], Method Offset ~%5.5X\n",
>           AcpiPsGetOpcodeName (Opcode), AmlOffset);
> diff --git a/src/lib/src/fwts_acpi_object_eval.c b/src/lib/src/fwts_acpi_object_eval.c
> index d9572243..adcaafa3 100644
> --- a/src/lib/src/fwts_acpi_object_eval.c
> +++ b/src/lib/src/fwts_acpi_object_eval.c
> @@ -422,7 +422,7 @@ void fwts_acpi_object_evaluate_report_error(
>   	switch (status) {
>   	case AE_OK:
>   		break;
> -	case AE_AML_INFINITE_LOOP:
> +	case AE_AML_LOOP_TIMEOUT:
>   		fwts_warning(fw, "Detected an infinite loop when evaluating method '%s'. ", name);
>   		fwts_advice(fw, "This may occur because we are emulating the execution "
>   				"in this test environment and cannot handshake with "
> 

Acked-by: Ivan Hu <ivan.hu at canonical.com>



More information about the fwts-devel mailing list