ACK: [PATCH] acpica: update to version 20140424 (LP: #1312351)

IvanHu ivan.hu at canonical.com
Mon May 26 06:17:41 UTC 2014


On 04/25/2014 02:26 AM, Colin King wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> For the specific ACPICA changes please refer to:
>
> https://lists.acpica.org/pipermail/devel/2014-April/000649.html
>
> The also adds a small shim wrapper in the fwts and fwtsiasl libraries
> to access ACPI compiler error levels because of some restructuring
> in ACPICA.
>
> This patchset also dismisses 14 issues as found by Coverity Scan.
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
>   src/Makefile.am                                    |   2 +-
>   src/acpi/syntaxcheck/syntaxcheck.c                 |   5 +-
>   src/acpica/source/common/adisasm.c                 |   1 +
>   src/acpica/source/common/ahpredef.c                |   2 +
>   src/acpica/source/common/dmtable.c                 |  34 ++
>   src/acpica/source/common/dmtbdump.c                | 193 +++++---
>   src/acpica/source/common/dmtbinfo.c                |  57 +++
>   src/acpica/source/compiler/Makefile.am             |   1 +
>   src/acpica/source/compiler/aslanalyze.c            |  48 ++
>   src/acpica/source/compiler/aslcompiler.h           |  29 +-
>   src/acpica/source/compiler/aslerror.c              | 159 +++----
>   src/acpica/source/compiler/aslmessages.c           | 479 +++++++++++++++++++
>   src/acpica/source/compiler/aslmessages.h           | 269 ++---------
>   src/acpica/source/compiler/aslmethod.c             |  23 +-
>   src/acpica/source/compiler/aslprepkg.c             |  12 +
>   src/acpica/source/compiler/asltypes.h              |   2 +-
>   src/acpica/source/compiler/dtcompiler.h            |  11 +-
>   src/acpica/source/compiler/dttable.c               |  83 +++-
>   src/acpica/source/compiler/dttemplate.h            |  27 ++
>   src/acpica/source/compiler/dtutils.c               |   7 +-
>   src/acpica/source/compiler/fwts_iasl_interface.c   |  18 +
>   src/acpica/source/compiler/fwts_iasl_interface.h   |   3 +
>   src/acpica/source/compiler/preprocess.h            |   2 +-
>   src/acpica/source/compiler/prutils.c               |   2 +-
>   src/acpica/source/components/debugger/dbcmds.c     |  27 +-
>   src/acpica/source/components/debugger/dbinput.c    |   4 +-
>   src/acpica/source/components/events/evgpe.c        |  12 +-
>   src/acpica/source/components/events/evgpeblk.c     |  28 +-
>   src/acpica/source/components/events/evgpeinit.c    |   8 +-
>   src/acpica/source/components/events/evxfgpe.c      |   3 +-
>   src/acpica/source/components/hardware/hwpci.c      |  13 +-
>   src/acpica/source/components/resources/rscreate.c  |  12 +-
>   src/acpica/source/components/tables/tbfadt.c       |  50 +-
>   src/acpica/source/components/tables/tbutils.c      | 123 +----
>   src/acpica/source/components/utilities/utglobal.c  |  30 +-
>   src/acpica/source/components/utilities/utobject.c  |   2 +-
>   src/acpica/source/components/utilities/utxferror.c |   4 +
>   src/acpica/source/include/acdisasm.h               |   8 +
>   src/acpica/source/include/acevents.h               |   5 +-
>   src/acpica/source/include/acglobal.h               | 143 +-----
>   src/acpica/source/include/aclocal.h                |   7 +-
>   src/acpica/source/include/acnames.h                |   1 +
>   src/acpica/source/include/acpixf.h                 | 518 ++++++++++++++++-----
>   src/acpica/source/include/acpredef.h               |   4 +
>   src/acpica/source/include/actbl1.h                 |   4 +-
>   src/acpica/source/include/actbl2.h                 |  83 +++-
>   src/acpica/source/include/actypes.h                |  35 +-
>   src/acpica/source/include/platform/aclinux.h       |  33 ++
>   .../source/os_specific/service_layers/osunixxf.c   |  23 +-
>   src/acpica/source/tools/acpiexec/aehandlers.c      |   2 +-
>   src/lib/include/fwts_iasl.h                        |   3 +
>   src/lib/src/Makefile.am                            |   2 +-
>   src/lib/src/fwts_iasl.c                            |   4 +
>   53 files changed, 1799 insertions(+), 861 deletions(-)
>   create mode 100755 src/acpica/source/compiler/aslmessages.c
>
> diff --git a/src/Makefile.am b/src/Makefile.am
> index 155cba1..ff44b58 100644
> --- a/src/Makefile.am
> +++ b/src/Makefile.am
> @@ -15,7 +15,7 @@ AM_CPPFLAGS = \
>
>   bin_PROGRAMS = fwts
>
> -fwts_CPPFLAGS = $(AM_CPPFLAGS)
> +fwts_CPPFLAGS = $(AM_CPPFLAGS) -DACPI_DEBUG_OUTPUT
>
>   #
>   #  fwts main + tests
> diff --git a/src/acpi/syntaxcheck/syntaxcheck.c b/src/acpi/syntaxcheck/syntaxcheck.c
> index 9234c33..5075cbf 100644
> --- a/src/acpi/syntaxcheck/syntaxcheck.c
> +++ b/src/acpi/syntaxcheck/syntaxcheck.c
> @@ -27,8 +27,7 @@
>
>   #include <json/json.h>
>
> -#define ASL_EXCEPTIONS	/* so we can include AslErrorLevel in aslmessages.h */
> -
> +#define ASL_EXCEPTIONS
>   #include "aslmessages.h"
>
>   typedef struct {
> @@ -277,7 +276,7 @@ static const char *syntaxcheck_error_level(uint32_t error_code)
>   		return "Unknown";
>
>   	/* AslErrorLevel strings are end-space padded, so strip off end spaces if any */
> -	strncpy(buf, AslErrorLevel[error_level], sizeof(buf));
> +	strncpy(buf, fwts_iasl_exception_level((uint8_t)error_level), sizeof(buf));
>   	buf[sizeof(buf) -1] = '\0';
>   	ptr = strchr(buf, ' ');
>   	if (ptr)
> diff --git a/src/acpica/source/common/adisasm.c b/src/acpica/source/common/adisasm.c
> index 52afb31..df70001 100644
> --- a/src/acpica/source/common/adisasm.c
> +++ b/src/acpica/source/common/adisasm.c
> @@ -429,6 +429,7 @@ AdAmlDisassemble (
>           {
>               fprintf (stderr, "Could not open output file %s\n", DisasmFilename);
>               Status = AE_ERROR;
> +            ACPI_FREE (DisasmFilename);
>               goto Cleanup;
>           }
>
> diff --git a/src/acpica/source/common/ahpredef.c b/src/acpica/source/common/ahpredef.c
> index 1bb6a8a..21038ab 100644
> --- a/src/acpica/source/common/ahpredef.c
> +++ b/src/acpica/source/common/ahpredef.c
> @@ -244,6 +244,7 @@ const AH_PREDEFINED_NAME    AslPredefinedInfo[] =
>       AH_PREDEF ("_LID",    "Lid Status", "Returns the open/closed status of the lid on a mobile system"),
>       AH_PREDEF ("_LIN",    "Lines In Use", "Handshake lines, Resource Descriptor field"),
>       AH_PREDEF ("_LL_",    "Low Level", "Interrupt polarity, Resource Descriptor field"),
> +    AH_PREDEF ("_LPD",    "Low Power Dependencies", "Returns a list of dependencies for low power idle entry"),
>       AH_PREDEF ("_MAF",    "Maximum Address Fixed", "Resource Descriptor field"),
>       AH_PREDEF ("_MAT",    "Multiple APIC Table Entry", "Returns a list of MADT APIC structure entries"),
>       AH_PREDEF ("_MAX",    "Maximum Base Address", "Resource Descriptor field"),
> @@ -288,6 +289,7 @@ const AH_PREDEFINED_NAME    AslPredefinedInfo[] =
>       AH_PREDEF ("_PR3",    "Power Resources for D3hot", "Returns a list of dependent power resources to enter state D3hot"),
>       AH_PREDEF ("_PRE",    "Power Resources for Enumeration", "Returns a list of dependent power resources to enumerate devices on a bus"),
>       AH_PREDEF ("_PRL",    "Power Source Redundancy List", "Returns a list of power source devices in the same redundancy grouping"),
> +    AH_PREDEF ("_PRP",    "Device Properties", "Returns a list of device property information"),
>       AH_PREDEF ("_PRS",    "Possible Resource Settings", "Returns a list of a device's possible resource settings"),
>       AH_PREDEF ("_PRT",    "PCI Routing Table", "Returns a list of PCI interrupt mappings"),
>       AH_PREDEF ("_PRW",    "Power Resources for Wake", "Returns a list of dependent power resources for waking"),
> diff --git a/src/acpica/source/common/dmtable.c b/src/acpica/source/common/dmtable.c
> index 35f142c..e2abd7a 100644
> --- a/src/acpica/source/common/dmtable.c
> +++ b/src/acpica/source/common/dmtable.c
> @@ -313,6 +313,12 @@ static const char           *AcpiDmIvrsSubnames[] =
>       "Unknown SubTable Type"         /* Reserved */
>   };
>
> +static const char           *AcpiDmLpitSubnames[] =
> +{
> +    "Native C-state Idle Structure",
> +    "Simple I/O Idle Structure",
> +    "Unknown SubTable Type"         /* Reserved */
> +};
>
>   #define ACPI_FADT_PM_RESERVED       9
>
> @@ -376,6 +382,7 @@ ACPI_DMTABLE_DATA    AcpiDmTableData[] =
>       {ACPI_SIG_HEST, NULL,                   AcpiDmDumpHest, DtCompileHest,  TemplateHest,   "Hardware Error Source Table"},
>       {ACPI_SIG_HPET, AcpiDmTableInfoHpet,    NULL,           NULL,           TemplateHpet,   "High Precision Event Timer table"},
>       {ACPI_SIG_IVRS, NULL,                   AcpiDmDumpIvrs, DtCompileIvrs,  TemplateIvrs,   "I/O Virtualization Reporting Structure"},
> +    {ACPI_SIG_LPIT, NULL,                   AcpiDmDumpLpit, DtCompileLpit,  TemplateLpit,   "Low Power Idle Table"},
>       {ACPI_SIG_MADT, NULL,                   AcpiDmDumpMadt, DtCompileMadt,  TemplateMadt,   "Multiple APIC Description Table (MADT)"},
>       {ACPI_SIG_MCFG, NULL,                   AcpiDmDumpMcfg, DtCompileMcfg,  TemplateMcfg,   "Memory Mapped Configuration table"},
>       {ACPI_SIG_MCHI, AcpiDmTableInfoMchi,    NULL,           NULL,           TemplateMchi,   "Management Controller Host Interface table"},
> @@ -801,6 +808,7 @@ AcpiDmDumpTable (
>           case ACPI_DMT_NAME4:
>           case ACPI_DMT_SIG:
>           case ACPI_DMT_SLIC:
> +        case ACPI_DMT_LPIT:
>
>               ByteLength = 4;
>               break;
> @@ -1304,6 +1312,32 @@ AcpiDmDumpTable (
>               AcpiOsPrintf (UINT8_FORMAT, *Target, Name);
>               break;
>
> +        case ACPI_DMT_LPIT:
> +
> +            /* LPIT subtable types */
> +
> +            Temp8 = *Target;
> +            switch (Temp8)
> +            {
> +            case ACPI_LPIT_TYPE_NATIVE_CSTATE:
> +
> +                Name = AcpiDmLpitSubnames[0];
> +                break;
> +
> +            case ACPI_LPIT_TYPE_SIMPLE_IO:
> +
> +                Name = AcpiDmLpitSubnames[1];
> +                break;
> +
> +            default:
> +
> +                Name = AcpiDmLpitSubnames[2];
> +                break;
> +            }
> +
> +            AcpiOsPrintf (UINT32_FORMAT, *Target, Name);
> +            break;
> +
>           case ACPI_DMT_EXIT:
>
>               return (AE_OK);
> diff --git a/src/acpica/source/common/dmtbdump.c b/src/acpica/source/common/dmtbdump.c
> index f2a6762..70e9d4e 100644
> --- a/src/acpica/source/common/dmtbdump.c
> +++ b/src/acpica/source/common/dmtbdump.c
> @@ -491,12 +491,12 @@ AcpiDmDumpAsf (
>       UINT8                   Type;
>
>
> -    /* No main table, only sub-tables */
> +    /* No main table, only subtables */
>
>       SubTable = ACPI_ADD_PTR (ACPI_ASF_INFO, Table, Offset);
>       while (Offset < Table->Length)
>       {
> -        /* Common sub-table header */
> +        /* Common subtable header */
>
>           Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
>                       SubTable->Header.Length, AcpiDmTableInfoAsfHdr);
> @@ -551,7 +551,7 @@ AcpiDmDumpAsf (
>
>           default:
>
> -            AcpiOsPrintf ("\n**** Unknown ASF sub-table type 0x%X\n", SubTable->Header.Type);
> +            AcpiOsPrintf ("\n**** Unknown ASF subtable type 0x%X\n", SubTable->Header.Type);
>               return;
>           }
>
> @@ -613,7 +613,7 @@ AcpiDmDumpAsf (
>
>           AcpiOsPrintf ("\n");
>
> -        /* Point to next sub-table */
> +        /* Point to next subtable */
>
>           if (!SubTable->Header.Length)
>           {
> @@ -658,7 +658,7 @@ AcpiDmDumpCpep (
>           return;
>       }
>
> -    /* Sub-tables */
> +    /* Subtables */
>
>       SubTable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Table, Offset);
>       while (Offset < Table->Length)
> @@ -671,7 +671,7 @@ AcpiDmDumpCpep (
>               return;
>           }
>
> -        /* Point to next sub-table */
> +        /* Point to next subtable */
>
>           Offset += SubTable->Header.Length;
>           SubTable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, SubTable,
> @@ -710,7 +710,7 @@ AcpiDmDumpCsrt (
>
>       /* The main table only contains the ACPI header, thus already handled */
>
> -    /* Sub-tables (Resource Groups) */
> +    /* Subtables (Resource Groups) */
>
>       SubTable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Table, Offset);
>       while (Offset < Table->Length)
> @@ -774,7 +774,7 @@ AcpiDmDumpCsrt (
>                           SubSubTable->Length);
>           }
>
> -        /* Point to next sub-table */
> +        /* Point to next subtable */
>
>           Offset += SubTable->Length;
>           SubTable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, SubTable,
> @@ -818,7 +818,7 @@ AcpiDmDumpDbg2 (
>           return;
>       }
>
> -    /* Sub-tables */
> +    /* Subtables */
>
>       SubTable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Table, Offset);
>       while (Offset < Table->Length)
> @@ -887,7 +887,7 @@ AcpiDmDumpDbg2 (
>                   Offset + SubTable->OemDataOffset, "OEM Data");
>           }
>
> -        /* Point to next sub-table */
> +        /* Point to next subtable */
>
>           Offset += SubTable->Length;
>           SubTable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, SubTable,
> @@ -933,12 +933,12 @@ AcpiDmDumpDmar (
>           return;
>       }
>
> -    /* Sub-tables */
> +    /* Subtables */
>
>       SubTable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Table, Offset);
>       while (Offset < Table->Length)
>       {
> -        /* Common sub-table header */
> +        /* Common subtable header */
>
>           AcpiOsPrintf ("\n");
>           Status = AcpiDmDumpTable (Length, Offset, SubTable,
> @@ -977,7 +977,7 @@ AcpiDmDumpDmar (
>
>           default:
>
> -            AcpiOsPrintf ("\n**** Unknown DMAR sub-table type 0x%X\n\n", SubTable->Type);
> +            AcpiOsPrintf ("\n**** Unknown DMAR subtable type 0x%X\n\n", SubTable->Type);
>               return;
>           }
>
> @@ -1028,7 +1028,7 @@ AcpiDmDumpDmar (
>                   ScopeTable, ScopeTable->Length);
>           }
>
> -        /* Point to next sub-table */
> +        /* Point to next subtable */
>
>           Offset += SubTable->Length;
>           SubTable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, SubTable, SubTable->Length);
> @@ -1067,7 +1067,7 @@ AcpiDmDumpEinj (
>           return;
>       }
>
> -    /* Sub-tables */
> +    /* Subtables */
>
>       SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);
>       while (Offset < Table->Length)
> @@ -1080,7 +1080,7 @@ AcpiDmDumpEinj (
>               return;
>           }
>
> -        /* Point to next sub-table (each subtable is of fixed length) */
> +        /* Point to next subtable (each subtable is of fixed length) */
>
>           Offset += sizeof (ACPI_WHEA_HEADER);
>           SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, SubTable,
> @@ -1120,7 +1120,7 @@ AcpiDmDumpErst (
>           return;
>       }
>
> -    /* Sub-tables */
> +    /* Subtables */
>
>       SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);
>       while (Offset < Table->Length)
> @@ -1133,7 +1133,7 @@ AcpiDmDumpErst (
>               return;
>           }
>
> -        /* Point to next sub-table (each subtable is of fixed length) */
> +        /* Point to next subtable (each subtable is of fixed length) */
>
>           Offset += sizeof (ACPI_WHEA_HEADER);
>           SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, SubTable,
> @@ -1168,12 +1168,12 @@ AcpiDmDumpFpdt (
>
>       /* There is no main table (other than the standard ACPI header) */
>
> -    /* Sub-tables */
> +    /* Subtables */
>
>       SubTable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Table, Offset);
>       while (Offset < Table->Length)
>       {
> -        /* Common sub-table header */
> +        /* Common subtable header */
>
>           AcpiOsPrintf ("\n");
>           Status = AcpiDmDumpTable (Length, Offset, SubTable,
> @@ -1197,7 +1197,7 @@ AcpiDmDumpFpdt (
>
>           default:
>
> -            AcpiOsPrintf ("\n**** Unknown FPDT sub-table type 0x%X\n\n", SubTable->Type);
> +            AcpiOsPrintf ("\n**** Unknown FPDT subtable type 0x%X\n\n", SubTable->Type);
>
>               /* Attempt to continue */
>
> @@ -1217,7 +1217,7 @@ AcpiDmDumpFpdt (
>           }
>
>   NextSubTable:
> -        /* Point to next sub-table */
> +        /* Point to next subtable */
>
>           Offset += SubTable->Length;
>           SubTable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, SubTable, SubTable->Length);
> @@ -1260,7 +1260,7 @@ AcpiDmDumpHest (
>           return;
>       }
>
> -    /* Sub-tables */
> +    /* Subtables */
>
>       SubTable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Table, Offset);
>       while (Offset < Table->Length)
> @@ -1318,7 +1318,7 @@ AcpiDmDumpHest (
>
>               /* Cannot continue on unknown type - no length */
>
> -            AcpiOsPrintf ("\n**** Unknown HEST sub-table type 0x%X\n", SubTable->Type);
> +            AcpiOsPrintf ("\n**** Unknown HEST subtable type 0x%X\n", SubTable->Type);
>               return;
>           }
>
> @@ -1356,7 +1356,7 @@ AcpiDmDumpHest (
>               }
>           }
>
> -        /* Point to next sub-table */
> +        /* Point to next subtable */
>
>           SubTable = ACPI_ADD_PTR (ACPI_HEST_HEADER, SubTable, SubTableLength);
>       }
> @@ -1399,12 +1399,12 @@ AcpiDmDumpIvrs (
>           return;
>       }
>
> -    /* Sub-tables */
> +    /* Subtables */
>
>       SubTable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset);
>       while (Offset < Table->Length)
>       {
> -        /* Common sub-table header */
> +        /* Common subtable header */
>
>           AcpiOsPrintf ("\n");
>           Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
> @@ -1430,7 +1430,7 @@ AcpiDmDumpIvrs (
>
>           default:
>
> -            AcpiOsPrintf ("\n**** Unknown IVRS sub-table type 0x%X\n",
> +            AcpiOsPrintf ("\n**** Unknown IVRS subtable type 0x%X\n",
>                   SubTable->Type);
>
>               /* Attempt to continue */
> @@ -1533,7 +1533,7 @@ AcpiDmDumpIvrs (
>           }
>
>   NextSubTable:
> -        /* Point to next sub-table */
> +        /* Point to next subtable */
>
>           Offset += SubTable->Length;
>           SubTable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, SubTable, SubTable->Length);
> @@ -1543,6 +1543,85 @@ NextSubTable:
>
>   /*******************************************************************************
>    *
> + * FUNCTION:    AcpiDmDumpLpit
> + *
> + * PARAMETERS:  Table               - A LPIT table
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Format the contents of a LPIT. This table type consists
> + *              of an open-ended number of subtables. Note: There are no
> + *              entries in the main table. An LPIT consists of the table
> + *              header and then subtables only.
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmDumpLpit (
> +    ACPI_TABLE_HEADER       *Table)
> +{
> +    ACPI_STATUS             Status;
> +    ACPI_LPIT_HEADER        *SubTable;
> +    UINT32                  Length = Table->Length;
> +    UINT32                  Offset = sizeof (ACPI_TABLE_LPIT);
> +    ACPI_DMTABLE_INFO       *InfoTable;
> +    UINT32                  SubTableLength;
> +
> +
> +    /* Subtables */
> +
> +    SubTable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Table, Offset);
> +    while (Offset < Table->Length)
> +    {
> +        /* Common subtable header */
> +
> +        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> +                    sizeof (ACPI_LPIT_HEADER), AcpiDmTableInfoLpitHdr);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return;
> +        }
> +
> +        switch (SubTable->Type)
> +        {
> +        case ACPI_LPIT_TYPE_NATIVE_CSTATE:
> +
> +            InfoTable = AcpiDmTableInfoLpit0;
> +            SubTableLength = sizeof (ACPI_LPIT_NATIVE);
> +            break;
> +
> +        case ACPI_LPIT_TYPE_SIMPLE_IO:
> +
> +            InfoTable = AcpiDmTableInfoLpit1;
> +            SubTableLength = sizeof (ACPI_LPIT_IO);
> +            break;
> +
> +        default:
> +
> +            /* Cannot continue on unknown type - no length */
> +
> +            AcpiOsPrintf ("\n**** Unknown LPIT subtable type 0x%X\n", SubTable->Type);
> +            return;
> +        }
> +
> +        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> +                    SubTableLength, InfoTable);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return;
> +        }
> +        AcpiOsPrintf ("\n");
> +
> +        /* Point to next subtable */
> +
> +        Offset += SubTableLength;
> +        SubTable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, SubTable, SubTableLength);
> +    }
> +}
> +
> +
> +/*******************************************************************************
> + *
>    * FUNCTION:    AcpiDmDumpMadt
>    *
>    * PARAMETERS:  Table               - A MADT table
> @@ -1573,12 +1652,12 @@ AcpiDmDumpMadt (
>           return;
>       }
>
> -    /* Sub-tables */
> +    /* Subtables */
>
>       SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
>       while (Offset < Table->Length)
>       {
> -        /* Common sub-table header */
> +        /* Common subtable header */
>
>           AcpiOsPrintf ("\n");
>           Status = AcpiDmDumpTable (Length, Offset, SubTable,
> @@ -1657,7 +1736,7 @@ AcpiDmDumpMadt (
>
>           default:
>
> -            AcpiOsPrintf ("\n**** Unknown MADT sub-table type 0x%X\n\n", SubTable->Type);
> +            AcpiOsPrintf ("\n**** Unknown MADT subtable type 0x%X\n\n", SubTable->Type);
>
>               /* Attempt to continue */
>
> @@ -1677,7 +1756,7 @@ AcpiDmDumpMadt (
>           }
>
>   NextSubTable:
> -        /* Point to next sub-table */
> +        /* Point to next subtable */
>
>           Offset += SubTable->Length;
>           SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, SubTable, SubTable->Length);
> @@ -1714,7 +1793,7 @@ AcpiDmDumpMcfg (
>           return;
>       }
>
> -    /* Sub-tables */
> +    /* Subtables */
>
>       SubTable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Table, Offset);
>       while (Offset < Table->Length)
> @@ -1734,7 +1813,7 @@ AcpiDmDumpMcfg (
>               return;
>           }
>
> -        /* Point to next sub-table (each subtable is of fixed length) */
> +        /* Point to next subtable (each subtable is of fixed length) */
>
>           Offset += sizeof (ACPI_MCFG_ALLOCATION);
>           SubTable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, SubTable,
> @@ -1916,12 +1995,12 @@ AcpiDmDumpMsct (
>           return;
>       }
>
> -    /* Sub-tables */
> +    /* Subtables */
>
>       SubTable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Table, Offset);
>       while (Offset < Table->Length)
>       {
> -        /* Common sub-table header */
> +        /* Common subtable header */
>
>           AcpiOsPrintf ("\n");
>           Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
> @@ -1931,7 +2010,7 @@ AcpiDmDumpMsct (
>               return;
>           }
>
> -        /* Point to next sub-table */
> +        /* Point to next subtable */
>
>           Offset += sizeof (ACPI_MSCT_PROXIMITY);
>           SubTable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, SubTable, sizeof (ACPI_MSCT_PROXIMITY));
> @@ -1968,12 +2047,12 @@ AcpiDmDumpMtmr (
>           return;
>       }
>
> -    /* Sub-tables */
> +    /* Subtables */
>
>       SubTable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Table, Offset);
>       while (Offset < Table->Length)
>       {
> -        /* Common sub-table header */
> +        /* Common subtable header */
>
>           AcpiOsPrintf ("\n");
>           Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
> @@ -1983,7 +2062,7 @@ AcpiDmDumpMtmr (
>               return;
>           }
>
> -        /* Point to next sub-table */
> +        /* Point to next subtable */
>
>           Offset += sizeof (ACPI_MTMR_ENTRY);
>           SubTable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, SubTable, sizeof (ACPI_MTMR_ENTRY));
> @@ -2304,7 +2383,7 @@ AcpiDmDumpS3pt (
>       SubTable = ACPI_ADD_PTR (ACPI_S3PT_HEADER, S3ptTable, Offset);
>       while (Offset < S3ptTable->Length)
>       {
> -        /* Common sub-table header */
> +        /* Common subtable header */
>
>           AcpiOsPrintf ("\n");
>           Status = AcpiDmDumpTable (S3ptTable->Length, Offset, SubTable,
> @@ -2328,7 +2407,7 @@ AcpiDmDumpS3pt (
>
>           default:
>
> -            AcpiOsPrintf ("\n**** Unknown S3PT sub-table type 0x%X\n", SubTable->Type);
> +            AcpiOsPrintf ("\n**** Unknown S3PT subtable type 0x%X\n", SubTable->Type);
>
>               /* Attempt to continue */
>
> @@ -2349,7 +2428,7 @@ AcpiDmDumpS3pt (
>           }
>
>   NextSubTable:
> -        /* Point to next sub-table */
> +        /* Point to next subtable */
>
>           Offset += SubTable->Length;
>           SubTable = ACPI_ADD_PTR (ACPI_S3PT_HEADER, SubTable, SubTable->Length);
> @@ -2386,7 +2465,7 @@ AcpiDmDumpSlic (
>       SubTable = ACPI_ADD_PTR (ACPI_SLIC_HEADER, Table, Offset);
>       while (Offset < Table->Length)
>       {
> -        /* Common sub-table header */
> +        /* Common subtable header */
>
>           AcpiOsPrintf ("\n");
>           Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
> @@ -2410,7 +2489,7 @@ AcpiDmDumpSlic (
>
>           default:
>
> -            AcpiOsPrintf ("\n**** Unknown SLIC sub-table type 0x%X\n", SubTable->Type);
> +            AcpiOsPrintf ("\n**** Unknown SLIC subtable type 0x%X\n", SubTable->Type);
>
>               /* Attempt to continue */
>
> @@ -2431,7 +2510,7 @@ AcpiDmDumpSlic (
>           }
>
>   NextSubTable:
> -        /* Point to next sub-table */
> +        /* Point to next subtable */
>
>           Offset += SubTable->Length;
>           SubTable = ACPI_ADD_PTR (ACPI_SLIC_HEADER, SubTable, SubTable->Length);
> @@ -2547,12 +2626,12 @@ AcpiDmDumpSrat (
>           return;
>       }
>
> -    /* Sub-tables */
> +    /* Subtables */
>
>       SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
>       while (Offset < Table->Length)
>       {
> -        /* Common sub-table header */
> +        /* Common subtable header */
>
>           AcpiOsPrintf ("\n");
>           Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
> @@ -2580,7 +2659,7 @@ AcpiDmDumpSrat (
>               break;
>
>           default:
> -            AcpiOsPrintf ("\n**** Unknown SRAT sub-table type 0x%X\n", SubTable->Type);
> +            AcpiOsPrintf ("\n**** Unknown SRAT subtable type 0x%X\n", SubTable->Type);
>
>               /* Attempt to continue */
>
> @@ -2601,7 +2680,7 @@ AcpiDmDumpSrat (
>           }
>
>   NextSubTable:
> -        /* Point to next sub-table */
> +        /* Point to next subtable */
>
>           Offset += SubTable->Length;
>           SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, SubTable, SubTable->Length);
> @@ -2638,12 +2717,12 @@ AcpiDmDumpVrtc (
>           return;
>       }
>
> -    /* Sub-tables */
> +    /* Subtables */
>
>       SubTable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, Table, Offset);
>       while (Offset < Table->Length)
>       {
> -        /* Common sub-table header */
> +        /* Common subtable header */
>
>           AcpiOsPrintf ("\n");
>           Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
> @@ -2653,7 +2732,7 @@ AcpiDmDumpVrtc (
>               return;
>           }
>
> -        /* Point to next sub-table */
> +        /* Point to next subtable */
>
>           Offset += sizeof (ACPI_VRTC_ENTRY);
>           SubTable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, SubTable, sizeof (ACPI_VRTC_ENTRY));
> @@ -2690,12 +2769,12 @@ AcpiDmDumpWdat (
>           return;
>       }
>
> -    /* Sub-tables */
> +    /* Subtables */
>
>       SubTable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Table, Offset);
>       while (Offset < Table->Length)
>       {
> -        /* Common sub-table header */
> +        /* Common subtable header */
>
>           AcpiOsPrintf ("\n");
>           Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
> @@ -2705,7 +2784,7 @@ AcpiDmDumpWdat (
>               return;
>           }
>
> -        /* Point to next sub-table */
> +        /* Point to next subtable */
>
>           Offset += sizeof (ACPI_WDAT_ENTRY);
>           SubTable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, SubTable, sizeof (ACPI_WDAT_ENTRY));
> diff --git a/src/acpica/source/common/dmtbinfo.c b/src/acpica/source/common/dmtbinfo.c
> index cd565a4..7a9520d 100644
> --- a/src/acpica/source/common/dmtbinfo.c
> +++ b/src/acpica/source/common/dmtbinfo.c
> @@ -230,6 +230,9 @@
>   #define ACPI_IVRS8A_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_IVRS_DEVICE8A,f)
>   #define ACPI_IVRS8B_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_IVRS_DEVICE8B,f)
>   #define ACPI_IVRS8C_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_IVRS_DEVICE8C,f)
> +#define ACPI_LPITH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_LPIT_HEADER,f)
> +#define ACPI_LPIT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_LPIT_NATIVE,f)
> +#define ACPI_LPIT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_LPIT_IO,f)
>   #define ACPI_MADT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_APIC,f)
>   #define ACPI_MADT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MADT_IO_APIC,f)
>   #define ACPI_MADT2_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MADT_INTERRUPT_OVERRIDE,f)
> @@ -285,6 +288,7 @@
>   #define ACPI_SRAT1_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_SRAT_MEM_AFFINITY,f,o)
>   #define ACPI_SRAT2_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_SRAT_X2APIC_CPU_AFFINITY,f,o)
>   #define ACPI_GTDT_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_GTDT,f,o)
> +#define ACPI_LPITH_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_LPIT_HEADER,f,o)
>   #define ACPI_MADT_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_MADT,f,o)
>   #define ACPI_MADT0_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_APIC,f,o)
>   #define ACPI_MADT2_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_MADT_INTERRUPT_OVERRIDE,f,o)
> @@ -1379,6 +1383,59 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs8c[] =
>
>   /*******************************************************************************
>    *
> + * LPIT - Low Power Idle Table
> + *
> + ******************************************************************************/
> +
> +/* Main table consists only of the standard ACPI table header */
> +
> +/* Common Subtable header (one per Subtable) */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoLpitHdr[] =
> +{
> +    {ACPI_DMT_LPIT,     ACPI_LPITH_OFFSET (Type),                   "Subtable Type", 0},
> +    {ACPI_DMT_UINT32,   ACPI_LPITH_OFFSET (Length),                 "Length", DT_LENGTH},
> +    {ACPI_DMT_UINT16,   ACPI_LPITH_OFFSET (UniqueId),               "Unique ID", 0},
> +    {ACPI_DMT_UINT16,   ACPI_LPITH_OFFSET (Reserved),               "Reserved", 0},
> +    {ACPI_DMT_UINT32,   ACPI_LPITH_OFFSET (Flags),                  "Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_LPITH_FLAG_OFFSET (Flags, 0),          "State Disabled", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_LPITH_FLAG_OFFSET (Flags, 0),          "No Counter", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* LPIT Subtables */
> +
> +/* 0: Native C-state */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoLpit0[] =
> +{
> +    {ACPI_DMT_GAS,      ACPI_LPIT0_OFFSET (EntryTrigger),           "Entry Trigger", 0},
> +    {ACPI_DMT_UINT32,   ACPI_LPIT0_OFFSET (Residency),              "Residency", 0},
> +    {ACPI_DMT_UINT32,   ACPI_LPIT0_OFFSET (Latency),                "Latency", 0},
> +    {ACPI_DMT_GAS,      ACPI_LPIT0_OFFSET (ResidencyCounter),       "Residency Counter", 0},
> +    {ACPI_DMT_UINT64,   ACPI_LPIT0_OFFSET (CounterFrequency),       "Counter Frequency", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 1: Simple I/O */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoLpit1[] =
> +{
> +    {ACPI_DMT_GAS,      ACPI_LPIT1_OFFSET (EntryTrigger),           "Entry Trigger", 0},
> +    {ACPI_DMT_UINT32,   ACPI_LPIT1_OFFSET (TriggerAction),          "Trigger Action", 0},
> +    {ACPI_DMT_UINT64,   ACPI_LPIT1_OFFSET (TriggerValue),           "Trigger Value", 0},
> +    {ACPI_DMT_UINT64,   ACPI_LPIT1_OFFSET (TriggerMask),            "Trigger Mask", 0},
> +    {ACPI_DMT_GAS,      ACPI_LPIT1_OFFSET (MinimumIdleState),       "Minimum Idle State", 0},
> +    {ACPI_DMT_UINT32,   ACPI_LPIT1_OFFSET (Residency),              "Residency", 0},
> +    {ACPI_DMT_UINT32,   ACPI_LPIT1_OFFSET (Latency),                "Latency", 0},
> +    {ACPI_DMT_GAS,      ACPI_LPIT1_OFFSET (ResidencyCounter),       "Residency Counter", 0},
> +    {ACPI_DMT_UINT64,   ACPI_LPIT1_OFFSET (CounterFrequency),       "Counter Frequency", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +
> +/*******************************************************************************
> + *
>    * MADT - Multiple APIC Description Table and subtables
>    *
>    ******************************************************************************/
> diff --git a/src/acpica/source/compiler/Makefile.am b/src/acpica/source/compiler/Makefile.am
> index 1c215b2..d306e56 100644
> --- a/src/acpica/source/compiler/Makefile.am
> +++ b/src/acpica/source/compiler/Makefile.am
> @@ -72,6 +72,7 @@ libfwtsiasl_la_SOURCES = 			\
>   	aslload.c 				\
>   	asllookup.c 				\
>   	aslmap.c 				\
> +	aslmessages.c				\
>   	aslopcodes.c 				\
>   	asloperands.c 				\
>   	aslopt.c 				\
> diff --git a/src/acpica/source/compiler/aslanalyze.c b/src/acpica/source/compiler/aslanalyze.c
> index 16e28d3..8bfc9ac 100644
> --- a/src/acpica/source/compiler/aslanalyze.c
> +++ b/src/acpica/source/compiler/aslanalyze.c
> @@ -641,3 +641,51 @@ ApCheckRegMethod (
>
>       AslError (ASL_WARNING, ASL_MSG_NO_REGION, Op, NULL);
>   }
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    ApFindNameInScope
> + *
> + * PARAMETERS:  Name                - Name to search for
> + *              Op                  - Current parse op
> + *
> + * RETURN:      TRUE if name found in the same scope as Op.
> + *
> + * DESCRIPTION: Determine if a name appears in the same scope as Op, as either
> + *              a Method() or a Name().
> + *
> + ******************************************************************************/
> +
> +BOOLEAN
> +ApFindNameInScope (
> +    char                    *Name,
> +    ACPI_PARSE_OBJECT       *Op)
> +{
> +    ACPI_PARSE_OBJECT       *Next;
> +    ACPI_PARSE_OBJECT       *Parent;
> +
> +
> +    /* Get the start of the current scope */
> +
> +    Parent = Op->Asl.Parent;
> +    Next = Parent->Asl.Child;
> +
> +    /* Search entire scope for a match to the name */
> +
> +    while (Next)
> +    {
> +        if ((Next->Asl.ParseOpcode == PARSEOP_METHOD) ||
> +            (Next->Asl.ParseOpcode == PARSEOP_NAME))
> +        {
> +            if (ACPI_COMPARE_NAME (Name, Next->Asl.NameSeg))
> +            {
> +                return (TRUE);
> +            }
> +        }
> +
> +        Next = Next->Asl.Next;
> +    }
> +
> +    return (FALSE);
> +}
> diff --git a/src/acpica/source/compiler/aslcompiler.h b/src/acpica/source/compiler/aslcompiler.h
> index 49dc7fb..c7692ca 100644
> --- a/src/acpica/source/compiler/aslcompiler.h
> +++ b/src/acpica/source/compiler/aslcompiler.h
> @@ -347,6 +347,11 @@ void
>   ApCheckRegMethod (
>       ACPI_PARSE_OBJECT       *Op);
>
> +BOOLEAN
> +ApFindNameInScope (
> +    char                    *Name,
> +    ACPI_PARSE_OBJECT       *Op);
> +
>
>   /*
>    * aslerror - error handling/reporting
> @@ -358,7 +363,7 @@ AslAbort (
>   void
>   AslError (
>       UINT8                   Level,
> -    UINT8                   MessageId,
> +    UINT16                  MessageId,
>       ACPI_PARSE_OBJECT       *Op,
>       char                    *ExtraMessage);
>
> @@ -369,7 +374,7 @@ AslDisableException (
>   BOOLEAN
>   AslIsExceptionDisabled (
>       UINT8                   Level,
> -    UINT8                   MessageId);
> +    UINT16                  MessageId);
>
>   void
>   AslCoreSubsystemError (
> @@ -385,7 +390,7 @@ AslCompilererror(
>   void
>   AslCommonError (
>       UINT8                   Level,
> -    UINT8                   MessageId,
> +    UINT16                  MessageId,
>       UINT32                  CurrentLineNumber,
>       UINT32                  LogicalLineNumber,
>       UINT32                  LogicalByteOffset,
> @@ -396,7 +401,7 @@ AslCommonError (
>   void
>   AslCommonError2 (
>       UINT8                   Level,
> -    UINT8                   MessageId,
> +    UINT16                  MessageId,
>       UINT32                  LineNumber,
>       UINT32                  Column,
>       char                    *SourceLine,
> @@ -511,6 +516,22 @@ OpcAmlConstantWalk (
>
>
>   /*
> + * aslmessages - exception strings
> + */
> +const char *
> +AeDecodeMessageId (
> +    UINT16                  MessageId);
> +
> +const char *
> +AeDecodeExceptionLevel (
> +    UINT8                   Level);
> +
> +UINT16
> +AeBuildFullExceptionCode (
> +    UINT8                   Level,
> +    UINT16                  MessageId);
> +
> +/*
>    * asloffset - generate C offset file for BIOS support
>    */
>   ACPI_STATUS
> diff --git a/src/acpica/source/compiler/aslerror.c b/src/acpica/source/compiler/aslerror.c
> index e096894..c2de70a 100644
> --- a/src/acpica/source/compiler/aslerror.c
> +++ b/src/acpica/source/compiler/aslerror.c
> @@ -113,7 +113,6 @@
>    *
>    *****************************************************************************/
>
> -#define ASL_EXCEPTIONS
>   #include "aslcompiler.h"
>
>   #define _COMPONENT          ACPI_COMPILER
> @@ -276,7 +275,7 @@ AePrintException (
>       int                     Actual;
>       size_t                  RActual;
>       UINT32                  MsgLength;
> -    char                    *MainMessage;
> +    const char              *MainMessage;
>       char                    *ExtraMessage;
>       UINT32                  SourceColumn;
>       UINT32                  ErrorColumn;
> @@ -471,109 +470,93 @@ AePrintException (
>           }
>       }
>
> -    /* NULL message ID, just print the raw message */
> +    /* If a NULL message ID, just print the raw message */
>
>       if (Enode->MessageId == 0)
>       {
>           fprintf (OutputFile, "%s\n", Enode->Message);
> +        return;
>       }
> -    else
> -    {
> -        /* Decode the message ID */
>
> -        if (Gbl_VerboseErrors)
> -        {
> -            fprintf (OutputFile, "%s %4.4d -",
> -                        AslErrorLevel[Enode->Level],
> -                        Enode->MessageId + ((Enode->Level+1) * 1000));
> -        }
> -        else /* IDE case */
> -        {
> -            fprintf (OutputFile, "%s %4.4d:",
> -                        AslErrorLevelIde[Enode->Level],
> -                        Enode->MessageId + ((Enode->Level+1) * 1000));
> -        }
> +    /* Decode the message ID */
>
> -        MainMessage = AslMessages[Enode->MessageId];
> -        ExtraMessage = Enode->Message;
> +    fprintf (OutputFile, "%s %4.4d -",
> +        AeDecodeExceptionLevel (Enode->Level),
> +        AeBuildFullExceptionCode (Enode->Level, Enode->MessageId));
>
> -        if (Enode->LineNumber)
> -        {
> -            /* Main message: try to use string from AslMessages first */
> +    MainMessage = AeDecodeMessageId (Enode->MessageId);
> +    ExtraMessage = Enode->Message;
>
> -            if (!MainMessage)
> -            {
> -                MainMessage = "";
> -            }
> +    /* If a NULL line number, just print the decoded message */
>
> -            MsgLength = strlen (MainMessage);
> -            if (MsgLength == 0)
> -            {
> -                /* Use the secondary/extra message as main message */
> +    if (!Enode->LineNumber)
> +    {
> +        fprintf (OutputFile, " %s %s\n\n", MainMessage, ExtraMessage);
> +        return;
> +    }
>
> -                MainMessage = Enode->Message;
> -                if (!MainMessage)
> -                {
> -                    MainMessage = "";
> -                }
> +    MsgLength = strlen (MainMessage);
> +    if (MsgLength == 0)
> +    {
> +        /* Use the secondary/extra message as main message */
>
> -                MsgLength = strlen (MainMessage);
> -                ExtraMessage = NULL;
> -            }
> +        MainMessage = Enode->Message;
> +        if (!MainMessage)
> +        {
> +            MainMessage = "";
> +        }
>
> -            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;
> +        MsgLength = strlen (MainMessage);
> +        ExtraMessage = NULL;
> +    }
>
> -                    if ((MsgLength + ErrorColumn) < (SourceColumn - 1))
> -                    {
> -                        fprintf (OutputFile, "%*s%s",
> -                            (int) ((SourceColumn - 1) - ErrorColumn),
> -                            MainMessage, " ^ ");
> -                    }
> -                    else
> -                    {
> -                        fprintf (OutputFile, "%*s %s",
> -                            (int) ((SourceColumn - ErrorColumn) + 1), "^",
> -                            MainMessage);
> -                    }
> -                }
> +    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 ((MsgLength + ErrorColumn) < (SourceColumn - 1))
> +            {
> +                fprintf (OutputFile, "%*s%s",
> +                    (int) ((SourceColumn - 1) - ErrorColumn),
> +                    MainMessage, " ^ ");
>               }
>               else
>               {
> -                fprintf (OutputFile, " %s", MainMessage);
> +                fprintf (OutputFile, "%*s %s",
> +                    (int) ((SourceColumn - ErrorColumn) + 1), "^",
> +                    MainMessage);
>               }
> +        }
> +    }
> +    else
> +    {
> +        fprintf (OutputFile, " %s", MainMessage);
> +    }
>
> -            /* Print the extra info message if present */
> +    /* Print the extra info message if present */
>
> -            if (ExtraMessage)
> -            {
> -                fprintf (OutputFile, " (%s)", ExtraMessage);
> -            }
> +    if (ExtraMessage)
> +    {
> +        fprintf (OutputFile, " (%s)", ExtraMessage);
> +    }
>
> -            if (PrematureEOF)
> -            {
> -                fprintf (OutputFile, " and premature End-Of-File");
> -            }
> +    if (PrematureEOF)
> +    {
> +        fprintf (OutputFile, " and premature End-Of-File");
> +    }
>
> -            fprintf (OutputFile, "\n");
> -            if (Gbl_VerboseErrors)
> -            {
> -                fprintf (OutputFile, "\n");
> -            }
> -        }
> -        else
> -        {
> -            fprintf (OutputFile, " %s %s\n\n", MainMessage, ExtraMessage);
> -        }
> +    fprintf (OutputFile, "\n");
> +    if (Gbl_VerboseErrors)
> +    {
> +        fprintf (OutputFile, "\n");
>       }
>   }
>
> @@ -628,7 +611,7 @@ AePrintErrorLog (
>   void
>   AslCommonError2 (
>       UINT8                   Level,
> -    UINT8                   MessageId,
> +    UINT16                  MessageId,
>       UINT32                  LineNumber,
>       UINT32                  Column,
>       char                    *SourceLine,
> @@ -714,7 +697,7 @@ AslCommonError2 (
>   void
>   AslCommonError (
>       UINT8                   Level,
> -    UINT8                   MessageId,
> +    UINT16                  MessageId,
>       UINT32                  CurrentLineNumber,
>       UINT32                  LogicalLineNumber,
>       UINT32                  LogicalByteOffset,
> @@ -848,7 +831,7 @@ AslDisableException (
>   BOOLEAN
>   AslIsExceptionDisabled (
>       UINT8                   Level,
> -    UINT8                   MessageId)
> +    UINT16                  MessageId)
>   {
>       UINT32                  EncodedMessageId;
>       UINT32                  i;
> @@ -873,7 +856,7 @@ AslIsExceptionDisabled (
>            * Ignore this warning/remark if it has been disabled by
>            * the user (-vw option)
>            */
> -        EncodedMessageId = MessageId + ((Level + 1) * 1000);
> +        EncodedMessageId = AeBuildFullExceptionCode (Level, MessageId);
>           for (i = 0; i < Gbl_DisabledMessagesIndex; i++)
>           {
>               /* Simple implementation via fixed array */
> @@ -912,7 +895,7 @@ AslIsExceptionDisabled (
>   void
>   AslError (
>       UINT8                   Level,
> -    UINT8                   MessageId,
> +    UINT16                  MessageId,
>       ACPI_PARSE_OBJECT       *Op,
>       char                    *ExtraMessage)
>   {
> diff --git a/src/acpica/source/compiler/aslmessages.c b/src/acpica/source/compiler/aslmessages.c
> new file mode 100755
> index 0000000..11b5d57
> --- /dev/null
> +++ b/src/acpica/source/compiler/aslmessages.c
> @@ -0,0 +1,479 @@
> +/******************************************************************************
> + *
> + * Module Name: aslmessages.c - Compiler error/warning message strings
> + *
> + *****************************************************************************/
> +
> +/******************************************************************************
> + *
> + * 1. Copyright Notice
> + *
> + * Some or all of this work - Copyright (c) 1999 - 2014, 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.
> + *
> + *****************************************************************************/
> +
> +#include "aslcompiler.h"
> +
> +#define _COMPONENT          ACPI_COMPILER
> +        ACPI_MODULE_NAME    ("aslmessages")
> +
> +
> +/*
> + * Strings for message reporting levels, must match error
> + * type string tables in aslmessages.c
> + */
> +const char              *AslErrorLevel [ASL_NUM_REPORT_LEVELS] = {
> +    "Optimize",
> +    "Remark  ",
> +    "Warning ",
> +    "Warning ",
> +    "Warning ",
> +    "Error   "
> +};
> +
> +/* All lowercase versions for IDEs */
> +
> +const char              *AslErrorLevelIde [ASL_NUM_REPORT_LEVELS] = {
> +    "optimize",
> +    "remark  ",
> +    "warning ",
> +    "warning ",
> +    "warning ",
> +    "error   "
> +};
> +
> +
> +/*
> + * Actual message strings for each compiler message ID. There are currently
> + * three distinct blocks of error messages (so that they can be expanded
> + * individually):
> + *      Main ASL compiler
> + *      Data Table compiler
> + *      Preprocessor
> + *
> + * NOTE1: These tables must match the enum list of message IDs in the file
> + * aslmessages.h exactly.
> + *
> + * NOTE2: With the introduction of the -vw option to disable specific messages,
> + * new messages should only be added to the end of this list, so that values
> + * for existing messages are not disturbed.
> + */
> +
> +/* ASL compiler */
> +
> +const char                      *AslCompilerMsgs [] =
> +{
> +/*    The zeroth message is reserved */    "",
> +/*    ASL_MSG_ALIGNMENT */                  "Must be a multiple of alignment/granularity value",
> +/*    ASL_MSG_ALPHANUMERIC_STRING */        "String must be entirely alphanumeric",
> +/*    ASL_MSG_AML_NOT_IMPLEMENTED */        "Opcode is not implemented in compiler AML code generator",
> +/*    ASL_MSG_ARG_COUNT_HI */               "Too many arguments",
> +/*    ASL_MSG_ARG_COUNT_LO */               "Too few arguments",
> +/*    ASL_MSG_ARG_INIT */                   "Method argument is not initialized",
> +/*    ASL_MSG_BACKWARDS_OFFSET */           "Invalid backwards offset",
> +/*    ASL_MSG_BUFFER_LENGTH */              "Effective AML buffer length is zero",
> +/*    ASL_MSG_CLOSE */                      "Could not close file",
> +/*    ASL_MSG_COMPILER_INTERNAL */          "Internal compiler error",
> +/*    ASL_MSG_COMPILER_RESERVED */          "Use of compiler reserved name",
> +/*    ASL_MSG_CONNECTION_MISSING */         "A Connection operator is required for this field SpaceId",
> +/*    ASL_MSG_CONNECTION_INVALID */         "Invalid OpRegion SpaceId for use of Connection operator",
> +/*    ASL_MSG_CONSTANT_EVALUATION */        "Could not evaluate constant expression",
> +/*    ASL_MSG_CONSTANT_FOLDED */            "Constant expression evaluated and reduced",
> +/*    ASL_MSG_CORE_EXCEPTION */             "From ACPICA Subsystem",
> +/*    ASL_MSG_DEBUG_FILE_OPEN */            "Could not open debug file",
> +/*    ASL_MSG_DEBUG_FILENAME */             "Could not create debug filename",
> +/*    ASL_MSG_DEPENDENT_NESTING */          "Dependent function macros cannot be nested",
> +/*    ASL_MSG_DMA_CHANNEL */                "Invalid DMA channel (must be 0-7)",
> +/*    ASL_MSG_DMA_LIST */                   "Too many DMA channels (8 max)",
> +/*    ASL_MSG_DUPLICATE_CASE */             "Case value already specified",
> +/*    ASL_MSG_DUPLICATE_ITEM */             "Duplicate value in list",
> +/*    ASL_MSG_EARLY_EOF */                  "Premature end-of-file reached",
> +/*    ASL_MSG_ENCODING_LENGTH */            "Package length too long to encode",
> +/*    ASL_MSG_EX_INTERRUPT_LIST */          "Too many interrupts (255 max)",
> +/*    ASL_MSG_EX_INTERRUPT_LIST_MIN */      "Too few interrupts (1 minimum required)",
> +/*    ASL_MSG_EX_INTERRUPT_NUMBER */        "Invalid interrupt number (must be 32 bits)",
> +/*    ASL_MSG_FIELD_ACCESS_WIDTH */         "Access width is greater than region size",
> +/*    ASL_MSG_FIELD_UNIT_ACCESS_WIDTH */    "Access width of Field Unit extends beyond region limit",
> +/*    ASL_MSG_FIELD_UNIT_OFFSET */          "Field Unit extends beyond region limit",
> +/*    ASL_MSG_GPE_NAME_CONFLICT */          "Name conflicts with a previous GPE method",
> +/*    ASL_MSG_HID_LENGTH */                 "_HID string must be exactly 7 or 8 characters",
> +/*    ASL_MSG_HID_PREFIX */                 "_HID prefix must be all uppercase or decimal digits",
> +/*    ASL_MSG_HID_SUFFIX */                 "_HID suffix must be all hex digits",
> +/*    ASL_MSG_INCLUDE_FILE_OPEN */          "Could not open include file",
> +/*    ASL_MSG_INPUT_FILE_OPEN */            "Could not open input file",
> +/*    ASL_MSG_INTEGER_LENGTH */             "64-bit integer in 32-bit table, truncating (DSDT version < 2)",
> +/*    ASL_MSG_INTEGER_OPTIMIZATION */       "Integer optimized to single-byte AML opcode",
> +/*    ASL_MSG_INTERRUPT_LIST */             "Too many interrupts (16 max)",
> +/*    ASL_MSG_INTERRUPT_NUMBER */           "Invalid interrupt number (must be 0-15)",
> +/*    ASL_MSG_INVALID_ACCESS_SIZE */        "Invalid AccessSize (Maximum is 4 - QWord access)",
> +/*    ASL_MSG_INVALID_ADDR_FLAGS */         "Invalid combination of Length and Min/Max fixed flags",
> +/*    ASL_MSG_INVALID_CONSTANT_OP */        "Invalid operator in constant expression (not type 3/4/5)",
> +/*    ASL_MSG_INVALID_EISAID */             "EISAID string must be of the form \"UUUXXXX\" (3 uppercase, 4 hex digits)",
> +/*    ASL_MSG_INVALID_ESCAPE */             "Invalid or unknown escape sequence",
> +/*    ASL_MSG_INVALID_GRAN_FIXED */         "Granularity must be zero for fixed Min/Max",
> +/*    ASL_MSG_INVALID_GRANULARITY */        "Granularity must be zero or a power of two minus one",
> +/*    ASL_MSG_INVALID_LENGTH */             "Length is larger than Min/Max window",
> +/*    ASL_MSG_INVALID_LENGTH_FIXED */       "Length is not equal to fixed Min/Max window",
> +/*    ASL_MSG_INVALID_MIN_MAX */            "Address Min is greater than Address Max",
> +/*    ASL_MSG_INVALID_OPERAND */            "Invalid operand",
> +/*    ASL_MSG_INVALID_PERFORMANCE */        "Invalid performance/robustness value",
> +/*    ASL_MSG_INVALID_PRIORITY */           "Invalid priority value",
> +/*    ASL_MSG_INVALID_STRING */             "Invalid Hex/Octal Escape - Non-ASCII or NULL",
> +/*    ASL_MSG_INVALID_TARGET */             "Target operand not allowed in constant expression",
> +/*    ASL_MSG_INVALID_TIME */               "Time parameter too long (255 max)",
> +/*    ASL_MSG_INVALID_TYPE */               "Invalid type",
> +/*    ASL_MSG_INVALID_UUID */               "UUID string must be of the form \"aabbccdd-eeff-gghh-iijj-kkllmmnnoopp\"",
> +/*    ASL_MSG_ISA_ADDRESS */                "Maximum 10-bit ISA address (0x3FF)",
> +/*    ASL_MSG_LEADING_ASTERISK */           "Invalid leading asterisk",
> +/*    ASL_MSG_LIST_LENGTH_LONG */           "Initializer list longer than declared package length",
> +/*    ASL_MSG_LIST_LENGTH_SHORT */          "Initializer list shorter than declared package length",
> +/*    ASL_MSG_LISTING_FILE_OPEN */          "Could not open listing file",
> +/*    ASL_MSG_LISTING_FILENAME */           "Could not create listing filename",
> +/*    ASL_MSG_LOCAL_INIT */                 "Method local variable is not initialized",
> +/*    ASL_MSG_LOCAL_OUTSIDE_METHOD */       "Local or Arg used outside a control method",
> +/*    ASL_MSG_LONG_LINE */                  "Splitting long input line",
> +/*    ASL_MSG_MEMORY_ALLOCATION */          "Memory allocation failure",
> +/*    ASL_MSG_MISSING_ENDDEPENDENT */       "Missing EndDependentFn() macro in dependent resource list",
> +/*    ASL_MSG_MISSING_STARTDEPENDENT */     "Missing StartDependentFn() macro in dependent resource list",
> +/*    ASL_MSG_MULTIPLE_DEFAULT */           "More than one Default statement within Switch construct",
> +/*    ASL_MSG_MULTIPLE_TYPES */             "Multiple types",
> +/*    ASL_MSG_NAME_EXISTS */                "Name already exists in scope",
> +/*    ASL_MSG_NAME_OPTIMIZATION */          "NamePath optimized",
> +/*    ASL_MSG_NAMED_OBJECT_IN_WHILE */      "Creating a named object in a While loop",
> +/*    ASL_MSG_NESTED_COMMENT */             "Nested comment found",
> +/*    ASL_MSG_NO_CASES */                   "No Case statements under Switch",
> +/*    ASL_MSG_NO_REGION */                  "_REG has no corresponding Operation Region",
> +/*    ASL_MSG_NO_RETVAL */                  "Called method returns no value",
> +/*    ASL_MSG_NO_WHILE */                   "No enclosing While statement",
> +/*    ASL_MSG_NON_ASCII */                  "Invalid characters found in file",
> +/*    ASL_MSG_NON_ZERO */                   "Operand evaluates to zero",
> +/*    ASL_MSG_NOT_EXIST */                  "Object does not exist",
> +/*    ASL_MSG_NOT_FOUND */                  "Object not found or not accessible from scope",
> +/*    ASL_MSG_NOT_METHOD */                 "Not a control method, cannot invoke",
> +/*    ASL_MSG_NOT_PARAMETER */              "Not a parameter, used as local only",
> +/*    ASL_MSG_NOT_REACHABLE */              "Object is not accessible from this scope",
> +/*    ASL_MSG_NOT_REFERENCED */             "Object is not referenced",
> +/*    ASL_MSG_NULL_DESCRIPTOR */            "Min/Max/Length/Gran are all zero, but no resource tag",
> +/*    ASL_MSG_NULL_STRING */                "Invalid zero-length (null) string",
> +/*    ASL_MSG_OPEN */                       "Could not open file",
> +/*    ASL_MSG_OUTPUT_FILE_OPEN */           "Could not open output AML file",
> +/*    ASL_MSG_OUTPUT_FILENAME */            "Could not create output filename",
> +/*    ASL_MSG_PACKAGE_LENGTH */             "Effective AML package length is zero",
> +/*    ASL_MSG_PREPROCESSOR_FILENAME */      "Could not create preprocessor filename",
> +/*    ASL_MSG_READ */                       "Could not read file",
> +/*    ASL_MSG_RECURSION */                  "Recursive method call",
> +/*    ASL_MSG_REGION_BUFFER_ACCESS */       "Host Operation Region requires BufferAcc access",
> +/*    ASL_MSG_REGION_BYTE_ACCESS */         "Host Operation Region requires ByteAcc access",
> +/*    ASL_MSG_RESERVED_ARG_COUNT_HI */      "Reserved method has too many arguments",
> +/*    ASL_MSG_RESERVED_ARG_COUNT_LO */      "Reserved method has too few arguments",
> +/*    ASL_MSG_RESERVED_METHOD */            "Reserved name must be a control method",
> +/*    ASL_MSG_RESERVED_NO_RETURN_VAL */     "Reserved method should not return a value",
> +/*    ASL_MSG_RESERVED_OPERAND_TYPE */      "Invalid object type for reserved name",
> +/*    ASL_MSG_RESERVED_PACKAGE_LENGTH */    "Invalid package length for reserved name",
> +/*    ASL_MSG_RESERVED_RETURN_VALUE */      "Reserved method must return a value",
> +/*    ASL_MSG_RESERVED_USE */               "Invalid use of reserved name",
> +/*    ASL_MSG_RESERVED_WORD */              "Use of reserved name",
> +/*    ASL_MSG_RESOURCE_FIELD */             "Resource field name cannot be used as a target",
> +/*    ASL_MSG_RESOURCE_INDEX */             "Missing ResourceSourceIndex (required)",
> +/*    ASL_MSG_RESOURCE_LIST */              "Too many resource items (internal error)",
> +/*    ASL_MSG_RESOURCE_SOURCE */            "Missing ResourceSource string (required)",
> +/*    ASL_MSG_RESULT_NOT_USED */            "Result is not used, operator has no effect",
> +/*    ASL_MSG_RETURN_TYPES */               "Not all control paths return a value",
> +/*    ASL_MSG_SCOPE_FWD_REF */              "Forward references from Scope operator not allowed",
> +/*    ASL_MSG_SCOPE_TYPE */                 "Existing object has invalid type for Scope operator",
> +/*    ASL_MSG_SEEK */                       "Could not seek file",
> +/*    ASL_MSG_SERIALIZED */                 "Control Method marked Serialized",
> +/*    ASL_MSG_SERIALIZED_REQUIRED */        "Control Method should be made Serialized",
> +/*    ASL_MSG_SINGLE_NAME_OPTIMIZATION */   "NamePath optimized to NameSeg (uses run-time search path)",
> +/*    ASL_MSG_SOME_NO_RETVAL */             "Called method may not always return a value",
> +/*    ASL_MSG_STRING_LENGTH */              "String literal too long",
> +/*    ASL_MSG_SWITCH_TYPE */                "Switch expression is not a static Integer/Buffer/String data type, defaulting to Integer",
> +/*    ASL_MSG_SYNC_LEVEL */                 "SyncLevel must be in the range 0-15",
> +/*    ASL_MSG_SYNTAX */                     "",
> +/*    ASL_MSG_TABLE_SIGNATURE */            "Invalid Table Signature",
> +/*    ASL_MSG_TAG_LARGER */                 "ResourceTag larger than Field",
> +/*    ASL_MSG_TAG_SMALLER */                "ResourceTag smaller than Field",
> +/*    ASL_MSG_TIMEOUT */                    "Result is not used, possible operator timeout will be missed",
> +/*    ASL_MSG_TOO_MANY_TEMPS */             "Method requires too many temporary variables (_T_x)",
> +/*    ASL_MSG_TRUNCATION */                 "64-bit return value will be truncated to 32 bits (DSDT version < 2)",
> +/*    ASL_MSG_UNKNOWN_RESERVED_NAME */      "Unknown reserved name",
> +/*    ASL_MSG_UNREACHABLE_CODE */           "Statement is unreachable",
> +/*    ASL_MSG_UNSUPPORTED */                "Unsupported feature",
> +/*    ASL_MSG_UPPER_CASE */                 "Non-hex letters must be upper case",
> +/*    ASL_MSG_VENDOR_LIST */                "Too many vendor data bytes (7 max)",
> +/*    ASL_MSG_WRITE */                      "Could not write file",
> +/*    ASL_MSG_RANGE */                      "Constant out of range",
> +/*    ASL_MSG_BUFFER_ALLOCATION */          "Could not allocate line buffer",
> +/*    ASL_MSG_MISSING_DEPENDENCY */         "Missing dependency"
> +};
> +
> +/* Table compiler */
> +
> +const char                      *AslTableCompilerMsgs [] =
> +{
> +/*    ASL_MSG_BUFFER_ELEMENT */             "Invalid element in buffer initializer list",
> +/*    ASL_MSG_DIVIDE_BY_ZERO */             "Expression contains divide-by-zero",
> +/*    ASL_MSG_FLAG_VALUE */                 "Flag value is too large",
> +/*    ASL_MSG_INTEGER_SIZE */               "Integer too large for target",
> +/*    ASL_MSG_INVALID_EXPRESSION */         "Invalid expression",
> +/*    ASL_MSG_INVALID_FIELD_NAME */         "Invalid Field Name",
> +/*    ASL_MSG_INVALID_HEX_INTEGER */        "Invalid hex integer constant",
> +/*    ASL_MSG_OEM_TABLE */                  "OEM table - unknown contents",
> +/*    ASL_MSG_RESERVED_VALUE */             "Reserved field",
> +/*    ASL_MSG_UNKNOWN_LABEL */              "Label is undefined",
> +/*    ASL_MSG_UNKNOWN_SUBTABLE */           "Unknown subtable type",
> +/*    ASL_MSG_UNKNOWN_TABLE */              "Unknown ACPI table signature",
> +/*    ASL_MSG_ZERO_VALUE */                 "Value must be non-zero"
> +};
> +
> +/* Preprocessor */
> +
> +const char                      *AslPreprocessorMsgs [] =
> +{
> +/*    ASL_MSG_DIRECTIVE_SYNTAX */           "Invalid directive syntax",
> +/*    ASL_MSG_ENDIF_MISMATCH */             "Mismatched #endif",
> +/*    ASL_MSG_ERROR_DIRECTIVE */            "#error",
> +/*    ASL_MSG_EXISTING_NAME */              "Name is already defined",
> +/*    ASL_MSG_INVALID_INVOCATION */         "Invalid macro invocation",
> +/*    ASL_MSG_MACRO_SYNTAX */               "Invalid macro syntax",
> +/*    ASL_MSG_TOO_MANY_ARGUMENTS */         "Too many macro arguments",
> +/*    ASL_MSG_UNKNOWN_DIRECTIVE */          "Unknown directive",
> +/*    ASL_MSG_UNKNOWN_PRAGMA */             "Unknown pragma",
> +/*    ASL_MSG_WARNING_DIRECTIVE */          "#warning"
> +};
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AeDecodeMessageId
> + *
> + * PARAMETERS:  MessageId               - ASL message ID (exception code) to be
> + *                                        formatted. Possibly fully encoded.
> + *
> + * RETURN:      A string containing the exception message text.
> + *
> + * DESCRIPTION: This function validates and translates an ASL message ID into
> + *              an ASCII string.
> + *
> + ******************************************************************************/
> +
> +const char *
> +AeDecodeMessageId (
> +    UINT16                  MessageId)
> +{
> +    UINT32                  Index;
> +    const char              **MessageTable;
> +
> +
> +    /* Main ASL Compiler messages */
> +
> +    if (MessageId <= ASL_MSG_MAIN_COMPILER_END)
> +    {
> +        MessageTable = AslCompilerMsgs;
> +        Index = MessageId;
> +
> +        if (Index >= ACPI_ARRAY_LENGTH (AslCompilerMsgs))
> +        {
> +            return ("[Unknown ASL Compiler exception ID]");
> +        }
> +    }
> +
> +    /* Data Table Compiler messages */
> +
> +    else if (MessageId <= ASL_MSG_TABLE_COMPILER_END)
> +    {
> +        MessageTable = AslTableCompilerMsgs;
> +        Index = MessageId - ASL_MSG_TABLE_COMPILER;
> +
> +        if (Index >= ACPI_ARRAY_LENGTH (AslTableCompilerMsgs))
> +        {
> +            return ("[Unknown Table Compiler exception ID]");
> +        }
> +    }
> +
> +    /* Preprocessor messages */
> +
> +    else if (MessageId <= ASL_MSG_PREPROCESSOR_END)
> +    {
> +        MessageTable = AslPreprocessorMsgs;
> +        Index = MessageId - ASL_MSG_PREPROCESSOR;
> +
> +        if (Index >= ACPI_ARRAY_LENGTH (AslPreprocessorMsgs))
> +        {
> +            return ("[Unknown Preprocesor exception ID]");
> +        }
> +    }
> +
> +    /* Everything else is unknown */
> +
> +    else
> +    {
> +        return ("[Unknown exception/component ID]");
> +    }
> +
> +    return (MessageTable[Index]);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AeDecodeExceptionLevel
> + *
> + * PARAMETERS:  Level               - The ASL error level to be decoded
> + *
> + * RETURN:      A string containing the error level text
> + *
> + * DESCRIPTION: This function validates and translates an ASL error level into
> + *              an ASCII string.
> + *
> + ******************************************************************************/
> +
> +const char *
> +AeDecodeExceptionLevel (
> +    UINT8                   Level)
> +{
> +    /* Range check on Level */
> +
> +    if (Level >= ACPI_ARRAY_LENGTH (AslErrorLevel))
> +    {
> +        return ("Unknown exception level");
> +    }
> +
> +    /* Differentiate the string type to be used (IDE is all lower case) */
> +
> +    if (Gbl_VerboseErrors)
> +    {
> +        return (AslErrorLevel[Level]);
> +    }
> +
> +    return (AslErrorLevelIde[Level]);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AeBuildFullExceptionCode
> + *
> + * PARAMETERS:  Level               - ASL error level
> + *              MessageId           - ASL exception code to be formatted
> + *
> + * RETURN:      Fully encoded exception code
> + *
> + * DESCRIPTION: Build the full exception code from the error level and the
> + *              actual message ID.
> + *
> + ******************************************************************************/
> +
> +UINT16
> +AeBuildFullExceptionCode (
> +    UINT8                   Level,
> +    UINT16                  MessageId)
> +{
> +
> +    /*
> +     * Error level is in the thousands slot (error/warning/remark, etc.)
> +     * Error codes are 0 - 999
> +     */
> +    return (((Level + 1) * 1000) + MessageId);
> +}
> diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h
> index c544eac..5743075 100644
> --- a/src/acpica/source/compiler/aslmessages.h
> +++ b/src/acpica/source/compiler/aslmessages.h
> @@ -113,11 +113,12 @@
>    *
>    *****************************************************************************/
>
> -
>   #ifndef __ASLMESSAGES_H
>   #define __ASLMESSAGES_H
>
>
> +/* These values must match error type string tables in aslmessages.c */
> +
>   typedef enum
>   {
>       ASL_OPTIMIZATION = 0,
> @@ -130,43 +131,41 @@ typedef enum
>
>   } ASL_MESSAGE_TYPES;
>
> -#ifdef ASL_EXCEPTIONS
>
> -/* Strings for message reporting levels, must match values above */
> +#define ASL_ERROR_LEVEL_LENGTH          8 /* Length of strings for types above */
>
> -const char              *AslErrorLevel [ASL_NUM_REPORT_LEVELS] = {
> -    "Optimize",
> -    "Remark  ",
> -    "Warning ",
> -    "Warning ",
> -    "Warning ",
> -    "Error   "
> -};
> +/*
> + * Exception code blocks, 0 - 999
> + * Available for new exception blocks: 600 - 999
> + */
> +#define ASL_MSG_MAIN_COMPILER           0       /* 0 - 299 */
> +#define ASL_MSG_MAIN_COMPILER_END       299
>
> -/* All lowercase versions for IDEs */
> +#define ASL_MSG_TABLE_COMPILER          300     /* 300 - 499 */
> +#define ASL_MSG_TABLE_COMPILER_END      499
>
> -const char              *AslErrorLevelIde [ASL_NUM_REPORT_LEVELS] = {
> -    "optimize",
> -    "remark  ",
> -    "warning ",
> -    "warning ",
> -    "warning ",
> -    "error   "
> -};
> +#define ASL_MSG_PREPROCESSOR            500     /* 500 - 599 */
> +#define ASL_MSG_PREPROCESSOR_END        599
>
> -#define ASL_ERROR_LEVEL_LENGTH          8       /* Length of strings above */
> -#endif
>
>   /*
> - * Values for all compiler messages.
> + * Values (message IDs) for all compiler messages. There are currently
> + * three distinct blocks of error messages (so that they can be expanded
> + * individually):
> + *      Main ASL compiler
> + *      Data Table compiler
> + *      Preprocessor
> + *
> + * NOTE1: This list must match the tables of message strings in the file
> + * aslmessages.c exactly.
>    *
> - * NOTE: With the introduction of the -vw option to disable specific messages,
> - * new messages should only be added to the end of this list, so that values
> - * for existing messages are not disturbed.
> + * NOTE2: With the introduction of the -vw option to disable specific
> + * messages, new messages should only be added to the end of these
> + * lists, so that values for existing messages are not disturbed.
>    */
>   typedef enum
>   {
> -    ASL_MSG_RESERVED = 0,
> +    ASL_MSG_RESERVED = ASL_MSG_MAIN_COMPILER,
>
>       ASL_MSG_ALIGNMENT,
>       ASL_MSG_ALPHANUMERIC_STRING,
> @@ -308,23 +307,11 @@ typedef enum
>       ASL_MSG_WRITE,
>       ASL_MSG_RANGE,
>       ASL_MSG_BUFFER_ALLOCATION,
> +    ASL_MSG_MISSING_DEPENDENCY,
>
> -    /* These messages are used by the Preprocessor only */
> +    /* These messages are used by the Data Table compiler only */
>
> -    ASL_MSG_DIRECTIVE_SYNTAX,
> -    ASL_MSG_ENDIF_MISMATCH,
> -    ASL_MSG_ERROR_DIRECTIVE,
> -    ASL_MSG_EXISTING_NAME,
> -    ASL_MSG_INVALID_INVOCATION,
> -    ASL_MSG_MACRO_SYNTAX,
> -    ASL_MSG_TOO_MANY_ARGUMENTS,
> -    ASL_MSG_UNKNOWN_DIRECTIVE,
> -    ASL_MSG_UNKNOWN_PRAGMA,
> -    ASL_MSG_WARNING_DIRECTIVE,
> -
> -    /* These messages are used by the data table compiler only */
> -
> -    ASL_MSG_BUFFER_ELEMENT,
> +    ASL_MSG_BUFFER_ELEMENT = ASL_MSG_TABLE_COMPILER,
>       ASL_MSG_DIVIDE_BY_ZERO,
>       ASL_MSG_FLAG_VALUE,
>       ASL_MSG_INTEGER_SIZE,
> @@ -336,194 +323,22 @@ typedef enum
>       ASL_MSG_UNKNOWN_LABEL,
>       ASL_MSG_UNKNOWN_SUBTABLE,
>       ASL_MSG_UNKNOWN_TABLE,
> -    ASL_MSG_ZERO_VALUE
> -
> -} ASL_MESSAGE_IDS;
> +    ASL_MSG_ZERO_VALUE,
>
> +    /* These messages are used by the Preprocessor only */
>
> -#ifdef ASL_EXCEPTIONS
> -
> -/*
> - * Actual message strings for each compiler message.
> - *
> - * NOTE: With the introduction of the -vw option to disable specific messages,
> - * new messages should only be added to the end of this list, so that values
> - * for existing messages are not disturbed.
> - */
> -char                        *AslMessages [] =
> -{
> -/*    The zeroth message is reserved */    "",
> -/*    ASL_MSG_ALIGNMENT */                  "Must be a multiple of alignment/granularity value",
> -/*    ASL_MSG_ALPHANUMERIC_STRING */        "String must be entirely alphanumeric",
> -/*    ASL_MSG_AML_NOT_IMPLEMENTED */        "Opcode is not implemented in compiler AML code generator",
> -/*    ASL_MSG_ARG_COUNT_HI */               "Too many arguments",
> -/*    ASL_MSG_ARG_COUNT_LO */               "Too few arguments",
> -/*    ASL_MSG_ARG_INIT */                   "Method argument is not initialized",
> -/*    ASL_MSG_BACKWARDS_OFFSET */           "Invalid backwards offset",
> -/*    ASL_MSG_BUFFER_LENGTH */              "Effective AML buffer length is zero",
> -/*    ASL_MSG_CLOSE */                      "Could not close file",
> -/*    ASL_MSG_COMPILER_INTERNAL */          "Internal compiler error",
> -/*    ASL_MSG_COMPILER_RESERVED */          "Use of compiler reserved name",
> -/*    ASL_MSG_CONNECTION_MISSING */         "A Connection operator is required for this field SpaceId",
> -/*    ASL_MSG_CONNECTION_INVALID */         "Invalid OpRegion SpaceId for use of Connection operator",
> -/*    ASL_MSG_CONSTANT_EVALUATION */        "Could not evaluate constant expression",
> -/*    ASL_MSG_CONSTANT_FOLDED */            "Constant expression evaluated and reduced",
> -/*    ASL_MSG_CORE_EXCEPTION */             "From ACPICA Subsystem",
> -/*    ASL_MSG_DEBUG_FILE_OPEN */            "Could not open debug file",
> -/*    ASL_MSG_DEBUG_FILENAME */             "Could not create debug filename",
> -/*    ASL_MSG_DEPENDENT_NESTING */          "Dependent function macros cannot be nested",\
> -/*    ASL_MSG_DMA_CHANNEL */                "Invalid DMA channel (must be 0-7)",
> -/*    ASL_MSG_DMA_LIST */                   "Too many DMA channels (8 max)",
> -/*    ASL_MSG_DUPLICATE_CASE */             "Case value already specified",
> -/*    ASL_MSG_DUPLICATE_ITEM */             "Duplicate value in list",
> -/*    ASL_MSG_EARLY_EOF */                  "Premature end-of-file reached",
> -/*    ASL_MSG_ENCODING_LENGTH */            "Package length too long to encode",
> -/*    ASL_MSG_EX_INTERRUPT_LIST */          "Too many interrupts (255 max)",
> -/*    ASL_MSG_EX_INTERRUPT_LIST_MIN */      "Too few interrupts (1 minimum required)",
> -/*    ASL_MSG_EX_INTERRUPT_NUMBER */        "Invalid interrupt number (must be 32 bits)",
> -/*    ASL_MSG_FIELD_ACCESS_WIDTH */         "Access width is greater than region size",
> -/*    ASL_MSG_FIELD_UNIT_ACCESS_WIDTH */    "Access width of Field Unit extends beyond region limit",
> -/*    ASL_MSG_FIELD_UNIT_OFFSET */          "Field Unit extends beyond region limit",
> -/*    ASL_MSG_GPE_NAME_CONFLICT */          "Name conflicts with a previous GPE method",
> -/*    ASL_MSG_HID_LENGTH */                 "_HID string must be exactly 7 or 8 characters",
> -/*    ASL_MSG_HID_PREFIX */                 "_HID prefix must be all uppercase or decimal digits",
> -/*    ASL_MSG_HID_SUFFIX */                 "_HID suffix must be all hex digits",
> -/*    ASL_MSG_INCLUDE_FILE_OPEN */          "Could not open include file",
> -/*    ASL_MSG_INPUT_FILE_OPEN */            "Could not open input file",
> -/*    ASL_MSG_INTEGER_LENGTH */             "64-bit integer in 32-bit table, truncating (DSDT version < 2)",
> -/*    ASL_MSG_INTEGER_OPTIMIZATION */       "Integer optimized to single-byte AML opcode",
> -/*    ASL_MSG_INTERRUPT_LIST */             "Too many interrupts (16 max)",
> -/*    ASL_MSG_INTERRUPT_NUMBER */           "Invalid interrupt number (must be 0-15)",
> -/*    ASL_MSG_INVALID_ACCESS_SIZE */        "Invalid AccessSize (Maximum is 4 - QWord access)",
> -/*    ASL_MSG_INVALID_ADDR_FLAGS */         "Invalid combination of Length and Min/Max fixed flags",
> -/*    ASL_MSG_INVALID_CONSTANT_OP */        "Invalid operator in constant expression (not type 3/4/5)",
> -/*    ASL_MSG_INVALID_EISAID */             "EISAID string must be of the form \"UUUXXXX\" (3 uppercase, 4 hex digits)",
> -/*    ASL_MSG_INVALID_ESCAPE */             "Invalid or unknown escape sequence",
> -/*    ASL_MSG_INVALID_GRAN_FIXED */         "Granularity must be zero for fixed Min/Max",
> -/*    ASL_MSG_INVALID_GRANULARITY */        "Granularity must be zero or a power of two minus one",
> -/*    ASL_MSG_INVALID_LENGTH */             "Length is larger than Min/Max window",
> -/*    ASL_MSG_INVALID_LENGTH_FIXED */       "Length is not equal to fixed Min/Max window",
> -/*    ASL_MSG_INVALID_MIN_MAX */            "Address Min is greater than Address Max",
> -/*    ASL_MSG_INVALID_OPERAND */            "Invalid operand",
> -/*    ASL_MSG_INVALID_PERFORMANCE */        "Invalid performance/robustness value",
> -/*    ASL_MSG_INVALID_PRIORITY */           "Invalid priority value",
> -/*    ASL_MSG_INVALID_STRING */             "Invalid Hex/Octal Escape - Non-ASCII or NULL",
> -/*    ASL_MSG_INVALID_TARGET */             "Target operand not allowed in constant expression",
> -/*    ASL_MSG_INVALID_TIME */               "Time parameter too long (255 max)",
> -/*    ASL_MSG_INVALID_TYPE */               "Invalid type",
> -/*    ASL_MSG_INVALID_UUID */               "UUID string must be of the form \"aabbccdd-eeff-gghh-iijj-kkllmmnnoopp\"",
> -/*    ASL_MSG_ISA_ADDRESS */                "Maximum 10-bit ISA address (0x3FF)",
> -/*    ASL_MSG_LEADING_ASTERISK */           "Invalid leading asterisk",
> -/*    ASL_MSG_LIST_LENGTH_LONG */           "Initializer list longer than declared package length",
> -/*    ASL_MSG_LIST_LENGTH_SHORT */          "Initializer list shorter than declared package length",
> -/*    ASL_MSG_LISTING_FILE_OPEN */          "Could not open listing file",
> -/*    ASL_MSG_LISTING_FILENAME */           "Could not create listing filename",
> -/*    ASL_MSG_LOCAL_INIT */                 "Method local variable is not initialized",
> -/*    ASL_MSG_LOCAL_OUTSIDE_METHOD */       "Local or Arg used outside a control method",
> -/*    ASL_MSG_LONG_LINE */                  "Splitting long input line",
> -/*    ASL_MSG_MEMORY_ALLOCATION */          "Memory allocation failure",
> -/*    ASL_MSG_MISSING_ENDDEPENDENT */       "Missing EndDependentFn() macro in dependent resource list",
> -/*    ASL_MSG_MISSING_STARTDEPENDENT */     "Missing StartDependentFn() macro in dependent resource list",
> -/*    ASL_MSG_MULTIPLE_DEFAULT */           "More than one Default statement within Switch construct",
> -/*    ASL_MSG_MULTIPLE_TYPES */             "Multiple types",
> -/*    ASL_MSG_NAME_EXISTS */                "Name already exists in scope",
> -/*    ASL_MSG_NAME_OPTIMIZATION */          "NamePath optimized",
> -/*    ASL_MSG_NAMED_OBJECT_IN_WHILE */      "Creating a named object in a While loop",
> -/*    ASL_MSG_NESTED_COMMENT */             "Nested comment found",
> -/*    ASL_MSG_NO_CASES */                   "No Case statements under Switch",
> -/*    ASL_MSG_NO_REGION */                  "_REG has no corresponding Operation Region",
> -/*    ASL_MSG_NO_RETVAL */                  "Called method returns no value",
> -/*    ASL_MSG_NO_WHILE */                   "No enclosing While statement",
> -/*    ASL_MSG_NON_ASCII */                  "Invalid characters found in file",
> -/*    ASL_MSG_NON_ZERO */                   "Operand evaluates to zero",
> -/*    ASL_MSG_NOT_EXIST */                  "Object does not exist",
> -/*    ASL_MSG_NOT_FOUND */                  "Object not found or not accessible from scope",
> -/*    ASL_MSG_NOT_METHOD */                 "Not a control method, cannot invoke",
> -/*    ASL_MSG_NOT_PARAMETER */              "Not a parameter, used as local only",
> -/*    ASL_MSG_NOT_REACHABLE */              "Object is not accessible from this scope",
> -/*    ASL_MSG_NOT_REFERENCED */             "Object is not referenced",
> -/*    ASL_MSG_NULL_DESCRIPTOR */            "Min/Max/Length/Gran are all zero, but no resource tag",
> -/*    ASL_MSG_NULL_STRING */                "Invalid zero-length (null) string",
> -/*    ASL_MSG_OPEN */                       "Could not open file",
> -/*    ASL_MSG_OUTPUT_FILE_OPEN */           "Could not open output AML file",
> -/*    ASL_MSG_OUTPUT_FILENAME */            "Could not create output filename",
> -/*    ASL_MSG_PACKAGE_LENGTH */             "Effective AML package length is zero",
> -/*    ASL_MSG_PREPROCESSOR_FILENAME */      "Could not create preprocessor filename",
> -/*    ASL_MSG_READ */                       "Could not read file",
> -/*    ASL_MSG_RECURSION */                  "Recursive method call",
> -/*    ASL_MSG_REGION_BUFFER_ACCESS */       "Host Operation Region requires BufferAcc access",
> -/*    ASL_MSG_REGION_BYTE_ACCESS */         "Host Operation Region requires ByteAcc access",
> -/*    ASL_MSG_RESERVED_ARG_COUNT_HI */      "Reserved method has too many arguments",
> -/*    ASL_MSG_RESERVED_ARG_COUNT_LO */      "Reserved method has too few arguments",
> -/*    ASL_MSG_RESERVED_METHOD */            "Reserved name must be a control method",
> -/*    ASL_MSG_RESERVED_NO_RETURN_VAL */     "Reserved method should not return a value",
> -/*    ASL_MSG_RESERVED_OPERAND_TYPE */      "Invalid object type for reserved name",
> -/*    ASL_MSG_RESERVED_PACKAGE_LENGTH */    "Invalid package length for reserved name",
> -/*    ASL_MSG_RESERVED_RETURN_VALUE */      "Reserved method must return a value",
> -/*    ASL_MSG_RESERVED_USE */               "Invalid use of reserved name",
> -/*    ASL_MSG_RESERVED_WORD */              "Use of reserved name",
> -/*    ASL_MSG_RESOURCE_FIELD */             "Resource field name cannot be used as a target",
> -/*    ASL_MSG_RESOURCE_INDEX */             "Missing ResourceSourceIndex (required)",
> -/*    ASL_MSG_RESOURCE_LIST */              "Too many resource items (internal error)",
> -/*    ASL_MSG_RESOURCE_SOURCE */            "Missing ResourceSource string (required)",
> -/*    ASL_MSG_RESULT_NOT_USED */            "Result is not used, operator has no effect",
> -/*    ASL_MSG_RETURN_TYPES */               "Not all control paths return a value",
> -/*    ASL_MSG_SCOPE_FWD_REF */              "Forward references from Scope operator not allowed",
> -/*    ASL_MSG_SCOPE_TYPE */                 "Existing object has invalid type for Scope operator",
> -/*    ASL_MSG_SEEK */                       "Could not seek file",
> -/*    ASL_MSG_SERIALIZED */                 "Control Method marked Serialized",
> -/*    ASL_MSG_SERIALIZED_REQUIRED */        "Control Method should be made Serialized",
> -/*    ASL_MSG_SINGLE_NAME_OPTIMIZATION */   "NamePath optimized to NameSeg (uses run-time search path)",
> -/*    ASL_MSG_SOME_NO_RETVAL */             "Called method may not always return a value",
> -/*    ASL_MSG_STRING_LENGTH */              "String literal too long",
> -/*    ASL_MSG_SWITCH_TYPE */                "Switch expression is not a static Integer/Buffer/String data type, defaulting to Integer",
> -/*    ASL_MSG_SYNC_LEVEL */                 "SyncLevel must be in the range 0-15",
> -/*    ASL_MSG_SYNTAX */                     "",
> -/*    ASL_MSG_TABLE_SIGNATURE */            "Invalid Table Signature",
> -/*    ASL_MSG_TAG_LARGER */                 "ResourceTag larger than Field",
> -/*    ASL_MSG_TAG_SMALLER */                "ResourceTag smaller than Field",
> -/*    ASL_MSG_TIMEOUT */                    "Result is not used, possible operator timeout will be missed",
> -/*    ASL_MSG_TOO_MANY_TEMPS */             "Method requires too many temporary variables (_T_x)",
> -/*    ASL_MSG_TRUNCATION */                 "64-bit return value will be truncated to 32 bits (DSDT version < 2)",
> -/*    ASL_MSG_UNKNOWN_RESERVED_NAME */      "Unknown reserved name",
> -/*    ASL_MSG_UNREACHABLE_CODE */           "Statement is unreachable",
> -/*    ASL_MSG_UNSUPPORTED */                "Unsupported feature",
> -/*    ASL_MSG_UPPER_CASE */                 "Non-hex letters must be upper case",
> -/*    ASL_MSG_VENDOR_LIST */                "Too many vendor data bytes (7 max)",
> -/*    ASL_MSG_WRITE */                      "Could not write file",
> -/*    ASL_MSG_RANGE */                      "Constant out of range",
> -/*    ASL_MSG_BUFFER_ALLOCATION */          "Could not allocate line buffer",
> -
> -/* Preprocessor */
> -
> -/*    ASL_MSG_DIRECTIVE_SYNTAX */           "Invalid directive syntax",
> -/*    ASL_MSG_ENDIF_MISMATCH */             "Mismatched #endif",
> -/*    ASL_MSG_ERROR_DIRECTIVE */            "#error",
> -/*    ASL_MSG_EXISTING_NAME */              "Name is already defined",
> -/*    ASL_MSG_INVALID_INVOCATION */         "Invalid macro invocation",
> -/*    ASL_MSG_MACRO_SYNTAX */               "Invalid macro syntax",
> -/*    ASL_MSG_TOO_MANY_ARGUMENTS */         "Too many macro arguments",
> -/*    ASL_MSG_UNKNOWN_DIRECTIVE */          "Unknown directive",
> -/*    ASL_MSG_UNKNOWN_PRAGMA */             "Unknown pragma",
> -/*    ASL_MSG_WARNING_DIRECTIVE */          "#warning",
> -
> -/* Table compiler */
> +    ASL_MSG_DIRECTIVE_SYNTAX = ASL_MSG_PREPROCESSOR,
> +    ASL_MSG_ENDIF_MISMATCH,
> +    ASL_MSG_ERROR_DIRECTIVE,
> +    ASL_MSG_EXISTING_NAME,
> +    ASL_MSG_INVALID_INVOCATION,
> +    ASL_MSG_MACRO_SYNTAX,
> +    ASL_MSG_TOO_MANY_ARGUMENTS,
> +    ASL_MSG_UNKNOWN_DIRECTIVE,
> +    ASL_MSG_UNKNOWN_PRAGMA,
> +    ASL_MSG_WARNING_DIRECTIVE,
>
> -/*    ASL_MSG_BUFFER_ELEMENT */             "Invalid element in buffer initializer list",
> -/*    ASL_MSG_DIVIDE_BY_ZERO */             "Expression contains divide-by-zero",
> -/*    ASL_MSG_FLAG_VALUE */                 "Flag value is too large",
> -/*    ASL_MSG_INTEGER_SIZE */               "Integer too large for target",
> -/*    ASL_MSG_INVALID_EXPRESSION */         "Invalid expression",
> -/*    ASL_MSG_INVALID_FIELD_NAME */         "Invalid Field Name",
> -/*    ASL_MSG_INVALID_HEX_INTEGER */        "Invalid hex integer constant",
> -/*    ASL_MSG_OEM_TABLE */                  "OEM table - unknown contents",
> -/*    ASL_MSG_RESERVED_VALUE */             "Reserved field",
> -/*    ASL_MSG_UNKNOWN_LABEL */              "Label is undefined",
> -/*    ASL_MSG_UNKNOWN_SUBTABLE */           "Unknown subtable type",
> -/*    ASL_MSG_UNKNOWN_TABLE */              "Unknown ACPI table signature",
> -/*    ASL_MSG_ZERO_VALUE */                 "Value must be non-zero"
> -};
> +} ASL_MESSAGE_IDS;
>
> -#endif  /* ASL_EXCEPTIONS */
>
>   #endif  /* __ASLMESSAGES_H */
> diff --git a/src/acpica/source/compiler/aslmethod.c b/src/acpica/source/compiler/aslmethod.c
> index a30acb4..7aca8f6 100644
> --- a/src/acpica/source/compiler/aslmethod.c
> +++ b/src/acpica/source/compiler/aslmethod.c
> @@ -180,7 +180,18 @@ MtMethodAnalysisWalkBegin (
>
>           WalkInfo->MethodStack = MethodInfo;
>
> -        /* Get the name node, ignored here */
> +        /* Special handling for _PRP, must have a _HID also */
> +
> +        if (!ACPI_STRCMP (METHOD_NAME__PRP, Op->Asl.NameSeg))
> +        {
> +            if (!ApFindNameInScope (METHOD_NAME__HID, Op))
> +            {
> +                AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op,
> +                    "_PRP requires _HID in same scope");
> +            }
> +        }
> +
> +        /* Get the name node */
>
>           Next = Op->Asl.Child;
>
> @@ -484,6 +495,16 @@ MtMethodAnalysisWalkBegin (
>                   AnCheckId (Next, ASL_TYPE_CID);
>               }
>           }
> +
> +        else if (!ACPI_STRCMP (METHOD_NAME__PRP, Op->Asl.NameSeg))
> +        {
> +            if (!ApFindNameInScope (METHOD_NAME__HID, Op))
> +            {
> +                AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op,
> +                    "_PRP requires _HID in same scope");
> +            }
> +        }
> +
>           break;
>
>       default:
> diff --git a/src/acpica/source/compiler/aslprepkg.c b/src/acpica/source/compiler/aslprepkg.c
> index afcbd48..2de5559 100644
> --- a/src/acpica/source/compiler/aslprepkg.c
> +++ b/src/acpica/source/compiler/aslprepkg.c
> @@ -539,6 +539,12 @@ ApCheckPackageList (
>                       Count, ExpectedCount);
>                   break;
>               }
> +            if (Count > ExpectedCount)
> +            {
> +                ApPackageTooLarge (PredefinedName, SubPackageOp,
> +                    Count, ExpectedCount);
> +                break;
> +            }
>
>               ApCheckPackageElements (PredefinedName, Op,
>                   Package->RetInfo.ObjectType1, Package->RetInfo.Count1,
> @@ -575,6 +581,12 @@ ApCheckPackageList (
>                       Count, ExpectedCount);
>                   break;
>               }
> +            if (Count > ExpectedCount)
> +            {
> +                ApPackageTooLarge (PredefinedName, SubPackageOp,
> +                    Count, ExpectedCount);
> +                break;
> +            }
>
>               /* Check each object/type combination */
>
> diff --git a/src/acpica/source/compiler/asltypes.h b/src/acpica/source/compiler/asltypes.h
> index fcfb945..7e06d0b 100644
> --- a/src/acpica/source/compiler/asltypes.h
> +++ b/src/acpica/source/compiler/asltypes.h
> @@ -268,7 +268,7 @@ typedef struct asl_error_msg
>       char                        *Filename;
>       char                        *SourceLine;
>       UINT32                      FilenameLength;
> -    UINT8                       MessageId;
> +    UINT16                      MessageId;
>       UINT8                       Level;
>
>   } ASL_ERROR_MSG;
> diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h
> index cc1b73f..313650a 100644
> --- a/src/acpica/source/compiler/dtcompiler.h
> +++ b/src/acpica/source/compiler/dtcompiler.h
> @@ -393,20 +393,20 @@ DtWalkTableTree (
>   void
>   DtError (
>       UINT8                   Level,
> -    UINT8                   MessageId,
> +    UINT16                  MessageId,
>       DT_FIELD                *FieldObject,
>       char                    *ExtraMessage);
>
>   void
>   DtNameError (
>       UINT8                   Level,
> -    UINT8                   MessageId,
> +    UINT16                  MessageId,
>       DT_FIELD                *FieldObject,
>       char                    *ExtraMessage);
>
>   void
>   DtFatal (
> -    UINT8                   MessageId,
> +    UINT16                  MessageId,
>       DT_FIELD                *FieldObject,
>       char                    *ExtraMessage);
>
> @@ -500,6 +500,10 @@ DtCompileIvrs (
>       void                    **PFieldList);
>
>   ACPI_STATUS
> +DtCompileLpit (
> +    void                    **PFieldList);
> +
> +ACPI_STATUS
>   DtCompileMadt (
>       void                    **PFieldList);
>
> @@ -591,6 +595,7 @@ extern const unsigned char  TemplateGtdt[];
>   extern const unsigned char  TemplateHest[];
>   extern const unsigned char  TemplateHpet[];
>   extern const unsigned char  TemplateIvrs[];
> +extern const unsigned char  TemplateLpit[];
>   extern const unsigned char  TemplateMadt[];
>   extern const unsigned char  TemplateMcfg[];
>   extern const unsigned char  TemplateMchi[];
> diff --git a/src/acpica/source/compiler/dttable.c b/src/acpica/source/compiler/dttable.c
> index 58aa9f1..5e310d6 100644
> --- a/src/acpica/source/compiler/dttable.c
> +++ b/src/acpica/source/compiler/dttable.c
> @@ -526,7 +526,7 @@ DtCompileCsrt (
>       UINT32                  GroupLength;
>
>
> -    /* Sub-tables (Resource Groups) */
> +    /* Subtables (Resource Groups) */
>
>       while (*PFieldList)
>       {
> @@ -1376,6 +1376,87 @@ DtCompileIvrs (
>
>   /******************************************************************************
>    *
> + * FUNCTION:    DtCompileLpit
> + *
> + * PARAMETERS:  List                - Current field list pointer
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Compile LPIT.
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +DtCompileLpit (
> +    void                    **List)
> +{
> +    ACPI_STATUS             Status;
> +    DT_SUBTABLE             *Subtable;
> +    DT_SUBTABLE             *ParentTable;
> +    DT_FIELD                **PFieldList = (DT_FIELD **) List;
> +    DT_FIELD                *SubtableStart;
> +    ACPI_DMTABLE_INFO       *InfoTable;
> +    ACPI_LPIT_HEADER        *LpitHeader;
> +
> +
> +    /* Note: Main table consists only of the standard ACPI table header */
> +
> +    while (*PFieldList)
> +    {
> +        SubtableStart = *PFieldList;
> +
> +        /* LPIT Subtable header */
> +
> +        Status = DtCompileTable (PFieldList, AcpiDmTableInfoLpitHdr,
> +                    &Subtable, TRUE);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        ParentTable = DtPeekSubtable ();
> +        DtInsertSubtable (ParentTable, Subtable);
> +        DtPushSubtable (Subtable);
> +
> +        LpitHeader = ACPI_CAST_PTR (ACPI_LPIT_HEADER, Subtable->Buffer);
> +
> +        switch (LpitHeader->Type)
> +        {
> +        case ACPI_LPIT_TYPE_NATIVE_CSTATE:
> +
> +            InfoTable = AcpiDmTableInfoLpit0;
> +            break;
> +
> +        case ACPI_LPIT_TYPE_SIMPLE_IO:
> +
> +            InfoTable = AcpiDmTableInfoLpit1;
> +            break;
> +
> +        default:
> +
> +            DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "LPIT");
> +            return (AE_ERROR);
> +        }
> +
> +        /* LPIT Subtable */
> +
> +        Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        ParentTable = DtPeekSubtable ();
> +        DtInsertSubtable (ParentTable, Subtable);
> +        DtPopSubtable ();
> +    }
> +
> +    return (AE_OK);
> +}
> +
> +
> +/******************************************************************************
> + *
>    * FUNCTION:    DtCompileMadt
>    *
>    * PARAMETERS:  List                - Current field list pointer
> diff --git a/src/acpica/source/compiler/dttemplate.h b/src/acpica/source/compiler/dttemplate.h
> index a1fe9ca..681d3e5 100644
> --- a/src/acpica/source/compiler/dttemplate.h
> +++ b/src/acpica/source/compiler/dttemplate.h
> @@ -620,6 +620,33 @@ const unsigned char TemplateIvrs[] =
>       0x00,0x00,0x00,0x00                       /* 000000B8    "...."     */
>   };
>
> +const unsigned char TemplateLpit[] =
> +{
> +    0x4C,0x50,0x49,0x54,0xB4,0x00,0x00,0x00,  /* 00000000    "LPIT...." */
> +    0x01,0x20,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    ". INTEL " */
> +    0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45,  /* 00000010    "TEMPLATE" */
> +    0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> +    0x25,0x03,0x14,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "%.. ...." */
> +    0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000028    "8......." */
> +    0x00,0x00,0x00,0x00,0x7F,0x01,0x02,0x00,  /* 00000030    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000038    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000040    "........" */
> +    0x00,0x20,0x00,0x03,0x00,0x00,0x00,0x00,  /* 00000048    ". ......" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000050    "........" */
> +    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000058    "........" */
> +    0x58,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000060    "X......." */
> +    0x00,0x00,0x00,0x00,0x01,0x10,0x00,0x02,  /* 00000068    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000070    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000078    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000080    "........" */
> +    0x00,0x00,0x00,0x00,0x01,0x10,0x00,0x02,  /* 00000088    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000090    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000098    "........" */
> +    0x00,0x08,0x00,0x01,0x00,0x00,0x00,0x00,  /* 000000A0    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000A8    "........" */
> +    0x00,0x00,0x00,0x00                       /* 000000B0    "...."     */
> +};
> +
>   /* MADT with ACPI 5.0 subtables */
>
>   const unsigned char TemplateMadt[] =
> diff --git a/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c
> index 62ca4a3..d3cedf1 100644
> --- a/src/acpica/source/compiler/dtutils.c
> +++ b/src/acpica/source/compiler/dtutils.c
> @@ -149,7 +149,7 @@ DtSum (
>   void
>   DtError (
>       UINT8                   Level,
> -    UINT8                   MessageId,
> +    UINT16                  MessageId,
>       DT_FIELD                *FieldObject,
>       char                    *ExtraMessage)
>   {
> @@ -196,7 +196,7 @@ DtError (
>   void
>   DtNameError (
>       UINT8                   Level,
> -    UINT8                   MessageId,
> +    UINT16                  MessageId,
>       DT_FIELD                *FieldObject,
>       char                    *ExtraMessage)
>   {
> @@ -249,7 +249,7 @@ DtNameError (
>
>   void
>   DtFatal (
> -    UINT8                   MessageId,
> +    UINT16                  MessageId,
>       DT_FIELD                *FieldObject,
>       char                    *ExtraMessage)
>   {
> @@ -605,6 +605,7 @@ DtGetFieldLength (
>       case ACPI_DMT_NAME4:
>       case ACPI_DMT_SLIC:
>       case ACPI_DMT_SIG:
> +    case ACPI_DMT_LPIT:
>
>           ByteLength = 4;
>           break;
> diff --git a/src/acpica/source/compiler/fwts_iasl_interface.c b/src/acpica/source/compiler/fwts_iasl_interface.c
> index 180dadd..fd69e6b 100644
> --- a/src/acpica/source/compiler/fwts_iasl_interface.c
> +++ b/src/acpica/source/compiler/fwts_iasl_interface.c
> @@ -21,6 +21,7 @@
>
>   #include <unistd.h>
>   #include <stdbool.h>
> +#include <stdint.h>
>   #include <sys/types.h>
>   #include <sys/wait.h>
>
> @@ -201,3 +202,20 @@ int fwts_iasl_assemble_aml(const char *source, char **stdout_output, char **stde
>
>   	return ret;
>   }
> +
> +/*
> + *  fwts_iasl_exception_level__()
> + *	shim wrapper for AeDecodeExceptionLevel level decoding
> + */
> +const char *fwts_iasl_exception_level__(uint8_t level)
> +{
> +	const char *str;
> +
> +	bool tmp = Gbl_VerboseErrors;
> +
> +	Gbl_VerboseErrors = true;
> +	str = AeDecodeExceptionLevel((UINT8)level);
> +	Gbl_VerboseErrors = tmp;
> +
> +	return str;
> +}
> diff --git a/src/acpica/source/compiler/fwts_iasl_interface.h b/src/acpica/source/compiler/fwts_iasl_interface.h
> index 71675d3..29f3287 100644
> --- a/src/acpica/source/compiler/fwts_iasl_interface.h
> +++ b/src/acpica/source/compiler/fwts_iasl_interface.h
> @@ -20,7 +20,10 @@
>   #ifndef __FWTS_IASL_INTERFACE__
>   #define __FWTS_IASL_INTERFACE__
>
> +#include <stdint.h>
> +
>   int fwts_iasl_disassemble_aml(const char *aml, const char *outputfile);
>   int fwts_iasl_assemble_aml(const char *source, char **stdout_output, char **stderr_output);
> +const char *fwts_iasl_exception_level__(uint8_t level);
>
>   #endif
> diff --git a/src/acpica/source/compiler/preprocess.h b/src/acpica/source/compiler/preprocess.h
> index eac2078..b5a57f5 100644
> --- a/src/acpica/source/compiler/preprocess.h
> +++ b/src/acpica/source/compiler/preprocess.h
> @@ -329,7 +329,7 @@ PrGetNextToken (
>   void
>   PrError (
>       UINT8                   Level,
> -    UINT8                   MessageId,
> +    UINT16                  MessageId,
>       UINT32                  Column);
>
>   void
> diff --git a/src/acpica/source/compiler/prutils.c b/src/acpica/source/compiler/prutils.c
> index c7b977e..198bbfc 100644
> --- a/src/acpica/source/compiler/prutils.c
> +++ b/src/acpica/source/compiler/prutils.c
> @@ -221,7 +221,7 @@ PrGetNextToken (
>   void
>   PrError (
>       UINT8                   Level,
> -    UINT8                   MessageId,
> +    UINT16                  MessageId,
>       UINT32                  Column)
>   {
>   #if 0
> diff --git a/src/acpica/source/components/debugger/dbcmds.c b/src/acpica/source/components/debugger/dbcmds.c
> index d74f61c..6d70e03 100644
> --- a/src/acpica/source/components/debugger/dbcmds.c
> +++ b/src/acpica/source/components/debugger/dbcmds.c
> @@ -411,7 +411,7 @@ AcpiDbDisplayTableInfo (
>
>       /* Header */
>
> -    AcpiOsPrintf ("Idx ID Status    Type            Sig  Address  Len   Header\n");
> +    AcpiOsPrintf ("Idx ID    Status Type              TableHeader (Sig, Address, Length)\n");
>
>       /* Walk the entire root table list */
>
> @@ -438,22 +438,22 @@ AcpiDbDisplayTableInfo (
>           {
>           case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL:
>
> -            AcpiOsPrintf ("External virtual  ");
> +            AcpiOsPrintf ("External/virtual  ");
>               break;
>
>           case ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL:
>
> -            AcpiOsPrintf ("Internal physical ");
> +            AcpiOsPrintf ("Internal/physical ");
>               break;
>
>           case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL:
>
> -            AcpiOsPrintf ("Internal virtual  ");
> +            AcpiOsPrintf ("Internal/virtual  ");
>               break;
>
>           default:
>
> -            AcpiOsPrintf ("INVALID   ");
> +            AcpiOsPrintf ("INVALID TYPE      ");
>               break;
>           }
>
> @@ -1259,14 +1259,25 @@ AcpiDbGenerateGpe (
>       char                    *GpeArg,
>       char                    *BlockArg)
>   {
> -    UINT32                  BlockNumber;
> +    UINT32                  BlockNumber = 0;
>       UINT32                  GpeNumber;
>       ACPI_GPE_EVENT_INFO     *GpeEventInfo;
>
>
> -    GpeNumber   = ACPI_STRTOUL (GpeArg, NULL, 0);
> -    BlockNumber = ACPI_STRTOUL (BlockArg, NULL, 0);
> +    GpeNumber = ACPI_STRTOUL (GpeArg, NULL, 0);
>
> +    /*
> +     * If no block arg, or block arg == 0 or 1, use the FADT-defined
> +     * GPE blocks.
> +     */
> +    if (BlockArg)
> +    {
> +        BlockNumber = ACPI_STRTOUL (BlockArg, NULL, 0);
> +        if (BlockNumber == 1)
> +        {
> +            BlockNumber = 0;
> +        }
> +    }
>
>       GpeEventInfo = AcpiEvGetGpeEventInfo (ACPI_TO_POINTER (BlockNumber),
>           GpeNumber);
> diff --git a/src/acpica/source/components/debugger/dbinput.c b/src/acpica/source/components/debugger/dbinput.c
> index fde510b..c84bf8a 100644
> --- a/src/acpica/source/components/debugger/dbinput.c
> +++ b/src/acpica/source/components/debugger/dbinput.c
> @@ -253,7 +253,7 @@ static const ACPI_DB_COMMAND_INFO   AcpiGbl_DbCommands[] =
>       {"EXIT",         0},
>       {"FIND",         1},
>       {"GO",           0},
> -    {"GPE",          2},
> +    {"GPE",          1},
>       {"GPES",         0},
>       {"HANDLERS",     0},
>       {"HELP",         0},
> @@ -377,7 +377,7 @@ static const ACPI_DB_COMMAND_HELP   AcpiGbl_DbCommandHelp[] =
>
>       {0, "\nHardware Related Commands:",         "\n"},
>       {1, "  Event <F|G> <Value>",               "Generate AcpiEvent (Fixed/GPE)\n"},
> -    {1, "  Gpe <GpeNum> <GpeBlock>",           "Simulate a GPE\n"},
> +    {1, "  Gpe <GpeNum> [GpeBlockDevice]",     "Simulate a GPE\n"},
>       {1, "  Gpes",                              "Display info on all GPEs\n"},
>       {1, "  Sci",                               "Generate an SCI\n"},
>       {1, "  Sleep [SleepState]",                "Simulate sleep/wake sequence(s) (0-5)\n"},
> diff --git a/src/acpica/source/components/events/evgpe.c b/src/acpica/source/components/events/evgpe.c
> index d27fd80..bb955ac 100644
> --- a/src/acpica/source/components/events/evgpe.c
> +++ b/src/acpica/source/components/events/evgpe.c
> @@ -504,7 +504,7 @@ AcpiEvGpeDetect (
>                     GpeRegisterInfo->EnableForWake))
>               {
>                   ACPI_DEBUG_PRINT ((ACPI_DB_INTERRUPTS,
> -                    "Ignore disabled registers for GPE%02X-GPE%02X: "
> +                    "Ignore disabled registers for GPE %02X-%02X: "
>                       "RunEnable=%02X, WakeEnable=%02X\n",
>                       GpeRegisterInfo->BaseGpeNumber,
>                       GpeRegisterInfo->BaseGpeNumber + (ACPI_GPE_REGISTER_WIDTH - 1),
> @@ -530,7 +530,7 @@ AcpiEvGpeDetect (
>               }
>
>               ACPI_DEBUG_PRINT ((ACPI_DB_INTERRUPTS,
> -                "Read registers for GPE%02X-GPE%02X: Status=%02X, Enable=%02X, "
> +                "Read registers for GPE %02X-%02X: Status=%02X, Enable=%02X, "
>                   "RunEnable=%02X, WakeEnable=%02X\n",
>                   GpeRegisterInfo->BaseGpeNumber,
>                   GpeRegisterInfo->BaseGpeNumber + (ACPI_GPE_REGISTER_WIDTH - 1),
> @@ -843,7 +843,7 @@ AcpiEvGpeDispatch (
>           if (ACPI_FAILURE (Status))
>           {
>               ACPI_EXCEPTION ((AE_INFO, Status,
> -                "Unable to clear GPE%02X", GpeNumber));
> +                "Unable to clear GPE %02X", GpeNumber));
>               return_UINT32 (ACPI_INTERRUPT_NOT_HANDLED);
>           }
>       }
> @@ -861,7 +861,7 @@ AcpiEvGpeDispatch (
>       if (ACPI_FAILURE (Status))
>       {
>           ACPI_EXCEPTION ((AE_INFO, Status,
> -            "Unable to disable GPE%02X", GpeNumber));
> +            "Unable to disable GPE %02X", GpeNumber));
>           return_UINT32 (ACPI_INTERRUPT_NOT_HANDLED);
>       }
>
> @@ -901,7 +901,7 @@ AcpiEvGpeDispatch (
>           if (ACPI_FAILURE (Status))
>           {
>               ACPI_EXCEPTION ((AE_INFO, Status,
> -                "Unable to queue handler for GPE%02X - event disabled",
> +                "Unable to queue handler for GPE %02X - event disabled",
>                   GpeNumber));
>           }
>           break;
> @@ -913,7 +913,7 @@ AcpiEvGpeDispatch (
>            * a GPE to be enabled if it has no handler or method.
>            */
>           ACPI_ERROR ((AE_INFO,
> -            "No handler or method for GPE%02X, disabling event",
> +            "No handler or method for GPE %02X, disabling event",
>               GpeNumber));
>           break;
>       }
> diff --git a/src/acpica/source/components/events/evgpeblk.c b/src/acpica/source/components/events/evgpeblk.c
> index f1a5b1b..4de91c1 100644
> --- a/src/acpica/source/components/events/evgpeblk.c
> +++ b/src/acpica/source/components/events/evgpeblk.c
> @@ -354,17 +354,17 @@ AcpiEvCreateGpeInfoBlocks (
>       {
>           /* Init the RegisterInfo for this GPE register (8 GPEs) */
>
> -        ThisRegister->BaseGpeNumber = (UINT8) (GpeBlock->BlockBaseNumber +
> -                                             (i * ACPI_GPE_REGISTER_WIDTH));
> +        ThisRegister->BaseGpeNumber = (UINT16)
> +            (GpeBlock->BlockBaseNumber + (i * ACPI_GPE_REGISTER_WIDTH));
>
>           ThisRegister->StatusAddress.Address =
> -            GpeBlock->BlockAddress.Address + i;
> +            GpeBlock->Address + i;
>
>           ThisRegister->EnableAddress.Address =
> -            GpeBlock->BlockAddress.Address + i + GpeBlock->RegisterCount;
> +            GpeBlock->Address + i + GpeBlock->RegisterCount;
>
> -        ThisRegister->StatusAddress.SpaceId   = GpeBlock->BlockAddress.SpaceId;
> -        ThisRegister->EnableAddress.SpaceId   = GpeBlock->BlockAddress.SpaceId;
> +        ThisRegister->StatusAddress.SpaceId   = GpeBlock->SpaceId;
> +        ThisRegister->EnableAddress.SpaceId   = GpeBlock->SpaceId;
>           ThisRegister->StatusAddress.BitWidth  = ACPI_GPE_REGISTER_WIDTH;
>           ThisRegister->EnableAddress.BitWidth  = ACPI_GPE_REGISTER_WIDTH;
>           ThisRegister->StatusAddress.BitOffset = 0;
> @@ -437,9 +437,10 @@ ErrorExit:
>   ACPI_STATUS
>   AcpiEvCreateGpeBlock (
>       ACPI_NAMESPACE_NODE     *GpeDevice,
> -    ACPI_GENERIC_ADDRESS    *GpeBlockAddress,
> +    UINT64                  Address,
> +    UINT8                   SpaceId,
>       UINT32                  RegisterCount,
> -    UINT8                   GpeBlockBaseNumber,
> +    UINT16                  GpeBlockBaseNumber,
>       UINT32                  InterruptNumber,
>       ACPI_GPE_BLOCK_INFO     **ReturnGpeBlock)
>   {
> @@ -466,15 +467,14 @@ AcpiEvCreateGpeBlock (
>
>       /* Initialize the new GPE block */
>
> +    GpeBlock->Address = Address;
> +    GpeBlock->SpaceId = SpaceId;
>       GpeBlock->Node = GpeDevice;
>       GpeBlock->GpeCount = (UINT16) (RegisterCount * ACPI_GPE_REGISTER_WIDTH);
>       GpeBlock->Initialized = FALSE;
>       GpeBlock->RegisterCount = RegisterCount;
>       GpeBlock->BlockBaseNumber = GpeBlockBaseNumber;
>
> -    ACPI_MEMCPY (&GpeBlock->BlockAddress, GpeBlockAddress,
> -        sizeof (ACPI_GENERIC_ADDRESS));
> -
>       /*
>        * Create the RegisterInfo and EventInfo sub-structures
>        * Note: disables and clears all GPEs in the block
> @@ -517,11 +517,11 @@ AcpiEvCreateGpeBlock (
>       }
>
>       ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT,
> -        "    Initialized GPE %02X to %02X [%4.4s] %u regs on interrupt 0x%X\n",
> +        "    Initialized GPE %02X to %02X [%4.4s] %u regs on interrupt 0x%X%s\n",
>           (UINT32) GpeBlock->BlockBaseNumber,
>           (UINT32) (GpeBlock->BlockBaseNumber + (GpeBlock->GpeCount - 1)),
> -        GpeDevice->Name.Ascii, GpeBlock->RegisterCount,
> -        InterruptNumber));
> +        GpeDevice->Name.Ascii, GpeBlock->RegisterCount, InterruptNumber,
> +        InterruptNumber == AcpiGbl_FADT.SciInterrupt ? " (SCI)" : ""));
>
>       /* Update global count of currently available GPEs */
>
> diff --git a/src/acpica/source/components/events/evgpeinit.c b/src/acpica/source/components/events/evgpeinit.c
> index 6bf32ff..2e2e6b3 100644
> --- a/src/acpica/source/components/events/evgpeinit.c
> +++ b/src/acpica/source/components/events/evgpeinit.c
> @@ -211,7 +211,9 @@ AcpiEvGpeInitialize (
>           /* Install GPE Block 0 */
>
>           Status = AcpiEvCreateGpeBlock (AcpiGbl_FadtGpeDevice,
> -                    &AcpiGbl_FADT.XGpe0Block, RegisterCount0, 0,
> +                    AcpiGbl_FADT.XGpe0Block.Address,
> +                    AcpiGbl_FADT.XGpe0Block.SpaceId,
> +                    RegisterCount0, 0,
>                       AcpiGbl_FADT.SciInterrupt, &AcpiGbl_GpeFadtBlocks[0]);
>
>           if (ACPI_FAILURE (Status))
> @@ -249,7 +251,9 @@ AcpiEvGpeInitialize (
>               /* Install GPE Block 1 */
>
>               Status = AcpiEvCreateGpeBlock (AcpiGbl_FadtGpeDevice,
> -                        &AcpiGbl_FADT.XGpe1Block, RegisterCount1,
> +                        AcpiGbl_FADT.XGpe1Block.Address,
> +                        AcpiGbl_FADT.XGpe1Block.SpaceId,
> +                        RegisterCount1,
>                           AcpiGbl_FADT.Gpe1Base,
>                           AcpiGbl_FADT.SciInterrupt, &AcpiGbl_GpeFadtBlocks[1]);
>
> diff --git a/src/acpica/source/components/events/evxfgpe.c b/src/acpica/source/components/events/evxfgpe.c
> index 8ab1ed1..e180bd3 100644
> --- a/src/acpica/source/components/events/evxfgpe.c
> +++ b/src/acpica/source/components/events/evxfgpe.c
> @@ -881,7 +881,8 @@ AcpiInstallGpeBlock (
>        * For user-installed GPE Block Devices, the GpeBlockBaseNumber
>        * is always zero
>        */
> -    Status = AcpiEvCreateGpeBlock (Node, GpeBlockAddress, RegisterCount,
> +    Status = AcpiEvCreateGpeBlock (Node, GpeBlockAddress->Address,
> +                GpeBlockAddress->SpaceId, RegisterCount,
>                   0, InterruptNumber, &GpeBlock);
>       if (ACPI_FAILURE (Status))
>       {
> diff --git a/src/acpica/source/components/hardware/hwpci.c b/src/acpica/source/components/hardware/hwpci.c
> index 42b5f59..24b7c01 100644
> --- a/src/acpica/source/components/hardware/hwpci.c
> +++ b/src/acpica/source/components/hardware/hwpci.c
> @@ -233,11 +233,12 @@ AcpiHwDerivePciId (
>           /* Walk the list, updating the PCI device/function/bus numbers */
>
>           Status = AcpiHwProcessPciList (PciId, ListHead);
> -    }
>
> -    /* Always delete the list */
> +        /* Delete the list */
> +
> +        AcpiHwDeletePciList (ListHead);
> +    }
>
> -    AcpiHwDeletePciList (ListHead);
>       return_ACPI_STATUS (Status);
>   }
>
> @@ -285,6 +286,9 @@ AcpiHwBuildPciList (
>           Status = AcpiGetParent (CurrentDevice, &ParentDevice);
>           if (ACPI_FAILURE (Status))
>           {
> +            /* Must delete the list before exit */
> +
> +            AcpiHwDeletePciList (*ReturnListHead);
>               return (Status);
>           }
>
> @@ -299,6 +303,9 @@ AcpiHwBuildPciList (
>           ListElement = ACPI_ALLOCATE (sizeof (ACPI_PCI_DEVICE));
>           if (!ListElement)
>           {
> +            /* Must delete the list before exit */
> +
> +            AcpiHwDeletePciList (*ReturnListHead);
>               return (AE_NO_MEMORY);
>           }
>
> diff --git a/src/acpica/source/components/resources/rscreate.c b/src/acpica/source/components/resources/rscreate.c
> index 7c23893..03298f4 100644
> --- a/src/acpica/source/components/resources/rscreate.c
> +++ b/src/acpica/source/components/resources/rscreate.c
> @@ -149,6 +149,10 @@ AcpiBufferToResource (
>       void                    *Resource;
>       void                    *CurrentResourcePtr;
>
> +
> +    ACPI_FUNCTION_TRACE (AcpiBufferToResource);
> +
> +
>       /*
>        * Note: we allow AE_AML_NO_RESOURCE_END_TAG, since an end tag
>        * is not required here.
> @@ -164,7 +168,7 @@ AcpiBufferToResource (
>       }
>       if (ACPI_FAILURE (Status))
>       {
> -        return (Status);
> +        return_ACPI_STATUS (Status);
>       }
>
>       /* Allocate a buffer for the converted resource */
> @@ -173,7 +177,7 @@ AcpiBufferToResource (
>       CurrentResourcePtr = Resource;
>       if (!Resource)
>       {
> -        return (AE_NO_MEMORY);
> +        return_ACPI_STATUS (AE_NO_MEMORY);
>       }
>
>       /* Perform the AML-to-Resource conversion */
> @@ -193,9 +197,11 @@ AcpiBufferToResource (
>           *ResourcePtr = Resource;
>       }
>
> -    return (Status);
> +    return_ACPI_STATUS (Status);
>   }
>
> +ACPI_EXPORT_SYMBOL (AcpiBufferToResource)
> +
>
>   /*******************************************************************************
>    *
> diff --git a/src/acpica/source/components/tables/tbfadt.c b/src/acpica/source/components/tables/tbfadt.c
> index 9809274..8cb69a9 100644
> --- a/src/acpica/source/components/tables/tbfadt.c
> +++ b/src/acpica/source/components/tables/tbfadt.c
> @@ -130,7 +130,8 @@ AcpiTbInitGenericAddress (
>       UINT8                   SpaceId,
>       UINT8                   ByteWidth,
>       UINT64                  Address,
> -    char                    *RegisterName);
> +    char                    *RegisterName,
> +    UINT8                   Flags);
>
>   static void
>   AcpiTbConvertFadt (
> @@ -156,13 +157,14 @@ typedef struct acpi_fadt_info
>       UINT16                  Address32;
>       UINT16                  Length;
>       UINT8                   DefaultLength;
> -    UINT8                   Type;
> +    UINT8                   Flags;
>
>   } ACPI_FADT_INFO;
>
>   #define ACPI_FADT_OPTIONAL          0
>   #define ACPI_FADT_REQUIRED          1
>   #define ACPI_FADT_SEPARATE_LENGTH   2
> +#define ACPI_FADT_GPE_REGISTER      4
>
>   static ACPI_FADT_INFO     FadtInfoTable[] =
>   {
> @@ -213,14 +215,14 @@ static ACPI_FADT_INFO     FadtInfoTable[] =
>           ACPI_FADT_OFFSET (Gpe0Block),
>           ACPI_FADT_OFFSET (Gpe0BlockLength),
>           0,
> -        ACPI_FADT_SEPARATE_LENGTH},
> +        ACPI_FADT_SEPARATE_LENGTH | ACPI_FADT_GPE_REGISTER},
>
>       {"Gpe1Block",
>           ACPI_FADT_OFFSET (XGpe1Block),
>           ACPI_FADT_OFFSET (Gpe1Block),
>           ACPI_FADT_OFFSET (Gpe1BlockLength),
>           0,
> -        ACPI_FADT_SEPARATE_LENGTH}
> +        ACPI_FADT_SEPARATE_LENGTH | ACPI_FADT_GPE_REGISTER}
>   };
>
>   #define ACPI_FADT_INFO_ENTRIES \
> @@ -284,21 +286,31 @@ AcpiTbInitGenericAddress (
>       UINT8                   SpaceId,
>       UINT8                   ByteWidth,
>       UINT64                  Address,
> -    char                    *RegisterName)
> +    char                    *RegisterName,
> +    UINT8                   Flags)
>   {
>       UINT8                   BitWidth;
>
>
> -    /* Bit width field in the GAS is only one byte long, 255 max */
> -
> +    /*
> +     * Bit width field in the GAS is only one byte long, 255 max.
> +     * Check for BitWidth overflow in GAS.
> +     */
>       BitWidth = (UINT8) (ByteWidth * 8);
> -
> -    if (ByteWidth > 31) /* (31*8)=248 */
> +    if (ByteWidth > 31)     /* (31*8)=248, (32*8)=256 */
>       {
> -        ACPI_ERROR ((AE_INFO,
> -            "%s - 32-bit FADT register is too long (%u bytes, %u bits) "
> -            "to convert to GAS struct - 255 bits max, truncating",
> -            RegisterName, ByteWidth, (ByteWidth * 8)));
> +        /*
> +         * No error for GPE blocks, because we do not use the BitWidth
> +         * for GPEs, the legacy length (ByteWidth) is used instead to
> +         * allow for a large number of GPEs.
> +         */
> +        if (!(Flags & ACPI_FADT_GPE_REGISTER))
> +        {
> +            ACPI_ERROR ((AE_INFO,
> +                "%s - 32-bit FADT register is too long (%u bytes, %u bits) "
> +                "to convert to GAS struct - 255 bits max, truncating",
> +                RegisterName, ByteWidth, (ByteWidth * 8)));
> +        }
>
>           BitWidth = 255;
>       }
> @@ -564,6 +576,7 @@ AcpiTbConvertFadt (
>       ACPI_GENERIC_ADDRESS    *Address64;
>       UINT32                  Address32;
>       UINT8                   Length;
> +    UINT8                   Flags;
>       UINT32                  i;
>
>
> @@ -628,6 +641,7 @@ AcpiTbConvertFadt (
>               &AcpiGbl_FADT, FadtInfoTable[i].Length);
>
>           Name = FadtInfoTable[i].Name;
> +        Flags = FadtInfoTable[i].Flags;
>
>           /*
>            * Expand the ACPI 1.0 32-bit addresses to the ACPI 2.0 64-bit "X"
> @@ -664,7 +678,7 @@ AcpiTbConvertFadt (
>                       ACPI_ADR_SPACE_SYSTEM_IO,
>                       *ACPI_ADD_PTR (UINT8, &AcpiGbl_FADT,
>                           FadtInfoTable[i].Length),
> -                    (UINT64) Address32, Name);
> +                    (UINT64) Address32, Name, Flags);
>               }
>               else if (Address64->Address != (UINT64) Address32)
>               {
> @@ -685,7 +699,7 @@ AcpiTbConvertFadt (
>                           ACPI_ADR_SPACE_SYSTEM_IO,
>                           *ACPI_ADD_PTR (UINT8, &AcpiGbl_FADT,
>                               FadtInfoTable[i].Length),
> -                        (UINT64) Address32, Name);
> +                        (UINT64) Address32, Name, Flags);
>                   }
>               }
>           }
> @@ -706,7 +720,7 @@ AcpiTbConvertFadt (
>                   Name, ACPI_MUL_8 (Length), Address64->BitWidth));
>           }
>
> -        if (FadtInfoTable[i].Type & ACPI_FADT_REQUIRED)
> +        if (FadtInfoTable[i].Flags & ACPI_FADT_REQUIRED)
>           {
>               /*
>                * Field is required (PM1aEvent, PM1aControl).
> @@ -720,7 +734,7 @@ AcpiTbConvertFadt (
>                       Name, ACPI_FORMAT_UINT64 (Address64->Address), Length));
>               }
>           }
> -        else if (FadtInfoTable[i].Type & ACPI_FADT_SEPARATE_LENGTH)
> +        else if (FadtInfoTable[i].Flags & ACPI_FADT_SEPARATE_LENGTH)
>           {
>               /*
>                * Field is optional (PM2Control, GPE0, GPE1) AND has its own
> @@ -827,7 +841,7 @@ AcpiTbSetupFadtRegisters (
>                   Source64->SpaceId, Pm1RegisterByteWidth,
>                   Source64->Address +
>                       (FadtPmInfoTable[i].RegisterNum * Pm1RegisterByteWidth),
> -                "PmRegisters");
> +                "PmRegisters", 0);
>           }
>       }
>   }
> diff --git a/src/acpica/source/components/tables/tbutils.c b/src/acpica/source/components/tables/tbutils.c
> index 73cf76e..7cac46a 100644
> --- a/src/acpica/source/components/tables/tbutils.c
> +++ b/src/acpica/source/components/tables/tbutils.c
> @@ -125,10 +125,6 @@
>
>   /* Local prototypes */
>
> -static ACPI_STATUS
> -AcpiTbValidateXsdt (
> -    ACPI_PHYSICAL_ADDRESS   Address);
> -
>   static ACPI_PHYSICAL_ADDRESS
>   AcpiTbGetRootTableEntry (
>       UINT8                   *TableEntry,
> @@ -348,92 +344,6 @@ AcpiTbGetRootTableEntry (
>
>   /*******************************************************************************
>    *
> - * FUNCTION:    AcpiTbValidateXsdt
> - *
> - * PARAMETERS:  Address             - Physical address of the XSDT (from RSDP)
> - *
> - * RETURN:      Status. AE_OK if the table appears to be valid.
> - *
> - * DESCRIPTION: Validate an XSDT to ensure that it is of minimum size and does
> - *              not contain any NULL entries. A problem that is seen in the
> - *              field is that the XSDT exists, but is actually useless because
> - *              of one or more (or all) NULL entries.
> - *
> - ******************************************************************************/
> -
> -static ACPI_STATUS
> -AcpiTbValidateXsdt (
> -    ACPI_PHYSICAL_ADDRESS   XsdtAddress)
> -{
> -    ACPI_TABLE_HEADER       *Table;
> -    UINT8                   *NextEntry;
> -    ACPI_PHYSICAL_ADDRESS   Address;
> -    UINT32                  Length;
> -    UINT32                  EntryCount;
> -    ACPI_STATUS             Status;
> -    UINT32                  i;
> -
> -
> -    /* Get the XSDT length */
> -
> -    Table = AcpiOsMapMemory (XsdtAddress, sizeof (ACPI_TABLE_HEADER));
> -    if (!Table)
> -    {
> -        return (AE_NO_MEMORY);
> -    }
> -
> -    Length = Table->Length;
> -    AcpiOsUnmapMemory (Table, sizeof (ACPI_TABLE_HEADER));
> -
> -    /*
> -     * Minimum XSDT length is the size of the standard ACPI header
> -     * plus one physical address entry
> -     */
> -    if (Length < (sizeof (ACPI_TABLE_HEADER) + ACPI_XSDT_ENTRY_SIZE))
> -    {
> -        return (AE_INVALID_TABLE_LENGTH);
> -    }
> -
> -    /* Map the entire XSDT */
> -
> -    Table = AcpiOsMapMemory (XsdtAddress, Length);
> -    if (!Table)
> -    {
> -        return (AE_NO_MEMORY);
> -    }
> -
> -    /* Get the number of entries and pointer to first entry */
> -
> -    Status = AE_OK;
> -    NextEntry = ACPI_ADD_PTR (UINT8, Table, sizeof (ACPI_TABLE_HEADER));
> -    EntryCount = (UINT32) ((Table->Length - sizeof (ACPI_TABLE_HEADER)) /
> -        ACPI_XSDT_ENTRY_SIZE);
> -
> -    /* Validate each entry (physical address) within the XSDT */
> -
> -    for (i = 0; i < EntryCount; i++)
> -    {
> -        Address = AcpiTbGetRootTableEntry (NextEntry, ACPI_XSDT_ENTRY_SIZE);
> -        if (!Address)
> -        {
> -            /* Detected a NULL entry, XSDT is invalid */
> -
> -            Status = AE_NULL_ENTRY;
> -            break;
> -        }
> -
> -        NextEntry += ACPI_XSDT_ENTRY_SIZE;
> -    }
> -
> -    /* Unmap table */
> -
> -    AcpiOsUnmapMemory (Table, Length);
> -    return (Status);
> -}
> -
> -
> -/*******************************************************************************
> - *
>    * FUNCTION:    AcpiTbParseRootTable
>    *
>    * PARAMETERS:  Rsdp                    - Pointer to the RSDP
> @@ -507,25 +417,6 @@ AcpiTbParseRootTable (
>        */
>       AcpiOsUnmapMemory (Rsdp, sizeof (ACPI_TABLE_RSDP));
>
> -    /*
> -     * If it is present and used, validate the XSDT for access/size
> -     * and ensure that all table entries are at least non-NULL
> -     */
> -    if (TableEntrySize == ACPI_XSDT_ENTRY_SIZE)
> -    {
> -        Status = AcpiTbValidateXsdt (Address);
> -        if (ACPI_FAILURE (Status))
> -        {
> -            ACPI_BIOS_WARNING ((AE_INFO, "XSDT is invalid (%s), using RSDT",
> -                AcpiFormatException (Status)));
> -
> -            /* Fall back to the RSDT */
> -
> -            Address = (ACPI_PHYSICAL_ADDRESS) Rsdp->RsdtPhysicalAddress;
> -            TableEntrySize = ACPI_RSDT_ENTRY_SIZE;
> -        }
> -    }
> -
>       /* Map the RSDT/XSDT table header to get the full table length */
>
>       Table = AcpiOsMapMemory (Address, sizeof (ACPI_TABLE_HEADER));
> @@ -584,8 +475,16 @@ AcpiTbParseRootTable (
>       {
>           /* Get the table physical address (32-bit for RSDT, 64-bit for XSDT) */
>
> -        Status = AcpiTbInstallStandardTable (
> -            AcpiTbGetRootTableEntry (TableEntry, TableEntrySize),
> +        Address = AcpiTbGetRootTableEntry (TableEntry, TableEntrySize);
> +
> +        /* Skip NULL entries in RSDT/XSDT */
> +
> +        if (!Address)
> +        {
> +            goto NextTable;
> +        }
> +
> +        Status = AcpiTbInstallStandardTable (Address,
>               ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, FALSE, TRUE, &TableIndex);
>
>           if (ACPI_SUCCESS (Status) &&
> @@ -595,6 +494,8 @@ AcpiTbParseRootTable (
>               AcpiTbParseFadt (TableIndex);
>           }
>
> +NextTable:
> +
>           TableEntry += TableEntrySize;
>       }
>
> diff --git a/src/acpica/source/components/utilities/utglobal.c b/src/acpica/source/components/utilities/utglobal.c
> index 77294c4..a24abfc 100644
> --- a/src/acpica/source/components/utilities/utglobal.c
> +++ b/src/acpica/source/components/utilities/utglobal.c
> @@ -130,31 +130,6 @@
>    *
>    ******************************************************************************/
>
> -/* Debug output control masks */
> -
> -#ifdef ACPI_DEBUG_OUTPUT
> -UINT32                      AcpiDbgLevel = ACPI_DEBUG_DEFAULT;
> -#else
> -UINT32                      AcpiDbgLevel = ACPI_NORMAL_DEFAULT;
> -#endif
> -
> -UINT32                      AcpiDbgLayer = ACPI_COMPONENT_DEFAULT;
> -
> -/* AcpiGbl_FADT is a local copy of the FADT, converted to a common format. */
> -
> -ACPI_TABLE_FADT             AcpiGbl_FADT;
> -UINT32                      AcpiGbl_TraceFlags;
> -ACPI_NAME                   AcpiGbl_TraceMethodName;
> -BOOLEAN                     AcpiGbl_SystemAwakeAndRunning;
> -UINT32                      AcpiCurrentGpeCount;
> -
> -/*
> - * ACPI 5.0 introduces the concept of a "reduced hardware platform", meaning
> - * that the ACPI hardware is no longer required. A flag in the FADT indicates
> - * a reduced HW machine, and that flag is duplicated here for convenience.
> - */
> -BOOLEAN                     AcpiGbl_ReducedHardware;
> -
>   /* Various state name strings */
>
>   const char                  *AcpiGbl_SleepStateNames[ACPI_S_STATE_COUNT] =
> @@ -382,7 +357,6 @@ AcpiUtInitGlobals (
>       AcpiGbl_AcpiHardwarePresent         = TRUE;
>       AcpiGbl_LastOwnerIdIndex            = 0;
>       AcpiGbl_NextOwnerIdOffset           = 0;
> -    AcpiGbl_TraceMethodName             = 0;
>       AcpiGbl_TraceDbgLevel               = 0;
>       AcpiGbl_TraceDbgLayer               = 0;
>       AcpiGbl_DebuggerConfiguration       = DEBUGGER_THREADING;
> @@ -423,9 +397,7 @@ AcpiUtInitGlobals (
>       AcpiGbl_DisableMemTracking          = FALSE;
>   #endif
>
> -#ifdef ACPI_DEBUGGER
> -    AcpiGbl_DbTerminateThreads          = FALSE;
> -#endif
> +    ACPI_DEBUGGER_EXEC (AcpiGbl_DbTerminateThreads = FALSE);
>
>       return_ACPI_STATUS (AE_OK);
>   }
> diff --git a/src/acpica/source/components/utilities/utobject.c b/src/acpica/source/components/utilities/utobject.c
> index c32782b..0fdef14 100644
> --- a/src/acpica/source/components/utilities/utobject.c
> +++ b/src/acpica/source/components/utilities/utobject.c
> @@ -472,7 +472,7 @@ AcpiUtValidInternalObject (
>       default:
>
>           ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
> -                "%p is not not an ACPI operand obj [%s]\n",
> +                "%p is not an ACPI operand obj [%s]\n",
>                   Object, AcpiUtGetDescriptorName (Object)));
>           break;
>       }
> diff --git a/src/acpica/source/components/utilities/utxferror.c b/src/acpica/source/components/utilities/utxferror.c
> index af396c6..081bfd9 100644
> --- a/src/acpica/source/components/utilities/utxferror.c
> +++ b/src/acpica/source/components/utilities/utxferror.c
> @@ -128,6 +128,8 @@
>    * tools/applications.
>    */
>
> +#ifndef ACPI_NO_ERROR_MESSAGES /* Entire module */
> +
>   /*******************************************************************************
>    *
>    * FUNCTION:    AcpiError
> @@ -362,3 +364,5 @@ AcpiBiosWarning (
>   }
>
>   ACPI_EXPORT_SYMBOL (AcpiBiosWarning)
> +
> +#endif /* ACPI_NO_ERROR_MESSAGES */
> diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h
> index df8d2e7..049a95c 100644
> --- a/src/acpica/source/include/acdisasm.h
> +++ b/src/acpica/source/include/acdisasm.h
> @@ -218,6 +218,7 @@ typedef enum
>       ACPI_DMT_HESTNTFY,
>       ACPI_DMT_HESTNTYP,
>       ACPI_DMT_IVRS,
> +    ACPI_DMT_LPIT,
>       ACPI_DMT_MADT,
>       ACPI_DMT_PCCT,
>       ACPI_DMT_PMTT,
> @@ -355,6 +356,9 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoHest9[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoHestNotify[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoHestBank[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoHpet[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoLpitHdr[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoLpit0[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoLpit1[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs0[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs1[];
> @@ -521,6 +525,10 @@ AcpiDmDumpIvrs (
>       ACPI_TABLE_HEADER       *Table);
>
>   void
> +AcpiDmDumpLpit (
> +    ACPI_TABLE_HEADER       *Table);
> +
> +void
>   AcpiDmDumpMadt (
>       ACPI_TABLE_HEADER       *Table);
>
> diff --git a/src/acpica/source/include/acevents.h b/src/acpica/source/include/acevents.h
> index 731defb..8ca726c 100644
> --- a/src/acpica/source/include/acevents.h
> +++ b/src/acpica/source/include/acevents.h
> @@ -216,9 +216,10 @@ AcpiEvFinishGpe (
>   ACPI_STATUS
>   AcpiEvCreateGpeBlock (
>       ACPI_NAMESPACE_NODE     *GpeDevice,
> -    ACPI_GENERIC_ADDRESS    *GpeBlockAddress,
> +    UINT64                  Address,
> +    UINT8                   SpaceId,
>       UINT32                  RegisterCount,
> -    UINT8                   GpeBlockBaseNumber,
> +    UINT16                  GpeBlockBaseNumber,
>       UINT32                  InterruptNumber,
>       ACPI_GPE_BLOCK_INFO     **ReturnGpeBlock);
>
> diff --git a/src/acpica/source/include/acglobal.h b/src/acpica/source/include/acglobal.h
> index a3ae36a..d16a23d 100644
> --- a/src/acpica/source/include/acglobal.h
> +++ b/src/acpica/source/include/acglobal.h
> @@ -117,146 +117,14 @@
>   #define __ACGLOBAL_H__
>
>
> -/*
> - * Ensure that the globals are actually defined and initialized only once.
> - *
> - * The use of these macros allows a single list of globals (here) in order
> - * to simplify maintenance of the code.
> - */
> -#ifdef DEFINE_ACPI_GLOBALS
> -#define ACPI_GLOBAL(type,name) \
> -    extern type name; \
> -    type name
> -
> -#define ACPI_INIT_GLOBAL(type,name,value) \
> -    type name=value
> -
> -#else
> -#define ACPI_GLOBAL(type,name) \
> -    extern type name
> -
> -#define ACPI_INIT_GLOBAL(type,name,value) \
> -    extern type name
> -#endif
> -
> -
> -#ifdef DEFINE_ACPI_GLOBALS
> -
> -/* Public globals, available from outside ACPICA subsystem */
> -
>   /*****************************************************************************
>    *
> - * Runtime configuration (static defaults that can be overriden at runtime)
> + * Globals related to the ACPI tables
>    *
>    ****************************************************************************/
>
> -/*
> - * Enable "slack" in the AML interpreter?  Default is FALSE, and the
> - * interpreter strictly follows the ACPI specification. Setting to TRUE
> - * allows the interpreter to ignore certain errors and/or bad AML constructs.
> - *
> - * Currently, these features are enabled by this flag:
> - *
> - * 1) Allow "implicit return" of last value in a control method
> - * 2) Allow access beyond the end of an operation region
> - * 3) Allow access to uninitialized locals/args (auto-init to integer 0)
> - * 4) Allow ANY object type to be a source operand for the Store() operator
> - * 5) Allow unresolved references (invalid target name) in package objects
> - * 6) Enable warning messages for behavior that is not ACPI spec compliant
> - */
> -ACPI_INIT_GLOBAL (UINT8,                AcpiGbl_EnableInterpreterSlack, FALSE);
> -
> -/*
> - * Automatically serialize all methods that create named objects? Default
> - * is TRUE, meaning that all NonSerialized methods are scanned once at
> - * table load time to determine those that create named objects. Methods
> - * that create named objects are marked Serialized in order to prevent
> - * possible run-time problems if they are entered by more than one thread.
> - */
> -ACPI_INIT_GLOBAL (UINT8,                AcpiGbl_AutoSerializeMethods, TRUE);
> -
> -/*
> - * Create the predefined _OSI method in the namespace? Default is TRUE
> - * because ACPICA is fully compatible with other ACPI implementations.
> - * Changing this will revert ACPICA (and machine ASL) to pre-OSI behavior.
> - */
> -ACPI_INIT_GLOBAL (UINT8,                AcpiGbl_CreateOsiMethod, TRUE);
> -
> -/*
> - * Optionally use default values for the ACPI register widths. Set this to
> - * TRUE to use the defaults, if an FADT contains incorrect widths/lengths.
> - */
> -ACPI_INIT_GLOBAL (UINT8,                AcpiGbl_UseDefaultRegisterWidths, TRUE);
> -
> -/*
> - * Optionally enable output from the AML Debug Object.
> - */
> -ACPI_INIT_GLOBAL (UINT8,                AcpiGbl_EnableAmlDebugObject, FALSE);
> -
> -/*
> - * Optionally copy the entire DSDT to local memory (instead of simply
> - * mapping it.) There are some BIOSs that corrupt or replace the original
> - * DSDT, creating the need for this option. Default is FALSE, do not copy
> - * the DSDT.
> - */
> -ACPI_INIT_GLOBAL (UINT8,                AcpiGbl_CopyDsdtLocally, FALSE);
> +/* Master list of all ACPI tables that were found in the RSDT/XSDT */
>
> -/*
> - * Optionally ignore an XSDT if present and use the RSDT instead.
> - * Although the ACPI specification requires that an XSDT be used instead
> - * of the RSDT, the XSDT has been found to be corrupt or ill-formed on
> - * some machines. Default behavior is to use the XSDT if present.
> - */
> -ACPI_INIT_GLOBAL (UINT8,                AcpiGbl_DoNotUseXsdt, FALSE);
> -
> -/*
> - * Optionally use 32-bit FADT addresses if and when there is a conflict
> - * (address mismatch) between the 32-bit and 64-bit versions of the
> - * address. Although ACPICA adheres to the ACPI specification which
> - * requires the use of the corresponding 64-bit address if it is non-zero,
> - * some machines have been found to have a corrupted non-zero 64-bit
> - * address. Default is FALSE, do not favor the 32-bit addresses.
> - */
> -ACPI_INIT_GLOBAL (UINT8,                AcpiGbl_Use32BitFadtAddresses, FALSE);
> -
> -/*
> - * Optionally truncate I/O addresses to 16 bits. Provides compatibility
> - * with other ACPI implementations. NOTE: During ACPICA initialization,
> - * this value is set to TRUE if any Windows OSI strings have been
> - * requested by the BIOS.
> - */
> -ACPI_INIT_GLOBAL (UINT8,                AcpiGbl_TruncateIoAddresses, FALSE);
> -
> -/*
> - * Disable runtime checking and repair of values returned by control methods.
> - * Use only if the repair is causing a problem on a particular machine.
> - */
> -ACPI_INIT_GLOBAL (UINT8,                AcpiGbl_DisableAutoRepair, FALSE);
> -
> -/*
> - * Optionally do not install any SSDTs from the RSDT/XSDT during initialization.
> - * This can be useful for debugging ACPI problems on some machines.
> - */
> -ACPI_INIT_GLOBAL (UINT8,                AcpiGbl_DisableSsdtTableInstall, FALSE);
> -
> -/*
> - * We keep track of the latest version of Windows that has been requested by
> - * the BIOS.
> - */
> -ACPI_INIT_GLOBAL (UINT8,                AcpiGbl_OsiData, 0);
> -
> -#endif /* DEFINE_ACPI_GLOBALS */
> -
> -
> -/*****************************************************************************
> - *
> - * ACPI Table globals
> - *
> - ****************************************************************************/
> -
> -/*
> - * Master list of all ACPI tables that were found in the RSDT/XSDT.
> - */
>   ACPI_GLOBAL (ACPI_TABLE_LIST,           AcpiGbl_RootTableList);
>
>   /* DSDT information. Used to check for DSDT corruption */
> @@ -356,7 +224,6 @@ ACPI_GLOBAL (ACPI_EXCEPTION_HANDLER,    AcpiGbl_ExceptionHandler);
>   ACPI_GLOBAL (ACPI_INIT_HANDLER,         AcpiGbl_InitHandler);
>   ACPI_GLOBAL (ACPI_TABLE_HANDLER,        AcpiGbl_TableHandler);
>   ACPI_GLOBAL (void *,                    AcpiGbl_TableHandlerContext);
> -ACPI_GLOBAL (ACPI_WALK_STATE *,         AcpiGbl_BreakpointWalk);
>   ACPI_GLOBAL (ACPI_INTERFACE_HANDLER,    AcpiGbl_InterfaceHandler);
>   ACPI_GLOBAL (ACPI_SCI_HANDLER_INFO *,   AcpiGbl_SciHandlerList);
>
> @@ -373,7 +240,6 @@ ACPI_GLOBAL (BOOLEAN,                   AcpiGbl_RegMethodsExecuted);
>   /* Misc */
>
>   ACPI_GLOBAL (UINT32,                    AcpiGbl_OriginalMode);
> -ACPI_GLOBAL (UINT32,                    AcpiGbl_RsdpOriginalLocation);
>   ACPI_GLOBAL (UINT32,                    AcpiGbl_NsLookupCount);
>   ACPI_GLOBAL (UINT32,                    AcpiGbl_PsFindCount);
>   ACPI_GLOBAL (UINT16,                    AcpiGbl_Pm1EnableRegisterSave);
> @@ -561,11 +427,6 @@ ACPI_GLOBAL (UINT16,                    AcpiGbl_NodeTypeCountMisc);
>   ACPI_GLOBAL (UINT32,                    AcpiGbl_NumNodes);
>   ACPI_GLOBAL (UINT32,                    AcpiGbl_NumObjects);
>
> -ACPI_GLOBAL (UINT32,                    AcpiGbl_SizeOfParseTree);
> -ACPI_GLOBAL (UINT32,                    AcpiGbl_SizeOfMethodTrees);
> -ACPI_GLOBAL (UINT32,                    AcpiGbl_SizeOfNodeEntries);
> -ACPI_GLOBAL (UINT32,                    AcpiGbl_SizeOfAcpiObjects);
> -
>   #endif /* ACPI_DEBUGGER */
>
>
> diff --git a/src/acpica/source/include/aclocal.h b/src/acpica/source/include/aclocal.h
> index 147d0fb..12925a8 100644
> --- a/src/acpica/source/include/aclocal.h
> +++ b/src/acpica/source/include/aclocal.h
> @@ -588,9 +588,9 @@ typedef struct acpi_gpe_register_info
>   {
>       ACPI_GENERIC_ADDRESS            StatusAddress;  /* Address of status reg */
>       ACPI_GENERIC_ADDRESS            EnableAddress;  /* Address of enable reg */
> +    UINT16                          BaseGpeNumber;  /* Base GPE number for this register */
>       UINT8                           EnableForWake;  /* GPEs to keep enabled when sleeping */
>       UINT8                           EnableForRun;   /* GPEs to keep enabled when running */
> -    UINT8                           BaseGpeNumber;  /* Base GPE number for this register */
>
>   } ACPI_GPE_REGISTER_INFO;
>
> @@ -606,10 +606,11 @@ typedef struct acpi_gpe_block_info
>       struct acpi_gpe_xrupt_info      *XruptBlock;    /* Backpointer to interrupt block */
>       ACPI_GPE_REGISTER_INFO          *RegisterInfo;  /* One per GPE register pair */
>       ACPI_GPE_EVENT_INFO             *EventInfo;     /* One for each GPE */
> -    ACPI_GENERIC_ADDRESS            BlockAddress;   /* Base address of the block */
> +    UINT64                          Address;        /* Base address of the block */
>       UINT32                          RegisterCount;  /* Number of register pairs in block */
>       UINT16                          GpeCount;       /* Number of individual GPEs in block */
> -    UINT8                           BlockBaseNumber;/* Base GPE number for this block */
> +    UINT16                          BlockBaseNumber;/* Base GPE number for this block */
> +    UINT8                           SpaceId;
>       BOOLEAN                         Initialized;    /* TRUE if this block is initialized */
>
>   } ACPI_GPE_BLOCK_INFO;
> diff --git a/src/acpica/source/include/acnames.h b/src/acpica/source/include/acnames.h
> index bde34f5..107c6c1 100644
> --- a/src/acpica/source/include/acnames.h
> +++ b/src/acpica/source/include/acnames.h
> @@ -127,6 +127,7 @@
>   #define METHOD_NAME__HID        "_HID"
>   #define METHOD_NAME__INI        "_INI"
>   #define METHOD_NAME__PLD        "_PLD"
> +#define METHOD_NAME__PRP        "_PRP"
>   #define METHOD_NAME__PRS        "_PRS"
>   #define METHOD_NAME__PRT        "_PRT"
>   #define METHOD_NAME__PRW        "_PRW"
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index 61125f1..ecb0442 100644
> --- a/src/acpica/source/include/acpixf.h
> +++ b/src/acpica/source/include/acpixf.h
> @@ -113,64 +113,249 @@
>    *
>    *****************************************************************************/
>
> -
>   #ifndef __ACXFACE_H__
>   #define __ACXFACE_H__
>
>   /* Current ACPICA subsystem version in YYYYMMDD format */
>
> -#define ACPI_CA_VERSION                 0x20140325
> +#define ACPI_CA_VERSION                 0x20140424
>
>   #include "acconfig.h"
>   #include "actypes.h"
>   #include "actbl.h"
>   #include "acbuffer.h"
>
> +
> +/*****************************************************************************
> + *
> + * Macros used for ACPICA globals and configuration
> + *
> + ****************************************************************************/
> +
> +/*
> + * Ensure that global variables are defined and initialized only once.
> + *
> + * The use of these macros allows for a single list of globals (here)
> + * in order to simplify maintenance of the code.
> + */
> +#ifdef DEFINE_ACPI_GLOBALS
> +#define ACPI_GLOBAL(type,name) \
> +    extern type name; \
> +    type name
> +
> +#define ACPI_INIT_GLOBAL(type,name,value) \
> +    type name=value
> +
> +#else
> +#ifndef ACPI_GLOBAL
> +#define ACPI_GLOBAL(type,name) \
> +    extern type name
> +#endif
> +
> +#ifndef ACPI_INIT_GLOBAL
> +#define ACPI_INIT_GLOBAL(type,name,value) \
> +    extern type name
> +#endif
> +#endif
> +
> +/*
> + * These macros configure the various ACPICA interfaces. They are
> + * useful for generating stub inline functions for features that are
> + * configured out of the current kernel or ACPICA application.
> + */
> +#ifndef ACPI_EXTERNAL_RETURN_STATUS
> +#define ACPI_EXTERNAL_RETURN_STATUS(Prototype) \
> +    Prototype;
> +#endif
> +
> +#ifndef ACPI_EXTERNAL_RETURN_OK
> +#define ACPI_EXTERNAL_RETURN_OK(Prototype) \
> +    Prototype;
> +#endif
> +
> +#ifndef ACPI_EXTERNAL_RETURN_VOID
> +#define ACPI_EXTERNAL_RETURN_VOID(Prototype) \
> +    Prototype;
> +#endif
> +
> +#ifndef ACPI_EXTERNAL_RETURN_UINT32
> +#define ACPI_EXTERNAL_RETURN_UINT32(Prototype) \
> +    Prototype;
> +#endif
> +
> +#ifndef ACPI_EXTERNAL_RETURN_PTR
> +#define ACPI_EXTERNAL_RETURN_PTR(Prototype) \
> +    Prototype;
> +#endif
> +
> +
> +/*****************************************************************************
> + *
> + * Public globals and runtime configuration options
> + *
> + ****************************************************************************/
> +
> +/*
> + * Enable "slack mode" of the AML interpreter?  Default is FALSE, and the
> + * interpreter strictly follows the ACPI specification. Setting to TRUE
> + * allows the interpreter to ignore certain errors and/or bad AML constructs.
> + *
> + * Currently, these features are enabled by this flag:
> + *
> + * 1) Allow "implicit return" of last value in a control method
> + * 2) Allow access beyond the end of an operation region
> + * 3) Allow access to uninitialized locals/args (auto-init to integer 0)
> + * 4) Allow ANY object type to be a source operand for the Store() operator
> + * 5) Allow unresolved references (invalid target name) in package objects
> + * 6) Enable warning messages for behavior that is not ACPI spec compliant
> + */
> +ACPI_INIT_GLOBAL (UINT8,            AcpiGbl_EnableInterpreterSlack, FALSE);
> +
> +/*
> + * Automatically serialize all methods that create named objects? Default
> + * is TRUE, meaning that all NonSerialized methods are scanned once at
> + * table load time to determine those that create named objects. Methods
> + * that create named objects are marked Serialized in order to prevent
> + * possible run-time problems if they are entered by more than one thread.
> + */
> +ACPI_INIT_GLOBAL (UINT8,            AcpiGbl_AutoSerializeMethods, TRUE);
> +
> +/*
> + * Create the predefined _OSI method in the namespace? Default is TRUE
> + * because ACPICA is fully compatible with other ACPI implementations.
> + * Changing this will revert ACPICA (and machine ASL) to pre-OSI behavior.
> + */
> +ACPI_INIT_GLOBAL (UINT8,            AcpiGbl_CreateOsiMethod, TRUE);
> +
> +/*
> + * Optionally use default values for the ACPI register widths. Set this to
> + * TRUE to use the defaults, if an FADT contains incorrect widths/lengths.
> + */
> +ACPI_INIT_GLOBAL (UINT8,            AcpiGbl_UseDefaultRegisterWidths, TRUE);
> +
> +/*
> + * Optionally enable output from the AML Debug Object.
> + */
> +ACPI_INIT_GLOBAL (UINT8,            AcpiGbl_EnableAmlDebugObject, FALSE);
> +
> +/*
> + * Optionally copy the entire DSDT to local memory (instead of simply
> + * mapping it.) There are some BIOSs that corrupt or replace the original
> + * DSDT, creating the need for this option. Default is FALSE, do not copy
> + * the DSDT.
> + */
> +ACPI_INIT_GLOBAL (UINT8,            AcpiGbl_CopyDsdtLocally, FALSE);
> +
> +/*
> + * Optionally ignore an XSDT if present and use the RSDT instead.
> + * Although the ACPI specification requires that an XSDT be used instead
> + * of the RSDT, the XSDT has been found to be corrupt or ill-formed on
> + * some machines. Default behavior is to use the XSDT if present.
> + */
> +ACPI_INIT_GLOBAL (UINT8,            AcpiGbl_DoNotUseXsdt, FALSE);
> +
> +/*
> + * Optionally use 32-bit FADT addresses if and when there is a conflict
> + * (address mismatch) between the 32-bit and 64-bit versions of the
> + * address. Although ACPICA adheres to the ACPI specification which
> + * requires the use of the corresponding 64-bit address if it is non-zero,
> + * some machines have been found to have a corrupted non-zero 64-bit
> + * address. Default is FALSE, do not favor the 32-bit addresses.
> + */
> +ACPI_INIT_GLOBAL (UINT8,            AcpiGbl_Use32BitFadtAddresses, FALSE);
> +
> +/*
> + * Optionally truncate I/O addresses to 16 bits. Provides compatibility
> + * with other ACPI implementations. NOTE: During ACPICA initialization,
> + * this value is set to TRUE if any Windows OSI strings have been
> + * requested by the BIOS.
> + */
> +ACPI_INIT_GLOBAL (UINT8,            AcpiGbl_TruncateIoAddresses, FALSE);
> +
> +/*
> + * Disable runtime checking and repair of values returned by control methods.
> + * Use only if the repair is causing a problem on a particular machine.
> + */
> +ACPI_INIT_GLOBAL (UINT8,            AcpiGbl_DisableAutoRepair, FALSE);
> +
>   /*
> - * Globals that are publically available
> + * Optionally do not install any SSDTs from the RSDT/XSDT during initialization.
> + * This can be useful for debugging ACPI problems on some machines.
>    */
> -extern UINT32               AcpiCurrentGpeCount;
> -extern ACPI_TABLE_FADT      AcpiGbl_FADT;
> -extern BOOLEAN              AcpiGbl_SystemAwakeAndRunning;
> -extern BOOLEAN              AcpiGbl_ReducedHardware;        /* ACPI 5.0 */
> -extern UINT8                AcpiGbl_OsiData;
> +ACPI_INIT_GLOBAL (UINT8,            AcpiGbl_DisableSsdtTableInstall, FALSE);
>
> -/* Runtime configuration of debug print levels */
> +/*
> + * We keep track of the latest version of Windows that has been requested by
> + * the BIOS. ACPI 5.0.
> + */
> +ACPI_INIT_GLOBAL (UINT8,            AcpiGbl_OsiData, 0);
>
> -extern UINT32               AcpiDbgLevel;
> -extern UINT32               AcpiDbgLayer;
> +/*
> + * ACPI 5.0 introduces the concept of a "reduced hardware platform", meaning
> + * that the ACPI hardware is no longer required. A flag in the FADT indicates
> + * a reduced HW machine, and that flag is duplicated here for convenience.
> + */
> +ACPI_INIT_GLOBAL (BOOLEAN,          AcpiGbl_ReducedHardware, FALSE);
>
> -/* ACPICA runtime options */
> +/*
> + * This mechanism is used to trace a specified AML method. The method is
> + * traced each time it is executed.
> + */
> +ACPI_INIT_GLOBAL (UINT32,           AcpiGbl_TraceFlags, 0);
> +ACPI_INIT_GLOBAL (ACPI_NAME,        AcpiGbl_TraceMethodName, 0);
>
> -extern UINT8                AcpiGbl_AutoSerializeMethods;
> -extern UINT8                AcpiGbl_CopyDsdtLocally;
> -extern UINT8                AcpiGbl_CreateOsiMethod;
> -extern UINT8                AcpiGbl_DisableAutoRepair;
> -extern UINT8                AcpiGbl_DisableSsdtTableInstall;
> -extern UINT8                AcpiGbl_DoNotUseXsdt;
> -extern UINT8                AcpiGbl_EnableAmlDebugObject;
> -extern UINT8                AcpiGbl_EnableInterpreterSlack;
> -extern UINT32               AcpiGbl_TraceFlags;
> -extern ACPI_NAME            AcpiGbl_TraceMethodName;
> -extern UINT8                AcpiGbl_TruncateIoAddresses;
> -extern UINT8                AcpiGbl_Use32BitFadtAddresses;
> -extern UINT8                AcpiGbl_UseDefaultRegisterWidths;
> +/*
> + * Runtime configuration of debug output control masks. We want the debug
> + * switches statically initialized so they are already set when the debugger
> + * is entered.
> + */
> +#ifdef ACPI_DEBUG_OUTPUT
> +ACPI_INIT_GLOBAL (UINT32,           AcpiDbgLevel, ACPI_DEBUG_DEFAULT);
> +#else
> +ACPI_INIT_GLOBAL (UINT32,           AcpiDbgLevel, ACPI_NORMAL_DEFAULT);
> +#endif
> +ACPI_INIT_GLOBAL (UINT32,           AcpiDbgLayer, ACPI_COMPONENT_DEFAULT);
> +
> +/*
> + * Other miscellaneous globals
> + */
> +ACPI_GLOBAL (ACPI_TABLE_FADT,       AcpiGbl_FADT);
> +ACPI_GLOBAL (UINT32,                AcpiCurrentGpeCount);
> +ACPI_GLOBAL (BOOLEAN,               AcpiGbl_SystemAwakeAndRunning);
>
>
> +/*****************************************************************************
> + *
> + * ACPICA public interface configuration.
> + *
> + * Interfaces that are configured out of the ACPICA build are replaced
> + * by inlined stubs by default.
> + *
> + ****************************************************************************/
> +
>   /*
> - * Hardware-reduced prototypes. All interfaces that use these macros will
> - * be configured out of the ACPICA build if the ACPI_REDUCED_HARDWARE flag
> + * Hardware-reduced prototypes (default: Not hardware reduced).
> + *
> + * All ACPICA hardware-related interfaces that use these macros will be
> + * configured out of the ACPICA build if the ACPI_REDUCED_HARDWARE flag
>    * is set to TRUE.
> + *
> + * Note: This static build option for reduced hardware is intended to
> + * reduce ACPICA code size if desired or necessary. However, even if this
> + * option is not specified, the runtime behavior of ACPICA is dependent
> + * on the actual FADT reduced hardware flag (HW_REDUCED_ACPI). If set,
> + * the flag will enable similar behavior -- ACPICA will not attempt
> + * to access any ACPI-relate hardware (SCI, GPEs, Fixed Events, etc.)
>    */
>   #if (!ACPI_REDUCED_HARDWARE)
>   #define ACPI_HW_DEPENDENT_RETURN_STATUS(Prototype) \
> -    Prototype;
> +    ACPI_EXTERNAL_RETURN_STATUS(Prototype)
>
>   #define ACPI_HW_DEPENDENT_RETURN_OK(Prototype) \
> -    Prototype;
> +    ACPI_EXTERNAL_RETURN_OK(Prototype)
>
>   #define ACPI_HW_DEPENDENT_RETURN_VOID(Prototype) \
> -    Prototype;
> +    ACPI_EXTERNAL_RETURN_VOID(Prototype)
>
>   #else
>   #define ACPI_HW_DEPENDENT_RETURN_STATUS(Prototype) \
> @@ -186,29 +371,76 @@ extern UINT8                AcpiGbl_UseDefaultRegisterWidths;
>
>
>   /*
> + * Error message prototypes (default: error messages enabled).
> + *
> + * All interfaces related to error and warning messages
> + * will be configured out of the ACPICA build if the
> + * ACPI_NO_ERROR_MESSAGE flag is defined.
> + */
> +#ifndef ACPI_NO_ERROR_MESSAGES
> +#define ACPI_MSG_DEPENDENT_RETURN_VOID(Prototype) \
> +    Prototype;
> +
> +#else
> +#define ACPI_MSG_DEPENDENT_RETURN_VOID(Prototype) \
> +    static ACPI_INLINE Prototype {return;}
> +
> +#endif /* ACPI_NO_ERROR_MESSAGES */
> +
> +
> +/*
> + * Debugging output prototypes (default: no debug output).
> + *
> + * All interfaces related to debug output messages
> + * will be configured out of the ACPICA build unless the
> + * ACPI_DEBUG_OUTPUT flag is defined.
> + */
> +#ifdef ACPI_DEBUG_OUTPUT
> +#define ACPI_DBG_DEPENDENT_RETURN_VOID(Prototype) \
> +    Prototype;
> +
> +#else
> +#define ACPI_DBG_DEPENDENT_RETURN_VOID(Prototype) \
> +    static ACPI_INLINE Prototype {return;}
> +
> +#endif /* ACPI_DEBUG_OUTPUT */
> +
> +
> +/*****************************************************************************
> + *
> + * ACPICA public interface prototypes
> + *
> + ****************************************************************************/
> +
> +/*
>    * Initialization
>    */
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiInitializeTables (
>       ACPI_TABLE_DESC         *InitialStorage,
>       UINT32                  InitialTableCount,
> -    BOOLEAN                 AllowResize);
> +    BOOLEAN                 AllowResize))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiInitializeSubsystem (
> -    void);
> +    void))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiEnableSubsystem (
> -    UINT32                  Flags);
> +    UINT32                  Flags))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiInitializeObjects (
> -    UINT32                  Flags);
> +    UINT32                  Flags))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiTerminate (
> -    void);
> +    void))
>
>
>   /*
> @@ -224,114 +456,136 @@ ACPI_STATUS
>   AcpiDisable (
>       void))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiSubsystemStatus (
> -    void);
> +    void))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiGetSystemInfo (
> -    ACPI_BUFFER             *RetBuffer);
> +    ACPI_BUFFER             *RetBuffer))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiGetStatistics (
> -    ACPI_STATISTICS         *Stats);
> +    ACPI_STATISTICS         *Stats))
>
> +ACPI_EXTERNAL_RETURN_PTR (
>   const char *
>   AcpiFormatException (
> -    ACPI_STATUS             Exception);
> +    ACPI_STATUS             Exception))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiPurgeCachedObjects (
> -    void);
> +    void))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiInstallInterface (
> -    ACPI_STRING             InterfaceName);
> +    ACPI_STRING             InterfaceName))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiRemoveInterface (
> -    ACPI_STRING             InterfaceName);
> +    ACPI_STRING             InterfaceName))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiUpdateInterfaces (
> -    UINT8                   Action);
> +    UINT8                   Action))
>
> +ACPI_EXTERNAL_RETURN_UINT32 (
>   UINT32
>   AcpiCheckAddressRange (
>       ACPI_ADR_SPACE_TYPE     SpaceId,
>       ACPI_PHYSICAL_ADDRESS   Address,
>       ACPI_SIZE               Length,
> -    BOOLEAN                 Warn);
> +    BOOLEAN                 Warn))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiDecodePldBuffer (
>       UINT8                   *InBuffer,
>       ACPI_SIZE               Length,
> -    ACPI_PLD_INFO           **ReturnBuffer);
> +    ACPI_PLD_INFO           **ReturnBuffer))
>
>
>   /*
>    * ACPI table load/unload interfaces
>    */
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiInstallTable (
>       ACPI_PHYSICAL_ADDRESS   Address,
> -    BOOLEAN                 Physical);
> +    BOOLEAN                 Physical))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiLoadTable (
> -    ACPI_TABLE_HEADER       *Table);
> +    ACPI_TABLE_HEADER       *Table))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiUnloadParentTable (
> -    ACPI_HANDLE             Object);
> +    ACPI_HANDLE             Object))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiLoadTables (
> -    void);
> +    void))
>
>
>   /*
>    * ACPI table manipulation interfaces
>    */
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiReallocateRootTable (
> -    void);
> +    void))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiFindRootPointer (
> -    ACPI_SIZE               *RsdpAddress);
> +    ACPI_SIZE               *RsdpAddress))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiGetTableHeader (
>       ACPI_STRING             Signature,
>       UINT32                  Instance,
> -    ACPI_TABLE_HEADER       *OutTableHeader);
> +    ACPI_TABLE_HEADER       *OutTableHeader))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiGetTable (
>       ACPI_STRING             Signature,
>       UINT32                  Instance,
> -    ACPI_TABLE_HEADER       **OutTable);
> +    ACPI_TABLE_HEADER       **OutTable))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiGetTableByIndex (
>       UINT32                  TableIndex,
> -    ACPI_TABLE_HEADER       **OutTable);
> +    ACPI_TABLE_HEADER       **OutTable))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiInstallTableHandler (
>       ACPI_TABLE_HANDLER      Handler,
> -    void                    *Context);
> +    void                    *Context))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiRemoveTableHandler (
> -    ACPI_TABLE_HANDLER      Handler);
> +    ACPI_TABLE_HANDLER      Handler))
>
>
>   /*
>    * Namespace and name interfaces
>    */
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiWalkNamespace (
>       ACPI_OBJECT_TYPE        Type,
> @@ -340,104 +594,119 @@ AcpiWalkNamespace (
>       ACPI_WALK_CALLBACK      DescendingCallback,
>       ACPI_WALK_CALLBACK      AscendingCallback,
>       void                    *Context,
> -    void                    **ReturnValue);
> +    void                    **ReturnValue))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiGetDevices (
>       char                    *HID,
>       ACPI_WALK_CALLBACK      UserFunction,
>       void                    *Context,
> -    void                    **ReturnValue);
> +    void                    **ReturnValue))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiGetName (
>       ACPI_HANDLE             Object,
>       UINT32                  NameType,
> -    ACPI_BUFFER             *RetPathPtr);
> +    ACPI_BUFFER             *RetPathPtr))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiGetHandle (
>       ACPI_HANDLE             Parent,
>       ACPI_STRING             Pathname,
> -    ACPI_HANDLE             *RetHandle);
> +    ACPI_HANDLE             *RetHandle))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiAttachData (
>       ACPI_HANDLE             Object,
>       ACPI_OBJECT_HANDLER     Handler,
> -    void                    *Data);
> +    void                    *Data))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiDetachData (
>       ACPI_HANDLE             Object,
> -    ACPI_OBJECT_HANDLER     Handler);
> +    ACPI_OBJECT_HANDLER     Handler))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiGetData (
>       ACPI_HANDLE             Object,
>       ACPI_OBJECT_HANDLER     Handler,
> -    void                    **Data);
> +    void                    **Data))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiDebugTrace (
>       char                    *Name,
>       UINT32                  DebugLevel,
>       UINT32                  DebugLayer,
> -    UINT32                  Flags);
> +    UINT32                  Flags))
>
>
>   /*
>    * Object manipulation and enumeration
>    */
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiEvaluateObject (
>       ACPI_HANDLE             Object,
>       ACPI_STRING             Pathname,
>       ACPI_OBJECT_LIST        *ParameterObjects,
> -    ACPI_BUFFER             *ReturnObjectBuffer);
> +    ACPI_BUFFER             *ReturnObjectBuffer))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiEvaluateObjectTyped (
>       ACPI_HANDLE             Object,
>       ACPI_STRING             Pathname,
>       ACPI_OBJECT_LIST        *ExternalParams,
>       ACPI_BUFFER             *ReturnBuffer,
> -    ACPI_OBJECT_TYPE        ReturnType);
> +    ACPI_OBJECT_TYPE        ReturnType))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiGetObjectInfo (
>       ACPI_HANDLE             Object,
> -    ACPI_DEVICE_INFO        **ReturnBuffer);
> +    ACPI_DEVICE_INFO        **ReturnBuffer))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiInstallMethod (
> -    UINT8                   *Buffer);
> +    UINT8                   *Buffer))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiGetNextObject (
>       ACPI_OBJECT_TYPE        Type,
>       ACPI_HANDLE             Parent,
>       ACPI_HANDLE             Child,
> -    ACPI_HANDLE             *OutHandle);
> +    ACPI_HANDLE             *OutHandle))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiGetType (
>       ACPI_HANDLE             Object,
> -    ACPI_OBJECT_TYPE        *OutType);
> +    ACPI_OBJECT_TYPE        *OutType))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiGetParent (
>       ACPI_HANDLE             Object,
> -    ACPI_HANDLE             *OutHandle);
> +    ACPI_HANDLE             *OutHandle))
>
>
>   /*
>    * Handler interfaces
>    */
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiInstallInitializationHandler (
>       ACPI_INIT_HANDLER       Handler,
> -    UINT32                  Function);
> +    UINT32                  Function))
>
>   ACPI_HW_DEPENDENT_RETURN_STATUS (
>   ACPI_STATUS
> @@ -485,40 +754,46 @@ AcpiRemoveGpeHandler (
>       UINT32                  GpeNumber,
>       ACPI_GPE_HANDLER        Address))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiInstallNotifyHandler (
>       ACPI_HANDLE             Device,
>       UINT32                  HandlerType,
>       ACPI_NOTIFY_HANDLER     Handler,
> -    void                    *Context);
> +    void                    *Context))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiRemoveNotifyHandler (
>       ACPI_HANDLE             Device,
>       UINT32                  HandlerType,
> -    ACPI_NOTIFY_HANDLER     Handler);
> +    ACPI_NOTIFY_HANDLER     Handler))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiInstallAddressSpaceHandler (
>       ACPI_HANDLE             Device,
>       ACPI_ADR_SPACE_TYPE     SpaceId,
>       ACPI_ADR_SPACE_HANDLER  Handler,
>       ACPI_ADR_SPACE_SETUP    Setup,
> -    void                    *Context);
> +    void                    *Context))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiRemoveAddressSpaceHandler (
>       ACPI_HANDLE             Device,
>       ACPI_ADR_SPACE_TYPE     SpaceId,
> -    ACPI_ADR_SPACE_HANDLER  Handler);
> +    ACPI_ADR_SPACE_HANDLER  Handler))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiInstallExceptionHandler (
> -    ACPI_EXCEPTION_HANDLER  Handler);
> +    ACPI_EXCEPTION_HANDLER  Handler))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiInstallInterfaceHandler (
> -    ACPI_INTERFACE_HANDLER  Handler);
> +    ACPI_INTERFACE_HANDLER  Handler))
>
>
>   /*
> @@ -539,16 +814,18 @@ AcpiReleaseGlobalLock (
>   /*
>    * Interfaces to AML mutex objects
>    */
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiAcquireMutex (
>       ACPI_HANDLE             Handle,
>       ACPI_STRING             Pathname,
> -    UINT16                  Timeout);
> +    UINT16                  Timeout))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiReleaseMutex (
>       ACPI_HANDLE             Handle,
> -    ACPI_STRING             Pathname);
> +    ACPI_STRING             Pathname))
>
>
>   /*
> @@ -676,79 +953,92 @@ ACPI_STATUS (*ACPI_WALK_RESOURCE_CALLBACK) (
>       ACPI_RESOURCE           *Resource,
>       void                    *Context);
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiGetVendorResource (
>       ACPI_HANDLE             Device,
>       char                    *Name,
>       ACPI_VENDOR_UUID        *Uuid,
> -    ACPI_BUFFER             *RetBuffer);
> +    ACPI_BUFFER             *RetBuffer))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiGetCurrentResources (
>       ACPI_HANDLE             Device,
> -    ACPI_BUFFER             *RetBuffer);
> +    ACPI_BUFFER             *RetBuffer))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiGetPossibleResources (
>       ACPI_HANDLE             Device,
> -    ACPI_BUFFER             *RetBuffer);
> +    ACPI_BUFFER             *RetBuffer))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiGetEventResources (
>       ACPI_HANDLE             DeviceHandle,
> -    ACPI_BUFFER             *RetBuffer);
> +    ACPI_BUFFER             *RetBuffer))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiWalkResourceBuffer (
>       ACPI_BUFFER                 *Buffer,
>       ACPI_WALK_RESOURCE_CALLBACK UserFunction,
> -    void                        *Context);
> +    void                        *Context))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiWalkResources (
>       ACPI_HANDLE                 Device,
>       char                        *Name,
>       ACPI_WALK_RESOURCE_CALLBACK UserFunction,
> -    void                        *Context);
> +    void                        *Context))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiSetCurrentResources (
>       ACPI_HANDLE             Device,
> -    ACPI_BUFFER             *InBuffer);
> +    ACPI_BUFFER             *InBuffer))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiGetIrqRoutingTable (
>       ACPI_HANDLE             Device,
> -    ACPI_BUFFER             *RetBuffer);
> +    ACPI_BUFFER             *RetBuffer))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiResourceToAddress64 (
>       ACPI_RESOURCE           *Resource,
> -    ACPI_RESOURCE_ADDRESS64 *Out);
> +    ACPI_RESOURCE_ADDRESS64 *Out))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiBufferToResource (
>       UINT8                   *AmlBuffer,
>       UINT16                  AmlBufferLength,
> -    ACPI_RESOURCE           **ResourcePtr);
> +    ACPI_RESOURCE           **ResourcePtr))
>
>
>   /*
>    * Hardware (ACPI device) interfaces
>    */
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiReset (
> -    void);
> +    void))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiRead (
>       UINT64                  *Value,
> -    ACPI_GENERIC_ADDRESS    *Reg);
> +    ACPI_GENERIC_ADDRESS    *Reg))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiWrite (
>       UINT64                  Value,
> -    ACPI_GENERIC_ADDRESS    *Reg);
> +    ACPI_GENERIC_ADDRESS    *Reg))
>
>   ACPI_HW_DEPENDENT_RETURN_STATUS (
>   ACPI_STATUS
> @@ -766,32 +1056,37 @@ AcpiWriteBitRegister (
>   /*
>    * Sleep/Wake interfaces
>    */
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiGetSleepTypeData (
>       UINT8                   SleepState,
>       UINT8                   *Slp_TypA,
> -    UINT8                   *Slp_TypB);
> +    UINT8                   *Slp_TypB))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiEnterSleepStatePrep (
> -    UINT8                   SleepState);
> +    UINT8                   SleepState))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiEnterSleepState (
> -    UINT8                   SleepState);
> +    UINT8                   SleepState))
>
>   ACPI_HW_DEPENDENT_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiEnterSleepStateS4bios (
>       void))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiLeaveSleepStatePrep (
> -    UINT8                   SleepState);
> +    UINT8                   SleepState))
>
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiLeaveSleepState (
> -    UINT8                   SleepState);
> +    UINT8                   SleepState))
>
>   ACPI_HW_DEPENDENT_RETURN_STATUS (
>   ACPI_STATUS
> @@ -830,14 +1125,16 @@ AcpiGetTimerDuration (
>   /*
>    * Error/Warning output
>    */
> +ACPI_MSG_DEPENDENT_RETURN_VOID (
>   ACPI_PRINTF_LIKE(3)
>   void ACPI_INTERNAL_VAR_XFACE
>   AcpiError (
>       const char              *ModuleName,
>       UINT32                  LineNumber,
>       const char              *Format,
> -    ...);
> +    ...))
>
> +ACPI_MSG_DEPENDENT_RETURN_VOID (
>   ACPI_PRINTF_LIKE(4)
>   void  ACPI_INTERNAL_VAR_XFACE
>   AcpiException (
> @@ -845,46 +1142,49 @@ AcpiException (
>       UINT32                  LineNumber,
>       ACPI_STATUS             Status,
>       const char              *Format,
> -    ...);
> +    ...))
>
> +ACPI_MSG_DEPENDENT_RETURN_VOID (
>   ACPI_PRINTF_LIKE(3)
>   void ACPI_INTERNAL_VAR_XFACE
>   AcpiWarning (
>       const char              *ModuleName,
>       UINT32                  LineNumber,
>       const char              *Format,
> -    ...);
> +    ...))
>
> +ACPI_MSG_DEPENDENT_RETURN_VOID (
>   ACPI_PRINTF_LIKE(3)
>   void ACPI_INTERNAL_VAR_XFACE
>   AcpiInfo (
>       const char              *ModuleName,
>       UINT32                  LineNumber,
>       const char              *Format,
> -    ...);
> +    ...))
>
> +ACPI_MSG_DEPENDENT_RETURN_VOID (
>   ACPI_PRINTF_LIKE(3)
>   void ACPI_INTERNAL_VAR_XFACE
>   AcpiBiosError (
>       const char              *ModuleName,
>       UINT32                  LineNumber,
>       const char              *Format,
> -    ...);
> +    ...))
>
> +ACPI_MSG_DEPENDENT_RETURN_VOID (
>   ACPI_PRINTF_LIKE(3)
>   void ACPI_INTERNAL_VAR_XFACE
>   AcpiBiosWarning (
>       const char              *ModuleName,
>       UINT32                  LineNumber,
>       const char              *Format,
> -    ...);
> +    ...))
>
>
>   /*
>    * Debug output
>    */
> -#ifdef ACPI_DEBUG_OUTPUT
> -
> +ACPI_DBG_DEPENDENT_RETURN_VOID (
>   ACPI_PRINTF_LIKE(6)
>   void ACPI_INTERNAL_VAR_XFACE
>   AcpiDebugPrint (
> @@ -894,8 +1194,9 @@ AcpiDebugPrint (
>       const char              *ModuleName,
>       UINT32                  ComponentId,
>       const char              *Format,
> -    ...);
> +    ...))
>
> +ACPI_DBG_DEPENDENT_RETURN_VOID (
>   ACPI_PRINTF_LIKE(6)
>   void ACPI_INTERNAL_VAR_XFACE
>   AcpiDebugPrintRaw (
> @@ -905,7 +1206,6 @@ AcpiDebugPrintRaw (
>       const char              *ModuleName,
>       UINT32                  ComponentId,
>       const char              *Format,
> -    ...);
> -#endif
> +    ...))
>
>   #endif /* __ACXFACE_H__ */
> diff --git a/src/acpica/source/include/acpredef.h b/src/acpica/source/include/acpredef.h
> index 7e804f3..81ade10 100644
> --- a/src/acpica/source/include/acpredef.h
> +++ b/src/acpica/source/include/acpredef.h
> @@ -652,6 +652,10 @@ const ACPI_PREDEFINED_INFO          AcpiGbl_PredefinedMethods[] =
>       {{"_LID",   METHOD_0ARGS,
>                   METHOD_RETURNS (ACPI_RTYPE_INTEGER)}},
>
> +    {{"_LPD",   METHOD_0ARGS,
> +                METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (1 Int(rev), n Pkg (2 Int) */
> +                    PACKAGE_INFO (ACPI_PTYPE2_REV_FIXED, ACPI_RTYPE_INTEGER, 2,0,0,0),
> +
>       {{"_MAT",   METHOD_0ARGS,
>                   METHOD_RETURNS (ACPI_RTYPE_BUFFER)}},
>
> diff --git a/src/acpica/source/include/actbl1.h b/src/acpica/source/include/actbl1.h
> index 4710672..e0905ee 100644
> --- a/src/acpica/source/include/actbl1.h
> +++ b/src/acpica/source/include/actbl1.h
> @@ -852,7 +852,7 @@ enum AcpiMadtType
>
>
>   /*
> - * MADT Sub-tables, correspond to Type in ACPI_SUBTABLE_HEADER
> + * MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER
>    */
>
>   /* 0: Processor Local APIC */
> @@ -1150,7 +1150,7 @@ enum AcpiSratType
>   };
>
>   /*
> - * SRAT Sub-tables, correspond to Type in ACPI_SUBTABLE_HEADER
> + * SRAT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER
>    */
>
>   /* 0: Processor Local APIC/SAPIC Affinity */
> diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h
> index 2ae8ce3..7a64788 100644
> --- a/src/acpica/source/include/actbl2.h
> +++ b/src/acpica/source/include/actbl2.h
> @@ -144,6 +144,7 @@
>   #define ACPI_SIG_HPET           "HPET"      /* High Precision Event Timer table */
>   #define ACPI_SIG_IBFT           "IBFT"      /* iSCSI Boot Firmware Table */
>   #define ACPI_SIG_IVRS           "IVRS"      /* I/O Virtualization Reporting Structure */
> +#define ACPI_SIG_LPIT           "LPIT"      /* Low Power Idle Table */
>   #define ACPI_SIG_MCFG           "MCFG"      /* PCI Memory Mapped Configuration table */
>   #define ACPI_SIG_MCHI           "MCHI"      /* Management Controller Host Interface table */
>   #define ACPI_SIG_MTMR           "MTMR"      /* MID Timer table */
> @@ -593,7 +594,7 @@ typedef struct acpi_dmar_pci_path
>
>
>   /*
> - * DMAR Sub-tables, correspond to Type in ACPI_DMAR_HEADER
> + * DMAR Subtables, correspond to Type in ACPI_DMAR_HEADER
>    */
>
>   /* 0: Hardware Unit Definition */
> @@ -1006,7 +1007,83 @@ typedef struct acpi_ivrs_memory
>
>   /*******************************************************************************
>    *
> - * MCFG - PCI Memory Mapped Configuration table and sub-table
> + * LPIT - Low Power Idle Table
> + *
> + * Conforms to "ACPI Low Power Idle Table (LPIT) and _LPD Proposal (DRAFT)"
> + *
> + ******************************************************************************/
> +
> +typedef struct acpi_table_lpit
> +{
> +    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
> +
> +} ACPI_TABLE_LPIT;
> +
> +
> +/* LPIT subtable header */
> +
> +typedef struct acpi_lpit_header
> +{
> +    UINT32                  Type;               /* Subtable type */
> +    UINT32                  Length;             /* Subtable length */
> +    UINT16                  UniqueId;
> +    UINT16                  Reserved;
> +    UINT32                  Flags;
> +
> +} ACPI_LPIT_HEADER;
> +
> +/* Values for subtable Type above */
> +
> +enum AcpiLpitType
> +{
> +    ACPI_LPIT_TYPE_NATIVE_CSTATE    = 0x00,
> +    ACPI_LPIT_TYPE_SIMPLE_IO        = 0x01
> +};
> +
> +/* Masks for Flags field above  */
> +
> +#define ACPI_LPIT_STATE_DISABLED    (1)
> +#define ACPI_LPIT_NO_COUNTER        (1<<1)
> +
> +/*
> + * LPIT subtables, correspond to Type in ACPI_LPIT_HEADER
> + */
> +
> +/* 0x00: Native C-state instruction based LPI structure */
> +
> +typedef struct acpi_lpit_native
> +{
> +    ACPI_LPIT_HEADER        Header;
> +    ACPI_GENERIC_ADDRESS    EntryTrigger;
> +    UINT32                  Residency;
> +    UINT32                  Latency;
> +    ACPI_GENERIC_ADDRESS    ResidencyCounter;
> +    UINT64                  CounterFrequency;
> +
> +} ACPI_LPIT_NATIVE;
> +
> +
> +/* 0x01: Simple I/O based LPI structure */
> +
> +typedef struct acpi_lpit_io
> +{
> +    ACPI_LPIT_HEADER        Header;
> +    ACPI_GENERIC_ADDRESS    EntryTrigger;
> +    UINT32                  TriggerAction;
> +    UINT64                  TriggerValue;
> +    UINT64                  TriggerMask;
> +    ACPI_GENERIC_ADDRESS    MinimumIdleState;
> +    UINT32                  Residency;
> +    UINT32                  Latency;
> +    ACPI_GENERIC_ADDRESS    ResidencyCounter;
> +    UINT64                  CounterFrequency;
> +
> +} ACPI_LPIT_IO;
> +
> +
> +/*******************************************************************************
> + *
> + * MCFG - PCI Memory Mapped Configuration table and subtable
>    *        Version 1
>    *
>    * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005
> @@ -1130,7 +1207,7 @@ enum AcpiSlicType
>
>
>   /*
> - * SLIC Sub-tables, correspond to Type in ACPI_SLIC_HEADER
> + * SLIC Subtables, correspond to Type in ACPI_SLIC_HEADER
>    */
>
>   /* 0: Public Key Structure */
> diff --git a/src/acpica/source/include/actypes.h b/src/acpica/source/include/actypes.h
> index a02cd10..60613de 100644
> --- a/src/acpica/source/include/actypes.h
> +++ b/src/acpica/source/include/actypes.h
> @@ -127,8 +127,6 @@
>   #error ACPI_MACHINE_WIDTH not defined
>   #endif
>
> -/*! [Begin] no source code translation */
> -
>   /*
>    * Data type ranges
>    * Note: These macros are designed to be compiler independent as well as
> @@ -196,13 +194,15 @@
>    *
>    ******************************************************************************/
>
> +#ifndef ACPI_USE_SYSTEM_INTTYPES
> +
>   typedef unsigned char                   BOOLEAN;
>   typedef unsigned char                   UINT8;
>   typedef unsigned short                  UINT16;
>   typedef COMPILER_DEPENDENT_UINT64       UINT64;
>   typedef COMPILER_DEPENDENT_INT64        INT64;
>
> -/*! [End] no source code translation !*/
> +#endif /* ACPI_USE_SYSTEM_INTTYPES */
>
>   /*
>    * Value returned by AcpiOsGetThreadId. There is no standard "thread_id"
> @@ -223,12 +223,12 @@ typedef COMPILER_DEPENDENT_INT64        INT64;
>
>   #if ACPI_MACHINE_WIDTH == 64
>
> -/*! [Begin] no source code translation (keep the typedefs as-is) */
> +#ifndef ACPI_USE_SYSTEM_INTTYPES
>
>   typedef unsigned int                    UINT32;
>   typedef int                             INT32;
>
> -/*! [End] no source code translation !*/
> +#endif /* ACPI_USE_SYSTEM_INTTYPES */
>
>
>   typedef INT64                           ACPI_NATIVE_INT;
> @@ -262,12 +262,12 @@ typedef UINT64                          ACPI_PHYSICAL_ADDRESS;
>
>   #elif ACPI_MACHINE_WIDTH == 32
>
> -/*! [Begin] no source code translation (keep the typedefs as-is) */
> +#ifndef ACPI_USE_SYSTEM_INTTYPES
>
>   typedef unsigned int                    UINT32;
>   typedef int                             INT32;
>
> -/*! [End] no source code translation !*/
> +#endif /* ACPI_USE_SYSTEM_INTTYPES */
>
>
>   typedef INT32                           ACPI_NATIVE_INT;
> @@ -406,6 +406,15 @@ typedef UINT32                          ACPI_PHYSICAL_ADDRESS;
>    *
>    ******************************************************************************/
>
> +#ifdef ACPI_NO_MEM_ALLOCATIONS
> +
> +#define ACPI_ALLOCATE(a)                NULL
> +#define ACPI_ALLOCATE_ZEROED(a)         NULL
> +#define ACPI_FREE(a)
> +#define ACPI_MEM_TRACKING(a)
> +
> +#else /* ACPI_NO_MEM_ALLOCATIONS */
> +
>   #ifdef ACPI_DBG_TRACK_ALLOCATIONS
>   /*
>    * Memory allocation tracking (used by AcpiExec to detect memory leaks)
> @@ -427,6 +436,8 @@ typedef UINT32                          ACPI_PHYSICAL_ADDRESS;
>
>   #endif /* ACPI_DBG_TRACK_ALLOCATIONS */
>
> +#endif /* ACPI_NO_MEM_ALLOCATIONS */
> +
>
>   /******************************************************************************
>    *
> @@ -1026,9 +1037,19 @@ typedef struct acpi_object_list
>    * Miscellaneous common Data Structures used by the interfaces
>    */
>   #define ACPI_NO_BUFFER              0
> +
> +#ifdef ACPI_NO_MEM_ALLOCATIONS
> +
> +#define ACPI_ALLOCATE_BUFFER        (ACPI_SIZE) (0)
> +#define ACPI_ALLOCATE_LOCAL_BUFFER  (ACPI_SIZE) (0)
> +
> +#else /* ACPI_NO_MEM_ALLOCATIONS */
> +
>   #define ACPI_ALLOCATE_BUFFER        (ACPI_SIZE) (-1)    /* Let ACPICA allocate buffer */
>   #define ACPI_ALLOCATE_LOCAL_BUFFER  (ACPI_SIZE) (-2)    /* For internal use only (enables tracking) */
>
> +#endif /* ACPI_NO_MEM_ALLOCATIONS */
> +
>   typedef struct acpi_buffer
>   {
>       ACPI_SIZE                       Length;         /* Length in bytes of the buffer */
> diff --git a/src/acpica/source/include/platform/aclinux.h b/src/acpica/source/include/platform/aclinux.h
> index c7ca287..229aa84 100644
> --- a/src/acpica/source/include/platform/aclinux.h
> +++ b/src/acpica/source/include/platform/aclinux.h
> @@ -125,6 +125,8 @@
>
>   #ifdef __KERNEL__
>
> +#define ACPI_USE_SYSTEM_INTTYPES
> +
>   #include <linux/string.h>
>   #include <linux/kernel.h>
>   #include <linux/ctype.h>
> @@ -138,6 +140,37 @@
>   #endif
>   #include <asm/acpi.h>
>
> +#ifndef CONFIG_ACPI
> +
> +/* External globals for __KERNEL__, stubs is needed */
> +
> +#define ACPI_GLOBAL(t,a)
> +#define ACPI_INIT_GLOBAL(t,a,b)
> +
> +/* Generating stubs for configurable ACPICA macros */
> +
> +#define ACPI_NO_MEM_ALLOCATIONS
> +
> +/* Generating stubs for configurable ACPICA functions */
> +
> +#define ACPI_NO_ERROR_MESSAGES
> +#undef ACPI_DEBUG_OUTPUT
> +
> +/* External interface for __KERNEL__, stub is needed */
> +
> +#define ACPI_EXTERNAL_RETURN_STATUS(Prototype) \
> +    static ACPI_INLINE Prototype {return(AE_NOT_CONFIGURED);}
> +#define ACPI_EXTERNAL_RETURN_OK(Prototype) \
> +    static ACPI_INLINE Prototype {return(AE_OK);}
> +#define ACPI_EXTERNAL_RETURN_VOID(Prototype) \
> +    static ACPI_INLINE Prototype {return;}
> +#define ACPI_EXTERNAL_RETURN_UINT32(Prototype) \
> +    static ACPI_INLINE Prototype {return(0);}
> +#define ACPI_EXTERNAL_RETURN_PTR(Prototype) \
> +    static ACPI_INLINE Prototype {return(NULL);}
> +
> +#endif /* CONFIG_ACPI */
> +
>   /* Host-dependent types and defines for in-kernel ACPICA */
>
>   #define ACPI_MACHINE_WIDTH          BITS_PER_LONG
> diff --git a/src/acpica/source/os_specific/service_layers/osunixxf.c b/src/acpica/source/os_specific/service_layers/osunixxf.c
> index 6c1f5e6..4d4fea2 100644
> --- a/src/acpica/source/os_specific/service_layers/osunixxf.c
> +++ b/src/acpica/source/os_specific/service_layers/osunixxf.c
> @@ -165,6 +165,7 @@ typedef void* (*PTHREAD_CALLBACK) (void *);
>   #include <termios.h>
>
>   struct termios              OriginalTermAttributes;
> +int                         TermAttributesWereSet = 0;
>
>   ACPI_STATUS
>   AcpiUtReadLine (
> @@ -218,7 +219,7 @@ OsEnterLineEditMode (
>
>       if (tcgetattr (STDIN_FILENO, &OriginalTermAttributes))
>       {
> -        fprintf (stderr, "Could not get/set terminal attributes!\n");
> +        fprintf (stderr, "Could not get terminal attributes!\n");
>           return;
>       }
>
> @@ -231,16 +232,32 @@ OsEnterLineEditMode (
>       LocalTermAttributes.c_cc[VMIN] = 1;
>       LocalTermAttributes.c_cc[VTIME] = 0;
>
> -    tcsetattr (STDIN_FILENO, TCSANOW, &LocalTermAttributes);
> +    if (tcsetattr (STDIN_FILENO, TCSANOW, &LocalTermAttributes))
> +    {
> +        fprintf (stderr, "Could not set terminal attributes!\n");
> +        return;
> +    }
> +
> +    TermAttributesWereSet = 1;
>   }
>
> +
>   static void
>   OsExitLineEditMode (
>       void)
>   {
> +
> +    if (!TermAttributesWereSet)
> +    {
> +        return;
> +    }
> +
>       /* Set terminal attributes back to the original values */
>
> -    tcsetattr (STDIN_FILENO, TCSANOW, &OriginalTermAttributes);
> +    if (tcsetattr (STDIN_FILENO, TCSANOW, &OriginalTermAttributes))
> +    {
> +        fprintf (stderr, "Could not restore terminal attributes!\n");
> +    }
>   }
>
>
> diff --git a/src/acpica/source/tools/acpiexec/aehandlers.c b/src/acpica/source/tools/acpiexec/aehandlers.c
> index 79fe358..7fd63e2 100644
> --- a/src/acpica/source/tools/acpiexec/aehandlers.c
> +++ b/src/acpica/source/tools/acpiexec/aehandlers.c
> @@ -623,7 +623,7 @@ AeGpeHandler (
>       ACPI_NAMESPACE_NODE     *DeviceNode = (ACPI_NAMESPACE_NODE *) GpeDevice;
>
>
> -    AcpiOsPrintf ("[AcpiExec] GPE Handler received GPE%02X (GPE block %4.4s)\n",
> +    AcpiOsPrintf ("[AcpiExec] GPE Handler received GPE %02X (GPE block %4.4s)\n",
>           GpeNumber, GpeDevice ? DeviceNode->Name.Ascii : "FADT");
>
>       return (ACPI_REENABLE_GPE);
> diff --git a/src/lib/include/fwts_iasl.h b/src/lib/include/fwts_iasl.h
> index 5efc95c..f7e025b 100644
> --- a/src/lib/include/fwts_iasl.h
> +++ b/src/lib/include/fwts_iasl.h
> @@ -21,6 +21,7 @@
>   #define __IASL_H__
>
>   #include "fwts.h"
> +#include <stdint.h>
>
>   int fwts_iasl_disassemble_all_to_file(fwts_framework *fw,
>   	const char *path);
> @@ -37,4 +38,6 @@ int fwts_iasl_reassemble(fwts_framework *fw,
>   	fwts_list **iasl_stdout,
>   	fwts_list **iasl_stderr);
>
> +const char *fwts_iasl_exception_level(uint8_t level);
> +
>   #endif
> diff --git a/src/lib/src/Makefile.am b/src/lib/src/Makefile.am
> index 377e8aa..4ab52c1 100644
> --- a/src/lib/src/Makefile.am
> +++ b/src/lib/src/Makefile.am
> @@ -12,7 +12,7 @@ libfwts_la_LDFLAGS = 			\
>   	-L$(top_srcdir)/src/acpica/source/compiler \
>   	-lfwtsiasl
>
> -libfwts_la_CPPFLAGS = $(AM_CPPFLAGS)
> +libfwts_la_CPPFLAGS = $(AM_CPPFLAGS) -DACPI_DEBUG_OUTPUT
>
>   #
>   #  Components of the fwts core helper library libfwts
> diff --git a/src/lib/src/fwts_iasl.c b/src/lib/src/fwts_iasl.c
> index 1800912..33debab 100644
> --- a/src/lib/src/fwts_iasl.c
> +++ b/src/lib/src/fwts_iasl.c
> @@ -238,3 +238,7 @@ int fwts_iasl_reassemble(fwts_framework *fw,
>   	return FWTS_OK;
>   }
>
> +const char *fwts_iasl_exception_level(uint8_t level)
> +{
> +	return fwts_iasl_exception_level__(level);
> +}
>

Build OK with the clean Trusty chroot on my machine.

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





More information about the fwts-devel mailing list