ACK: [PATCH] ACPICA: Update version to 20150515 (LP: #1455946)

ivanhu ivan.hu at canonical.com
Fri May 29 07:06:06 UTC 2015



On 2015年05月18日 00:37, Colin King wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> Update to ACPICA 20150515, for changes since the previous
> release incorporated in fwts please refer to the follwing:
>
>      https://lists.acpica.org/pipermail/devel/2015-May/000707.html
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
>   src/acpica/Makefile.am                             |   1 +
>   src/acpica/source/common/adisasm.c                 |  17 +-
>   src/acpica/source/common/ahpredef.c                |  11 +-
>   src/acpica/source/common/ahtable.c                 | 222 ++++++
>   src/acpica/source/common/dmextern.c                |  14 +-
>   src/acpica/source/common/dmtable.c                 | 260 ++++---
>   src/acpica/source/common/dmtbdump.c                | 736 ++++++++++++++++++-
>   src/acpica/source/common/dmtbinfo.c                | 486 +++++++++++-
>   src/acpica/source/compiler/aslascii.c              |  38 +-
>   src/acpica/source/compiler/aslcompiler.h           |   1 -
>   src/acpica/source/compiler/aslcompiler.l           |  15 +-
>   src/acpica/source/compiler/asldefine.h             |   2 +-
>   src/acpica/source/compiler/aslfiles.c              |  32 +-
>   src/acpica/source/compiler/aslmessages.c           |   5 +-
>   src/acpica/source/compiler/aslmessages.h           |   1 +
>   src/acpica/source/compiler/aslprepkg.c             |  56 +-
>   src/acpica/source/compiler/aslstartup.c            |   4 +-
>   src/acpica/source/compiler/aslutils.c              |  22 +-
>   src/acpica/source/compiler/dtcompile.c             |  75 +-
>   src/acpica/source/compiler/dtcompiler.h            |  36 +-
>   src/acpica/source/compiler/dtio.c                  |  12 +-
>   src/acpica/source/compiler/dtsubtable.c            |   5 +
>   src/acpica/source/compiler/dttable.c               | 815 ++++++++++++++++++++-
>   src/acpica/source/compiler/dttemplate.c            |   8 +-
>   src/acpica/source/compiler/dttemplate.h            | 265 +++++--
>   src/acpica/source/compiler/dtutils.c               |   7 +
>   src/acpica/source/compiler/preprocess.h            |  10 +-
>   src/acpica/source/compiler/prscan.c                | 185 ++++-
>   src/acpica/source/compiler/prutils.c               |  29 +-
>   src/acpica/source/components/debugger/dbfileio.c   |  18 +-
>   src/acpica/source/components/debugger/dbinput.c    |   2 +-
>   src/acpica/source/components/dispatcher/dsmethod.c |   6 +-
>   src/acpica/source/components/hardware/hwpci.c      |   9 +-
>   src/acpica/source/components/namespace/nsprepkg.c  |  13 +
>   src/acpica/source/components/namespace/nsrepair.c  |   2 +-
>   src/acpica/source/components/parser/psopinfo.c     |   3 -
>   src/acpica/source/components/utilities/utfileio.c  |   9 +-
>   src/acpica/source/components/utilities/uthex.c     |   4 +-
>   src/acpica/source/components/utilities/utxferror.c |  12 +-
>   src/acpica/source/include/acdebug.h                |   3 +-
>   src/acpica/source/include/acdisasm.h               |  81 +-
>   src/acpica/source/include/aclocal.h                |  19 +
>   src/acpica/source/include/acparser.h               |   3 +
>   src/acpica/source/include/acpixf.h                 |   2 +-
>   src/acpica/source/include/acpredef.h               |  44 +-
>   src/acpica/source/include/actbl.h                  |  17 +-
>   src/acpica/source/include/actbl1.h                 | 207 +++++-
>   src/acpica/source/include/actbl2.h                 | 174 ++++-
>   src/acpica/source/include/actbl3.h                 | 104 ++-
>   src/acpica/source/include/actypes.h                |   1 +
>   src/acpica/source/include/acutils.h                |   2 +-
>   src/acpica/source/include/platform/acenv.h         |   3 +
>   src/acpica/source/include/platform/acenvex.h       |   3 +
>   53 files changed, 3720 insertions(+), 391 deletions(-)
>   create mode 100644 src/acpica/source/common/ahtable.c
>
> diff --git a/src/acpica/Makefile.am b/src/acpica/Makefile.am
> index 80e6bc3..66bc1af 100644
> --- a/src/acpica/Makefile.am
> +++ b/src/acpica/Makefile.am
> @@ -246,6 +246,7 @@ libfwtsacpica_la_SOURCES =				\
>   	source/common/acgetline.c            		\
>   	source/common/ahids.c				\
>   	source/common/cmfsize.c            		\
> +	source/common/ahtable.c				\
>   	source/common/ahuuids.c				\
>   	source/tools/acpiexec/aeinitfile.c		\
>   	source/tools/acpiexec/aehandlers.c		\
> diff --git a/src/acpica/source/common/adisasm.c b/src/acpica/source/common/adisasm.c
> index 53abd15..8ee9ccc 100644
> --- a/src/acpica/source/common/adisasm.c
> +++ b/src/acpica/source/common/adisasm.c
> @@ -286,6 +286,7 @@ AdAmlDisassemble (
>       char                    **OutFilename)
>   {
>       ACPI_STATUS             Status;
> +    ACPI_STATUS             GlobalStatus = AE_OK;
>       char                    *DisasmFilename = NULL;
>       char                    *ExternalFilename;
>       ACPI_EXTERNAL_FILE      *ExternalFileList = AcpiGbl_ExternalFileList;
> @@ -301,7 +302,7 @@ AdAmlDisassemble (
>        */
>       if (Filename)
>       {
> -        Status = AcpiDbGetTableFromFile (Filename, &Table);
> +        Status = AcpiDbGetTableFromFile (Filename, &Table, FALSE);
>           if (ACPI_FAILURE (Status))
>           {
>               return (Status);
> @@ -322,9 +323,16 @@ AdAmlDisassemble (
>                   continue;
>               }
>   
> -            Status = AcpiDbGetTableFromFile (ExternalFilename, &ExternalTable);
> +            Status = AcpiDbGetTableFromFile (ExternalFilename, &ExternalTable, TRUE);
>               if (ACPI_FAILURE (Status))
>               {
> +                if (Status == AE_TYPE)
> +                {
> +                    ExternalFileList = ExternalFileList->Next;
> +                    GlobalStatus = AE_TYPE;
> +                    Status = AE_OK;
> +                    continue;
> +                }
>                   return (Status);
>               }
>   
> @@ -354,6 +362,11 @@ AdAmlDisassemble (
>               ExternalFileList = ExternalFileList->Next;
>           }
>   
> +        if (ACPI_FAILURE (GlobalStatus))
> +        {
> +            return (GlobalStatus);
> +        }
> +
>           /* Clear external list generated by Scope in external tables */
>   
>           if (AcpiGbl_ExternalFileList)
> diff --git a/src/acpica/source/common/ahpredef.c b/src/acpica/source/common/ahpredef.c
> index 57e7279..27c28f1 100644
> --- a/src/acpica/source/common/ahpredef.c
> +++ b/src/acpica/source/common/ahpredef.c
> @@ -166,6 +166,7 @@ const AH_PREDEFINED_NAME    AslPredefinedInfo[] =
>       AH_PREDEF ("_BMS",    "Battery Measurement Sampling Time", "Sets the battery measurement sampling time"),
>       AH_PREDEF ("_BQC",    "Brightness Query Current", "Returns the current display brightness level"),
>       AH_PREDEF ("_BST",    "Battery Status", "Returns a Control Method Battery status block"),
> +    AH_PREDEF ("_BTH",    "Battery Throttle Limit", "Thermal limit for charging and discharging"),
>       AH_PREDEF ("_BTM",    "Battery Time", "Returns the battery runtime"),
>       AH_PREDEF ("_BTP",    "Battery Trip Point", "Sets a Control Method Battery trip point"),
>       AH_PREDEF ("_CBA",    "Configuration Base Address", "Sets the base address for a PCI Express host bridge"),
> @@ -174,6 +175,7 @@ const AH_PREDEFINED_NAME    AslPredefinedInfo[] =
>       AH_PREDEF ("_CID",    "Compatible ID", "Returns a device's Plug and Play Compatible ID list"),
>       AH_PREDEF ("_CLS",    "Class Code", "Returns PCI class code and subclass"),
>       AH_PREDEF ("_CPC",    "Continuous Performance Control", "Returns a list of performance control interfaces"),
> +    AH_PREDEF ("_CR3",    "Warm/Standby Temperature", "Temperature for a fast low power state"),
>       AH_PREDEF ("_CRS",    "Current Resource Settings", "Returns the current resource settings for a device"),
>       AH_PREDEF ("_CRT",    "Critical Temperature", "Returns the shutdown critical temperature"),
>       AH_PREDEF ("_CSD",    "C-State Dependencies", "Returns a list of C-state dependencies"),
> @@ -247,6 +249,7 @@ const AH_PREDEFINED_NAME    AslPredefinedInfo[] =
>       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 ("_LPI",    "Low Power Idle States", "Returns a list of supported low power idle states"),
>       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"),
> @@ -258,6 +261,7 @@ const AH_PREDEFINED_NAME    AslPredefinedInfo[] =
>       AH_PREDEF ("_MOD",    "Mode", "Interrupt mode, Resource Descriptor field"),
>       AH_PREDEF ("_MSG",    "Message", "Sets the system message waiting status indicator"),
>       AH_PREDEF ("_MSM",    "Memory Set Monitoring", "Sets bandwidth monitoring parameters for a memory device"),
> +    AH_PREDEF ("_MTL",    "Minimum Throttle Limit", "Returns the minimum throttle limit for a thermal zone"),
>       AH_PREDEF ("_MTP",    "Memory Type", "Resource Descriptor field"),
>       AH_PREDEF ("_NTT",    "Notification Temperature Threshold", "Returns a threshold for device temperature change that requires platform notification"),
>       AH_PREDEF ("_OFF",    "Power Off", "Sets a power resource to the off state"),
> @@ -281,7 +285,7 @@ const AH_PREDEFINED_NAME    AslPredefinedInfo[] =
>       AH_PREDEF ("_PMD",    "Power Metered Devices", "Returns a list of devices that are measured by the power meter device"),
>       AH_PREDEF ("_PMM",    "Power Meter Measurement", "Returns the current value of the Power Meter"),
>       AH_PREDEF ("_POL",    "Polarity", "Interrupt polarity, Resource Descriptor field"),
> -    AH_PREDEF ("_PPC",    "Performance Present Capabilites", "Returns a list of the performance states currently supported by the platform"),
> +    AH_PREDEF ("_PPC",    "Performance Present Capabilities", "Returns a list of the performance states currently supported by the platform"),
>       AH_PREDEF ("_PPE",    "Polling for Platform Error", "Returns the polling interval to retrieve Corrected Platform Error information"),
>       AH_PREDEF ("_PPI",    "Pin Configuration", "Resource Descriptor field"),
>       AH_PREDEF ("_PR",     "Processor", "Predefined scope for processor objects"),
> @@ -291,6 +295,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 ("_PRR",    "Power Resource for Reset", "Execute a reset on a device"),
>       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"),
> @@ -314,10 +319,12 @@ const AH_PREDEFINED_NAME    AslPredefinedInfo[] =
>       AH_PREDEF ("_Qxx",    "EC Query", "Embedded Controller query and SMBus Alarm control method"),
>       AH_PREDEF ("_RBO",    "Register Bit Offset", "Resource Descriptor field"),
>       AH_PREDEF ("_RBW",    "Register Bit Width", "Resource Descriptor field"),
> +    AH_PREDEF ("_RDI",    "Resource Dependencies for Idle", "Returns a list of dependencies for idle states"),
>       AH_PREDEF ("_REG",    "Region Availability", "Inform AML code of an operation region availability change"),
>       AH_PREDEF ("_REV",    "Supported ACPI Revision", "Returns the revision of the ACPI specification that is implemented"),
>       AH_PREDEF ("_RMV",    "Removal Status", "Returns a device's removal ability status (docking)"),
>       AH_PREDEF ("_RNG",    "Range", "Memory range type, Resource Descriptor field"),
> +    AH_PREDEF ("_RST",    "Device Reset", "Executes a reset on a device"),
>       AH_PREDEF ("_ROM",    "Read-Only Memory", "Returns a copy of the ROM data for a display device"),
>       AH_PREDEF ("_RT_",    "Resource Type", "Resource Descriptor field"),
>       AH_PREDEF ("_RTV",    "Relative Temperature Values", "Returns temperature value information"),
> @@ -368,6 +375,7 @@ const AH_PREDEFINED_NAME    AslPredefinedInfo[] =
>       AH_PREDEF ("_TC1",    "Thermal Constant 1", "Returns TC1 for the passive cooling formula"),
>       AH_PREDEF ("_TC2",    "Thermal Constant 2", "Returns TC2 for the passive cooling formula"),
>       AH_PREDEF ("_TDL",    "T-State Depth Limit", "Returns the _TSS entry number of the lowest power throttling state"),
> +    AH_PREDEF ("_TFP",    "Thermal Fast Sampling Period", "Returns the sampling period for passive cooling"),
>       AH_PREDEF ("_TIP",    "Expired Timer Wake Policy", "Returns timer policies of the wake alarm device"),
>       AH_PREDEF ("_TIV",    "Timer Values", "Returns remaining time of the wake alarm device"),
>       AH_PREDEF ("_TMP",    "Temperature", "Returns a thermal zone's current temperature"),
> @@ -378,6 +386,7 @@ const AH_PREDEFINED_NAME    AslPredefinedInfo[] =
>       AH_PREDEF ("_TRT",    "Thermal Relationship Table", "Returns thermal relationships between platform devices"),
>       AH_PREDEF ("_TSD",    "Throttling State Dependencies", "Returns a list of T-state dependencies"),
>       AH_PREDEF ("_TSF",    "Type-Specific Flags", "Resource Descriptor field"),
> +    AH_PREDEF ("_TSN",    "Thermal Sensor Device", "Returns a reference to a thermal sensor"),
>       AH_PREDEF ("_TSP",    "Thermal Sampling Period", "Returns the thermal sampling period for passive cooling"),
>       AH_PREDEF ("_TSS",    "Throttling Supported States", "Returns supported throttling state information"),
>       AH_PREDEF ("_TST",    "Temperature Sensor Threshold", "Returns the minimum separation for a device's temperature trip points"),
> diff --git a/src/acpica/source/common/ahtable.c b/src/acpica/source/common/ahtable.c
> new file mode 100644
> index 0000000..e5e065d
> --- /dev/null
> +++ b/src/acpica/source/common/ahtable.c
> @@ -0,0 +1,222 @@
> +/******************************************************************************
> + *
> + * Module Name: ahtable - Table of known ACPI tables with descriptions
> + *
> + *****************************************************************************/
> +
> +/******************************************************************************
> + *
> + * 1. Copyright Notice
> + *
> + * Some or all of this work - Copyright (c) 1999 - 2015, 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 "acpi.h"
> +#include "accommon.h"
> +
> +
> +/* Local prototypes */
> +
> +const AH_TABLE *
> +AcpiAhGetTableInfo (
> +    char                    *Signature);
> +
> +extern const AH_TABLE      AcpiSupportedTables[];
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiAhGetTableInfo
> + *
> + * PARAMETERS:  Signature           - ACPI signature (4 chars) to match
> + *
> + * RETURN:      Pointer to a valid AH_TABLE. Null if no match found.
> + *
> + * DESCRIPTION: Find a match in the "help" table of supported ACPI tables
> + *
> + ******************************************************************************/
> +
> +const AH_TABLE *
> +AcpiAhGetTableInfo (
> +    char                    *Signature)
> +{
> +    const AH_TABLE      *Info;
> +
> +
> +    for (Info = AcpiSupportedTables; Info->Signature; Info++)
> +    {
> +        if (ACPI_COMPARE_NAME (Signature, Info->Signature))
> +        {
> +            return (Info);
> +        }
> +    }
> +
> +    return (NULL);
> +}
> +
> +
> +/*
> + * Note: Any tables added here should be duplicated within AcpiDmTableData
> + * in the file common/dmtable.c
> + */
> +const AH_TABLE      AcpiSupportedTables[] =
> +{
> +    {ACPI_SIG_ASF,  "Alert Standard Format table"},
> +    {ACPI_SIG_BERT, "Boot Error Record Table"},
> +    {ACPI_SIG_BGRT, "Boot Graphics Resource Table"},
> +    {ACPI_SIG_BOOT, "Simple Boot Flag Table"},
> +    {ACPI_SIG_CPEP, "Corrected Platform Error Polling table"},
> +    {ACPI_SIG_CSRT, "Core System Resource Table"},
> +    {ACPI_SIG_DBG2, "Debug Port table type 2"},
> +    {ACPI_SIG_DBGP, "Debug Port table"},
> +    {ACPI_SIG_DMAR, "DMA Remapping table"},
> +    {ACPI_SIG_DRTM, "Dynamic Root of Trust for Measurement table"},
> +    {ACPI_SIG_DSDT, "Differentiated System Description Table (AML table)"},
> +    {ACPI_SIG_ECDT, "Embedded Controller Boot Resources Table"},
> +    {ACPI_SIG_EINJ, "Error Injection table"},
> +    {ACPI_SIG_ERST, "Error Record Serialization Table"},
> +    {ACPI_SIG_FACS, "Firmware ACPI Control Structure"},
> +    {ACPI_SIG_FADT, "Fixed ACPI Description Table (FADT)"},
> +    {ACPI_SIG_FPDT, "Firmware Performance Data Table"},
> +    {ACPI_SIG_GTDT, "Generic Timer Description Table"},
> +    {ACPI_SIG_HEST, "Hardware Error Source Table"},
> +    {ACPI_SIG_HPET, "High Precision Event Timer table"},
> +    {ACPI_SIG_IORT, "IO Remapping Table"},
> +    {ACPI_SIG_IVRS, "I/O Virtualization Reporting Structure"},
> +    {ACPI_SIG_LPIT, "Low Power Idle Table"},
> +    {ACPI_SIG_MADT, "Multiple APIC Description Table (MADT)"},
> +    {ACPI_SIG_MCFG, "Memory Mapped Configuration table"},
> +    {ACPI_SIG_MCHI, "Management Controller Host Interface table"},
> +    {ACPI_SIG_MPST, "Memory Power State Table"},
> +    {ACPI_SIG_MSCT, "Maximum System Characteristics Table"},
> +    {ACPI_SIG_MSDM, "Microsoft Data Management table"},
> +    {ACPI_SIG_MTMR, "MID Timer Table"},
> +    {ACPI_SIG_NFIT, "NVDIMM Firmware Interface Table"},
> +    {ACPI_SIG_PCCT, "Platform Communications Channel Table"},
> +    {ACPI_SIG_PMTT, "Platform Memory Topology Table"},
> +    {ACPI_RSDP_NAME,"Root System Description Pointer"},
> +    {ACPI_SIG_RSDT, "Root System Description Table"},
> +    {ACPI_SIG_S3PT, "S3 Performance Table"},
> +    {ACPI_SIG_SBST, "Smart Battery Specification Table"},
> +    {ACPI_SIG_SLIC, "Software Licensing Description Table"},
> +    {ACPI_SIG_SLIT, "System Locality Information Table"},
> +    {ACPI_SIG_SPCR, "Serial Port Console Redirection table"},
> +    {ACPI_SIG_SPMI, "Server Platform Management Interface table"},
> +    {ACPI_SIG_SRAT, "System Resource Affinity Table"},
> +    {ACPI_SIG_SSDT, "Secondary System Description Table (AML table)"},
> +    {ACPI_SIG_STAO, "Status Override table"},
> +    {ACPI_SIG_TCPA, "Trusted Computing Platform Alliance table"},
> +    {ACPI_SIG_TPM2, "Trusted Platform Module hardware interface table"},
> +    {ACPI_SIG_UEFI, "UEFI Boot Optimization Table"},
> +    {ACPI_SIG_VRTC, "Virtual Real-Time Clock Table"},
> +    {ACPI_SIG_WAET, "Windows ACPI Emulated Devices Table"},
> +    {ACPI_SIG_WDAT, "Watchdog Action Table"},
> +    {ACPI_SIG_WDDT, "Watchdog Description Table"},
> +    {ACPI_SIG_WDRT, "Watchdog Resource Table"},
> +    {ACPI_SIG_WPBT, "Windows Platform Binary Table"},
> +    {ACPI_SIG_XENV, "Xen Environment table"},
> +    {ACPI_SIG_XSDT, "Extended System Description Table"},
> +    {NULL,          NULL}
> +};
> diff --git a/src/acpica/source/common/dmextern.c b/src/acpica/source/common/dmextern.c
> index 72397f0..dc3c8b4 100644
> --- a/src/acpica/source/common/dmextern.c
> +++ b/src/acpica/source/common/dmextern.c
> @@ -1358,7 +1358,9 @@ AcpiDmUnresolvedWarning (
>                   "     * compile because the disassembler did not know how many arguments\n"
>                   "     * to assign to these methods. To specify the tables needed to resolve\n"
>                   "     * external control method references, the -e option can be used to\n"
> -                "     * specify the filenames. Example iASL invocations:\n"
> +                "     * specify the filenames. Note: SSDTs can be dynamically loaded at\n"
> +                "     * runtime and may or may not be available via the host OS.\n"
> +                "     * Example iASL invocations:\n"
>                   "     *     iasl -e ssdt1.aml ssdt2.aml ssdt3.aml -d dsdt.aml\n"
>                   "     *     iasl -e dsdt.aml ssdt2.aml -d ssdt1.aml\n"
>                   "     *     iasl -e ssdt*.aml -d dsdt.aml\n"
> @@ -1386,7 +1388,8 @@ AcpiDmUnresolvedWarning (
>                   "     * ACPI tables may be required to properly disassemble the code. This\n"
>                   "     * resulting disassembler output file may not compile because the\n"
>                   "     * disassembler did not know how many arguments to assign to the\n"
> -                "     * unresolved methods.\n"
> +                "     * unresolved methods. Note: SSDTs can be dynamically loaded at\n"
> +                "     * runtime and may or may not be available via the host OS.\n"
>                   "     *\n"
>                   "     * If necessary, the -fe option can be used to specify a file containing\n"
>                   "     * control method external declarations with the associated method\n"
> @@ -1417,7 +1420,9 @@ AcpiDmUnresolvedWarning (
>                   "compile because the disassembler did not know how many arguments\n"
>                   "to assign to these methods. To specify the tables needed to resolve\n"
>                   "external control method references, the -e option can be used to\n"
> -                "specify the filenames. Example iASL invocations:\n"
> +                "specify the filenames. Note: SSDTs can be dynamically loaded at\n"
> +                "runtime and may or may not be available via the host OS.\n"
> +                "Example iASL invocations:\n"
>                   "    iasl -e ssdt1.aml ssdt2.aml ssdt3.aml -d dsdt.aml\n"
>                   "    iasl -e dsdt.aml ssdt2.aml -d ssdt1.aml\n"
>                   "    iasl -e ssdt*.aml -d dsdt.aml\n"
> @@ -1440,7 +1445,8 @@ AcpiDmUnresolvedWarning (
>                   "ACPI tables may be required to properly disassemble the code. The\n"
>                   "resulting disassembler output file may not compile because the\n"
>                   "disassembler did not know how many arguments to assign to the\n"
> -                "unresolved methods.\n"
> +                "unresolved methods. Note: SSDTs can be dynamically loaded at\n"
> +                "runtime and may or may not be available via the host OS.\n"
>                   "\n"
>                   "If necessary, the -fe option can be used to specify a file containing\n"
>                   "control method external declarations with the associated method\n"
> diff --git a/src/acpica/source/common/dmtable.c b/src/acpica/source/common/dmtable.c
> index ca165df..6397abe 100644
> --- a/src/acpica/source/common/dmtable.c
> +++ b/src/acpica/source/common/dmtable.c
> @@ -125,6 +125,11 @@
>   #define _COMPONENT          ACPI_CA_DISASSEMBLER
>           ACPI_MODULE_NAME    ("dmtable")
>   
> +const AH_TABLE *
> +AcpiAhGetTableInfo (
> +    char                    *Signature);
> +
> +
>   /* Local Prototypes */
>   
>   static void
> @@ -150,7 +155,7 @@ static const char           *AcpiDmAsfSubnames[] =
>       "ASF Remote Control",
>       "ASF RMCP Boot Options",
>       "ASF Address",
> -    "Unknown SubTable Type"         /* Reserved */
> +    "Unknown Subtable Type"         /* Reserved */
>   };
>   
>   static const char           *AcpiDmDmarSubnames[] =
> @@ -160,7 +165,7 @@ static const char           *AcpiDmDmarSubnames[] =
>       "Root Port ATS Capability",
>       "Remapping Hardware Static Affinity",
>       "ACPI Namespace Device Declaration",
> -    "Unknown SubTable Type"         /* Reserved */
> +    "Unknown Subtable Type"         /* Reserved */
>   };
>   
>   static const char           *AcpiDmDmarScope[] =
> @@ -248,7 +253,7 @@ static const char           *AcpiDmGtdtSubnames[] =
>   {
>       "Generic Timer Block",
>       "Generic Watchdog Timer",
> -    "Unknown SubTable Type"         /* Reserved */
> +    "Unknown Subtable Type"         /* Reserved */
>   };
>   
>   static const char           *AcpiDmHestSubnames[] =
> @@ -263,7 +268,7 @@ static const char           *AcpiDmHestSubnames[] =
>       "PCI Express AER (AER Endpoint)",
>       "PCI Express/PCI-X Bridge AER",
>       "Generic Hardware Error Source",
> -    "Unknown SubTable Type"         /* Reserved */
> +    "Unknown Subtable Type"         /* Reserved */
>   };
>   
>   static const char           *AcpiDmHestNotifySubnames[] =
> @@ -295,14 +300,27 @@ static const char           *AcpiDmMadtSubnames[] =
>       "Generic Interrupt Distributor",    /* ACPI_MADT_GENERIC_DISTRIBUTOR */
>       "Generic MSI Frame",                /* ACPI_MADT_GENERIC_MSI_FRAME */
>       "Generic Interrupt Redistributor",  /* ACPI_MADT_GENERIC_REDISTRIBUTOR */
> -    "Unknown SubTable Type"             /* Reserved */
> +    "Generic Interrupt Translator",     /* ACPI_MADT_GENERIC_TRANSLATOR */
> +    "Unknown Subtable Type"             /* Reserved */
> +};
> +
> +static const char           *AcpiDmNfitSubnames[] =
> +{
> +    "System Physical Address Range",    /* ACPI_NFIT_TYPE_SYSTEM_ADDRESS */
> +    "Memory Range Map",                 /* ACPI_NFIT_TYPE_MEMORY_MAP */
> +    "Interleave Info",                  /* ACPI_NFIT_TYPE_INTERLEAVE */
> +    "SMBIOS Information",               /* ACPI_NFIT_TYPE_SMBIOS */
> +    "NVDIMM Control Region",            /* ACPI_NFIT_TYPE_CONTROL_REGION */
> +    "NVDIMM Block Data Window Region",  /* ACPI_NFIT_TYPE_DATA_REGION */
> +    "Flush Hint Address",               /* ACPI_NFIT_TYPE_FLUSH_ADDRESS */
> +    "Unknown Subtable Type"             /* Reserved */
>   };
>   
>   static const char           *AcpiDmPcctSubnames[] =
>   {
>       "Generic Communications Subspace",  /* ACPI_PCCT_TYPE_GENERIC_SUBSPACE */
> -    "HW-Reduced Communications Subspace",
> -    "Unknown SubTable Type"             /* Reserved */
> +    "HW-Reduced Comm Subspace",         /* ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE */
> +    "Unknown Subtable Type"             /* Reserved */
>   };
>   
>   static const char           *AcpiDmPmttSubnames[] =
> @@ -310,7 +328,7 @@ static const char           *AcpiDmPmttSubnames[] =
>       "Socket",                       /* ACPI_PMTT_TYPE_SOCKET */
>       "Memory Controller",            /* ACPI_PMTT_TYPE_CONTROLLER */
>       "Physical Component (DIMM)",    /* ACPI_PMTT_TYPE_DIMM  */
> -    "Unknown SubTable Type"         /* Reserved */
> +    "Unknown Subtable Type"         /* Reserved */
>   };
>   
>   static const char           *AcpiDmSratSubnames[] =
> @@ -319,21 +337,20 @@ static const char           *AcpiDmSratSubnames[] =
>       "Memory Affinity",
>       "Processor Local x2APIC Affinity",
>       "GICC Affinity",
> -    "Unknown SubTable Type"         /* Reserved */
> +    "Unknown Subtable Type"         /* Reserved */
>   };
>   
>   static const char           *AcpiDmIvrsSubnames[] =
>   {
>       "Hardware Definition Block",
>       "Memory Definition Block",
> -    "Unknown SubTable Type"         /* Reserved */
> +    "Unknown Subtable Type"         /* Reserved */
>   };
>   
>   static const char           *AcpiDmLpitSubnames[] =
>   {
>       "Native C-state Idle Structure",
> -    "Simple I/O Idle Structure",
> -    "Unknown SubTable Type"         /* Reserved */
> +    "Unknown Subtable Type"         /* Reserved */
>   };
>   
>   #define ACPI_FADT_PM_RESERVED       9
> @@ -376,56 +393,65 @@ static const char           *AcpiDmGasAccessWidth[] =
>    * handler. This table must be NULL terminated. RSDP and FACS are
>    * special-cased elsewhere.
>    *
> + * Note: Any tables added here should be duplicated within AcpiSupportedTables
> + * in the file common/ahtable.c
> + *
>    ******************************************************************************/
>   
> -ACPI_DMTABLE_DATA    AcpiDmTableData[] =
> +const ACPI_DMTABLE_DATA     AcpiDmTableData[] =
>   {
> -    {ACPI_SIG_ASF,  NULL,                   AcpiDmDumpAsf,  DtCompileAsf,   TemplateAsf,    "Alert Standard Format table"},
> -    {ACPI_SIG_BERT, AcpiDmTableInfoBert,    NULL,           NULL,           TemplateBert,   "Boot Error Record Table"},
> -    {ACPI_SIG_BGRT, AcpiDmTableInfoBgrt,    NULL,           NULL,           TemplateBgrt,   "Boot Graphics Resource Table"},
> -    {ACPI_SIG_BOOT, AcpiDmTableInfoBoot,    NULL,           NULL,           TemplateBoot,   "Simple Boot Flag Table"},
> -    {ACPI_SIG_CPEP, NULL,                   AcpiDmDumpCpep, DtCompileCpep,  TemplateCpep,   "Corrected Platform Error Polling table"},
> -    {ACPI_SIG_CSRT, NULL,                   AcpiDmDumpCsrt, DtCompileCsrt,  TemplateCsrt,   "Core System Resource Table"},
> -    {ACPI_SIG_DBG2, AcpiDmTableInfoDbg2,    AcpiDmDumpDbg2, DtCompileDbg2,  TemplateDbg2,   "Debug Port table type 2"},
> -    {ACPI_SIG_DBGP, AcpiDmTableInfoDbgp,    NULL,           NULL,           TemplateDbgp,   "Debug Port table"},
> -    {ACPI_SIG_DMAR, NULL,                   AcpiDmDumpDmar, DtCompileDmar,  TemplateDmar,   "DMA Remapping table"},
> -    {ACPI_SIG_ECDT, AcpiDmTableInfoEcdt,    NULL,           NULL,           TemplateEcdt,   "Embedded Controller Boot Resources Table"},
> -    {ACPI_SIG_EINJ, NULL,                   AcpiDmDumpEinj, DtCompileEinj,  TemplateEinj,   "Error Injection table"},
> -    {ACPI_SIG_ERST, NULL,                   AcpiDmDumpErst, DtCompileErst,  TemplateErst,   "Error Record Serialization Table"},
> -    {ACPI_SIG_FADT, NULL,                   AcpiDmDumpFadt, DtCompileFadt,  TemplateFadt,   "Fixed ACPI Description Table (FADT)"},
> -    {ACPI_SIG_FPDT, NULL,                   AcpiDmDumpFpdt, DtCompileFpdt,  TemplateFpdt,   "Firmware Performance Data Table"},
> -    {ACPI_SIG_GTDT, NULL,                   AcpiDmDumpGtdt, DtCompileGtdt,  TemplateGtdt,   "Generic Timer Description Table"},
> -    {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"},
> -    {ACPI_SIG_MPST, AcpiDmTableInfoMpst,    AcpiDmDumpMpst, DtCompileMpst,  TemplateMpst,   "Memory Power State Table"},
> -    {ACPI_SIG_MSCT, NULL,                   AcpiDmDumpMsct, DtCompileMsct,  TemplateMsct,   "Maximum System Characteristics Table"},
> -    {ACPI_SIG_MSDM, NULL,                   AcpiDmDumpSlic, DtCompileSlic,  TemplateMsdm,   "Microsoft Data Management table"},
> -    {ACPI_SIG_MTMR, NULL,                   AcpiDmDumpMtmr, DtCompileMtmr,  TemplateMtmr,   "MID Timer Table"},
> -    {ACPI_SIG_PCCT, AcpiDmTableInfoPcct,    AcpiDmDumpPcct, DtCompilePcct,  TemplatePcct,   "Platform Communications Channel Table"},
> -    {ACPI_SIG_PMTT, NULL,                   AcpiDmDumpPmtt, DtCompilePmtt,  TemplatePmtt,   "Platform Memory Topology Table"},
> -    {ACPI_SIG_RSDT, NULL,                   AcpiDmDumpRsdt, DtCompileRsdt,  TemplateRsdt,   "Root System Description Table"},
> -    {ACPI_SIG_S3PT, NULL,                   NULL,           NULL,           TemplateS3pt,   "S3 Performance Table"},
> -    {ACPI_SIG_SBST, AcpiDmTableInfoSbst,    NULL,           NULL,           TemplateSbst,   "Smart Battery Specification Table"},
> -    {ACPI_SIG_SLIC, NULL,                   AcpiDmDumpSlic, DtCompileSlic,  TemplateSlic,   "Software Licensing Description Table"},
> -    {ACPI_SIG_SLIT, NULL,                   AcpiDmDumpSlit, DtCompileSlit,  TemplateSlit,   "System Locality Information Table"},
> -    {ACPI_SIG_SPCR, AcpiDmTableInfoSpcr,    NULL,           NULL,           TemplateSpcr,   "Serial Port Console Redirection table"},
> -    {ACPI_SIG_SPMI, AcpiDmTableInfoSpmi,    NULL,           NULL,           TemplateSpmi,   "Server Platform Management Interface table"},
> -    {ACPI_SIG_SRAT, NULL,                   AcpiDmDumpSrat, DtCompileSrat,  TemplateSrat,   "System Resource Affinity Table"},
> -    {ACPI_SIG_TCPA, AcpiDmTableInfoTcpa,    NULL,           NULL,           TemplateTcpa,   "Trusted Computing Platform Alliance table"},
> -    {ACPI_SIG_TPM2, AcpiDmTableInfoTpm2,    NULL,           NULL,           TemplateTpm2,   "Trusted Platform Module hardware interface table"},
> -    {ACPI_SIG_UEFI, AcpiDmTableInfoUefi,    NULL,           DtCompileUefi,  TemplateUefi,   "UEFI Boot Optimization Table"},
> -    {ACPI_SIG_VRTC, AcpiDmTableInfoVrtc,    AcpiDmDumpVrtc, DtCompileVrtc,  TemplateVrtc,   "Virtual Real-Time Clock Table"},
> -    {ACPI_SIG_WAET, AcpiDmTableInfoWaet,    NULL,           NULL,           TemplateWaet,   "Windows ACPI Emulated Devices Table"},
> -    {ACPI_SIG_WDAT, NULL,                   AcpiDmDumpWdat, DtCompileWdat,  TemplateWdat,   "Watchdog Action Table"},
> -    {ACPI_SIG_WDDT, AcpiDmTableInfoWddt,    NULL,           NULL,           TemplateWddt,   "Watchdog Description Table"},
> -    {ACPI_SIG_WDRT, AcpiDmTableInfoWdrt,    NULL,           NULL,           TemplateWdrt,   "Watchdog Resource Table"},
> -    {ACPI_SIG_XSDT, NULL,                   AcpiDmDumpXsdt, DtCompileXsdt,  TemplateXsdt,   "Extended System Description Table"},
> -    {NULL,          NULL,                   NULL,           NULL,           NULL,           NULL}
> +    {ACPI_SIG_ASF,  NULL,                   AcpiDmDumpAsf,  DtCompileAsf,   TemplateAsf},
> +    {ACPI_SIG_BERT, AcpiDmTableInfoBert,    NULL,           NULL,           TemplateBert},
> +    {ACPI_SIG_BGRT, AcpiDmTableInfoBgrt,    NULL,           NULL,           TemplateBgrt},
> +    {ACPI_SIG_BOOT, AcpiDmTableInfoBoot,    NULL,           NULL,           TemplateBoot},
> +    {ACPI_SIG_CPEP, NULL,                   AcpiDmDumpCpep, DtCompileCpep,  TemplateCpep},
> +    {ACPI_SIG_CSRT, NULL,                   AcpiDmDumpCsrt, DtCompileCsrt,  TemplateCsrt},
> +    {ACPI_SIG_DBG2, AcpiDmTableInfoDbg2,    AcpiDmDumpDbg2, DtCompileDbg2,  TemplateDbg2},
> +    {ACPI_SIG_DBGP, AcpiDmTableInfoDbgp,    NULL,           NULL,           TemplateDbgp},
> +    {ACPI_SIG_DMAR, NULL,                   AcpiDmDumpDmar, DtCompileDmar,  TemplateDmar},
> +    {ACPI_SIG_DRTM, NULL,                   AcpiDmDumpDrtm, DtCompileDrtm,  TemplateDrtm},
> +    {ACPI_SIG_ECDT, AcpiDmTableInfoEcdt,    NULL,           NULL,           TemplateEcdt},
> +    {ACPI_SIG_EINJ, NULL,                   AcpiDmDumpEinj, DtCompileEinj,  TemplateEinj},
> +    {ACPI_SIG_ERST, NULL,                   AcpiDmDumpErst, DtCompileErst,  TemplateErst},
> +    {ACPI_SIG_FADT, NULL,                   AcpiDmDumpFadt, DtCompileFadt,  TemplateFadt},
> +    {ACPI_SIG_FPDT, NULL,                   AcpiDmDumpFpdt, DtCompileFpdt,  TemplateFpdt},
> +    {ACPI_SIG_GTDT, NULL,                   AcpiDmDumpGtdt, DtCompileGtdt,  TemplateGtdt},
> +    {ACPI_SIG_HEST, NULL,                   AcpiDmDumpHest, DtCompileHest,  TemplateHest},
> +    {ACPI_SIG_HPET, AcpiDmTableInfoHpet,    NULL,           NULL,           TemplateHpet},
> +    {ACPI_SIG_IORT, NULL,                   AcpiDmDumpIort, DtCompileIort,  TemplateIort},
> +    {ACPI_SIG_IVRS, NULL,                   AcpiDmDumpIvrs, DtCompileIvrs,  TemplateIvrs},
> +    {ACPI_SIG_LPIT, NULL,                   AcpiDmDumpLpit, DtCompileLpit,  TemplateLpit},
> +    {ACPI_SIG_MADT, NULL,                   AcpiDmDumpMadt, DtCompileMadt,  TemplateMadt},
> +    {ACPI_SIG_MCFG, NULL,                   AcpiDmDumpMcfg, DtCompileMcfg,  TemplateMcfg},
> +    {ACPI_SIG_MCHI, AcpiDmTableInfoMchi,    NULL,           NULL,           TemplateMchi},
> +    {ACPI_SIG_MPST, AcpiDmTableInfoMpst,    AcpiDmDumpMpst, DtCompileMpst,  TemplateMpst},
> +    {ACPI_SIG_MSCT, NULL,                   AcpiDmDumpMsct, DtCompileMsct,  TemplateMsct},
> +    {ACPI_SIG_MSDM, NULL,                   AcpiDmDumpSlic, DtCompileSlic,  TemplateMsdm},
> +    {ACPI_SIG_MTMR, NULL,                   AcpiDmDumpMtmr, DtCompileMtmr,  TemplateMtmr},
> +    {ACPI_SIG_NFIT, AcpiDmTableInfoNfit,    AcpiDmDumpNfit, DtCompileNfit,  TemplateNfit},
> +    {ACPI_SIG_PCCT, AcpiDmTableInfoPcct,    AcpiDmDumpPcct, DtCompilePcct,  TemplatePcct},
> +    {ACPI_SIG_PMTT, NULL,                   AcpiDmDumpPmtt, DtCompilePmtt,  TemplatePmtt},
> +    {ACPI_SIG_RSDT, NULL,                   AcpiDmDumpRsdt, DtCompileRsdt,  TemplateRsdt},
> +    {ACPI_SIG_S3PT, NULL,                   NULL,           NULL,           TemplateS3pt},
> +    {ACPI_SIG_SBST, AcpiDmTableInfoSbst,    NULL,           NULL,           TemplateSbst},
> +    {ACPI_SIG_SLIC, NULL,                   AcpiDmDumpSlic, DtCompileSlic,  TemplateSlic},
> +    {ACPI_SIG_SLIT, NULL,                   AcpiDmDumpSlit, DtCompileSlit,  TemplateSlit},
> +    {ACPI_SIG_SPCR, AcpiDmTableInfoSpcr,    NULL,           NULL,           TemplateSpcr},
> +    {ACPI_SIG_SPMI, AcpiDmTableInfoSpmi,    NULL,           NULL,           TemplateSpmi},
> +    {ACPI_SIG_SRAT, NULL,                   AcpiDmDumpSrat, DtCompileSrat,  TemplateSrat},
> +    {ACPI_SIG_STAO, NULL,                   AcpiDmDumpStao, DtCompileStao,  TemplateStao},
> +    {ACPI_SIG_TCPA, AcpiDmTableInfoTcpa,    NULL,           NULL,           TemplateTcpa},
> +    {ACPI_SIG_TPM2, AcpiDmTableInfoTpm2,    NULL,           NULL,           TemplateTpm2},
> +    {ACPI_SIG_UEFI, AcpiDmTableInfoUefi,    NULL,           DtCompileUefi,  TemplateUefi},
> +    {ACPI_SIG_VRTC, AcpiDmTableInfoVrtc,    AcpiDmDumpVrtc, DtCompileVrtc,  TemplateVrtc},
> +    {ACPI_SIG_WAET, AcpiDmTableInfoWaet,    NULL,           NULL,           TemplateWaet},
> +    {ACPI_SIG_WDAT, NULL,                   AcpiDmDumpWdat, DtCompileWdat,  TemplateWdat},
> +    {ACPI_SIG_WDDT, AcpiDmTableInfoWddt,    NULL,           NULL,           TemplateWddt},
> +    {ACPI_SIG_WDRT, AcpiDmTableInfoWdrt,    NULL,           NULL,           TemplateWdrt},
> +    {ACPI_SIG_WPBT, NULL,                   AcpiDmDumpWpbt, DtCompileWpbt,  TemplateWpbt},
> +    {ACPI_SIG_XENV, AcpiDmTableInfoXenv,    NULL,           NULL,           TemplateXenv},
> +    {ACPI_SIG_XSDT, NULL,                   AcpiDmDumpXsdt, DtCompileXsdt,  TemplateXsdt},
> +    {NULL,          NULL,                   NULL,           NULL,           NULL}
>   };
>   
>   
> @@ -479,18 +505,18 @@ AcpiDmGenerateChecksum (
>    *
>    ******************************************************************************/
>   
> -ACPI_DMTABLE_DATA *
> +const ACPI_DMTABLE_DATA *
>   AcpiDmGetTableData (
>       char                    *Signature)
>   {
> -    ACPI_DMTABLE_DATA       *TableData;
> +    const ACPI_DMTABLE_DATA *Info;
>   
>   
> -    for (TableData = AcpiDmTableData; TableData->Signature; TableData++)
> +    for (Info = AcpiDmTableData; Info->Signature; Info++)
>       {
> -        if (ACPI_COMPARE_NAME (Signature, TableData->Signature))
> +        if (ACPI_COMPARE_NAME (Signature, Info->Signature))
>           {
> -            return (TableData);
> +            return (Info);
>           }
>       }
>   
> @@ -516,7 +542,7 @@ AcpiDmDumpDataTable (
>       ACPI_TABLE_HEADER       *Table)
>   {
>       ACPI_STATUS             Status;
> -    ACPI_DMTABLE_DATA       *TableData;
> +    const ACPI_DMTABLE_DATA *TableData;
>       UINT32                  Length;
>   
>   
> @@ -630,7 +656,6 @@ AcpiDmDumpDataTable (
>    * PARAMETERS:  Offset              - Current byte offset, from table start
>    *              ByteLength          - Length of the field in bytes, 0 for flags
>    *              Name                - Name of this field
> - *              Value               - Optional value, displayed on left of ':'
>    *
>    * RETURN:      None
>    *
> @@ -764,7 +789,7 @@ AcpiDmDumpTable (
>       UINT16                  Temp16;
>       UINT32                  Temp32;
>       UINT64                  Value;
> -    ACPI_DMTABLE_DATA       *TableData;
> +    const AH_TABLE          *TableData;
>       const char              *Name;
>       BOOLEAN                 LastOutputBlankLine = FALSE;
>       char                    RepairedName[8];
> @@ -787,13 +812,24 @@ AcpiDmDumpTable (
>           Target = ACPI_ADD_PTR (UINT8, Table, Info->Offset);
>           CurrentOffset = TableOffset + Info->Offset;
>   
> -        /* Check for beyond EOT or beyond subtable end */
> +        /* Check for beyond subtable end or (worse) beyond EOT */
> +
> +        if (SubtableLength && (Info->Offset >= SubtableLength))
> +        {
> +            AcpiOsPrintf (
> +                "/**** ACPI subtable terminates early - "
> +                "may be older version (dump table) */\n");
>   
> -        if ((CurrentOffset >= TableLength) ||
> -            (SubtableLength && (Info->Offset >= SubtableLength)))
> +            /* Move on to next subtable */
> +
> +            return (AE_OK);
> +        }
> +
> +        if (CurrentOffset >= TableLength)
>           {
>               AcpiOsPrintf (
> -                "**** ACPI table terminates in the middle of a data structure! (dump table)\n");
> +                "/**** ACPI table terminates "
> +                "in the middle of a data structure! (dump table) */\n");
>               return (AE_BAD_DATA);
>           }
>   
> @@ -826,6 +862,7 @@ AcpiDmDumpTable (
>           case ACPI_DMT_UINT16:
>           case ACPI_DMT_DMAR:
>           case ACPI_DMT_HEST:
> +        case ACPI_DMT_NFIT:
>   
>               ByteLength = 2;
>               break;
> @@ -882,6 +919,7 @@ AcpiDmDumpTable (
>               ByteLength = 128;
>               break;
>   
> +        case ACPI_DMT_UNICODE:
>           case ACPI_DMT_BUFFER:
>           case ACPI_DMT_RAW_BUFFER:
>   
> @@ -913,16 +951,39 @@ AcpiDmDumpTable (
>               ByteLength = sizeof (ACPI_HEST_NOTIFY);
>               break;
>   
> +        case ACPI_DMT_IORTMEM:
> +
> +            if (!LastOutputBlankLine)
> +            {
> +                LastOutputBlankLine = FALSE;
> +            }
> +            ByteLength = sizeof (ACPI_IORT_MEMORY_ACCESS);
> +            break;
> +
>           default:
>   
>               ByteLength = 0;
>               break;
>           }
>   
> +        /* Check if we are beyond a subtable, or (worse) beyond EOT */
> +
>           if (CurrentOffset + ByteLength > TableLength)
>           {
> +            if (SubtableLength)
> +            {
> +                AcpiOsPrintf (
> +                    "/**** ACPI subtable terminates early - "
> +                    "may be older version (dump table) */\n");
> +
> +                /* Move on to next subtable */
> +
> +                return (AE_OK);
> +            }
> +
>               AcpiOsPrintf (
> -                "**** ACPI table terminates in the middle of a data structure!\n");
> +                "/**** ACPI table terminates "
> +                "in the middle of a data structure! */\n");
>               return (AE_BAD_DATA);
>           }
>   
> @@ -1052,10 +1113,10 @@ AcpiDmDumpTable (
>   
>               AcpiDmCheckAscii (Target, RepairedName, 4);
>               AcpiOsPrintf ("\"%.4s\"    ", RepairedName);
> -            TableData = AcpiDmGetTableData (ACPI_CAST_PTR (char, Target));
> +            TableData = AcpiAhGetTableInfo (ACPI_CAST_PTR (char, Target));
>               if (TableData)
>               {
> -                AcpiOsPrintf (STRING_FORMAT, TableData->Name);
> +                AcpiOsPrintf (STRING_FORMAT, TableData->Description);
>               }
>               else
>               {
> @@ -1281,6 +1342,16 @@ AcpiDmDumpTable (
>                   AcpiDmHestNotifySubnames[Temp8]);
>               break;
>   
> +        case ACPI_DMT_IORTMEM:
> +
> +            AcpiOsPrintf (STRING_FORMAT,
> +                "IORT Memory Access Properties");
> +
> +            AcpiDmDumpTable (TableLength, CurrentOffset, Target,
> +                sizeof (ACPI_IORT_MEMORY_ACCESS), AcpiDmTableInfoIortAcc);
> +            LastOutputBlankLine = TRUE;
> +            break;
> +
>           case ACPI_DMT_MADT:
>   
>               /* MADT subtable types */
> @@ -1295,6 +1366,20 @@ AcpiDmDumpTable (
>                   AcpiDmMadtSubnames[Temp8]);
>               break;
>   
> +        case ACPI_DMT_NFIT:
> +
> +            /* NFIT subtable types */
> +
> +            Temp16 = ACPI_GET16 (Target);
> +            if (Temp16 > ACPI_NFIT_TYPE_RESERVED)
> +            {
> +                Temp16 = ACPI_NFIT_TYPE_RESERVED;
> +            }
> +
> +            AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target),
> +                AcpiDmNfitSubnames[Temp16]);
> +            break;
> +
>           case ACPI_DMT_PCCT:
>   
>               /* PCCT subtable types */
> @@ -1323,16 +1408,27 @@ AcpiDmDumpTable (
>                   AcpiDmPmttSubnames[Temp8]);
>               break;
>   
> +        case ACPI_DMT_UNICODE:
> +
> +            if (ByteLength == 0)
> +            {
> +                AcpiOsPrintf ("/* Zero-length Data */\n");
> +                break;
> +            }
> +
> +            AcpiDmDumpUnicode (Table, CurrentOffset, ByteLength);
> +            break;
> +
>           case ACPI_DMT_RAW_BUFFER:
> -            /*
> -             * Currently only used for SLIC table
> -             */
> -            AcpiOsPrintf ("/* Proprietary data structure */ ");
>   
> -            AcpiDmDumpBuffer (Table, sizeof (ACPI_TABLE_HEADER),
> -                ByteLength, sizeof (ACPI_TABLE_HEADER),
> -                "Licensing Data", TRUE);
> -            AcpiOsPrintf ("\n");
> +            if (ByteLength == 0)
> +            {
> +                AcpiOsPrintf ("/* Zero-length Data */\n");
> +                break;
> +            }
> +
> +            AcpiDmDumpBuffer (Table, CurrentOffset, ByteLength,
> +                CurrentOffset, NULL);
>               break;
>   
>           case ACPI_DMT_SRAT:
> diff --git a/src/acpica/source/common/dmtbdump.c b/src/acpica/source/common/dmtbdump.c
> index a12020b..9196dbb 100644
> --- a/src/acpica/source/common/dmtbdump.c
> +++ b/src/acpica/source/common/dmtbdump.c
> @@ -142,7 +142,6 @@ AcpiDmValidateFadtLength (
>    *              AbsoluteOffset      - Offset of buffer in the main ACPI table
>    *              Header              - Name of the buffer field (printed on the
>    *                                    first line only.)
> - *              MultiLine           - TRUE if a large, multi-line buffer
>    *
>    * RETURN:      None
>    *
> @@ -157,8 +156,7 @@ AcpiDmDumpBuffer (
>       UINT32                  BufferOffset,
>       UINT32                  Length,
>       UINT32                  AbsoluteOffset,
> -    char                    *Header,
> -    BOOLEAN                 MultiLine)
> +    char                    *Header)
>   {
>       UINT8                   *Buffer;
>       UINT32                  i;
> @@ -176,18 +174,11 @@ AcpiDmDumpBuffer (
>       {
>           if (!(i % 16))
>           {
> -            if (MultiLine)
> -            {
> -                /* Insert a backslash - line continuation character */
> +            /* Insert a backslash - line continuation character */
>   
> -                AcpiOsPrintf ("\\\n    ");
> -            }
> -            else
> +            if (Length > 16)
>               {
> -                AcpiOsPrintf ("\n");
> -                AcpiDmLineHeader (AbsoluteOffset,
> -                    ((Length - i) > 16) ? 16 : (Length - i), Header);
> -                Header = NULL;
> +                AcpiOsPrintf ("\\\n    ");
>               }
>           }
>   
> @@ -203,6 +194,74 @@ AcpiDmDumpBuffer (
>   
>   /*******************************************************************************
>    *
> + * FUNCTION:    AcpiDmDumpUnicode
> + *
> + * PARAMETERS:  Table               - ACPI Table or subtable
> + *              BufferOffset        - Offset of buffer from Table above
> + *              ByteLength          - Length of the buffer
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Validate and dump the contents of a buffer that contains
> + *              unicode data. The output is a standard ASCII string. If it
> + *              appears that the data is not unicode, the buffer is dumped
> + *              as hex characters.
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmDumpUnicode (
> +    void                    *Table,
> +    UINT32                  BufferOffset,
> +    UINT32                  ByteLength)
> +{
> +    UINT8                   *Buffer;
> +    UINT32                  Length;
> +    UINT32                  i;
> +
> +
> +    Buffer = ((UINT8 *) Table) + BufferOffset;
> +    Length = ByteLength - 2; /* Last two bytes are the null terminator */
> +
> +    /* Ensure all low bytes are entirely printable ASCII */
> +
> +    for (i = 0; i < Length; i += 2)
> +    {
> +        if (!ACPI_IS_PRINT (Buffer[i]))
> +        {
> +            goto DumpRawBuffer;
> +        }
> +    }
> +
> +    /* Ensure all high bytes are zero */
> +
> +    for (i = 1; i < Length; i += 2)
> +    {
> +        if (Buffer[i])
> +        {
> +            goto DumpRawBuffer;
> +        }
> +    }
> +
> +    /* Dump the buffer as a normal string */
> +
> +    AcpiOsPrintf ("\"");
> +    for (i = 0; i < Length; i += 2)
> +    {
> +        AcpiOsPrintf ("%c", Buffer[i]);
> +    }
> +    AcpiOsPrintf ("\"\n");
> +    return;
> +
> +DumpRawBuffer:
> +    AcpiDmDumpBuffer (Table, BufferOffset, ByteLength,
> +        BufferOffset, NULL);
> +    AcpiOsPrintf ("\n");
> +}
> +
> +
> +/*******************************************************************************
> + *
>    * FUNCTION:    AcpiDmDumpRsdp
>    *
>    * PARAMETERS:  Table               - A RSDP
> @@ -385,6 +444,13 @@ AcpiDmDumpFadt (
>           {
>               AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt5);
>           }
> +
> +        /* Check for FADT revision 6 fields and up (ACPI 6.0+) */
> +
> +        if (Table->Length > ACPI_FADT_V3_SIZE)
> +        {
> +            AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt6);
> +        }
>       }
>   
>       /* Validate various fields in the FADT, including length */
> @@ -765,10 +831,17 @@ AcpiDmDumpCsrt (
>               /* Resource-specific info buffer */
>   
>               InfoLength = SubSubTable->Length - SubSubOffset;
> -
> -            AcpiDmDumpBuffer (SubSubTable, SubSubOffset, InfoLength,
> -                Offset + SubOffset + SubSubOffset, "ResourceInfo", FALSE);
> -            SubSubOffset += InfoLength;
> +            if (InfoLength)
> +            {
> +                Status = AcpiDmDumpTable (Length,
> +                            Offset + SubOffset + SubSubOffset, Table,
> +                            InfoLength, AcpiDmTableInfoCsrt2a);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return;
> +                }
> +                SubSubOffset += InfoLength;
> +            }
>   
>               /* Point to next sub-subtable */
>   
> @@ -886,8 +959,13 @@ AcpiDmDumpDbg2 (
>   
>           if (SubTable->OemDataOffset)
>           {
> -            AcpiDmDumpBuffer (SubTable, SubTable->OemDataOffset, SubTable->OemDataLength,
> -                Offset + SubTable->OemDataOffset, "OEM Data", FALSE);
> +            Status = AcpiDmDumpTable (Length, Offset + SubTable->OemDataOffset,
> +                        Table, SubTable->OemDataLength,
> +                        AcpiDmTableInfoDbg2OemData);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return;
> +            }
>           }
>   
>           /* Point to next subtable */
> @@ -912,7 +990,6 @@ AcpiDmDumpDbg2 (
>    *
>    ******************************************************************************/
>   
> -
>   void
>   AcpiDmDumpDmar (
>       ACPI_TABLE_HEADER       *Table)
> @@ -1057,6 +1134,120 @@ NextSubtable:
>   
>   /*******************************************************************************
>    *
> + * FUNCTION:    AcpiDmDumpDrtm
> + *
> + * PARAMETERS:  Table               - A DRTM table
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Format the contents of a DRTM.
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmDumpDrtm (
> +    ACPI_TABLE_HEADER       *Table)
> +{
> +    ACPI_STATUS             Status;
> +    UINT32                  Offset;
> +    ACPI_DRTM_VTABLE_LIST   *DrtmVtl;
> +    ACPI_DRTM_RESOURCE_LIST *DrtmRl;
> +    ACPI_DRTM_DPS_ID        *DrtmDps;
> +    UINT32                  Count;
> +
> +
> +    /* Main table */
> +
> +    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
> +                AcpiDmTableInfoDrtm);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return;
> +    }
> +
> +    Offset = sizeof (ACPI_TABLE_DRTM);
> +
> +    /* Sub-tables */
> +
> +    /* Dump ValidatedTable length */
> +
> +    DrtmVtl = ACPI_ADD_PTR (ACPI_DRTM_VTABLE_LIST, Table, Offset);
> +    AcpiOsPrintf ("\n");
> +    Status = AcpiDmDumpTable (Table->Length, Offset,
> +                DrtmVtl, ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST, ValidatedTables),
> +                AcpiDmTableInfoDrtm0);
> +    if (ACPI_FAILURE (Status))
> +    {
> +            return;
> +    }
> +    Offset += ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST, ValidatedTables);
> +
> +    /* Dump Validated table addresses */
> +
> +    Count = 0;
> +    while ((Offset < Table->Length) &&
> +            (DrtmVtl->ValidatedTableCount > Count))
> +    {
> +        Status = AcpiDmDumpTable (Table->Length, Offset,
> +                    ACPI_ADD_PTR (void, Table, Offset), sizeof (UINT64),
> +                    AcpiDmTableInfoDrtm0a);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return;
> +        }
> +        Offset += sizeof (UINT64);
> +        Count++;
> +    }
> +
> +    /* Dump ResourceList length */
> +
> +    DrtmRl = ACPI_ADD_PTR (ACPI_DRTM_RESOURCE_LIST, Table, Offset);
> +    AcpiOsPrintf ("\n");
> +    Status = AcpiDmDumpTable (Table->Length, Offset,
> +                DrtmRl, ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST, Resources),
> +                AcpiDmTableInfoDrtm1);
> +    if (ACPI_FAILURE (Status))
> +    {
> +            return;
> +    }
> +
> +    Offset += ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST, Resources);
> +
> +    /* Dump the Resource List */
> +
> +    Count = 0;
> +    while ((Offset < Table->Length) &&
> +           (DrtmRl->ResourceCount > Count))
> +    {
> +        Status = AcpiDmDumpTable (Table->Length, Offset,
> +                    ACPI_ADD_PTR (void, Table, Offset),
> +                    sizeof (ACPI_DRTM_RESOURCE),
> +                    AcpiDmTableInfoDrtm1a);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return;
> +        }
> +
> +        Offset += sizeof (ACPI_DRTM_RESOURCE);
> +        Count++;
> +    }
> +
> +    /* Dump DPS */
> +
> +    DrtmDps = ACPI_ADD_PTR (ACPI_DRTM_DPS_ID, Table, Offset);
> +    AcpiOsPrintf ("\n");
> +    Status = AcpiDmDumpTable (Table->Length, Offset,
> +                DrtmDps, sizeof (ACPI_DRTM_DPS_ID),
> +                AcpiDmTableInfoDrtm2);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return;
> +    }
> +}
> +
> +
> +/*******************************************************************************
> + *
>    * FUNCTION:    AcpiDmDumpEinj
>    *
>    * PARAMETERS:  Table               - A EINJ table
> @@ -1501,6 +1692,230 @@ AcpiDmDumpHest (
>   
>   /*******************************************************************************
>    *
> + * FUNCTION:    AcpiDmDumpIort
> + *
> + * PARAMETERS:  Table               - A IORT table
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Format the contents of a IORT
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmDumpIort (
> +    ACPI_TABLE_HEADER       *Table)
> +{
> +    ACPI_STATUS             Status;
> +    ACPI_TABLE_IORT         *Iort;
> +    ACPI_IORT_NODE          *IortNode;
> +    ACPI_IORT_ITS_GROUP     *IortItsGroup = NULL;
> +    ACPI_IORT_SMMU          *IortSmmu = NULL;
> +    UINT32                  Offset;
> +    UINT32                  NodeOffset;
> +    UINT32                  Length;
> +    ACPI_DMTABLE_INFO       *InfoTable;
> +    char                    *String;
> +    UINT32                  i;
> +
> +
> +    /* Main table */
> +
> +    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIort);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return;
> +    }
> +
> +    Iort = ACPI_CAST_PTR (ACPI_TABLE_IORT, Table);
> +    Offset = sizeof (ACPI_TABLE_IORT);
> +
> +    /* Dump the OptionalPadding (optional) */
> +
> +    if (Iort->NodeOffset > Offset)
> +    {
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Table,
> +                    Iort->NodeOffset - Offset, AcpiDmTableInfoIortPad);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return;
> +        }
> +    }
> +
> +    Offset = Iort->NodeOffset;
> +    while (Offset < Table->Length)
> +    {
> +        /* Common subtable header */
> +
> +        IortNode = ACPI_ADD_PTR (ACPI_IORT_NODE, Table, Offset);
> +        AcpiOsPrintf ("\n");
> +        Length = ACPI_OFFSET (ACPI_IORT_NODE, NodeData);
> +        Status = AcpiDmDumpTable (Table->Length, Offset,
> +                    IortNode, Length, AcpiDmTableInfoIortHdr);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return;
> +        }
> +
> +        NodeOffset = Length;
> +
> +        switch (IortNode->Type)
> +        {
> +        case ACPI_IORT_NODE_ITS_GROUP:
> +
> +            InfoTable = AcpiDmTableInfoIort0;
> +            Length = ACPI_OFFSET (ACPI_IORT_ITS_GROUP, Identifiers);
> +            IortItsGroup = ACPI_ADD_PTR (ACPI_IORT_ITS_GROUP, IortNode, NodeOffset);
> +            break;
> +
> +        case ACPI_IORT_NODE_NAMED_COMPONENT:
> +
> +            InfoTable = AcpiDmTableInfoIort1;
> +            Length = ACPI_OFFSET (ACPI_IORT_NAMED_COMPONENT, DeviceName);
> +            String = ACPI_ADD_PTR (char, IortNode, NodeOffset + Length);
> +            Length += ACPI_STRLEN (String) + 1;
> +            break;
> +
> +        case ACPI_IORT_NODE_PCI_ROOT_COMPLEX:
> +
> +            InfoTable = AcpiDmTableInfoIort2;
> +            Length = IortNode->Length - NodeOffset;
> +            break;
> +
> +        case ACPI_IORT_NODE_SMMU:
> +
> +            InfoTable = AcpiDmTableInfoIort3;
> +            Length = ACPI_OFFSET (ACPI_IORT_SMMU, Interrupts);
> +            IortSmmu = ACPI_ADD_PTR (ACPI_IORT_SMMU, IortNode, NodeOffset);
> +            break;
> +
> +        default:
> +
> +            AcpiOsPrintf ("\n**** Unknown IORT node type 0x%X\n",
> +                IortNode->Type);
> +
> +            /* Attempt to continue */
> +
> +            if (!IortNode->Length)
> +            {
> +                AcpiOsPrintf ("Invalid zero length IORT node\n");
> +                return;
> +            }
> +            goto NextSubTable;
> +        }
> +
> +        /* Dump the node subtable header */
> +
> +        AcpiOsPrintf ("\n");
> +        Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
> +                    ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
> +                    Length, InfoTable);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return;
> +        }
> +
> +        NodeOffset += Length;
> +
> +        /* Dump the node specific data */
> +
> +        switch (IortNode->Type)
> +        {
> +        case ACPI_IORT_NODE_ITS_GROUP:
> +
> +            /* Validate IortItsGroup to avoid compiler warnings */
> +
> +            if (IortItsGroup)
> +            {
> +                for (i = 0; i < IortItsGroup->ItsCount; i++)
> +                {
> +                    Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
> +                                ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
> +                                4, AcpiDmTableInfoIort0a);
> +                    NodeOffset += 4;
> +                }
> +            }
> +            break;
> +
> +        case ACPI_IORT_NODE_NAMED_COMPONENT:
> +
> +            /* Dump the Padding (optional) */
> +
> +            if (IortNode->Length > NodeOffset)
> +            {
> +                Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
> +                            Table, IortNode->Length - NodeOffset,
> +                            AcpiDmTableInfoIort1a);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return;
> +                }
> +            }
> +            break;
> +
> +        case ACPI_IORT_NODE_SMMU:
> +
> +            AcpiOsPrintf ("\n");
> +
> +            /* Validate IortSmmu to avoid compiler warnings */
> +
> +            if (IortSmmu)
> +            {
> +                Length = 2 * sizeof (UINT64);
> +                NodeOffset = IortSmmu->GlobalInterruptOffset;
> +                Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
> +                            ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
> +                            Length, AcpiDmTableInfoIort3a);
> +
> +                NodeOffset = IortSmmu->ContextInterruptOffset;
> +                for (i = 0; i < IortSmmu->ContextInterruptCount; i++)
> +                {
> +                    Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
> +                                ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
> +                                8, AcpiDmTableInfoIort3b);
> +                    NodeOffset += 8;
> +                }
> +
> +                NodeOffset = IortSmmu->PmuInterruptOffset;
> +                for (i = 0; i < IortSmmu->PmuInterruptCount; i++)
> +                {
> +                    Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
> +                                ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
> +                                8, AcpiDmTableInfoIort3c);
> +                    NodeOffset += 8;
> +                }
> +            }
> +            break;
> +
> +        default:
> +
> +            break;
> +        }
> +
> +        /* Dump the ID mappings */
> +
> +        NodeOffset = IortNode->MappingOffset;
> +        for (i = 0; i < IortNode->MappingCount; i++)
> +        {
> +            AcpiOsPrintf ("\n");
> +            Length = sizeof (ACPI_IORT_ID_MAPPING);
> +            Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
> +                        ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
> +                        Length, AcpiDmTableInfoIortMap);
> +            NodeOffset += Length;
> +        }
> +
> +NextSubTable:
> +        /* Point to next node subtable */
> +
> +        Offset += IortNode->Length;
> +        IortNode = ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, IortNode->Length);
> +    }
> +}
> +
> +
> +/*******************************************************************************
> + *
>    * FUNCTION:    AcpiDmDumpIvrs
>    *
>    * PARAMETERS:  Table               - A IVRS table
> @@ -1726,12 +2141,6 @@ AcpiDmDumpLpit (
>               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 */
> @@ -1880,6 +2289,11 @@ AcpiDmDumpMadt (
>               InfoTable = AcpiDmTableInfoMadt14;
>               break;
>   
> +        case ACPI_MADT_TYPE_GENERIC_TRANSLATOR:
> +
> +            InfoTable = AcpiDmTableInfoMadt15;
> +            break;
> +
>           default:
>   
>               AcpiOsPrintf ("\n**** Unknown MADT subtable type 0x%X\n\n", SubTable->Type);
> @@ -2218,6 +2632,180 @@ AcpiDmDumpMtmr (
>   
>   /*******************************************************************************
>    *
> + * FUNCTION:    AcpiDmDumpNfit
> + *
> + * PARAMETERS:  Table               - A NFIT table
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Format the contents of an NFIT.
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmDumpNfit (
> +    ACPI_TABLE_HEADER       *Table)
> +{
> +    ACPI_STATUS             Status;
> +    UINT32                  Offset = sizeof (ACPI_TABLE_NFIT);
> +    UINT32                  FieldOffset = 0;
> +    UINT32                  Length;
> +    ACPI_NFIT_HEADER        *SubTable;
> +    ACPI_DMTABLE_INFO       *InfoTable;
> +    ACPI_NFIT_INTERLEAVE    *Interleave = NULL;
> +    ACPI_NFIT_SMBIOS        *SmbiosInfo = NULL;
> +    ACPI_NFIT_FLUSH_ADDRESS *Hint = NULL;
> +    UINT32                  i;
> +
> +
> +    /* Main table */
> +
> +    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoNfit);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return;
> +    }
> +
> +    /* Subtables */
> +
> +    SubTable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Table, Offset);
> +    while (Offset < Table->Length)
> +    {
> +        /* NFIT subtable header */
> +
> +        AcpiOsPrintf ("\n");
> +        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
> +                    SubTable->Length, AcpiDmTableInfoNfitHdr);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return;
> +        }
> +
> +        switch (SubTable->Type)
> +        {
> +        case ACPI_NFIT_TYPE_SYSTEM_ADDRESS:
> +
> +            InfoTable = AcpiDmTableInfoNfit0;
> +            break;
> +
> +        case ACPI_NFIT_TYPE_MEMORY_MAP:
> +
> +            InfoTable = AcpiDmTableInfoNfit1;
> +            break;
> +
> +        case ACPI_NFIT_TYPE_INTERLEAVE:
> +
> +            /* Has a variable number of 32-bit values at the end */
> +
> +            InfoTable = AcpiDmTableInfoNfit2;
> +            Interleave = ACPI_CAST_PTR (ACPI_NFIT_INTERLEAVE, SubTable);
> +            FieldOffset = sizeof (ACPI_NFIT_INTERLEAVE);
> +            break;
> +
> +        case ACPI_NFIT_TYPE_SMBIOS:
> +
> +            SmbiosInfo = ACPI_CAST_PTR (ACPI_NFIT_SMBIOS, SubTable);
> +            InfoTable = AcpiDmTableInfoNfit3;
> +            break;
> +
> +        case ACPI_NFIT_TYPE_CONTROL_REGION:
> +
> +            InfoTable = AcpiDmTableInfoNfit4;
> +            break;
> +
> +        case ACPI_NFIT_TYPE_DATA_REGION:
> +
> +            InfoTable = AcpiDmTableInfoNfit5;
> +            break;
> +
> +        case ACPI_NFIT_TYPE_FLUSH_ADDRESS:
> +
> +            /* Has a variable number of 64-bit addresses at the end */
> +
> +            InfoTable = AcpiDmTableInfoNfit6;
> +            Hint = ACPI_CAST_PTR (ACPI_NFIT_FLUSH_ADDRESS, SubTable);
> +            FieldOffset = sizeof (ACPI_NFIT_FLUSH_ADDRESS) - sizeof (UINT64);
> +            break;
> +
> +        default:
> +            AcpiOsPrintf ("\n**** Unknown NFIT subtable type 0x%X\n", SubTable->Type);
> +
> +            /* Attempt to continue */
> +
> +            if (!SubTable->Length)
> +            {
> +                AcpiOsPrintf ("Invalid zero length subtable\n");
> +                return;
> +            }
> +            goto NextSubTable;
> +        }
> +
> +        AcpiOsPrintf ("\n");
> +        Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
> +                    SubTable->Length, InfoTable);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return;
> +        }
> +
> +        /* Per-subtable variable-length fields */
> +
> +        switch (SubTable->Type)
> +        {
> +        case ACPI_NFIT_TYPE_INTERLEAVE:
> +
> +            for (i = 0; i < Interleave->LineCount; i++)
> +            {
> +                Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset,
> +                            &Interleave->LineOffset[i],
> +                            sizeof (UINT32), AcpiDmTableInfoNfit2a);
> +                FieldOffset += sizeof (UINT32);
> +            }
> +            break;
> +
> +        case ACPI_NFIT_TYPE_SMBIOS:
> +
> +            Length = SubTable->Length - sizeof (ACPI_NFIT_SMBIOS) + sizeof (UINT8);
> +            if (Length)
> +            {
> +                Status = AcpiDmDumpTable (Table->Length,
> +                            sizeof (ACPI_NFIT_SMBIOS) - sizeof (UINT8),
> +                            SmbiosInfo,
> +                            Length, AcpiDmTableInfoNfit3a);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return;
> +                }
> +            }
> +
> +            break;
> +
> +        case ACPI_NFIT_TYPE_FLUSH_ADDRESS:
> +
> +            for (i = 0; i < Hint->HintCount; i++)
> +            {
> +                Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset,
> +                            &Hint->HintAddress[i],
> +                            sizeof (UINT64), AcpiDmTableInfoNfit6a);
> +                FieldOffset += sizeof (UINT64);
> +            }
> +            break;
> +
> +        default:
> +            break;
> +        }
> +
> +NextSubTable:
> +        /* Point to next subtable */
> +
> +        Offset += SubTable->Length;
> +        SubTable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, SubTable, SubTable->Length);
> +    }
> +}
> +
> +
> +/*******************************************************************************
> + *
>    * FUNCTION:    AcpiDmDumpPcct
>    *
>    * PARAMETERS:  Table               - A PCCT table
> @@ -2792,6 +3380,56 @@ NextSubTable:
>   
>   /*******************************************************************************
>    *
> + * FUNCTION:    AcpiDmDumpStao
> + *
> + * PARAMETERS:  Table               - A STAO table
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Format the contents of a STAO. This is a variable-length
> + *              table that contains an open-ended number of ASCII strings
> + *              at the end of the table.
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmDumpStao (
> +    ACPI_TABLE_HEADER       *Table)
> +{
> +    ACPI_STATUS             Status;
> +    char                    *Namepath;
> +    UINT32                  Length = Table->Length;
> +    UINT32                  StringLength;
> +    UINT32                  Offset = sizeof (ACPI_TABLE_STAO);
> +
> +
> +    /* Main table */
> +
> +    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoStao);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return;
> +    }
> +
> +    /* The rest of the table consists of Namepath strings */
> +
> +    while (Offset < Table->Length)
> +    {
> +        Namepath = ACPI_ADD_PTR (char, Table, Offset);
> +        StringLength = ACPI_STRLEN (Namepath) + 1;
> +
> +        AcpiDmLineHeader (Offset, StringLength, "Namestring");
> +        AcpiOsPrintf ("\"%s\"\n", Namepath);
> +
> +        /* Point to next namepath */
> +
> +        Offset += StringLength;
> +    }
> +}
> +
> +
> +/*******************************************************************************
> + *
>    * FUNCTION:    AcpiDmDumpVrtc
>    *
>    * PARAMETERS:  Table               - A VRTC table
> @@ -2892,3 +3530,49 @@ AcpiDmDumpWdat (
>           SubTable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, SubTable, sizeof (ACPI_WDAT_ENTRY));
>       }
>   }
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiDmDumpWpbt
> + *
> + * PARAMETERS:  Table               - A WPBT table
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Format the contents of a WPBT. This table type consists
> + *              of an open-ended arguments buffer at the end of the table.
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmDumpWpbt (
> +    ACPI_TABLE_HEADER       *Table)
> +{
> +    ACPI_STATUS             Status;
> +    ACPI_TABLE_WPBT         *SubTable;
> +    UINT32                  Length = Table->Length;
> +    UINT16                  ArgumentsLength;
> +
> +
> +    /* Dump the main table */
> +
> +    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoWpbt);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return;
> +    }
> +
> +    /* Extract the arguments buffer length from the main table */
> +
> +    SubTable = ACPI_CAST_PTR (ACPI_TABLE_WPBT, Table);
> +    ArgumentsLength = SubTable->ArgumentsLength;
> +
> +    /* Dump the arguments buffer */
> +
> +    AcpiDmDumpTable (Table->Length, 0, Table, ArgumentsLength,
> +        AcpiDmTableInfoWpbt0);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return;
> +    }
> +}
> diff --git a/src/acpica/source/common/dmtbinfo.c b/src/acpica/source/common/dmtbinfo.c
> index 0405462..41e4d6a 100644
> --- a/src/acpica/source/common/dmtbinfo.c
> +++ b/src/acpica/source/common/dmtbinfo.c
> @@ -168,12 +168,14 @@
>   #define ACPI_GTDT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_GTDT,f)
>   #define ACPI_HEST_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_HEST,f)
>   #define ACPI_HPET_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_HPET,f)
> +#define ACPI_IORT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_IORT,f)
>   #define ACPI_IVRS_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_IVRS,f)
>   #define ACPI_MADT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_MADT,f)
>   #define ACPI_MCFG_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_MCFG,f)
>   #define ACPI_MCHI_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_MCHI,f)
>   #define ACPI_MPST_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_MPST,f)
>   #define ACPI_MSCT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_MSCT,f)
> +#define ACPI_NFIT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_NFIT,f)
>   #define ACPI_PCCT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_PCCT,f)
>   #define ACPI_PMTT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_PMTT,f)
>   #define ACPI_S3PT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_S3PT,f)
> @@ -182,6 +184,7 @@
>   #define ACPI_SPCR_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SPCR,f)
>   #define ACPI_SPMI_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SPMI,f)
>   #define ACPI_SRAT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SRAT,f)
> +#define ACPI_STAO_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_STAO,f)
>   #define ACPI_TCPA_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA,f)
>   #define ACPI_TPM2_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_TPM2,f)
>   #define ACPI_UEFI_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_UEFI,f)
> @@ -189,6 +192,8 @@
>   #define ACPI_WDAT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_WDAT,f)
>   #define ACPI_WDDT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_WDDT,f)
>   #define ACPI_WDRT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_WDRT,f)
> +#define ACPI_WPBT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_WPBT,f)
> +#define ACPI_XENV_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_XENV,f)
>   
>   /* Subtables */
>   
> @@ -210,6 +215,10 @@
>   #define ACPI_DMAR2_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_DMAR_ATSR,f)
>   #define ACPI_DMAR3_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_DMAR_RHSA,f)
>   #define ACPI_DMAR4_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_DMAR_ANDD,f)
> +#define ACPI_DRTM0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST,f)
> +#define ACPI_DRTM1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST,f)
> +#define ACPI_DRTM1a_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_DRTM_RESOURCE,f)
> +#define ACPI_DRTM2_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_DRTM_DPS_ID,f)
>   #define ACPI_EINJ0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_WHEA_HEADER,f)
>   #define ACPI_ERST0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_WHEA_HEADER,f)
>   #define ACPI_FPDTH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_FPDT_HEADER,f)
> @@ -228,6 +237,13 @@
>   #define ACPI_HEST9_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_HEST_GENERIC,f)
>   #define ACPI_HESTN_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_HEST_NOTIFY,f)
>   #define ACPI_HESTB_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_HEST_IA_ERROR_BANK,f)
> +#define ACPI_IORT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_IORT_ITS_GROUP,f)
> +#define ACPI_IORT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_IORT_NAMED_COMPONENT,f)
> +#define ACPI_IORT2_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_IORT_ROOT_COMPLEX,f)
> +#define ACPI_IORT3_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_IORT_SMMU,f)
> +#define ACPI_IORTA_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_IORT_MEMORY_ACCESS,f)
> +#define ACPI_IORTH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_IORT_NODE,f)
> +#define ACPI_IORTM_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_IORT_ID_MAPPING,f)
>   #define ACPI_IVRSH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_IVRS_HEADER,f)
>   #define ACPI_IVRS0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_IVRS_HARDWARE,f)
>   #define ACPI_IVRS1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_IVRS_MEMORY,f)
> @@ -237,7 +253,6 @@
>   #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)
> @@ -253,6 +268,7 @@
>   #define ACPI_MADT12_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_DISTRIBUTOR,f)
>   #define ACPI_MADT13_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_MSI_FRAME,f)
>   #define ACPI_MADT14_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_REDISTRIBUTOR,f)
> +#define ACPI_MADT15_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_TRANSLATOR,f)
>   #define ACPI_MADTH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_SUBTABLE_HEADER,f)
>   #define ACPI_MCFG0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MCFG_ALLOCATION,f)
>   #define ACPI_MPST0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MPST_POWER_NODE,f)
> @@ -262,6 +278,14 @@
>   #define ACPI_MPST2_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MPST_POWER_DATA,f)
>   #define ACPI_MSCT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MSCT_PROXIMITY,f)
>   #define ACPI_MTMR0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MTMR_ENTRY,f)
> +#define ACPI_NFITH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_NFIT_HEADER,f)
> +#define ACPI_NFIT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_NFIT_SYSTEM_ADDRESS,f)
> +#define ACPI_NFIT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_NFIT_MEMORY_MAP,f)
> +#define ACPI_NFIT2_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_NFIT_INTERLEAVE,f)
> +#define ACPI_NFIT3_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_NFIT_SMBIOS,f)
> +#define ACPI_NFIT4_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_NFIT_CONTROL_REGION,f)
> +#define ACPI_NFIT5_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_NFIT_DATA_REGION,f)
> +#define ACPI_NFIT6_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_NFIT_FLUSH_ADDRESS,f)
>   #define ACPI_PCCT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PCCT_SUBSPACE,f)
>   #define ACPI_PCCT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PCCT_HW_REDUCED,f)
>   #define ACPI_PMTT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PMTT_SOCKET,f)
> @@ -288,6 +312,8 @@
>   
>   /* Flags */
>   
> +#define ACPI_DRTM_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_DRTM,f,o)
> +#define ACPI_DRTM1a_FLAG_OFFSET(f,o)    ACPI_FLAG_OFFSET (ACPI_DRTM_RESOURCE,f,o)
>   #define ACPI_FADT_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_FADT,f,o)
>   #define ACPI_FACS_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_FACS,f,o)
>   #define ACPI_HPET_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_HPET,f,o)
> @@ -298,6 +324,9 @@
>   #define ACPI_GTDT_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_GTDT,f,o)
>   #define ACPI_GTDT0a_FLAG_OFFSET(f,o)    ACPI_FLAG_OFFSET (ACPI_GTDT_TIMER_ENTRY,f,o)
>   #define ACPI_GTDT1_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_GTDT_WATCHDOG,f,o)
> +#define ACPI_IORT3_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_IORT_SMMU,f,o)
> +#define ACPI_IORTA_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_IORT_MEMORY_ACCESS,f,o)
> +#define ACPI_IORTM_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_IORT_ID_MAPPING,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)
> @@ -312,6 +341,9 @@
>   #define ACPI_MADT13_FLAG_OFFSET(f,o)    ACPI_FLAG_OFFSET (ACPI_MADT_GENERIC_MSI_FRAME,f,o)
>   #define ACPI_MPST0_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_MPST_POWER_NODE,f,o)
>   #define ACPI_MPST2_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_MPST_POWER_DATA,f,o)
> +#define ACPI_NFIT0_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_NFIT_SYSTEM_ADDRESS,f,o)
> +#define ACPI_NFIT1_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_NFIT_MEMORY_MAP,f,o)
> +#define ACPI_NFIT4_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_NFIT_CONTROL_REGION,f,o)
>   #define ACPI_PCCT_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_PCCT,f,o)
>   #define ACPI_PCCT1_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_PCCT_HW_REDUCED,f,o)
>   #define ACPI_PMTTH_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_PMTT_HEADER,f,o)
> @@ -562,6 +594,14 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoFadt5[] =
>       ACPI_DMT_TERMINATOR
>   };
>   
> +/* ACPI 6.0 Extensions (FADT version 6) */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoFadt6[] =
> +{
> +    {ACPI_DMT_UINT64,   ACPI_FADT_OFFSET (HypervisorId),            "Hypervisor ID", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
>   
>   /*
>    * Remaining tables are not consumed directly by the ACPICA subsystem
> @@ -752,7 +792,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoCpep0[] =
>   
>   ACPI_DMTABLE_INFO           AcpiDmTableInfoCsrt0[] =
>   {
> -    {ACPI_DMT_UINT32,   ACPI_CSRT0_OFFSET (Length),                 "Length", 0},
> +    {ACPI_DMT_UINT32,   ACPI_CSRT0_OFFSET (Length),                 "Length", DT_LENGTH},
>       {ACPI_DMT_UINT32,   ACPI_CSRT0_OFFSET (VendorId),               "Vendor ID", 0},
>       {ACPI_DMT_UINT32,   ACPI_CSRT0_OFFSET (SubvendorId),            "Subvendor ID", 0},
>       {ACPI_DMT_UINT16,   ACPI_CSRT0_OFFSET (DeviceId),               "Device ID", 0},
> @@ -787,13 +827,19 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoCsrt1[] =
>   
>   ACPI_DMTABLE_INFO           AcpiDmTableInfoCsrt2[] =
>   {
> -    {ACPI_DMT_UINT32,   ACPI_CSRT2_OFFSET (Length),                 "Length", 0},
> +    {ACPI_DMT_UINT32,   ACPI_CSRT2_OFFSET (Length),                 "Length", DT_LENGTH},
>       {ACPI_DMT_UINT16,   ACPI_CSRT2_OFFSET (Type),                   "Type", 0},
>       {ACPI_DMT_UINT16,   ACPI_CSRT2_OFFSET (Subtype),                "Subtype", 0},
>       {ACPI_DMT_UINT32,   ACPI_CSRT2_OFFSET (Uid),                    "UID", 0},
>       ACPI_DMT_TERMINATOR
>   };
>   
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoCsrt2a[] =
> +{
> +    {ACPI_DMT_RAW_BUFFER, 0,                                        "ResourceInfo", DT_OPTIONAL},
> +    ACPI_DMT_TERMINATOR
> +};
> +
>   
>   /*******************************************************************************
>    *
> @@ -849,7 +895,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoDbg2Name[] =
>   
>   ACPI_DMTABLE_INFO           AcpiDmTableInfoDbg2OemData[] =
>   {
> -    {ACPI_DMT_BUFFER,   0,                                          "OEM Data", DT_OPTIONAL},
> +    {ACPI_DMT_RAW_BUFFER, 0,                                        "OEM Data", DT_OPTIONAL},
>       ACPI_DMT_TERMINATOR
>   };
>   
> @@ -967,7 +1013,54 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoDmar4[] =
>   
>   ACPI_DMTABLE_INFO           AcpiDmTableInfoDrtm[] =
>   {
> +    {ACPI_DMT_UINT64,   ACPI_DRTM_OFFSET (EntryBaseAddress),        "Entry Base Address", 0},
> +    {ACPI_DMT_UINT64,   ACPI_DRTM_OFFSET (EntryLength),             "Entry Length", 0},
> +    {ACPI_DMT_UINT32,   ACPI_DRTM_OFFSET (EntryAddress32),          "Entry 32", 0},
> +    {ACPI_DMT_UINT64,   ACPI_DRTM_OFFSET (EntryAddress64),          "Entry 64", 0},
> +    {ACPI_DMT_UINT64,   ACPI_DRTM_OFFSET (ExitAddress),             "Exit Address", 0},
> +    {ACPI_DMT_UINT64,   ACPI_DRTM_OFFSET (LogAreaAddress),          "Log Area Start", 0},
> +    {ACPI_DMT_UINT32,   ACPI_DRTM_OFFSET (LogAreaLength),           "Log Area Length", 0},
> +    {ACPI_DMT_UINT64,   ACPI_DRTM_OFFSET (ArchDependentAddress),    "Arch Dependent Address", 0},
> +    {ACPI_DMT_UINT32,   ACPI_DRTM_OFFSET (Flags),                   "Flags (decoded below)", 0},
> +    {ACPI_DMT_FLAG0,    ACPI_DRTM_FLAG_OFFSET (Flags, 0),           "Namespace in TCB", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_DRTM_FLAG_OFFSET (Flags, 0),           "Gap Code on S3 Resume", 0},
> +    {ACPI_DMT_FLAG2,    ACPI_DRTM_FLAG_OFFSET (Flags, 0),           "Gap Code on DLME_Exit", 0},
> +    {ACPI_DMT_FLAG3,    ACPI_DRTM_FLAG_OFFSET (Flags, 0),           "PCR_Authorities Changed", 0},
> +    ACPI_DMT_TERMINATOR
> +};
>   
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoDrtm0[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_DRTM0_OFFSET (ValidatedTableCount),    "Validated Table Count", DT_COUNT},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoDrtm0a[] =
> +{
> +    {ACPI_DMT_UINT64,   0,                                          "Table Address", DT_OPTIONAL},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoDrtm1[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_DRTM1_OFFSET (ResourceCount),          "Resource Count", DT_COUNT},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoDrtm1a[] =
> +{
> +    {ACPI_DMT_UINT56,   ACPI_DRTM1a_OFFSET (Size[0]),               "Size", DT_OPTIONAL},
> +    {ACPI_DMT_UINT8,    ACPI_DRTM1a_OFFSET (Type),                  "Type", 0},
> +    {ACPI_DMT_FLAG0,    ACPI_DRTM1a_FLAG_OFFSET (Type, 0),          "Resource Type", 0},
> +    {ACPI_DMT_FLAG7,    ACPI_DRTM1a_FLAG_OFFSET (Type, 0),          "Protections", 0},
> +    {ACPI_DMT_UINT64,   ACPI_DRTM1a_OFFSET (Address),               "Address", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoDrtm2[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_DRTM2_OFFSET (DpsIdLength),            "DLME Platform Id Length", DT_COUNT},
> +    {ACPI_DMT_BUF16,    ACPI_DRTM2_OFFSET (DpsId),                  "DLME Platform Id", DT_COUNT},
>       ACPI_DMT_TERMINATOR
>   };
>   
> @@ -1374,6 +1467,148 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoHpet[] =
>   
>   /*******************************************************************************
>    *
> + * IORT - IO Remapping Table
> + *
> + ******************************************************************************/
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIort[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_IORT_OFFSET (NodeCount),               "Node Count", 0},
> +    {ACPI_DMT_UINT32,   ACPI_IORT_OFFSET (NodeOffset),              "Node Offset", 0},
> +    {ACPI_DMT_UINT32,   ACPI_IORT_OFFSET (Reserved),                "Reserved", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* Optional padding field */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIortPad[] =
> +{
> +    {ACPI_DMT_RAW_BUFFER, 0,                                        "Optional Padding", DT_OPTIONAL},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* Common Subtable header (one per Subtable) */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIortHdr[] =
> +{
> +    {ACPI_DMT_UINT8,    ACPI_IORTH_OFFSET (Type),                   "Type", 0},
> +    {ACPI_DMT_UINT16,   ACPI_IORTH_OFFSET (Length),                 "Length", DT_LENGTH},
> +    {ACPI_DMT_UINT8,    ACPI_IORTH_OFFSET (Revision),               "Revision", 0},
> +    {ACPI_DMT_UINT32,   ACPI_IORTH_OFFSET (Reserved),               "Reserved", 0},
> +    {ACPI_DMT_UINT32,   ACPI_IORTH_OFFSET (MappingCount),           "Mapping Count", 0},
> +    {ACPI_DMT_UINT32,   ACPI_IORTH_OFFSET (MappingOffset),          "Mapping Offset", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIortMap[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_IORTM_OFFSET (InputBase),              "Input base", DT_OPTIONAL},
> +    {ACPI_DMT_UINT32,   ACPI_IORTM_OFFSET (IdCount),                "ID Count", 0},
> +    {ACPI_DMT_UINT32,   ACPI_IORTM_OFFSET (OutputBase),             "Output Base", 0},
> +    {ACPI_DMT_UINT32,   ACPI_IORTM_OFFSET (OutputReference),        "Output Reference", 0},
> +    {ACPI_DMT_UINT32,   ACPI_IORTM_OFFSET (Flags),                  "Flags (decoded below)", 0},
> +    {ACPI_DMT_FLAG0,    ACPI_IORTM_FLAG_OFFSET (Flags, 0),          "Single Mapping", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIortAcc[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_IORTA_OFFSET (CacheCoherency),         "Cache Coherency", 0},
> +    {ACPI_DMT_UINT8,    ACPI_IORTA_OFFSET (Hints),                  "Hints (decoded below)", 0},
> +    {ACPI_DMT_FLAG0,    ACPI_IORTA_FLAG_OFFSET (Hints, 0),          "Transient", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_IORTA_FLAG_OFFSET (Hints, 0),          "Write Allocate", 0},
> +    {ACPI_DMT_FLAG2,    ACPI_IORTA_FLAG_OFFSET (Hints, 0),          "Read Allocate", 0},
> +    {ACPI_DMT_FLAG3,    ACPI_IORTA_FLAG_OFFSET (Hints, 0),          "Override", 0},
> +    {ACPI_DMT_UINT16,   ACPI_IORTA_OFFSET (Reserved),               "Reserved", 0},
> +    {ACPI_DMT_UINT8,    ACPI_IORTA_OFFSET (MemoryFlags),            "Memory Flags (decoded below)", 0},
> +    {ACPI_DMT_FLAG0,    ACPI_IORTA_FLAG_OFFSET (MemoryFlags, 0),    "Coherency", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_IORTA_FLAG_OFFSET (MemoryFlags, 0),    "Device Attribute", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* IORT subtables */
> +
> +/* 0x00: ITS Group */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIort0[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_IORT0_OFFSET (ItsCount),               "ItsCount", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIort0a[] =
> +{
> +    {ACPI_DMT_UINT32,   0,                                          "Identifiers", DT_OPTIONAL},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 0x01: Named Component */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIort1[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_IORT1_OFFSET (NodeFlags),              "Node Flags", 0},
> +    {ACPI_DMT_IORTMEM,  ACPI_IORT1_OFFSET (MemoryProperties),       "Memory Properties", 0},
> +    {ACPI_DMT_UINT8,    ACPI_IORT1_OFFSET (MemoryAddressLimit),     "Memory Size Limit", 0},
> +    {ACPI_DMT_STRING,   ACPI_IORT1_OFFSET (DeviceName[0]),          "Device Name", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIort1a[] =
> +{
> +    {ACPI_DMT_RAW_BUFFER, 0,                                        "Padding", DT_OPTIONAL},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 0x02: PCI Root Complex */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIort2[] =
> +{
> +    {ACPI_DMT_IORTMEM,  ACPI_IORT2_OFFSET (MemoryProperties),       "Memory Properties", 0},
> +    {ACPI_DMT_UINT32,   ACPI_IORT2_OFFSET (AtsAttribute),           "ATS Attribute", 0},
> +    {ACPI_DMT_UINT32,   ACPI_IORT2_OFFSET (PciSegmentNumber),       "PCI Segment Number", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 0x03: SMMUv1/2 */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIort3[] =
> +{
> +    {ACPI_DMT_UINT64,   ACPI_IORT3_OFFSET (BaseAddress),            "Base Address", 0},
> +    {ACPI_DMT_UINT64,   ACPI_IORT3_OFFSET (Span),                   "Span", 0},
> +    {ACPI_DMT_UINT32,   ACPI_IORT3_OFFSET (Model),                  "Model", 0},
> +    {ACPI_DMT_UINT32,   ACPI_IORT3_OFFSET (Flags),                  "Flags (decoded below)", 0},
> +    {ACPI_DMT_FLAG0,    ACPI_IORT3_FLAG_OFFSET (Flags, 0),          "DVM Supported", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_IORT3_FLAG_OFFSET (Flags, 0),          "Coherent Walk", 0},
> +    {ACPI_DMT_UINT32,   ACPI_IORT3_OFFSET (GlobalInterruptOffset),  "Global Interrupt Offset", 0},
> +    {ACPI_DMT_UINT32,   ACPI_IORT3_OFFSET (ContextInterruptCount),  "Context Interrupt Count", 0},
> +    {ACPI_DMT_UINT32,   ACPI_IORT3_OFFSET (ContextInterruptOffset), "Context Interrupt Offset", 0},
> +    {ACPI_DMT_UINT32,   ACPI_IORT3_OFFSET (PmuInterruptCount),      "PMU Interrupt Count", 0},
> +    {ACPI_DMT_UINT32,   ACPI_IORT3_OFFSET (PmuInterruptOffset),     "PMU Interrupt Offset", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIort3a[] =
> +{
> +    {ACPI_DMT_UINT64,   0,                                          "SMMU_NSgIrpt Interrupt", 0},
> +    {ACPI_DMT_UINT64,   0,                                          "SMMU_NSgCfgIrpt Interrupt", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIort3b[] =
> +{
> +    {ACPI_DMT_UINT64,   0,                                          "Context Interrupt", DT_OPTIONAL},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIort3c[] =
> +{
> +    {ACPI_DMT_UINT64,   0,                                          "PMU Interrupt", DT_OPTIONAL},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +
> +/*******************************************************************************
> + *
>    * IVRS - I/O Virtualization Reporting Structure
>    *
>    ******************************************************************************/
> @@ -1504,22 +1739,6 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoLpit0[] =
>       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
> -};
> -
>   
>   /*******************************************************************************
>    *
> @@ -1701,6 +1920,8 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoMadt11[] =
>       {ACPI_DMT_UINT32,   ACPI_MADT11_OFFSET (VgicInterrupt),         "Virtual GIC Interrupt", 0},
>       {ACPI_DMT_UINT64,   ACPI_MADT11_OFFSET (GicrBaseAddress),       "Redistributor Base Address", 0},
>       {ACPI_DMT_UINT64,   ACPI_MADT11_OFFSET (ArmMpidr),              "ARM MPIDR", 0},
> +    {ACPI_DMT_UINT8,    ACPI_MADT11_OFFSET (EfficiencyClass),       "Efficiency Class", 0},
> +    {ACPI_DMT_UINT24,   ACPI_MADT11_OFFSET (Reserved2[0]),          "Reserved", 0},
>       ACPI_DMT_TERMINATOR
>   };
>   
> @@ -1712,7 +1933,8 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoMadt12[] =
>       {ACPI_DMT_UINT32,   ACPI_MADT12_OFFSET (GicId),                 "Local GIC Hardware ID", 0},
>       {ACPI_DMT_UINT64,   ACPI_MADT12_OFFSET (BaseAddress),           "Base Address", 0},
>       {ACPI_DMT_UINT32,   ACPI_MADT12_OFFSET (GlobalIrqBase),         "Interrupt Base", 0},
> -    {ACPI_DMT_UINT32,   ACPI_MADT12_OFFSET (Reserved2),             "Reserved", 0},
> +    {ACPI_DMT_UINT8,    ACPI_MADT12_OFFSET (Version),               "Version", 0},
> +    {ACPI_DMT_UINT24,   ACPI_MADT12_OFFSET (Reserved2[0]),          "Reserved", 0},
>      ACPI_DMT_TERMINATOR
>   };
>   
> @@ -1740,6 +1962,16 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoMadt14[] =
>      ACPI_DMT_TERMINATOR
>   };
>   
> +/* 15: Generic Translator (ACPI 6.0) */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoMadt15[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_MADT15_OFFSET (Reserved),              "Reserved", 0},
> +    {ACPI_DMT_UINT32,   ACPI_MADT15_OFFSET (TranslationId),         "Translation ID", 0},
> +    {ACPI_DMT_UINT64,   ACPI_MADT15_OFFSET (BaseAddress),           "Base Address", 0},
> +    {ACPI_DMT_UINT32,   ACPI_MADT15_OFFSET (Reserved2),             "Reserved", 0},
> +   ACPI_DMT_TERMINATOR
> +};
>   
>   /*******************************************************************************
>    *
> @@ -1922,6 +2154,156 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoMtmr0[] =
>   
>   /*******************************************************************************
>    *
> + * NFIT - NVDIMM Firmware Interface Table and Subtables - (ACPI 6.0)
> + *
> + ******************************************************************************/
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoNfit[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_NFIT_OFFSET (Reserved),                "Reserved", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* Common Subtable header */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoNfitHdr[] =
> +{
> +    {ACPI_DMT_NFIT,     ACPI_NFITH_OFFSET (Type),                   "Subtable Type", 0},
> +    {ACPI_DMT_UINT16,   ACPI_NFITH_OFFSET (Length),                 "Length", DT_LENGTH},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 0: System Physical Address Range Structure */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoNfit0[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_NFIT0_OFFSET (RangeIndex),             "Range Index", 0},
> +    {ACPI_DMT_UINT16,   ACPI_NFIT0_OFFSET (Flags),                  "Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_NFIT0_FLAG_OFFSET (Flags,0),           "Add/Online Operation Only", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_NFIT0_FLAG_OFFSET (Flags,0),           "Proximity Domain Valid", 0},
> +    {ACPI_DMT_UINT32,   ACPI_NFIT0_OFFSET (Reserved),               "Reserved", 0},
> +    {ACPI_DMT_UINT32,   ACPI_NFIT0_OFFSET (ProximityDomain),        "Proximity Domain", 0},
> +    {ACPI_DMT_UUID,     ACPI_NFIT0_OFFSET (RangeGuid[0]),           "Address Range GUID", 0},
> +    {ACPI_DMT_UINT64,   ACPI_NFIT0_OFFSET (Address),                "Address Range Base", 0},
> +    {ACPI_DMT_UINT64,   ACPI_NFIT0_OFFSET (Length),                 "Address Range Length", 0},
> +    {ACPI_DMT_UINT64,   ACPI_NFIT0_OFFSET (MemoryMapping),          "Memory Map Attribute", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 1: Memory Device to System Address Range Map Structure */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoNfit1[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_NFIT1_OFFSET (DeviceHandle),           "Device Handle", 0},
> +    {ACPI_DMT_UINT16,   ACPI_NFIT1_OFFSET (PhysicalId),             "Physical Id", 0},
> +    {ACPI_DMT_UINT16,   ACPI_NFIT1_OFFSET (RegionId),               "Region Id", 0},
> +    {ACPI_DMT_UINT16,   ACPI_NFIT1_OFFSET (RangeIndex),             "Range Index", 0},
> +    {ACPI_DMT_UINT16,   ACPI_NFIT1_OFFSET (RegionIndex),            "Control Region Index", 0},
> +    {ACPI_DMT_UINT64,   ACPI_NFIT1_OFFSET (RegionSize),             "Region Size", 0},
> +    {ACPI_DMT_UINT64,   ACPI_NFIT1_OFFSET (RegionOffset),           "Region Offset", 0},
> +    {ACPI_DMT_UINT64,   ACPI_NFIT1_OFFSET (Address),                "Address Region Base", 0},
> +    {ACPI_DMT_UINT16,   ACPI_NFIT1_OFFSET (InterleaveIndex),        "Interleave Index", 0},
> +    {ACPI_DMT_UINT16,   ACPI_NFIT1_OFFSET (InterleaveWays),         "Interleave Ways", 0},
> +    {ACPI_DMT_UINT16,   ACPI_NFIT1_OFFSET (Flags),                  "Flags", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_NFIT1_FLAG_OFFSET (Flags,0),           "Save to device failed", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_NFIT1_FLAG_OFFSET (Flags,0),           "Restore from device failed", 0},
> +    {ACPI_DMT_FLAG2,    ACPI_NFIT1_FLAG_OFFSET (Flags,0),           "Platform flush failed", 0},
> +    {ACPI_DMT_FLAG3,    ACPI_NFIT1_FLAG_OFFSET (Flags,0),           "Device not armed", 0},
> +    {ACPI_DMT_FLAG4,    ACPI_NFIT1_FLAG_OFFSET (Flags,0),           "Health events observed", 0},
> +    {ACPI_DMT_FLAG5,    ACPI_NFIT1_FLAG_OFFSET (Flags,0),           "Health events enabled", 0},
> +    {ACPI_DMT_UINT16,   ACPI_NFIT1_OFFSET (Reserved),               "Reserved", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 2: Interleave Structure */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoNfit2[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_NFIT2_OFFSET (InterleaveIndex),        "Interleave Index", 0},
> +    {ACPI_DMT_UINT16,   ACPI_NFIT2_OFFSET (Reserved),               "Reserved", 0},
> +    {ACPI_DMT_UINT32,   ACPI_NFIT2_OFFSET (LineCount),              "Line Count", 0},
> +    {ACPI_DMT_UINT32,   ACPI_NFIT2_OFFSET (LineSize),               "Line Size", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoNfit2a[] =
> +{
> +    {ACPI_DMT_UINT32,   0,                                          "Line Offset", DT_OPTIONAL},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 3: SMBIOS Management Information Structure */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoNfit3[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_NFIT3_OFFSET (Reserved),               "Reserved", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoNfit3a[] =
> +{
> +    {ACPI_DMT_RAW_BUFFER, 0,                                        "SMBIOS Table Entries", DT_OPTIONAL},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 4: NVDIMM Control Region Structure */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoNfit4[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_NFIT4_OFFSET (RegionIndex),            "Region Index", 0},
> +    {ACPI_DMT_UINT16,   ACPI_NFIT4_OFFSET (VendorId),               "Vendor Id", 0},
> +    {ACPI_DMT_UINT16,   ACPI_NFIT4_OFFSET (DeviceId),               "Device Id", 0},
> +    {ACPI_DMT_UINT16,   ACPI_NFIT4_OFFSET (RevisionId),             "Revision Id", 0},
> +    {ACPI_DMT_UINT16,   ACPI_NFIT4_OFFSET (SubsystemVendorId),      "Subsystem Vendor Id", 0},
> +    {ACPI_DMT_UINT16,   ACPI_NFIT4_OFFSET (SubsystemDeviceId),      "Subsystem Device Id", 0},
> +    {ACPI_DMT_UINT16,   ACPI_NFIT4_OFFSET (SubsystemRevisionId),    "Subsystem Revision Id", 0},
> +    {ACPI_DMT_UINT48,   ACPI_NFIT4_OFFSET (Reserved[0]),            "Reserved", 0},
> +    {ACPI_DMT_UINT32,   ACPI_NFIT4_OFFSET (SerialNumber),           "Serial Number", 0},
> +    {ACPI_DMT_UINT16,   ACPI_NFIT4_OFFSET (Code),                   "Code", 0},
> +    {ACPI_DMT_UINT16,   ACPI_NFIT4_OFFSET (Windows),                "Window Count", 0},
> +    {ACPI_DMT_UINT64,   ACPI_NFIT4_OFFSET (WindowSize),             "Window Size", 0},
> +    {ACPI_DMT_UINT64,   ACPI_NFIT4_OFFSET (CommandOffset),          "Command Offset", 0},
> +    {ACPI_DMT_UINT64,   ACPI_NFIT4_OFFSET (CommandSize),            "Command Size", 0},
> +    {ACPI_DMT_UINT64,   ACPI_NFIT4_OFFSET (StatusOffset),           "Status Offset", 0},
> +    {ACPI_DMT_UINT64,   ACPI_NFIT4_OFFSET (StatusSize),             "Status Size", 0},
> +    {ACPI_DMT_UINT16,   ACPI_NFIT4_OFFSET (Flags),                  "Flags", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_NFIT4_FLAG_OFFSET (Flags,0),           "Windows buffered", 0},
> +    {ACPI_DMT_UINT48,   ACPI_NFIT4_OFFSET (Reserved1[0]),           "Reserved1", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 5: NVDIMM Block Data Window Region Structure */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoNfit5[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_NFIT5_OFFSET (RegionIndex),            "Region Index", 0},
> +    {ACPI_DMT_UINT16,   ACPI_NFIT5_OFFSET (Windows),                "Window Count", 0},
> +    {ACPI_DMT_UINT64,   ACPI_NFIT5_OFFSET (Offset),                 "Offset", 0},
> +    {ACPI_DMT_UINT64,   ACPI_NFIT5_OFFSET (Size),                   "Size", 0},
> +    {ACPI_DMT_UINT64,   ACPI_NFIT5_OFFSET (Capacity),               "Capacity", 0},
> +    {ACPI_DMT_UINT64,   ACPI_NFIT5_OFFSET (StartAddress),           "Start Address", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 6: Flush Hint Address Structure */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoNfit6[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_NFIT6_OFFSET (DeviceHandle),           "Device Handle", 0},
> +    {ACPI_DMT_UINT16,   ACPI_NFIT6_OFFSET (HintCount),              "Hint Count", 0},
> +    {ACPI_DMT_UINT48,   ACPI_NFIT6_OFFSET (Reserved[0]),            "Reserved", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoNfit6a[] =
> +{
> +    {ACPI_DMT_UINT64,   0,                                          "Hint Address", DT_OPTIONAL},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +
> +/*******************************************************************************
> + *
>    * PCCT - Platform Communications Channel Table (ACPI 5.0)
>    *
>    ******************************************************************************/
> @@ -2282,6 +2664,25 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoSrat3[] =
>   
>   /*******************************************************************************
>    *
> + * STAO - Status Override Table (_STA override) - ACPI 6.0
> + *
> + ******************************************************************************/
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoStao[] =
> +{
> +    {ACPI_DMT_UINT8,    ACPI_STAO_OFFSET (IgnoreUart),              "Ignore UART", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoStaoStr[] =
> +{
> +    {ACPI_DMT_STRING,   0,                                          "Namepath", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +
> +/*******************************************************************************
> + *
>    * TCPA - Trusted Computing Platform Alliance table
>    *
>    ******************************************************************************/
> @@ -2460,6 +2861,49 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoWdrt[] =
>       ACPI_DMT_TERMINATOR
>   };
>   
> +
> +/*******************************************************************************
> + *
> + * WPBT - Windows Platform Environment Table (ACPI 6.0)
> + *        Version 1
> + *
> + * Conforms to "Windows Platform Binary Table (WPBT)" 29 November 2011
> + *
> + ******************************************************************************/
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoWpbt[] =
> +{
> +    {ACPI_DMT_UINT32,      ACPI_WPBT_OFFSET (HandoffSize),          "Handoff Size", 0},
> +    {ACPI_DMT_UINT64,      ACPI_WPBT_OFFSET (HandoffAddress),       "Handoff Address", 0},
> +    {ACPI_DMT_UINT8,       ACPI_WPBT_OFFSET (Layout),               "Layout", 0},
> +    {ACPI_DMT_UINT8,       ACPI_WPBT_OFFSET (Type),                 "Type", 0},
> +    {ACPI_DMT_UINT16,      ACPI_WPBT_OFFSET (ArgumentsLength),      "Arguments Length", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoWpbt0[] =
> +{
> +    {ACPI_DMT_UNICODE,     sizeof (ACPI_TABLE_WPBT),                "Command-line Arguments", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +
> +/*******************************************************************************
> + *
> + * XENV -  Xen Environment table (ACPI 6.0)
> + *
> + ******************************************************************************/
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoXenv[] =
> +{
> +    {ACPI_DMT_UINT64,   ACPI_XENV_OFFSET (GrantTableAddress),       "Grant Table Address", 0},
> +    {ACPI_DMT_UINT64,   ACPI_XENV_OFFSET (GrantTableSize),          "Grant Table Size", 0},
> +    {ACPI_DMT_UINT32,   ACPI_XENV_OFFSET (EventInterrupt),          "Event Interrupt", 0},
> +    {ACPI_DMT_UINT8,    ACPI_XENV_OFFSET (EventFlags),              "Event Flags", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +
>   /*! [Begin] no source code translation */
>   
>   /*
> diff --git a/src/acpica/source/compiler/aslascii.c b/src/acpica/source/compiler/aslascii.c
> index 9a4e127..b858a38 100644
> --- a/src/acpica/source/compiler/aslascii.c
> +++ b/src/acpica/source/compiler/aslascii.c
> @@ -220,8 +220,7 @@ FlCheckForAcpiTable (
>    *
>    * FUNCTION:    FlCheckForAscii
>    *
> - * PARAMETERS:  Handle              - Open input file
> - *              Filename            - Input filename
> + * PARAMETERS:  Filename            - Full input filename
>    *              DisplayErrors       - TRUE if error messages desired
>    *
>    * RETURN:      Status
> @@ -237,7 +236,6 @@ FlCheckForAcpiTable (
>   
>   ACPI_STATUS
>   FlCheckForAscii (
> -    FILE                    *Handle,
>       char                    *Filename,
>       BOOLEAN                 DisplayErrors)
>   {
> @@ -245,7 +243,12 @@ FlCheckForAscii (
>       ACPI_SIZE               BadBytes = 0;
>       BOOLEAN                 OpeningComment = FALSE;
>       ASL_FILE_STATUS         Status;
> +    FILE                    *Handle;
> +
> +
> +    /* Open file in text mode so file offset is always accurate */
>   
> +    Handle = fopen (Filename, "rb");
>   
>       Status.Line = 1;
>       Status.Offset = 0;
> @@ -286,16 +289,30 @@ FlCheckForAscii (
>               if ((BadBytes < 10) && (DisplayErrors))
>               {
>                   AcpiOsPrintf (
> -                    "Non-ASCII character [0x%2.2X] found in line %u, file offset 0x%.2X\n",
> +                    "Found non-ASCII character in source text: "
> +                    "0x%2.2X in line %u, file offset 0x%2.2X\n",
>                       Byte, Status.Line, Status.Offset);
>               }
> +            BadBytes++;
> +        }
>   
> +        /* Ensure character is either printable or a "space" char */
> +
> +        else if (!ACPI_IS_PRINT (Byte) && !ACPI_IS_SPACE (Byte))
> +        {
> +            if ((BadBytes < 10) && (DisplayErrors))
> +            {
> +                AcpiOsPrintf (
> +                    "Found invalid character in source text: "
> +                    "0x%2.2X in line %u, file offset 0x%2.2X\n",
> +                    Byte, Status.Line, Status.Offset);
> +            }
>               BadBytes++;
>           }
>   
> -        /* Update line counter */
> +        /* Update line counter as necessary */
>   
> -        else if (Byte == 0x0A)
> +        if (Byte == 0x0A)
>           {
>               Status.Line++;
>           }
> @@ -303,9 +320,7 @@ FlCheckForAscii (
>           Status.Offset++;
>       }
>   
> -    /* Seek back to the beginning of the source file */
> -
> -    fseek (Handle, 0, SEEK_SET);
> +    fclose (Handle);
>   
>       /* Were there any non-ASCII characters in the file? */
>   
> @@ -314,8 +329,8 @@ FlCheckForAscii (
>           if (DisplayErrors)
>           {
>               AcpiOsPrintf (
> -                "%u non-ASCII characters found in input source text, could be a binary file\n",
> -                BadBytes);
> +                "Total %u invalid characters found in input source text, "
> +                "could be a binary file\n", BadBytes);
>               AslError (ASL_ERROR, ASL_MSG_NON_ASCII, NULL, Filename);
>           }
>   
> @@ -358,6 +373,7 @@ FlConsumeAnsiComment (
>           {
>               if (Byte == '/')
>               {
> +                Status->Offset++;
>                   return;
>               }
>   
> diff --git a/src/acpica/source/compiler/aslcompiler.h b/src/acpica/source/compiler/aslcompiler.h
> index 68042b2..5c78095 100644
> --- a/src/acpica/source/compiler/aslcompiler.h
> +++ b/src/acpica/source/compiler/aslcompiler.h
> @@ -244,7 +244,6 @@ FlCheckForAcpiTable (
>   
>   ACPI_STATUS
>   FlCheckForAscii (
> -    FILE                    *Handle,
>       char                    *Filename,
>       BOOLEAN                 DisplayErrors);
>   
> diff --git a/src/acpica/source/compiler/aslcompiler.l b/src/acpica/source/compiler/aslcompiler.l
> index 53332d8..56df646 100644
> --- a/src/acpica/source/compiler/aslcompiler.l
> +++ b/src/acpica/source/compiler/aslcompiler.l
> @@ -781,9 +781,18 @@ NamePathTail                [.]{NameSeg}
>                                   return (PARSEOP_NAMESTRING); }
>   
>   .                           { count (1);
> -                                sprintf (MsgBuffer,
> -                                    "Invalid character (0x%2.2X), expecting ASL keyword or name",
> -                                    *AslCompilertext);
> +                                if (ACPI_IS_PRINT (*AslCompilertext))
> +                                {
> +                                    sprintf (MsgBuffer,
> +                                        "Invalid character (%c), expecting ASL keyword or name",
> +                                        *AslCompilertext);
> +                                }
> +                                else
> +                                {
> +                                    sprintf (MsgBuffer,
> +                                        "Invalid character (0x%2.2X), expecting ASL keyword or name",
> +                                        *AslCompilertext);
> +                                }
>                                   AslCompilererror (MsgBuffer);}
>   
>   <<EOF>>                     { if (AslPopInputFileStack ())
> diff --git a/src/acpica/source/compiler/asldefine.h b/src/acpica/source/compiler/asldefine.h
> index 57f2ef4..7d34da8 100644
> --- a/src/acpica/source/compiler/asldefine.h
> +++ b/src/acpica/source/compiler/asldefine.h
> @@ -125,7 +125,7 @@
>   #define ASL_INVOCATION_NAME         "iasl"
>   #define ASL_CREATOR_ID              "INTL"
>   
> -#define ASL_COMPLIANCE              "Supports ACPI Specification Revision 5.1"
> +#define ASL_COMPLIANCE              "Supports ACPI Specification Revision 6.0"
>   
>   
>   /* Configuration constants */
> diff --git a/src/acpica/source/compiler/aslfiles.c b/src/acpica/source/compiler/aslfiles.c
> index 39f6319..7443776 100644
> --- a/src/acpica/source/compiler/aslfiles.c
> +++ b/src/acpica/source/compiler/aslfiles.c
> @@ -121,9 +121,10 @@
>   
>   /* Local prototypes */
>   
> -FILE *
> +static FILE *
>   FlOpenIncludeWithPrefix (
>       char                    *PrefixDir,
> +    ACPI_PARSE_OBJECT       *Op,
>       char                    *Filename);
>   
>   
> @@ -366,9 +367,10 @@ ConvertBackslashes:
>    *
>    ******************************************************************************/
>   
> -FILE *
> +static FILE *
>   FlOpenIncludeWithPrefix (
>       char                    *PrefixDir,
> +    ACPI_PARSE_OBJECT       *Op,
>       char                    *Filename)
>   {
>       FILE                    *IncludeFile;
> @@ -392,6 +394,26 @@ FlOpenIncludeWithPrefix (
>           return (NULL);
>       }
>   
> +#ifdef _MUST_HANDLE_COMMENTS
> +    /*
> +     * Check entire include file for any # preprocessor directives.
> +     * This is because there may be some confusion between the #include
> +     * preprocessor directive and the ASL Include statement.
> +     */
> +    while (fgets (Gbl_CurrentLineBuffer, Gbl_LineBufferSize, IncludeFile))
> +    {
> +        if (Gbl_CurrentLineBuffer[0] == '#')
> +        {
> +            AslError (ASL_ERROR, ASL_MSG_INCLUDE_FILE,
> +                Op, "use #include instead");
> +        }
> +    }
> +#endif
> +
> +    /* Must seek back to the start of the file */
> +
> +    fseek (IncludeFile, 0, SEEK_SET);
> +
>       /* Push the include file on the open input file stack */
>   
>       AslPushInputFileStack (IncludeFile, Pathname);
> @@ -448,7 +470,7 @@ FlOpenIncludeFile (
>           (Op->Asl.Value.String[0] == '\\') ||
>           (Op->Asl.Value.String[1] == ':'))
>       {
> -        IncludeFile = FlOpenIncludeWithPrefix ("", Op->Asl.Value.String);
> +        IncludeFile = FlOpenIncludeWithPrefix ("", Op, Op->Asl.Value.String);
>           if (!IncludeFile)
>           {
>               goto ErrorExit;
> @@ -464,7 +486,7 @@ FlOpenIncludeFile (
>        *
>        * Construct the file pathname from the global directory name.
>        */
> -    IncludeFile = FlOpenIncludeWithPrefix (Gbl_DirectoryPath, Op->Asl.Value.String);
> +    IncludeFile = FlOpenIncludeWithPrefix (Gbl_DirectoryPath, Op, Op->Asl.Value.String);
>       if (IncludeFile)
>       {
>           return;
> @@ -477,7 +499,7 @@ FlOpenIncludeFile (
>       NextDir = Gbl_IncludeDirList;
>       while (NextDir)
>       {
> -        IncludeFile = FlOpenIncludeWithPrefix (NextDir->Dir, Op->Asl.Value.String);
> +        IncludeFile = FlOpenIncludeWithPrefix (NextDir->Dir, Op, Op->Asl.Value.String);
>           if (IncludeFile)
>           {
>               return;
> diff --git a/src/acpica/source/compiler/aslmessages.c b/src/acpica/source/compiler/aslmessages.c
> index 4ea71de..6e332f1 100644
> --- a/src/acpica/source/compiler/aslmessages.c
> +++ b/src/acpica/source/compiler/aslmessages.c
> @@ -342,7 +342,8 @@ const char                      *AslPreprocessorMsgs [] =
>   /*    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"
> +/*    ASL_MSG_WARNING_DIRECTIVE */          "#warning",
> +/*    ASL_MSG_INCLUDE_FILE */               "Found a # preprocessor directive in ASL Include() file"
>   };
>   
>   
> @@ -403,7 +404,7 @@ AeDecodeMessageId (
>   
>           if (Index >= ACPI_ARRAY_LENGTH (AslPreprocessorMsgs))
>           {
> -            return ("[Unknown Preprocesor exception ID]");
> +            return ("[Unknown Preprocessor exception ID]");
>           }
>       }
>   
> diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h
> index 12fe9d9..7501bbb 100644
> --- a/src/acpica/source/compiler/aslmessages.h
> +++ b/src/acpica/source/compiler/aslmessages.h
> @@ -339,6 +339,7 @@ typedef enum
>       ASL_MSG_UNKNOWN_DIRECTIVE,
>       ASL_MSG_UNKNOWN_PRAGMA,
>       ASL_MSG_WARNING_DIRECTIVE,
> +    ASL_MSG_INCLUDE_FILE
>   
>   } ASL_MESSAGE_IDS;
>   
> diff --git a/src/acpica/source/compiler/aslprepkg.c b/src/acpica/source/compiler/aslprepkg.c
> index 6b27e91..6a74e88 100644
> --- a/src/acpica/source/compiler/aslprepkg.c
> +++ b/src/acpica/source/compiler/aslprepkg.c
> @@ -223,6 +223,7 @@ ApCheckPackage (
>           case ACPI_PTYPE2_FIXED:
>           case ACPI_PTYPE2_MIN:
>           case ACPI_PTYPE2_FIX_VAR:
> +        case ACPI_PTYPE2_VAR_VAR:
>           default:
>   
>               break;
> @@ -396,6 +397,32 @@ ApCheckPackage (
>   
>           break;
>   
> +    case ACPI_PTYPE2_VAR_VAR:
> +
> +        /* Check for minimum size (ints at beginning + 1 subpackage) */
> +
> +        ExpectedCount = Package->RetInfo4.Count1 + 1;
> +        if (Count < ExpectedCount)
> +        {
> +            goto PackageTooSmall;
> +        }
> +
> +        /* Check the non-package elements at beginning of main package */
> +
> +        for (i = 0; i < Package->RetInfo4.Count1; ++i)
> +        {
> +            Status = ApCheckObjectType (Predefined->Info.Name, Op,
> +                Package->RetInfo4.ObjectType1, i);
> +            Op = Op->Asl.Next;
> +        }
> +
> +        /* Examine the variable-length list of subpackages */
> +
> +        ApCheckPackageList (Predefined->Info.Name, Op,
> +            Package, Package->RetInfo4.Count1, Count);
> +
> +        break;
> +
>       case ACPI_PTYPE2:
>       case ACPI_PTYPE2_FIXED:
>       case ACPI_PTYPE2_MIN:
> @@ -499,6 +526,7 @@ ApCheckPackageElements (
>    *              ACPI_PTYPE2_MIN
>    *              ACPI_PTYPE2_COUNT
>    *              ACPI_PTYPE2_FIX_VAR
> + *              ACPI_PTYPE2_VAR_VAR
>    *
>    ******************************************************************************/
>   
> @@ -545,9 +573,12 @@ ApCheckPackageList (
>           Count = (UINT32) Op->Asl.Value.Integer;
>           Op = Op->Asl.Next;
>   
> -        /* The subpackage must have at least one element */
> -
> -        if (!Count)
> +        /*
> +         * Most subpackage must have at least one element, with
> +         * only rare exceptions. (_RDI)
> +         */
> +        if (!Count &&
> +            (Package->RetInfo.Type != ACPI_PTYPE2_VAR_VAR))
>           {
>               ApZeroLengthPackage (PredefinedName, SubPackageOp);
>               goto NextSubpackage;
> @@ -605,6 +636,25 @@ ApCheckPackageList (
>                   Count - Package->RetInfo.Count1);
>               break;
>   
> +        case ACPI_PTYPE2_VAR_VAR:
> +            /*
> +             * Must have at least the minimum number elements.
> +             * A zero PkgCount means the number of elements is variable.
> +             */
> +            ExpectedCount = Package->RetInfo4.PkgCount;
> +            if (ExpectedCount && (Count < ExpectedCount))
> +            {
> +                ApPackageTooSmall (PredefinedName, SubPackageOp,
> +                    Count, 1);
> +                break;
> +            }
> +
> +            ApCheckPackageElements (PredefinedName, Op,
> +                Package->RetInfo4.SubObjectTypes,
> +                Package->RetInfo4.PkgCount,
> +                0, 0);
> +            break;
> +
>           case ACPI_PTYPE2_FIXED:
>   
>               /* Each subpackage has a fixed length */
> diff --git a/src/acpica/source/compiler/aslstartup.c b/src/acpica/source/compiler/aslstartup.c
> index 9e6d7b3..5cc0959 100644
> --- a/src/acpica/source/compiler/aslstartup.c
> +++ b/src/acpica/source/compiler/aslstartup.c
> @@ -231,10 +231,10 @@ AslDetectSourceFileType (
>   
>       /* Check for 100% ASCII source file (comments are ignored) */
>   
> -    Status = FlCheckForAscii (Info->Handle, Info->Filename, TRUE);
> +    Status = FlCheckForAscii (Info->Filename, TRUE);
>       if (ACPI_FAILURE (Status))
>       {
> -        printf ("Non-ascii input file - %s\n", Info->Filename);
> +        printf ("Invalid characters in input file - %s\n", Info->Filename);
>   
>           if (!Gbl_IgnoreErrors)
>           {
> diff --git a/src/acpica/source/compiler/aslutils.c b/src/acpica/source/compiler/aslutils.c
> index 843c097..a5e53c7 100644
> --- a/src/acpica/source/compiler/aslutils.c
> +++ b/src/acpica/source/compiler/aslutils.c
> @@ -149,13 +149,11 @@ UtAttachNameseg (
>    *
>    ******************************************************************************/
>   
> -#define ACPI_TABLE_HELP_FORMAT  "%8u) %s    %s\n"
> -
>   void
>   UtDisplaySupportedTables (
>       void)
>   {
> -    ACPI_DMTABLE_DATA       *TableData;
> +    const AH_TABLE          *TableData;
>       UINT32                  i;
>   
>   
> @@ -163,20 +161,14 @@ UtDisplaySupportedTables (
>           "  (Compiler, Disassembler, Template Generator)\n\n",
>           ACPI_CA_VERSION);
>   
> -    /* Special tables */
> -
> -    printf ("  Special tables and AML tables:\n");
> -    printf (ACPI_TABLE_HELP_FORMAT, 1, ACPI_RSDP_NAME, "Root System Description Pointer");
> -    printf (ACPI_TABLE_HELP_FORMAT, 2, ACPI_SIG_FACS, "Firmware ACPI Control Structure");
> -    printf (ACPI_TABLE_HELP_FORMAT, 3, ACPI_SIG_DSDT, "Differentiated System Description Table");
> -    printf (ACPI_TABLE_HELP_FORMAT, 4, ACPI_SIG_SSDT, "Secondary System Description Table");
> -
> -    /* All data tables with common table header */
> +    /* All ACPI tables with the common table header */
>   
> -    printf ("\n  Standard ACPI data tables:\n");
> -    for (TableData = AcpiDmTableData, i = 5; TableData->Signature; TableData++, i++)
> +    printf ("\n  Supported ACPI tables:\n");
> +    for (TableData = AcpiSupportedTables, i = 1;
> +         TableData->Signature; TableData++, i++)
>       {
> -        printf (ACPI_TABLE_HELP_FORMAT, i, TableData->Signature, TableData->Name);
> +        printf ("%8u) %s    %s\n", i,
> +            TableData->Signature, TableData->Description);
>       }
>   }
>   
> diff --git a/src/acpica/source/compiler/dtcompile.c b/src/acpica/source/compiler/dtcompile.c
> index 105151f..5c75f4b 100644
> --- a/src/acpica/source/compiler/dtcompile.c
> +++ b/src/acpica/source/compiler/dtcompile.c
> @@ -355,7 +355,7 @@ static ACPI_STATUS
>   DtCompileDataTable (
>       DT_FIELD                **FieldList)
>   {
> -    ACPI_DMTABLE_DATA       *TableData;
> +    const ACPI_DMTABLE_DATA *TableData;
>       DT_SUBTABLE             *Subtable;
>       char                    *Signature;
>       ACPI_TABLE_HEADER       *AcpiTableHeader;
> @@ -430,7 +430,7 @@ DtCompileDataTable (
>       TableData = AcpiDmGetTableData (Signature);
>       if (!TableData || Gbl_CompileGeneric)
>       {
> -        DtCompileGeneric ((void **) FieldList);
> +        DtCompileGeneric ((void **) FieldList, NULL, NULL);
>           goto FinishHeader;
>       }
>   
> @@ -508,14 +508,14 @@ DtCompileTable (
>       DT_FIELD                *LocalField;
>       UINT32                  Length;
>       DT_SUBTABLE             *Subtable;
> -    DT_SUBTABLE             *InlineSubtable;
> +    DT_SUBTABLE             *InlineSubtable = NULL;
>       UINT32                  FieldLength = 0;
>       UINT8                   FieldType;
>       UINT8                   *Buffer;
>       UINT8                   *FlagBuffer = NULL;
>       char                    *String;
>       UINT32                  CurrentFlagByteOffset = 0;
> -    ACPI_STATUS             Status;
> +    ACPI_STATUS             Status = AE_OK;
>   
>   
>       if (!Field || !*Field)
> @@ -551,6 +551,7 @@ DtCompileTable (
>       Buffer = Subtable->Buffer;
>   
>       LocalField = *Field;
> +    Subtable->Name = LocalField->Name;
>   
>       /*
>        * Main loop walks the info table for this ACPI table or subtable
> @@ -627,15 +628,32 @@ DtCompileTable (
>                */
>               *Field = LocalField;
>   
> -            if (Info->Opcode == ACPI_DMT_GAS)
> +            switch (Info->Opcode)
>               {
> +            case ACPI_DMT_GAS:
> +
>                   Status = DtCompileTable (Field, AcpiDmTableInfoGas,
>                       &InlineSubtable, TRUE);
> -            }
> -            else
> -            {
> +                break;
> +
> +            case ACPI_DMT_HESTNTFY:
> +
>                   Status = DtCompileTable (Field, AcpiDmTableInfoHestNotify,
>                       &InlineSubtable, TRUE);
> +                break;
> +
> +            case ACPI_DMT_IORTMEM:
> +
> +                Status = DtCompileTable (Field, AcpiDmTableInfoIortAcc,
> +                    &InlineSubtable, TRUE);
> +                break;
> +
> +            default:
> +                sprintf (MsgBuffer, "Invalid DMT opcode: 0x%.2X",
> +                    Info->Opcode);
> +                DtFatal (ASL_MSG_COMPILER_INTERNAL, NULL, MsgBuffer);
> +                Status = AE_BAD_DATA;
> +                break;
>               }
>   
>               if (ACPI_FAILURE (Status))
> @@ -672,7 +690,6 @@ DtCompileTable (
>                   Subtable->LengthField = Buffer;
>                   Subtable->SizeOfLengthField = FieldLength;
>               }
> -
>               break;
>           }
>   
> @@ -688,3 +705,43 @@ Error:
>       ACPI_FREE (Subtable);
>       return (Status);
>   }
> +
> +
> +/******************************************************************************
> + *
> + * FUNCTION:    DtCompilePadding
> + *
> + * PARAMETERS:  Length              - Padding field size
> + *              RetSubtable         - Compile result of table
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Compile a subtable for padding purpose
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +DtCompilePadding (
> +    UINT32                  Length,
> +    DT_SUBTABLE             **RetSubtable)
> +{
> +    DT_SUBTABLE             *Subtable;
> +    /* UINT8                   *Buffer; */
> +    char                    *String;
> +
> +
> +    Subtable = UtSubtableCacheCalloc ();
> +
> +    if (Length > 0)
> +    {
> +        String = UtStringCacheCalloc (Length);
> +        Subtable->Buffer = ACPI_CAST_PTR (UINT8, String);
> +    }
> +
> +    Subtable->Length = Length;
> +    Subtable->TotalLength = Length;
> +    /* Buffer = Subtable->Buffer; */
> +
> +    *RetSubtable = Subtable;
> +    return (AE_OK);
> +}
> diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h
> index e063770..499a2ad 100644
> --- a/src/acpica/source/compiler/dtcompiler.h
> +++ b/src/acpica/source/compiler/dtcompiler.h
> @@ -187,6 +187,7 @@ typedef struct dt_subtable
>       struct dt_subtable      *StackTop;
>       UINT8                   *Buffer;
>       UINT8                   *LengthField;
> +    char                    *Name;
>       UINT32                  Length;
>       UINT32                  TotalLength;
>       UINT32                  SizeOfLengthField;
> @@ -242,6 +243,11 @@ DtCompileTable (
>       DT_SUBTABLE             **RetSubtable,
>       BOOLEAN                 Required);
>   
> +ACPI_STATUS
> +DtCompilePadding (
> +    UINT32                  Length,
> +    DT_SUBTABLE             **RetSubtable);
> +
>   
>   /* dtio - binary and text input/output */
>   
> @@ -501,6 +507,10 @@ DtCompileDmar (
>       void                    **PFieldList);
>   
>   ACPI_STATUS
> +DtCompileDrtm (
> +    void                    **PFieldList);
> +
> +ACPI_STATUS
>   DtCompileEinj (
>       void                    **PFieldList);
>   
> @@ -525,6 +535,10 @@ DtCompileHest (
>       void                    **PFieldList);
>   
>   ACPI_STATUS
> +DtCompileIort (
> +    void                    **PFieldList);
> +
> +ACPI_STATUS
>   DtCompileIvrs (
>       void                    **PFieldList);
>   
> @@ -553,6 +567,10 @@ DtCompileMtmr (
>       void                    **PFieldList);
>   
>   ACPI_STATUS
> +DtCompileNfit (
> +    void                    **PFieldList);
> +
> +ACPI_STATUS
>   DtCompilePmtt (
>       void                    **PFieldList);
>   
> @@ -581,6 +599,10 @@ DtCompileSrat (
>       void                    **PFieldList);
>   
>   ACPI_STATUS
> +DtCompileStao (
> +    void                    **PFieldList);
> +
> +ACPI_STATUS
>   DtCompileUefi (
>       void                    **PFieldList);
>   
> @@ -593,12 +615,18 @@ DtCompileWdat (
>       void                    **PFieldList);
>   
>   ACPI_STATUS
> +DtCompileWpbt (
> +    void                    **PFieldList);
> +
> +ACPI_STATUS
>   DtCompileXsdt (
>       void                    **PFieldList);
>   
>   ACPI_STATUS
>   DtCompileGeneric (
> -    void                    **PFieldList);
> +    void                    **PFieldList,
> +    char                    *TermFieldName,
> +    UINT32                  *PFieldLength);
>   
>   ACPI_DMTABLE_INFO *
>   DtGetGenericTableInfo (
> @@ -615,6 +643,7 @@ extern const unsigned char  TemplateCsrt[];
>   extern const unsigned char  TemplateDbg2[];
>   extern const unsigned char  TemplateDbgp[];
>   extern const unsigned char  TemplateDmar[];
> +extern const unsigned char  TemplateDrtm[];
>   extern const unsigned char  TemplateEcdt[];
>   extern const unsigned char  TemplateEinj[];
>   extern const unsigned char  TemplateErst[];
> @@ -623,6 +652,7 @@ extern const unsigned char  TemplateFpdt[];
>   extern const unsigned char  TemplateGtdt[];
>   extern const unsigned char  TemplateHest[];
>   extern const unsigned char  TemplateHpet[];
> +extern const unsigned char  TemplateIort[];
>   extern const unsigned char  TemplateIvrs[];
>   extern const unsigned char  TemplateLpit[];
>   extern const unsigned char  TemplateMadt[];
> @@ -632,6 +662,7 @@ extern const unsigned char  TemplateMpst[];
>   extern const unsigned char  TemplateMsct[];
>   extern const unsigned char  TemplateMsdm[];
>   extern const unsigned char  TemplateMtmr[];
> +extern const unsigned char  TemplateNfit[];
>   extern const unsigned char  TemplatePcct[];
>   extern const unsigned char  TemplatePmtt[];
>   extern const unsigned char  TemplateRsdt[];
> @@ -642,6 +673,7 @@ extern const unsigned char  TemplateSlit[];
>   extern const unsigned char  TemplateSpcr[];
>   extern const unsigned char  TemplateSpmi[];
>   extern const unsigned char  TemplateSrat[];
> +extern const unsigned char  TemplateStao[];
>   extern const unsigned char  TemplateTcpa[];
>   extern const unsigned char  TemplateTpm2[];
>   extern const unsigned char  TemplateUefi[];
> @@ -650,6 +682,8 @@ extern const unsigned char  TemplateWaet[];
>   extern const unsigned char  TemplateWdat[];
>   extern const unsigned char  TemplateWddt[];
>   extern const unsigned char  TemplateWdrt[];
> +extern const unsigned char  TemplateWpbt[];
> +extern const unsigned char  TemplateXenv[];
>   extern const unsigned char  TemplateXsdt[];
>   
>   #endif
> diff --git a/src/acpica/source/compiler/dtio.c b/src/acpica/source/compiler/dtio.c
> index 111a6fa..9b044ee 100644
> --- a/src/acpica/source/compiler/dtio.c
> +++ b/src/acpica/source/compiler/dtio.c
> @@ -1050,8 +1050,8 @@ DtDumpSubtableInfo (
>   {
>   
>       DbgPrint (ASL_DEBUG_OUTPUT,
> -        "[%.04X] %.08X %.08X %.08X %.08X %.08X %p %p %p\n",
> -        Subtable->Depth, Subtable->Length, Subtable->TotalLength,
> +        "[%.04X] %24s %.08X %.08X %.08X %.08X %.08X %p %p %p\n",
> +        Subtable->Depth, Subtable->Name, Subtable->Length, Subtable->TotalLength,
>           Subtable->SizeOfLengthField, Subtable->Flags, Subtable,
>           Subtable->Parent, Subtable->Child, Subtable->Peer);
>   }
> @@ -1064,8 +1064,8 @@ DtDumpSubtableTree (
>   {
>   
>       DbgPrint (ASL_DEBUG_OUTPUT,
> -        "[%.04X] %*s%08X (%.02X) - (%.02X)\n",
> -        Subtable->Depth, (4 * Subtable->Depth), " ",
> +        "[%.04X] %24s %*s%08X (%.02X) - (%.02X)\n",
> +        Subtable->Depth, Subtable->Name, (4 * Subtable->Depth), " ",
>           Subtable, Subtable->Length, Subtable->TotalLength);
>   }
>   
> @@ -1096,12 +1096,12 @@ DtDumpSubtableList (
>   
>       DbgPrint (ASL_DEBUG_OUTPUT,
>           "Subtable Info:\n"
> -        "Depth  Length   TotalLen LenSize  Flags    "
> +        "Depth                      Name Length   TotalLen LenSize  Flags    "
>           "This     Parent   Child    Peer\n\n");
>       DtWalkTableTree (Gbl_RootTable, DtDumpSubtableInfo, NULL, NULL);
>   
>       DbgPrint (ASL_DEBUG_OUTPUT,
> -        "\nSubtable Tree: (Depth, Subtable, Length, TotalLength)\n\n");
> +        "\nSubtable Tree: (Depth, Name, Subtable, Length, TotalLength)\n\n");
>       DtWalkTableTree (Gbl_RootTable, DtDumpSubtableTree, NULL, NULL);
>   
>       DbgPrint (ASL_DEBUG_OUTPUT, "\n");
> diff --git a/src/acpica/source/compiler/dtsubtable.c b/src/acpica/source/compiler/dtsubtable.c
> index a35792d..2461cc2 100644
> --- a/src/acpica/source/compiler/dtsubtable.c
> +++ b/src/acpica/source/compiler/dtsubtable.c
> @@ -393,6 +393,11 @@ DtGetSubtableLength (
>               Step = 9;
>               break;
>   
> +        case ACPI_DMT_IORTMEM:
> +
> +            Step = 10;
> +            break;
> +
>           default:
>   
>               Step = 1;
> diff --git a/src/acpica/source/compiler/dttable.c b/src/acpica/source/compiler/dttable.c
> index 85ffdad..db9ac24 100644
> --- a/src/acpica/source/compiler/dttable.c
> +++ b/src/acpica/source/compiler/dttable.c
> @@ -137,12 +137,6 @@ static ACPI_DMTABLE_INFO           TableInfoDmarPciPath[] =
>   };
>   
>   
> -/* TBD: move to acmacros.h */
> -
> -#define ACPI_SUB_PTR(t, a, b) \
> -    ACPI_CAST_PTR (t, (ACPI_CAST_PTR (UINT8, (a)) - (ACPI_SIZE)(b)))
> -
> -
>   /* Local prototypes */
>   
>   static ACPI_STATUS
> @@ -526,6 +520,7 @@ DtCompileCsrt (
>   
>       /* Subtables (Resource Groups) */
>   
> +    ParentTable = DtPeekSubtable ();
>       while (*PFieldList)
>       {
>           /* Resource group subtable */
> @@ -549,9 +544,9 @@ DtCompileCsrt (
>           DescriptorCount = (GroupLength  /
>               sizeof (ACPI_CSRT_DESCRIPTOR));
>   
> -        ParentTable = DtPeekSubtable ();
>           DtInsertSubtable (ParentTable, Subtable);
>           DtPushSubtable (Subtable);
> +        ParentTable = DtPeekSubtable ();
>   
>           /* Shared info subtable (One per resource group) */
>   
> @@ -562,26 +557,44 @@ DtCompileCsrt (
>               return (Status);
>           }
>   
> -        ParentTable = DtPeekSubtable ();
>           DtInsertSubtable (ParentTable, Subtable);
>   
>           /* Sub-Subtables (Resource Descriptors) */
>   
>           while (*PFieldList && DescriptorCount)
>           {
> +
>               Status = DtCompileTable (PFieldList, AcpiDmTableInfoCsrt2,
>                           &Subtable, TRUE);
>               if (ACPI_FAILURE (Status))
>               {
>                   return (Status);
>               }
> +            DtInsertSubtable (ParentTable, Subtable);
>   
> +            DtPushSubtable (Subtable);
>               ParentTable = DtPeekSubtable ();
> -            DtInsertSubtable (ParentTable, Subtable);
> +            if (*PFieldList)
> +            {
> +                Status = DtCompileTable (PFieldList, AcpiDmTableInfoCsrt2a,
> +                            &Subtable, TRUE);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return (Status);
> +                }
> +                if (Subtable)
> +                {
> +                    DtInsertSubtable (ParentTable, Subtable);
> +                }
> +            }
> +            DtPopSubtable ();
> +            ParentTable = DtPeekSubtable ();
> +
>               DescriptorCount--;
>           }
>   
>           DtPopSubtable ();
> +        ParentTable = DtPeekSubtable ();
>       }
>   
>       return (Status);
> @@ -900,6 +913,135 @@ DtCompileDmar (
>   
>   /******************************************************************************
>    *
> + * FUNCTION:    DtCompileDrtm
> + *
> + * PARAMETERS:  List                - Current field list pointer
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Compile DRTM.
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +DtCompileDrtm (
> +    void                    **List)
> +{
> +    ACPI_STATUS             Status;
> +    DT_SUBTABLE             *Subtable;
> +    DT_SUBTABLE             *ParentTable;
> +    DT_FIELD                **PFieldList = (DT_FIELD **) List;
> +    UINT32                  Count;
> +    /* ACPI_TABLE_DRTM         *Drtm; */
> +    ACPI_DRTM_VTABLE_LIST   *DrtmVtl;
> +    ACPI_DRTM_RESOURCE_LIST *DrtmRl;
> +    /* ACPI_DRTM_DPS_ID        *DrtmDps; */
> +
> +
> +    ParentTable = DtPeekSubtable ();
> +
> +    /* Compile DRTM header */
> +
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm,
> +                &Subtable, TRUE);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +    DtInsertSubtable (ParentTable, Subtable);
> +
> +    /*
> +     * Using ACPI_SUB_PTR, We needn't define a seperate structure. Care
> +     * should be taken to avoid accessing ACPI_TABLE_HADER fields.
> +     */
> +#if 0
> +    Drtm = ACPI_SUB_PTR (ACPI_TABLE_DRTM,
> +                    Subtable->Buffer, sizeof (ACPI_TABLE_HEADER));
> +#endif
> +    /* Compile VTL */
> +
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm0,
> +                &Subtable, TRUE);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +    DtInsertSubtable (ParentTable, Subtable);
> +    DrtmVtl = ACPI_CAST_PTR (ACPI_DRTM_VTABLE_LIST, Subtable->Buffer);
> +
> +    DtPushSubtable (Subtable);
> +    ParentTable = DtPeekSubtable ();
> +    Count = 0;
> +    while (*PFieldList)
> +    {
> +        Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm0a,
> +                    &Subtable, TRUE);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +        if (!Subtable)
> +        {
> +            break;
> +        }
> +        DtInsertSubtable (ParentTable, Subtable);
> +        Count++;
> +    }
> +    DrtmVtl->ValidatedTableCount = Count;
> +    DtPopSubtable ();
> +    ParentTable = DtPeekSubtable ();
> +
> +    /* Compile RL */
> +
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm1,
> +                &Subtable, TRUE);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +    DtInsertSubtable (ParentTable, Subtable);
> +    DrtmRl = ACPI_CAST_PTR (ACPI_DRTM_RESOURCE_LIST, Subtable->Buffer);
> +
> +    DtPushSubtable (Subtable);
> +    ParentTable = DtPeekSubtable ();
> +    Count = 0;
> +    while (*PFieldList)
> +    {
> +        Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm1a,
> +                    &Subtable, TRUE);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +        if (!Subtable)
> +        {
> +            break;
> +        }
> +        DtInsertSubtable (ParentTable, Subtable);
> +        Count++;
> +    }
> +    DrtmRl->ResourceCount = Count;
> +    DtPopSubtable ();
> +    ParentTable = DtPeekSubtable ();
> +
> +    /* Compile DPS */
> +
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm2,
> +                &Subtable, TRUE);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +    DtInsertSubtable (ParentTable, Subtable);
> +    /* DrtmDps = ACPI_CAST_PTR (ACPI_DRTM_DPS_ID, Subtable->Buffer);*/
> +
> +
> +    return (AE_OK);
> +}
> +
> +
> +/******************************************************************************
> + *
>    * FUNCTION:    DtCompileEinj
>    *
>    * PARAMETERS:  List                - Current field list pointer
> @@ -1018,6 +1160,18 @@ DtCompileFadt (
>   
>               DtInsertSubtable (ParentTable, Subtable);
>           }
> +
> +        if (Revision >= 6)
> +        {
> +            Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt6,
> +                        &Subtable, TRUE);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return (Status);
> +            }
> +
> +            DtInsertSubtable (ParentTable, Subtable);
> +        }
>       }
>   
>       return (AE_OK);
> @@ -1357,6 +1511,309 @@ DtCompileHest (
>   
>   /******************************************************************************
>    *
> + * FUNCTION:    DtCompileIort
> + *
> + * PARAMETERS:  List                - Current field list pointer
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Compile IORT.
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +DtCompileIort (
> +    void                    **List)
> +{
> +    ACPI_STATUS             Status;
> +    DT_SUBTABLE             *Subtable;
> +    DT_SUBTABLE             *ParentTable;
> +    DT_FIELD                **PFieldList = (DT_FIELD **) List;
> +    DT_FIELD                *SubtableStart;
> +    ACPI_TABLE_IORT         *Iort;
> +    ACPI_IORT_NODE          *IortNode;
> +    ACPI_IORT_ITS_GROUP     *IortItsGroup;
> +    ACPI_IORT_SMMU          *IortSmmu;
> +    UINT32                  NodeNumber;
> +    UINT32                  NodeLength;
> +    UINT32                  IdMappingNumber;
> +    UINT32                  ItsNumber;
> +    UINT32                  ContextIrptNumber;
> +    UINT32                  PmuIrptNumber;
> +    UINT32                  PaddingLength;
> +
> +
> +    ParentTable = DtPeekSubtable ();
> +
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort,
> +                &Subtable, TRUE);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +    DtInsertSubtable (ParentTable, Subtable);
> +
> +    /*
> +     * Using ACPI_SUB_PTR, We needn't define a seperate structure. Care
> +     * should be taken to avoid accessing ACPI_TABLE_HADER fields.
> +     */
> +    Iort = ACPI_SUB_PTR (ACPI_TABLE_IORT,
> +                    Subtable->Buffer, sizeof (ACPI_TABLE_HEADER));
> +
> +    /*
> +     * OptionalPadding - Variable-length data
> +     * (Optional, size = OffsetToNodes - sizeof (ACPI_TABLE_IORT))
> +     * Optionally allows the generic data types to be used for filling
> +     * this field.
> +     */
> +    Iort->NodeOffset = sizeof (ACPI_TABLE_IORT);
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoIortPad,
> +                    &Subtable, TRUE);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +    if (Subtable)
> +    {
> +        DtInsertSubtable (ParentTable, Subtable);
> +        Iort->NodeOffset += Subtable->Length;
> +    }
> +    else
> +    {
> +        Status = DtCompileGeneric (ACPI_CAST_PTR (void *, PFieldList),
> +                    AcpiDmTableInfoIortHdr[0].Name, &PaddingLength);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +        Iort->NodeOffset += PaddingLength;
> +    }
> +
> +    NodeNumber = 0;
> +    while (*PFieldList)
> +    {
> +        SubtableStart = *PFieldList;
> +        Status = DtCompileTable (PFieldList, AcpiDmTableInfoIortHdr,
> +                    &Subtable, TRUE);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +        DtInsertSubtable (ParentTable, Subtable);
> +        IortNode = ACPI_CAST_PTR (ACPI_IORT_NODE, Subtable->Buffer);
> +        NodeLength = ACPI_OFFSET (ACPI_IORT_NODE, NodeData);
> +
> +        DtPushSubtable (Subtable);
> +        ParentTable = DtPeekSubtable ();
> +
> +        switch (IortNode->Type)
> +        {
> +        case ACPI_IORT_NODE_ITS_GROUP:
> +
> +            Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort0,
> +                        &Subtable, TRUE);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return (Status);
> +            }
> +            DtInsertSubtable (ParentTable, Subtable);
> +            IortItsGroup = ACPI_CAST_PTR (ACPI_IORT_ITS_GROUP, Subtable->Buffer);
> +            NodeLength += Subtable->Length;
> +
> +            ItsNumber = 0;
> +            while (*PFieldList)
> +            {
> +                Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort0a,
> +                            &Subtable, TRUE);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return (Status);
> +                }
> +                if (!Subtable)
> +                {
> +                    break;
> +                }
> +                DtInsertSubtable (ParentTable, Subtable);
> +                NodeLength += Subtable->Length;
> +                ItsNumber++;
> +            }
> +
> +            IortItsGroup->ItsCount = ItsNumber;
> +            break;
> +
> +        case ACPI_IORT_NODE_NAMED_COMPONENT:
> +
> +            Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort1,
> +                        &Subtable, TRUE);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return (Status);
> +            }
> +            DtInsertSubtable (ParentTable, Subtable);
> +            NodeLength += Subtable->Length;
> +
> +            /*
> +             * Padding - Variable-length data
> +             * Optionally allows the offset of the ID mappings to be used
> +             * for filling this field.
> +             */
> +            Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort1a,
> +                            &Subtable, TRUE);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return (Status);
> +            }
> +            if (Subtable)
> +            {
> +                DtInsertSubtable (ParentTable, Subtable);
> +                NodeLength += Subtable->Length;
> +            }
> +            else
> +            {
> +                if (NodeLength > IortNode->MappingOffset)
> +                {
> +                    return (AE_BAD_DATA);
> +                }
> +                if (NodeLength < IortNode->MappingOffset)
> +                {
> +                    Status = DtCompilePadding (
> +                                IortNode->MappingOffset - NodeLength,
> +                                &Subtable);
> +                    if (ACPI_FAILURE (Status))
> +                    {
> +                        return (Status);
> +                    }
> +                    DtInsertSubtable (ParentTable, Subtable);
> +                    NodeLength = IortNode->MappingOffset;
> +                }
> +            }
> +            break;
> +
> +        case ACPI_IORT_NODE_PCI_ROOT_COMPLEX:
> +
> +            Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort2,
> +                        &Subtable, TRUE);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return (Status);
> +            }
> +            DtInsertSubtable (ParentTable, Subtable);
> +            NodeLength += Subtable->Length;
> +            break;
> +
> +        case ACPI_IORT_NODE_SMMU:
> +
> +            Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3,
> +                        &Subtable, TRUE);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return (Status);
> +            }
> +            DtInsertSubtable (ParentTable, Subtable);
> +            IortSmmu = ACPI_CAST_PTR (ACPI_IORT_SMMU, Subtable->Buffer);
> +            NodeLength += Subtable->Length;
> +
> +            /* Compile global interrupt array */
> +
> +            IortSmmu->GlobalInterruptOffset = NodeLength;
> +            Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3a,
> +                        &Subtable, TRUE);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return (Status);
> +            }
> +            DtInsertSubtable (ParentTable, Subtable);
> +            NodeLength += Subtable->Length;
> +
> +            /* Compile context interrupt array */
> +
> +            ContextIrptNumber = 0;
> +            IortSmmu->ContextInterruptOffset = NodeLength;
> +            while (*PFieldList)
> +            {
> +                Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3b,
> +                            &Subtable, TRUE);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return (Status);
> +                }
> +                if (!Subtable)
> +                {
> +                    break;
> +                }
> +                DtInsertSubtable (ParentTable, Subtable);
> +                NodeLength += Subtable->Length;
> +                ContextIrptNumber++;
> +            }
> +            IortSmmu->ContextInterruptCount = ContextIrptNumber;
> +
> +            /* Compile PMU interrupt array */
> +
> +            PmuIrptNumber = 0;
> +            IortSmmu->PmuInterruptOffset = NodeLength;
> +            while (*PFieldList)
> +            {
> +                Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3c,
> +                            &Subtable, TRUE);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return (Status);
> +                }
> +                if (!Subtable)
> +                {
> +                    break;
> +                }
> +                DtInsertSubtable (ParentTable, Subtable);
> +                NodeLength += Subtable->Length;
> +                PmuIrptNumber++;
> +            }
> +            IortSmmu->PmuInterruptCount = PmuIrptNumber;
> +            break;
> +
> +        default:
> +
> +            DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "IORT");
> +            return (AE_ERROR);
> +        }
> +
> +        /* Compile Array of ID mappings */
> +
> +        IortNode->MappingOffset = NodeLength;
> +        IdMappingNumber = 0;
> +        while (*PFieldList)
> +        {
> +            Status = DtCompileTable (PFieldList, AcpiDmTableInfoIortMap,
> +                        &Subtable, TRUE);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return (Status);
> +            }
> +            if (!Subtable)
> +            {
> +                break;
> +            }
> +            DtInsertSubtable (ParentTable, Subtable);
> +            NodeLength += sizeof (ACPI_IORT_ID_MAPPING);
> +            IdMappingNumber++;
> +        }
> +        IortNode->MappingCount = IdMappingNumber;
> +
> +        /*
> +         * Node length can be determined by DT_LENGTH option
> +         * IortNode->Length = NodeLength;
> +         */
> +        DtPopSubtable ();
> +        ParentTable = DtPeekSubtable ();
> +        NodeNumber++;
> +    }
> +    Iort->NodeCount = NodeNumber;
> +
> +    return (AE_OK);
> +}
> +
> +
> +/******************************************************************************
> + *
>    * FUNCTION:    DtCompileIvrs
>    *
>    * PARAMETERS:  List                - Current field list pointer
> @@ -1559,11 +2016,6 @@ DtCompileLpit (
>               InfoTable = AcpiDmTableInfoLpit0;
>               break;
>   
> -        case ACPI_LPIT_TYPE_SIMPLE_IO:
> -
> -            InfoTable = AcpiDmTableInfoLpit1;
> -            break;
> -
>           default:
>   
>               DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "LPIT");
> @@ -1715,6 +2167,11 @@ DtCompileMadt (
>               InfoTable = AcpiDmTableInfoMadt14;
>               break;
>   
> +        case ACPI_MADT_TYPE_GENERIC_TRANSLATOR:
> +
> +            InfoTable = AcpiDmTableInfoMadt15;
> +            break;
> +
>           default:
>   
>               DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "MADT");
> @@ -1950,6 +2407,201 @@ DtCompileMtmr (
>   
>   /******************************************************************************
>    *
> + * FUNCTION:    DtCompileNfit
> + *
> + * PARAMETERS:  List                - Current field list pointer
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Compile NFIT.
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +DtCompileNfit (
> +    void                    **List)
> +{
> +    ACPI_STATUS             Status;
> +    DT_SUBTABLE             *Subtable;
> +    DT_SUBTABLE             *ParentTable;
> +    DT_FIELD                **PFieldList = (DT_FIELD **) List;
> +    DT_FIELD                *SubtableStart;
> +    ACPI_NFIT_HEADER        *NfitHeader;
> +    ACPI_DMTABLE_INFO       *InfoTable;
> +    UINT32                  Count;
> +    ACPI_NFIT_INTERLEAVE    *Interleave = NULL;
> +    ACPI_NFIT_FLUSH_ADDRESS *Hint = NULL;
> +
> +    /* Main table */
> +
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfit,
> +                &Subtable, TRUE);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +
> +    ParentTable = DtPeekSubtable ();
> +    DtInsertSubtable (ParentTable, Subtable);
> +    DtPushSubtable (Subtable);
> +
> +    /* Subtables */
> +
> +    while (*PFieldList)
> +    {
> +        SubtableStart = *PFieldList;
> +        Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfitHdr,
> +                    &Subtable, TRUE);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        ParentTable = DtPeekSubtable ();
> +        DtInsertSubtable (ParentTable, Subtable);
> +        DtPushSubtable (Subtable);
> +
> +        NfitHeader = ACPI_CAST_PTR (ACPI_NFIT_HEADER, Subtable->Buffer);
> +
> +        switch (NfitHeader->Type)
> +        {
> +        case ACPI_NFIT_TYPE_SYSTEM_ADDRESS:
> +
> +            InfoTable = AcpiDmTableInfoNfit0;
> +            break;
> +
> +        case ACPI_NFIT_TYPE_MEMORY_MAP:
> +
> +            InfoTable = AcpiDmTableInfoNfit1;
> +            break;
> +
> +        case ACPI_NFIT_TYPE_INTERLEAVE:
> +
> +            Interleave = ACPI_CAST_PTR (ACPI_NFIT_INTERLEAVE, Subtable->Buffer);
> +            InfoTable = AcpiDmTableInfoNfit2;
> +            break;
> +
> +        case ACPI_NFIT_TYPE_SMBIOS:
> +
> +            InfoTable = AcpiDmTableInfoNfit3;
> +            break;
> +
> +        case ACPI_NFIT_TYPE_CONTROL_REGION:
> +
> +            InfoTable = AcpiDmTableInfoNfit4;
> +            break;
> +
> +        case ACPI_NFIT_TYPE_DATA_REGION:
> +
> +            InfoTable = AcpiDmTableInfoNfit5;
> +            break;
> +
> +        case ACPI_NFIT_TYPE_FLUSH_ADDRESS:
> +
> +            Hint = ACPI_CAST_PTR (ACPI_NFIT_FLUSH_ADDRESS, Subtable->Buffer);
> +            InfoTable = AcpiDmTableInfoNfit6;
> +            break;
> +
> +        default:
> +
> +            DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "NFIT");
> +            return (AE_ERROR);
> +        }
> +
> +        Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        ParentTable = DtPeekSubtable ();
> +        DtInsertSubtable (ParentTable, Subtable);
> +        DtPopSubtable ();
> +
> +        switch (NfitHeader->Type)
> +        {
> +        case ACPI_NFIT_TYPE_INTERLEAVE:
> +
> +            Count = 0;
> +            DtPushSubtable (Subtable);
> +            while (*PFieldList)
> +            {
> +                Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfit2a,
> +                            &Subtable, FALSE);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return (Status);
> +                }
> +                if (!Subtable)
> +                {
> +                    DtPopSubtable ();
> +                    break;
> +                }
> +
> +                ParentTable = DtPeekSubtable ();
> +                DtInsertSubtable (ParentTable, Subtable);
> +                Count++;
> +            }
> +
> +            Interleave->LineCount = Count;
> +            DtPopSubtable ();
> +            break;
> +
> +        case ACPI_NFIT_TYPE_SMBIOS:
> +
> +            if (*PFieldList)
> +            {
> +                Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfit3a,
> +                            &Subtable, TRUE);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return (Status);
> +                }
> +                if (Subtable)
> +                {
> +                    DtInsertSubtable (ParentTable, Subtable);
> +                }
> +            }
> +            break;
> +
> +        case ACPI_NFIT_TYPE_FLUSH_ADDRESS:
> +
> +            Count = 0;
> +            DtPushSubtable (Subtable);
> +            while (*PFieldList)
> +            {
> +                Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfit6a,
> +                            &Subtable, FALSE);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return (Status);
> +                }
> +                if (!Subtable)
> +                {
> +                    DtPopSubtable ();
> +                    break;
> +                }
> +
> +                ParentTable = DtPeekSubtable ();
> +                DtInsertSubtable (ParentTable, Subtable);
> +                Count++;
> +            }
> +
> +            Hint->HintCount = (UINT16) Count;
> +            DtPopSubtable ();
> +            break;
> +
> +        default:
> +            break;
> +        }
> +    }
> +
> +    return (AE_OK);
> +}
> +
> +
> +/******************************************************************************
> + *
>    * FUNCTION:    DtCompilePcct
>    *
>    * PARAMETERS:  List                - Current field list pointer
> @@ -1973,6 +2625,8 @@ DtCompilePcct (
>       ACPI_DMTABLE_INFO       *InfoTable;
>   
>   
> +    /* Main table */
> +
>       Status = DtCompileTable (PFieldList, AcpiDmTableInfoPcct,
>                   &Subtable, TRUE);
>       if (ACPI_FAILURE (Status))
> @@ -1983,6 +2637,8 @@ DtCompilePcct (
>       ParentTable = DtPeekSubtable ();
>       DtInsertSubtable (ParentTable, Subtable);
>   
> +    /* Subtables */
> +
>       while (*PFieldList)
>       {
>           SubtableStart = *PFieldList;
> @@ -2485,6 +3141,59 @@ DtCompileSrat (
>   
>   /******************************************************************************
>    *
> + * FUNCTION:    DtCompileStao
> + *
> + * PARAMETERS:  PFieldList          - Current field list pointer
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Compile STAO.
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +DtCompileStao (
> +    void                    **List)
> +{
> +    DT_FIELD                **PFieldList = (DT_FIELD **) List;
> +    DT_SUBTABLE             *Subtable;
> +    DT_SUBTABLE             *ParentTable;
> +    ACPI_STATUS             Status;
> +
> +
> +    /* Compile the main table */
> +
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoStao,
> +                &Subtable, TRUE);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +
> +    ParentTable = DtPeekSubtable ();
> +    DtInsertSubtable (ParentTable, Subtable);
> +
> +    /* Compile each ASCII namestring as a subtable */
> +
> +    while (*PFieldList)
> +    {
> +        Status = DtCompileTable (PFieldList, AcpiDmTableInfoStaoStr,
> +                    &Subtable, TRUE);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        ParentTable = DtPeekSubtable ();
> +        DtInsertSubtable (ParentTable, Subtable);
> +    }
> +
> +    return (AE_OK);
> +}
> +
> +
> +/******************************************************************************
> + *
>    * FUNCTION:    DtGetGenericTableInfo
>    *
>    * PARAMETERS:  Name                - Generic type name
> @@ -2575,7 +3284,7 @@ DtCompileUefi (
>        * operators may be used.
>        */
>   
> -    DtCompileGeneric ((void **) PFieldList);
> +    DtCompileGeneric ((void **) PFieldList, NULL, NULL);
>   
>       return (AE_OK);
>   }
> @@ -2633,6 +3342,63 @@ DtCompileWdat (
>   
>   /******************************************************************************
>    *
> + * FUNCTION:    DtCompileWpbt
> + *
> + * PARAMETERS:  List                - Current field list pointer
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Compile WPBT.
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +DtCompileWpbt (
> +    void                    **List)
> +{
> +    DT_FIELD                **PFieldList = (DT_FIELD **) List;
> +    DT_SUBTABLE             *Subtable;
> +    DT_SUBTABLE             *ParentTable;
> +    ACPI_TABLE_WPBT         *Table;
> +    ACPI_STATUS             Status;
> +    UINT16                  Length;
> +
> +
> +    /* Compile the main table */
> +
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt,
> +                &Subtable, TRUE);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +
> +    ParentTable = DtPeekSubtable ();
> +    DtInsertSubtable (ParentTable, Subtable);
> +
> +    /* Compile the argument list subtable */
> +
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt0,
> +                &Subtable, TRUE);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +
> +    /* Extract the length of the Arguments buffer, insert into main table */
> +
> +    Length = (UINT16) Subtable->TotalLength;
> +    Table = ACPI_CAST_PTR (ACPI_TABLE_WPBT, ParentTable->Buffer);
> +    Table->ArgumentsLength = Length;
> +
> +    ParentTable = DtPeekSubtable ();
> +    DtInsertSubtable (ParentTable, Subtable);
> +    return (AE_OK);
> +}
> +
> +
> +/******************************************************************************
> + *
>    * FUNCTION:    DtCompileXsdt
>    *
>    * PARAMETERS:  List                - Current field list pointer
> @@ -2652,6 +3418,7 @@ DtCompileXsdt (
>       DT_FIELD                *FieldList = *(DT_FIELD **) List;
>       UINT64                  Address;
>   
> +
>       ParentTable = DtPeekSubtable ();
>   
>       while (FieldList)
> @@ -2672,6 +3439,8 @@ DtCompileXsdt (
>    * FUNCTION:    DtCompileGeneric
>    *
>    * PARAMETERS:  List                - Current field list pointer
> + *              Name                - Field name to end generic compiling
> + *              Length              - Compiled table length to return
>    *
>    * RETURN:      Status
>    *
> @@ -2681,7 +3450,9 @@ DtCompileXsdt (
>   
>   ACPI_STATUS
>   DtCompileGeneric (
> -    void                    **List)
> +    void                    **List,
> +    char                    *Name,
> +    UINT32                  *Length)
>   {
>       ACPI_STATUS             Status;
>       DT_SUBTABLE             *Subtable;
> @@ -2704,8 +3475,16 @@ DtCompileGeneric (
>   
>       /* Now we can actually compile the parse tree */
>   
> +    if (*Length)
> +    {
> +        *Length = 0;
> +    }
>       while (*PFieldList)
>       {
> +        if (Name && !ACPI_STRCMP ((*PFieldList)->Name, Name))
> +        {
> +            break;
> +        }
>           Info = DtGetGenericTableInfo ((*PFieldList)->Name);
>           if (!Info)
>           {
> @@ -2723,6 +3502,10 @@ DtCompileGeneric (
>           if (ACPI_SUCCESS (Status))
>           {
>               DtInsertSubtable (ParentTable, Subtable);
> +            if (Length)
> +            {
> +                *Length += Subtable->Length;
> +            }
>           }
>           else
>           {
> diff --git a/src/acpica/source/compiler/dttemplate.c b/src/acpica/source/compiler/dttemplate.c
> index b3f32b8..809ca61 100644
> --- a/src/acpica/source/compiler/dttemplate.c
> +++ b/src/acpica/source/compiler/dttemplate.c
> @@ -131,7 +131,7 @@ AcpiUtIsSpecialTable (
>   static ACPI_STATUS
>   DtCreateOneTemplate (
>       char                    *Signature,
> -    ACPI_DMTABLE_DATA       *TableData);
> +    const ACPI_DMTABLE_DATA *TableData);
>   
>   static ACPI_STATUS
>   DtCreateAllTemplates (
> @@ -184,7 +184,7 @@ ACPI_STATUS
>   DtCreateTemplates (
>       char                    *Signature)
>   {
> -    ACPI_DMTABLE_DATA       *TableData;
> +    const ACPI_DMTABLE_DATA *TableData;
>       ACPI_STATUS             Status;
>   
>   
> @@ -285,7 +285,7 @@ static ACPI_STATUS
>   DtCreateAllTemplates (
>       void)
>   {
> -    ACPI_DMTABLE_DATA       *TableData;
> +    const ACPI_DMTABLE_DATA *TableData;
>       ACPI_STATUS             Status;
>   
>   
> @@ -364,7 +364,7 @@ DtCreateAllTemplates (
>   static ACPI_STATUS
>   DtCreateOneTemplate (
>       char                    *Signature,
> -    ACPI_DMTABLE_DATA       *TableData)
> +    const ACPI_DMTABLE_DATA  *TableData)
>   {
>       char                    *DisasmFilename;
>       FILE                    *File;
> diff --git a/src/acpica/source/compiler/dttemplate.h b/src/acpica/source/compiler/dttemplate.h
> index d7b84b1..22eb736 100644
> --- a/src/acpica/source/compiler/dttemplate.h
> +++ b/src/acpica/source/compiler/dttemplate.h
> @@ -306,6 +306,29 @@ const unsigned char TemplateDmar[] =
>       0x00,0x00,0x00,0x00                       /* 00000088    "...."     */
>   };
>   
> +const unsigned char TemplateDrtm[] =
> +{
> +    0x44,0x52,0x54,0x4D,0x94,0x00,0x00,0x00,  /* 00000000    "DRTM...." */
> +    0x01,0xB9,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" */
> +    0x10,0x04,0x15,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "... ...." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000028    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000030    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000038    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000040    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000048    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000050    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000058    "........" */
> +    0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000060    "........" */
> +    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 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,0x00,0x00,0x00,0x00,  /* 00000088    "........" */
> +    0x00,0x00,0x00,0x00                       /* 00000090    "...."     */
> +};
> +
>   const unsigned char TemplateEcdt[] =
>   {
>       0x45,0x43,0x44,0x54,0x42,0x00,0x00,0x00,  /* 00000000    "ECDTB..." */
> @@ -451,11 +474,11 @@ const unsigned char TemplateFacs[] =
>   
>   const unsigned char TemplateFadt[] =
>   {
> -    0x46,0x41,0x43,0x50,0x0C,0x01,0x00,0x00,  /* 00000000    "FACP...." */
> -    0x05,0x64,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    ".dINTEL " */
> -    0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45,  /* 00000010    "TEMPLATE" */
> +    0x46,0x41,0x43,0x50,0x14,0x01,0x00,0x00,  /* 00000000    "FACP...." */
> +    0x06,0x8A,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
> +    0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65,  /* 00000010    "Template" */
>       0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> -    0x15,0x11,0x13,0x20,0x01,0x00,0x00,0x00,  /* 00000020    "... ...." */
> +    0x10,0x04,0x15,0x20,0x01,0x00,0x00,0x00,  /* 00000020    "... ...." */
>       0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000028    "........" */
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000030    "........" */
>       0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000038    "........" */
> @@ -484,7 +507,8 @@ const unsigned char TemplateFadt[] =
>       0x00,0x00,0x00,0x00,0x01,0x08,0x00,0x01,  /* 000000F0    "........" */
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000F8    "........" */
>       0x01,0x08,0x00,0x01,0x00,0x00,0x00,0x00,  /* 00000100    "........" */
> -    0x00,0x00,0x00,0x00                       /* 00000108    "...."     */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000108    "........" */
> +    0x00,0x00,0x00,0x00                       /* 00000110    "...."     */
>   };
>   
>   const unsigned char TemplateFpdt[] =
> @@ -610,6 +634,44 @@ const unsigned char TemplateHpet[] =
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00   /* 00000030    "........" */
>   };
>   
> +const unsigned char TemplateIort[] =
> +{
> +    0x49,0x4F,0x52,0x54,0x0C,0x01,0x00,0x00,  /* 00000000    "IORT...." */
> +    0x00,0xBC,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
> +    0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45,  /* 00000010    "TEMPLATE" */
> +    0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> +    0x10,0x04,0x15,0x20,0x04,0x00,0x00,0x00,  /* 00000020    "... ...." */
> +    0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000028    "4......." */
> +    0x00,0x00,0x00,0x00,0x00,0x2C,0x00,0x00,  /* 00000030    ".....,.." */
> +    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000038    "........" */
> +    0x18,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000040    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000048    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000050    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000058    "........" */
> +    0x01,0x30,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000060    ".0......" */
> +    0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,  /* 00000068    "....0..." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000070    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x5C,0x5F,0x53,  /* 00000078    ".....\_S" */
> +    0x42,0x2E,0x50,0x43,0x49,0x30,0x2E,0x44,  /* 00000080    "B.PCI0.D" */
> +    0x45,0x56,0x30,0x00,0x00,0x00,0x00,0x00,  /* 00000088    "EV0....." */
> +    0x02,0x20,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000090    ". ......" */
> +    0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,  /* 00000098    ".... ..." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000A0    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000A8    "........" */
> +    0x03,0x5C,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000B0    ".\......" */
> +    0x00,0x00,0x00,0x00,0x5C,0x00,0x00,0x00,  /* 000000B8    "....\..." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000C0    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000C8    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000D0    "........" */
> +    0x3C,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 000000D8    "<......." */
> +    0x4C,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 000000E0    "L......." */
> +    0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000E8    "T......." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000F0    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000F8    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000100    "........" */
> +    0x00,0x00,0x00,0x00                       /* 00000108    "...."     */
> +};
> +
>   const unsigned char TemplateIvrs[] =
>   {
>       0x49,0x56,0x52,0x53,0xBC,0x00,0x00,0x00,  /* 00000000    "IVRS...." */
> @@ -640,73 +702,75 @@ const unsigned char TemplateIvrs[] =
>   
>   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" */
> +    0x4C,0x50,0x49,0x54,0x94,0x00,0x00,0x00,  /* 00000000    "LPIT...." */
> +    0x00,0xD8,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
> +    0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65,  /* 00000010    "Template" */
>       0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> -    0x25,0x03,0x14,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "%.. ...." */
> +    0x10,0x04,0x15,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,0x01,0x08,0x00,0x01,  /* 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    ". ......" */
> +    0x7F,0x40,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000048    ". at ......" */
>       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,  /* 00000058    "........" */
> +    0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000060    "8......." */
> +    0x00,0x00,0x00,0x00,0x01,0x08,0x00,0x01,  /* 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    "...."     */
> +    0x7F,0x40,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000080    ". at ......" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000088    "........" */
> +    0x00,0x00,0x00,0x00                       /* 00000090    "...."     */
>   };
>   
> -/* MADT with ACPI 5.1 subtables */
> +/* MADT with ACPI 6.0 subtables */
>   
>   const unsigned char TemplateMadt[] =
>   {
> -    0x41,0x50,0x49,0x43,0x2a,0x01,0x00,0x00,  /* 00000000    "APIC*..." */
> -    0x04,0x34,0x49,0x4e,0x54,0x45,0x4c,0x20,  /* 00000008    ".4INTEL " */
> -    0x54,0x45,0x4d,0x50,0x4c,0x41,0x54,0x45,  /* 00000010    "TEMPLATE" */
> -    0x01,0x00,0x00,0x00,0x49,0x4e,0x54,0x4c,  /* 00000018    "....INTL" */
> -    0x24,0x04,0x14,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "$.. ...." */
> +    0x41,0x50,0x49,0x43,0x5A,0x01,0x00,0x00,  /* 00000000    "APICZ..." */
> +    0x03,0xEA,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
> +    0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65,  /* 00000010    "Template" */
> +    0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> +    0x10,0x04,0x15,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "... ...." */
>       0x01,0x00,0x00,0x00,0x00,0x08,0x00,0x00,  /* 00000028    "........" */
> -    0x01,0x00,0x00,0x00,0x01,0x0c,0x01,0x00,  /* 00000030    "........" */
> +    0x01,0x00,0x00,0x00,0x01,0x0C,0x01,0x00,  /* 00000030    "........" */
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000038    "........" */
> -    0x02,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000040    "........" */
> -    0x00,0x00,0x03,0x08,0x0d,0x00,0x01,0x00,  /* 00000048    "........" */
> +    0x02,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000040    "........" */
> +    0x00,0x00,0x03,0x08,0x0D,0x00,0x01,0x00,  /* 00000048    "........" */
>       0x00,0x00,0x04,0x06,0x00,0x05,0x00,0x01,  /* 00000050    "........" */
> -    0x05,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000058    "........" */
> +    0x05,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000058    "........" */
>       0x00,0x00,0x00,0x00,0x06,0x10,0x00,0x00,  /* 00000060    "........" */
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000068    "........" */
>       0x00,0x00,0x00,0x00,0x07,0x16,0x00,0x00,  /* 00000070    "........" */
>       0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000078    "........" */
> -    0x00,0x00,0x00,0x00,0x5c,0x43,0x50,0x55,  /* 00000080    "....\CPU" */
> +    0x00,0x00,0x00,0x00,0x5C,0x43,0x50,0x55,  /* 00000080    "....\CPU" */
>       0x30,0x00,0x08,0x10,0x05,0x00,0x00,0x00,  /* 00000088    "0......." */
>       0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,  /* 00000090    "........" */
>       0x00,0x00,0x09,0x10,0x00,0x00,0x00,0x00,  /* 00000098    "........" */
> -    0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,  /* 000000a0    "........" */
> -    0x00,0x00,0x0a,0x0c,0x05,0x00,0x00,0x00,  /* 000000a8    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0x4c,  /* 000000b0    ".......L" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000b8    "........" */
> -    0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,  /* 000000c0    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000c8    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000d0    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000d8    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000e0    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000e8    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000f0    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000f8    "........" */
> -    0x00,0x00,0x0e,0x10,0x00,0x00,0x00,0x00,  /* 00000100    "........" */
> +    0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,  /* 000000A0    "........" */
> +    0x00,0x00,0x0A,0x0C,0x05,0x00,0x00,0x00,  /* 000000A8    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x0B,0x50,  /* 000000B0    ".......P" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000B8    "........" */
> +    0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,  /* 000000C0    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000C8    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000D0    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000D8    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000E0    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000E8    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000F0    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000F8    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x18,  /* 00000100    "........" */
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000108    "........" */
> -    0x00,0x00,0x0c,0x18,0x00,0x00,0x00,0x00,  /* 00000110    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000118    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000110    "........" */
> +    0x00,0x00,0x01,0x00,0x00,0x00,0x0D,0x18,  /* 00000118    "........" */
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000120    "........" */
> -    0x00,0x00                                 /* 00000128    "..      " */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,  /* 00000128    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x10,  /* 00000130    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000138    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x14,  /* 00000140    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000148    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000150    "........" */
> +    0x00,0x00                                 /* 00000158    ".."       */
>   };
>   
>   const unsigned char TemplateMcfg[] =
> @@ -800,6 +864,56 @@ const unsigned char TemplateMsct[] =
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00   /* 00000088    "........" */
>   };
>   
> +const unsigned char TemplateNfit[] =
> +{
> +    0x4E,0x46,0x49,0x54,0x70,0x01,0x00,0x00,  /* 00000000    "NFITp..." */
> +    0x01,0x53,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    ".SINTEL " */
> +    0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65,  /* 00000010    "Template" */
> +    0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> +    0x10,0x04,0x15,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "... ...." */
> +    0x00,0x00,0x38,0x00,0x01,0x00,0x00,0x00,  /* 00000028    "..8....." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000030    "........" */
> +    0x30,0x05,0xAF,0x91,0x86,0x5D,0x0E,0x47,  /* 00000038    "0....].G" */
> +    0xA6,0xB0,0x0A,0x2D,0xB9,0x40,0x82,0x49,  /* 00000040    "...-. at .I" */
> +    0x00,0x00,0x00,0x7C,0x03,0x00,0x00,0x00,  /* 00000048    "...|...." */
> +    0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,  /* 00000050    "........" */
> +    0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000058    "........" */
> +    0x01,0x00,0x30,0x00,0x01,0x00,0x00,0x00,  /* 00000060    "..0....." */
> +    0x04,0x00,0x00,0x00,0x01,0x00,0x01,0x00,  /* 00000068    "........" */
> +    0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,  /* 00000070    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000078    "........" */
> +    0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,  /* 00000080    "........" */
> +    0x01,0x00,0x03,0x00,0x2A,0x00,0x00,0x00,  /* 00000088    "....*..." */
> +    0x02,0x00,0x20,0x00,0x01,0x00,0x00,0x00,  /* 00000090    ".. ....." */
> +    0x04,0x00,0x00,0x00,0x00,0x01,0x00,0x00,  /* 00000098    "........" */
> +    0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,  /* 000000A0    "........" */
> +    0x06,0x00,0x00,0x00,0x09,0x00,0x00,0x00,  /* 000000A8    "........" */
> +    0x03,0x00,0x28,0x00,0x00,0x00,0x00,0x00,  /* 000000B0    "..(....." */
> +    0xB4,0x13,0x5D,0x40,0x91,0x0B,0x29,0x93,  /* 000000B8    "..]@..)." */
> +    0x67,0xE8,0x23,0x4C,0x00,0x00,0x00,0x88,  /* 000000C0    "g.#L...." */
> +    0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,  /* 000000C8    ".."3DUfw" */
> +    0x88,0x99,0xAA,0xBB,0xCC,0xDD,0xEE,0xFF,  /* 000000D0    "........" */
> +    0x04,0x00,0x50,0x00,0x01,0x00,0x86,0x80,  /* 000000D8    "..P....." */
> +    0x17,0x20,0x01,0x00,0x86,0x80,0x17,0x20,  /* 000000E0    ". ..... " */
> +    0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000E8    "........" */
> +    0x89,0x00,0x54,0x76,0x01,0x03,0x00,0x01,  /* 000000F0    "..Tv...." */
> +    0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000F8    ". ......" */
> +    0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,  /* 00000100    "........" */
> +    0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000108    "........" */
> +    0x00,0x10,0x80,0x00,0x00,0x00,0x00,0x00,  /* 00000110    "........" */
> +    0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000118    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000120    "........" */
> +    0x05,0x00,0x28,0x00,0x01,0x00,0x00,0x01,  /* 00000128    "..(....." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000130    "........" */
> +    0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000138    ". ......" */
> +    0x00,0x00,0x00,0xE0,0x0F,0x00,0x00,0x00,  /* 00000140    "........" */
> +    0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,  /* 00000148    "........" */
> +    0x06,0x00,0x20,0x00,0x01,0x00,0x00,0x00,  /* 00000150    ".. ....." */
> +    0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000158    "........" */
> +    0x00,0x00,0x00,0x18,0x04,0x00,0x00,0x00,  /* 00000160    "........" */
> +    0x00,0x00,0x00,0x18,0x06,0x00,0x00,0x00   /* 00000168    "........" */
> +};
> +
>   const unsigned char TemplateMtmr[] =
>   {
>       0x4D,0x54,0x4D,0x52,0x4C,0x00,0x00,0x00,  /* 00000000    "MTMRL..." */
> @@ -1071,6 +1185,26 @@ const unsigned char TemplateSrat[] =
>       0x00,0x00                                 /* 00000090    ".."       */
>   };
>   
> +const unsigned char TemplateStao[] =
> +{
> +    0x53,0x54,0x41,0x4F,0x7E,0x00,0x00,0x00,  /* 00000000    "STAO~..." */
> +    0x01,0x7F,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
> +    0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45,  /* 00000010    "TEMPLATE" */
> +    0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> +    0x10,0x04,0x15,0x20,0x01,0x5C,0x5F,0x53,  /* 00000020    "... .\_S" */
> +    0x42,0x30,0x2E,0x42,0x55,0x53,0x30,0x2E,  /* 00000028    "B0.BUS0." */
> +    0x44,0x45,0x56,0x31,0x00,0x5C,0x5F,0x53,  /* 00000030    "DEV1.\_S" */
> +    0x42,0x30,0x2E,0x42,0x55,0x53,0x30,0x2E,  /* 00000038    "B0.BUS0." */
> +    0x44,0x45,0x56,0x32,0x00,0x5C,0x5F,0x53,  /* 00000040    "DEV2.\_S" */
> +    0x42,0x30,0x2E,0x42,0x55,0x53,0x31,0x2E,  /* 00000048    "B0.BUS1." */
> +    0x44,0x45,0x56,0x31,0x2E,0x44,0x45,0x56,  /* 00000050    "DEV1.DEV" */
> +    0x32,0x00,0x5C,0x5F,0x53,0x42,0x30,0x2E,  /* 00000058    "2.\_SB0." */
> +    0x42,0x55,0x53,0x31,0x2E,0x44,0x45,0x56,  /* 00000060    "BUS1.DEV" */
> +    0x32,0x2E,0x44,0x45,0x56,0x32,0x00,0x5C,  /* 00000068    "2.DEV2.\" */
> +    0x55,0x53,0x42,0x31,0x2E,0x48,0x55,0x42,  /* 00000070    "USB1.HUB" */
> +    0x31,0x2E,0x50,0x54,0x31,0x00             /* 00000078    "1.PT1."   */
> +};
> +
>   const unsigned char TemplateTcpa[] =
>   {
>       0x54,0x43,0x50,0x41,0x32,0x00,0x00,0x00,  /* 00000000    "TCPA2..." */
> @@ -1167,6 +1301,41 @@ const unsigned char TemplateWdrt[] =
>       0x00,0x00,0x00,0x00,0xFF,0xFF,0x00        /* 00000040    "......."  */
>   };
>   
> +const unsigned char TemplateWpbt[] =
> +{
> +    0x57,0x50,0x42,0x54,0x98,0x00,0x00,0x00,  /* 00000000    "WPBT...." */
> +    0x01,0x83,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" */
> +    0x10,0x04,0x15,0x20,0x78,0x56,0x34,0x12,  /* 00000020    "... xV4." */
> +    0x00,0x00,0x00,0xBB,0x00,0x00,0x00,0xAA,  /* 00000028    "........" */
> +    0x33,0x88,0x64,0x00,0x34,0x00,0x20,0x00,  /* 00000030    "3.d.4. ." */
> +    0x73,0x00,0x63,0x00,0x6F,0x00,0x72,0x00,  /* 00000038    "s.c.o.r." */
> +    0x65,0x00,0x20,0x00,0x61,0x00,0x6E,0x00,  /* 00000040    "e. .a.n." */
> +    0x64,0x00,0x20,0x00,0x37,0x00,0x20,0x00,  /* 00000048    "d. .7. ." */
> +    0x79,0x00,0x65,0x00,0x61,0x00,0x72,0x00,  /* 00000050    "y.e.a.r." */
> +    0x73,0x00,0x20,0x00,0x61,0x00,0x67,0x00,  /* 00000058    "s. .a.g." */
> +    0x6F,0x00,0x20,0x00,0x6F,0x00,0x75,0x00,  /* 00000060    "o. .o.u." */
> +    0x72,0x00,0x20,0x00,0x66,0x00,0x61,0x00,  /* 00000068    "r. .f.a." */
> +    0x74,0x00,0x68,0x00,0x65,0x00,0x72,0x00,  /* 00000070    "t.h.e.r." */
> +    0x73,0x00,0x20,0x00,0x62,0x00,0x72,0x00,  /* 00000078    "s. .b.r." */
> +    0x6F,0x00,0x75,0x00,0x67,0x00,0x68,0x00,  /* 00000080    "o.u.g.h." */
> +    0x74,0x00,0x20,0x00,0x66,0x00,0x6F,0x00,  /* 00000088    "t. .f.o." */
> +    0x72,0x00,0x74,0x00,0x68,0x00,0x00,0x00   /* 00000090    "r.t.h..." */
> +};
> +
> +const unsigned char TemplateXenv[] =
> +{
> +    0x58,0x45,0x4E,0x56,0x39,0x00,0x00,0x00,  /* 00000000    "XENV9..." */
> +    0x01,0x3A,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" */
> +    0x10,0x04,0x15,0x20,0x00,0x00,0x00,0x10,  /* 00000020    "... ...." */
> +    0x00,0x00,0x00,0x0A,0x00,0x20,0x00,0x00,  /* 00000028    "..... .." */
> +    0x00,0x00,0x00,0x0B,0x25,0x00,0xBB,0xAA,  /* 00000030    "....%..." */
> +    0x03                                      /* 00000038    "."        */
> +};
> +
>   const unsigned char TemplateXsdt[] =
>   {
>       0x58,0x53,0x44,0x54,0x64,0x00,0x00,0x00,  /* 00000000    "XSDTd..." */
> diff --git a/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c
> index 4b795c0..658cde6 100644
> --- a/src/acpica/source/compiler/dtutils.c
> +++ b/src/acpica/source/compiler/dtutils.c
> @@ -448,6 +448,7 @@ DtGetFieldType (
>   
>       case ACPI_DMT_GAS:
>       case ACPI_DMT_HESTNTFY:
> +    case ACPI_DMT_IORTMEM:
>   
>           Type = DT_FIELD_TYPE_INLINE_SUBTABLE;
>           break;
> @@ -592,6 +593,7 @@ DtGetFieldLength (
>       case ACPI_DMT_UINT16:
>       case ACPI_DMT_DMAR:
>       case ACPI_DMT_HEST:
> +    case ACPI_DMT_NFIT:
>       case ACPI_DMT_PCI_PATH:
>   
>           ByteLength = 2;
> @@ -659,6 +661,11 @@ DtGetFieldLength (
>           ByteLength = sizeof (ACPI_HEST_NOTIFY);
>           break;
>   
> +    case ACPI_DMT_IORTMEM:
> +
> +        ByteLength = sizeof (ACPI_IORT_MEMORY_ACCESS);
> +        break;
> +
>       case ACPI_DMT_BUFFER:
>       case ACPI_DMT_RAW_BUFFER:
>   
> diff --git a/src/acpica/source/compiler/preprocess.h b/src/acpica/source/compiler/preprocess.h
> index 998a25a..39b35e8 100644
> --- a/src/acpica/source/compiler/preprocess.h
> +++ b/src/acpica/source/compiler/preprocess.h
> @@ -339,14 +339,18 @@ PrReplaceData (
>       char                    *BufferToAdd,
>       UINT32                  LengthToAdd);
>   
> -void
> +FILE *
>   PrOpenIncludeFile (
> -    char                    *Filename);
> +    char                    *Filename,
> +    char                    *OpenMode,
> +    char                    **FullPathname);
>   
>   FILE *
>   PrOpenIncludeWithPrefix (
>       char                    *PrefixDir,
> -    char                    *Filename);
> +    char                    *Filename,
> +    char                    *OpenMode,
> +    char                    **FullPathname);
>   
>   void
>   PrPushInputFileStack (
> diff --git a/src/acpica/source/compiler/prscan.c b/src/acpica/source/compiler/prscan.c
> index d52a45e..cafcea5 100644
> --- a/src/acpica/source/compiler/prscan.c
> +++ b/src/acpica/source/compiler/prscan.c
> @@ -157,28 +157,42 @@ PrDbgPrint (
>       char                    *Action,
>       char                    *DirectiveName);
>   
> +static void
> +PrDoIncludeBuffer (
> +    char                    *Pathname,
> +    char                    *BufferName);
> +
> +static void
> +PrDoIncludeFile (
> +    char                    *Pathname);
> +
>   
>   /*
>    * Supported preprocessor directives
> + * Each entry is of the form "Name, ArgumentCount"
>    */
>   static const PR_DIRECTIVE_INFO      Gbl_DirectiveInfo[] =
>   {
> -    {"define",  1},
> -    {"elif",    0}, /* Converted to #else..#if internally */
> -    {"else",    0},
> -    {"endif",   0},
> -    {"error",   1},
> -    {"if",      1},
> -    {"ifdef",   1},
> -    {"ifndef",  1},
> -    {"include", 0}, /* Argument is not standard format, so 0 */
> -    {"line",    1},
> -    {"pragma",  1},
> -    {"undef",   1},
> -    {"warning", 1},
> -    {NULL,      0}
> +    {"define",          1},
> +    {"elif",            0}, /* Converted to #else..#if internally */
> +    {"else",            0},
> +    {"endif",           0},
> +    {"error",           1},
> +    {"if",              1},
> +    {"ifdef",           1},
> +    {"ifndef",          1},
> +    {"include",         0}, /* Argument is not standard format, so just use 0 here */
> +    {"includebuffer",   0}, /* Argument is not standard format, so just use 0 here */
> +    {"line",            1},
> +    {"loadbuffer",      0},
> +    {"pragma",          1},
> +    {"undef",           1},
> +    {"warning",         1},
> +    {NULL,              0}
>   };
>   
> +/* This table must match ordering of above table exactly */
> +
>   enum Gbl_DirectiveIndexes
>   {
>       PR_DIRECTIVE_DEFINE = 0,
> @@ -190,6 +204,7 @@ enum Gbl_DirectiveIndexes
>       PR_DIRECTIVE_IFDEF,
>       PR_DIRECTIVE_IFNDEF,
>       PR_DIRECTIVE_INCLUDE,
> +    PR_DIRECTIVE_INCLUDEBUFFER,
>       PR_DIRECTIVE_LINE,
>       PR_DIRECTIVE_PRAGMA,
>       PR_DIRECTIVE_UNDEF,
> @@ -454,13 +469,6 @@ PrPreprocessInputFile (
>               Token = PrGetNextToken (NULL, PR_TOKEN_SEPARATORS, &Next);
>           }
>   
> -#if 0
> -/* Line prefix */
> -        FlPrintFile (ASL_FILE_PREPROCESSOR, "/* %14s  %.5u  i:%.5u */ ",
> -            Gbl_Files[ASL_FILE_INPUT].Filename,
> -            Gbl_CurrentLineNumber, Gbl_PreprocessorLineNumber);
> -#endif
> -
>           /*
>            * Emit a #line directive if necessary, to keep the line numbers in
>            * the (.i) file synchronized with the original source code file, so
> @@ -505,7 +513,7 @@ PrDoDirective (
>       char                    **Next)
>   {
>       char                    *Token = Gbl_MainTokenBuffer;
> -    char                    *Token2;
> +    char                    *Token2 = NULL;
>       char                    *End;
>       UINT64                  Value;
>       ACPI_SIZE               TokenOffset;
> @@ -524,7 +532,7 @@ PrDoDirective (
>           PrError (ASL_ERROR, ASL_MSG_UNKNOWN_DIRECTIVE,
>               THIS_TOKEN_OFFSET (DirectiveToken));
>   
> -        DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID
> +        DbgPrint (ASL_PARSE_OUTPUT, PR_PREFIX_ID
>               "#%s: Unknown directive\n",
>               Gbl_CurrentLineNumber, DirectiveToken);
>           return;
> @@ -611,7 +619,7 @@ PrDoDirective (
>   
>       /* Most directives have at least one argument */
>   
> -    if (Gbl_DirectiveInfo[Directive].ArgCount == 1)
> +    if (Gbl_DirectiveInfo[Directive].ArgCount >= 1)
>       {
>           Token = PrGetNextToken (NULL, PR_TOKEN_SEPARATORS, Next);
>           if (!Token)
> @@ -620,6 +628,15 @@ PrDoDirective (
>           }
>       }
>   
> +    if (Gbl_DirectiveInfo[Directive].ArgCount >= 2)
> +    {
> +        Token2 = PrGetNextToken (NULL, PR_TOKEN_SEPARATORS, Next);
> +        if (!Token2)
> +        {
> +            goto SyntaxError;
> +        }
> +    }
> +
>       /*
>        * At this point, if we are ignoring the current code block,
>        * do not process any more directives (i.e., ignore them also.)
> @@ -671,7 +688,7 @@ PrDoDirective (
>               Gbl_IgnoringThisCodeBlock = TRUE;
>           }
>   
> -        DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID
> +        DbgPrint (ASL_PARSE_OUTPUT, PR_PREFIX_ID
>               "Resolved #if: %8.8X%8.8X %s\n",
>               Gbl_CurrentLineNumber, ACPI_FORMAT_UINT64 (Value),
>               Gbl_IgnoringThisCodeBlock ? "<Skipping Block>" : "<Executing Block>");
> @@ -744,7 +761,7 @@ PrDoDirective (
>                   Token2 = "";
>               }
>   #endif
> -            DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID
> +            DbgPrint (ASL_PARSE_OUTPUT, PR_PREFIX_ID
>                   "New #define: %s->%s\n",
>                   Gbl_CurrentLineNumber, Token, Token2);
>   
> @@ -772,11 +789,32 @@ PrDoDirective (
>               goto SyntaxError;
>           }
>   
> -        DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID
> +        DbgPrint (ASL_PARSE_OUTPUT, PR_PREFIX_ID
>               "Start #include file \"%s\"\n", Gbl_CurrentLineNumber,
>               Token, Gbl_CurrentLineNumber);
>   
> -        PrOpenIncludeFile (Token);
> +        PrDoIncludeFile (Token);
> +        break;
> +
> +    case PR_DIRECTIVE_INCLUDEBUFFER:
> +
> +        Token = PrGetNextToken (NULL, " \"<>", Next);
> +        if (!Token)
> +        {
> +            goto SyntaxError;
> +        }
> +
> +        Token2 = PrGetNextToken (NULL, PR_TOKEN_SEPARATORS, Next);
> +        if (!Token2)
> +        {
> +            goto SyntaxError;
> +        }
> +
> +        DbgPrint (ASL_PARSE_OUTPUT, PR_PREFIX_ID
> +            "Start #includebuffer input from file \"%s\", buffer name %s\n",
> +            Gbl_CurrentLineNumber, Token, Token2);
> +
> +        PrDoIncludeBuffer (Token, Token2);
>           break;
>   
>       case PR_DIRECTIVE_LINE:
> @@ -790,7 +828,7 @@ PrDoDirective (
>               return;
>           }
>   
> -        DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID
> +        DbgPrint (ASL_PARSE_OUTPUT, PR_PREFIX_ID
>               "User #line invocation %s\n", Gbl_CurrentLineNumber,
>               Token);
>   
> @@ -840,7 +878,7 @@ PrDoDirective (
>   
>       case PR_DIRECTIVE_UNDEF:
>   
> -        DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID
> +        DbgPrint (ASL_PARSE_OUTPUT, PR_PREFIX_ID
>               "#undef: %s\n", Gbl_CurrentLineNumber, Token);
>   
>           PrRemoveDefine (Token);
> @@ -855,7 +893,7 @@ PrDoDirective (
>       default:
>   
>           /* Should never get here */
> -        DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID
> +        DbgPrint (ASL_PARSE_OUTPUT, PR_PREFIX_ID
>               "Unrecognized directive: %u\n",
>               Gbl_CurrentLineNumber, Directive);
>           break;
> @@ -1026,9 +1064,92 @@ PrDbgPrint (
>   {
>   
>       DbgPrint (ASL_DEBUG_OUTPUT, "Pr(%.4u) - [%u %s] "
> -        "%*s %s #%s, Depth %u\n",
> +        "%*s %s #%s, IfDepth %u\n",
>           Gbl_CurrentLineNumber, Gbl_IfDepth,
>           Gbl_IgnoringThisCodeBlock ? "I" : "E",
>           Gbl_IfDepth * 4, " ",
>           Action, DirectiveName, Gbl_IfDepth);
>   }
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    PrDoIncludeFile
> + *
> + * PARAMETERS:  Pathname                - Name of the input file
> + *
> + * RETURN:      None.
> + *
> + * DESCRIPTION: Open an include file, from #include.
> + *
> + ******************************************************************************/
> +
> +static void
> +PrDoIncludeFile (
> +    char                    *Pathname)
> +{
> +    char                    *FullPathname;
> +
> +
> +    (void) PrOpenIncludeFile (Pathname, "r", &FullPathname);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    PrDoIncludeBuffer
> + *
> + * PARAMETERS:  Pathname                - Name of the input binary file
> + *              BufferName              - ACPI namepath of the buffer
> + *
> + * RETURN:      None.
> + *
> + * DESCRIPTION: Create an ACPI buffer object from a binary file. The contents
> + *              of the file are emitted into the buffer object as ascii
> + *              hex data. From #includebuffer.
> + *
> + ******************************************************************************/
> +
> +static void
> +PrDoIncludeBuffer (
> +    char                    *Pathname,
> +    char                    *BufferName)
> +{
> +    char                    *FullPathname;
> +    FILE                    *BinaryBufferFile;
> +    UINT32                  i = 0;
> +    UINT8                   c;
> +
> +
> +    BinaryBufferFile = PrOpenIncludeFile (Pathname, "rb", &FullPathname);
> +    if (!BinaryBufferFile)
> +    {
> +        return;
> +    }
> +
> +    /* Emit "Name (XXXX, Buffer() {" header */
> +
> +    FlPrintFile (ASL_FILE_PREPROCESSOR, "Name (%s, Buffer()\n{", BufferName);
> +
> +    /* Dump the entire file in ascii hex format */
> +
> +    while (fread (&c, 1, 1, BinaryBufferFile))
> +    {
> +        if (!(i % 8))
> +        {
> +            FlPrintFile (ASL_FILE_PREPROCESSOR, "\n   ", c);
> +        }
> +
> +        FlPrintFile (ASL_FILE_PREPROCESSOR, " 0x%2.2X,", c);
> +        i++;
> +    }
> +
> +    DbgPrint (ASL_PARSE_OUTPUT, PR_PREFIX_ID
> +        "#includebuffer: read %u bytes from %s\n",
> +        Gbl_CurrentLineNumber, i, FullPathname);
> +
> +    /* Close the Name() operator */
> +
> +    FlPrintFile (ASL_FILE_PREPROCESSOR, "\n})\n", BufferName);
> +    fclose (BinaryBufferFile);
> +}
> diff --git a/src/acpica/source/compiler/prutils.c b/src/acpica/source/compiler/prutils.c
> index 10d65a5..329f6d0 100644
> --- a/src/acpica/source/compiler/prutils.c
> +++ b/src/acpica/source/compiler/prutils.c
> @@ -310,9 +310,11 @@ PrReplaceData (
>    *
>    ******************************************************************************/
>   
> -void
> +FILE *
>   PrOpenIncludeFile (
> -    char                    *Filename)
> +    char                    *Filename,
> +    char                    *OpenMode,
> +    char                    **FullPathname)
>   {
>       FILE                    *IncludeFile;
>       ASL_INCLUDE_DIR         *NextDir;
> @@ -329,12 +331,13 @@ PrOpenIncludeFile (
>           (Filename[0] == '\\') ||
>           (Filename[1] == ':'))
>       {
> -        IncludeFile = PrOpenIncludeWithPrefix ("", Filename);
> +        IncludeFile = PrOpenIncludeWithPrefix (
> +            "", Filename, OpenMode, FullPathname);
>           if (!IncludeFile)
>           {
>               goto ErrorExit;
>           }
> -        return;
> +        return (IncludeFile);
>       }
>   
>       /*
> @@ -345,10 +348,11 @@ PrOpenIncludeFile (
>        *
>        * Construct the file pathname from the global directory name.
>        */
> -    IncludeFile = PrOpenIncludeWithPrefix (Gbl_DirectoryPath, Filename);
> +    IncludeFile = PrOpenIncludeWithPrefix (
> +        Gbl_DirectoryPath, Filename, OpenMode, FullPathname);
>       if (IncludeFile)
>       {
> -        return;
> +        return (IncludeFile);
>       }
>   
>       /*
> @@ -358,10 +362,11 @@ PrOpenIncludeFile (
>       NextDir = Gbl_IncludeDirList;
>       while (NextDir)
>       {
> -        IncludeFile = PrOpenIncludeWithPrefix (NextDir->Dir, Filename);
> +        IncludeFile = PrOpenIncludeWithPrefix (
> +            NextDir->Dir, Filename, OpenMode, FullPathname);
>           if (IncludeFile)
>           {
> -            return;
> +            return (IncludeFile);
>           }
>   
>           NextDir = NextDir->Next;
> @@ -372,6 +377,7 @@ PrOpenIncludeFile (
>   ErrorExit:
>       sprintf (Gbl_MainTokenBuffer, "%s, %s", Filename, strerror (errno));
>       PrError (ASL_ERROR, ASL_MSG_INCLUDE_FILE_OPEN, 0);
> +    return (NULL);
>   }
>   
>   
> @@ -392,7 +398,9 @@ ErrorExit:
>   FILE *
>   PrOpenIncludeWithPrefix (
>       char                    *PrefixDir,
> -    char                    *Filename)
> +    char                    *Filename,
> +    char                    *OpenMode,
> +    char                    **FullPathname)
>   {
>       FILE                    *IncludeFile;
>       char                    *Pathname;
> @@ -408,7 +416,7 @@ PrOpenIncludeWithPrefix (
>   
>       /* Attempt to open the file, push if successful */
>   
> -    IncludeFile = fopen (Pathname, "r");
> +    IncludeFile = fopen (Pathname, OpenMode);
>       if (!IncludeFile)
>       {
>           fprintf (stderr, "Could not open include file %s\n", Pathname);
> @@ -418,6 +426,7 @@ PrOpenIncludeWithPrefix (
>       /* Push the include file on the open input file stack */
>   
>       PrPushInputFileStack (IncludeFile, Pathname);
> +    *FullPathname = Pathname;
>       return (IncludeFile);
>   }
>   
> diff --git a/src/acpica/source/components/debugger/dbfileio.c b/src/acpica/source/components/debugger/dbfileio.c
> index 768d87c..dc55c6e 100644
> --- a/src/acpica/source/components/debugger/dbfileio.c
> +++ b/src/acpica/source/components/debugger/dbfileio.c
> @@ -288,7 +288,8 @@ AeLocalLoadTable (
>   ACPI_STATUS
>   AcpiDbGetTableFromFile (
>       char                    *Filename,
> -    ACPI_TABLE_HEADER       **ReturnTable)
> +    ACPI_TABLE_HEADER       **ReturnTable,
> +    BOOLEAN                 MustBeAmlFile)
>   {
>   #ifdef ACPI_APPLICATION
>       ACPI_STATUS             Status;
> @@ -302,9 +303,18 @@ AcpiDbGetTableFromFile (
>           return (Status);
>       }
>   
> -#ifdef ACPI_DATA_TABLE_DISASSEMBLY
> -    IsAmlTable = AcpiUtIsAmlTable (Table);
> -#endif
> +    if (MustBeAmlFile)
> +    {
> +        IsAmlTable = AcpiUtIsAmlTable (Table);
> +        if (!IsAmlTable)
> +        {
> +            ACPI_EXCEPTION ((AE_INFO, AE_OK,
> +                "Input for -e is not an AML table: "
> +                "\"%4.4s\" (must be DSDT/SSDT)",
> +                Table->Signature));
> +            return (AE_TYPE);
> +        }
> +    }
>   
>       if (IsAmlTable)
>       {
> diff --git a/src/acpica/source/components/debugger/dbinput.c b/src/acpica/source/components/debugger/dbinput.c
> index fe34a90..573f384 100644
> --- a/src/acpica/source/components/debugger/dbinput.c
> +++ b/src/acpica/source/components/debugger/dbinput.c
> @@ -1041,7 +1041,7 @@ AcpiDbCommandDispatch (
>   
>       case CMD_LOAD:
>   
> -        Status = AcpiDbGetTableFromFile (AcpiGbl_DbArgs[1], NULL);
> +        Status = AcpiDbGetTableFromFile (AcpiGbl_DbArgs[1], NULL, FALSE);
>           break;
>   
>       case CMD_LOCKS:
> diff --git a/src/acpica/source/components/dispatcher/dsmethod.c b/src/acpica/source/components/dispatcher/dsmethod.c
> index 43ee55d..2e37795 100644
> --- a/src/acpica/source/components/dispatcher/dsmethod.c
> +++ b/src/acpica/source/components/dispatcher/dsmethod.c
> @@ -195,6 +195,7 @@ AcpiDsAutoSerializeMethod (
>       WalkState = AcpiDsCreateWalkState (Node->OwnerId, NULL, NULL, NULL);
>       if (!WalkState)
>       {
> +        AcpiPsFreeOp (Op);
>           return_ACPI_STATUS (AE_NO_MEMORY);
>       }
>   
> @@ -203,6 +204,7 @@ AcpiDsAutoSerializeMethod (
>       if (ACPI_FAILURE (Status))
>       {
>           AcpiDsDeleteWalkState (WalkState);
> +        AcpiPsFreeOp (Op);
>           return_ACPI_STATUS (Status);
>       }
>   
> @@ -211,10 +213,6 @@ AcpiDsAutoSerializeMethod (
>       /* Parse the method, scan for creation of named objects */
>   
>       Status = AcpiPsParseAml (WalkState);
> -    if (ACPI_FAILURE (Status))
> -    {
> -        return_ACPI_STATUS (Status);
> -    }
>   
>       AcpiPsDeleteParseTree (Op);
>       return_ACPI_STATUS (Status);
> diff --git a/src/acpica/source/components/hardware/hwpci.c b/src/acpica/source/components/hardware/hwpci.c
> index da7674c..0d07fe1 100644
> --- a/src/acpica/source/components/hardware/hwpci.c
> +++ b/src/acpica/source/components/hardware/hwpci.c
> @@ -212,7 +212,7 @@ AcpiHwDerivePciId (
>       ACPI_HANDLE             PciRegion)
>   {
>       ACPI_STATUS             Status;
> -    ACPI_PCI_DEVICE         *ListHead = NULL;
> +    ACPI_PCI_DEVICE         *ListHead;
>   
>   
>       ACPI_FUNCTION_TRACE (HwDerivePciId);
> @@ -270,7 +270,6 @@ AcpiHwBuildPciList (
>       ACPI_HANDLE             ParentDevice;
>       ACPI_STATUS             Status;
>       ACPI_PCI_DEVICE         *ListElement;
> -    ACPI_PCI_DEVICE         *ListHead = NULL;
>   
>   
>       /*
> @@ -278,6 +277,7 @@ AcpiHwBuildPciList (
>        * a list of device nodes. Loop will exit when either the PCI device is
>        * found, or the root of the namespace is reached.
>        */
> +    *ReturnListHead = NULL;
>       CurrentDevice = PciRegion;
>       while (1)
>       {
> @@ -294,7 +294,6 @@ AcpiHwBuildPciList (
>   
>           if (ParentDevice == RootPciDevice)
>           {
> -            *ReturnListHead = ListHead;
>               return (AE_OK);
>           }
>   
> @@ -309,9 +308,9 @@ AcpiHwBuildPciList (
>   
>           /* Put new element at the head of the list */
>   
> -        ListElement->Next = ListHead;
> +        ListElement->Next = *ReturnListHead;
>           ListElement->Device = ParentDevice;
> -        ListHead = ListElement;
> +        *ReturnListHead = ListElement;
>   
>           CurrentDevice = ParentDevice;
>       }
> diff --git a/src/acpica/source/components/namespace/nsprepkg.c b/src/acpica/source/components/namespace/nsprepkg.c
> index 085ccd2..627ee3e 100644
> --- a/src/acpica/source/components/namespace/nsprepkg.c
> +++ b/src/acpica/source/components/namespace/nsprepkg.c
> @@ -393,6 +393,13 @@ AcpiNsCheckPackage (
>           Status = AcpiNsCheckPackageList (Info, Package, Elements, Count);
>           break;
>   
> +    case ACPI_PTYPE2_VAR_VAR:
> +        /*
> +         * Returns a variable list of packages, each with a variable list
> +         * of objects.
> +         */
> +        break;
> +
>       case ACPI_PTYPE2_UUID_PAIR:
>   
>           /* The package must contain pairs of (UUID + type) */
> @@ -562,6 +569,12 @@ AcpiNsCheckPackageList (
>               }
>               break;
>   
> +        case ACPI_PTYPE2_VAR_VAR:
> +            /*
> +             * Each subpackage has a fixed or variable number of elements
> +             */
> +            break;
> +
>           case ACPI_PTYPE2_FIXED:
>   
>               /* Each subpackage has a fixed length */
> diff --git a/src/acpica/source/components/namespace/nsrepair.c b/src/acpica/source/components/namespace/nsrepair.c
> index 736933a..fbb9c7e 100644
> --- a/src/acpica/source/components/namespace/nsrepair.c
> +++ b/src/acpica/source/components/namespace/nsrepair.c
> @@ -595,10 +595,10 @@ AcpiNsRemoveNullElements (
>       case ACPI_PTYPE2_MIN:
>       case ACPI_PTYPE2_REV_FIXED:
>       case ACPI_PTYPE2_FIX_VAR:
> -
>           break;
>   
>       default:
> +    case ACPI_PTYPE2_VAR_VAR:
>       case ACPI_PTYPE1_FIXED:
>       case ACPI_PTYPE1_OPTION:
>           return;
> diff --git a/src/acpica/source/components/parser/psopinfo.c b/src/acpica/source/components/parser/psopinfo.c
> index e0fbd89..4a26ae7 100644
> --- a/src/acpica/source/components/parser/psopinfo.c
> +++ b/src/acpica/source/components/parser/psopinfo.c
> @@ -124,9 +124,6 @@
>           ACPI_MODULE_NAME    ("psopinfo")
>   
>   
> -extern const UINT8      AcpiGbl_ShortOpIndex[];
> -extern const UINT8      AcpiGbl_LongOpIndex[];
> -
>   static const UINT8      AcpiGbl_ArgumentCount[] = {0,1,1,1,1,2,2,2,2,3,3,6};
>   
>   
> diff --git a/src/acpica/source/components/utilities/utfileio.c b/src/acpica/source/components/utilities/utfileio.c
> index e24e81f..5b78379 100644
> --- a/src/acpica/source/components/utilities/utfileio.c
> +++ b/src/acpica/source/components/utilities/utfileio.c
> @@ -300,11 +300,8 @@ AcpiUtReadTable (
>                   TableHeader.Length, FileSize);
>   
>   #ifdef ACPI_ASL_COMPILER
> -            Status = FlCheckForAscii (fp, NULL, FALSE);
> -            if (ACPI_SUCCESS (Status))
> -            {
> -                AcpiOsPrintf ("File appears to be ASCII only, must be binary\n");
> -            }
> +            AcpiOsPrintf ("File is corrupt or is ASCII text -- "
> +                "it must be a binary file\n");
>   #endif
>               return (AE_BAD_HEADER);
>           }
> @@ -416,7 +413,7 @@ AcpiUtReadTableFromFile (
>   
>       /* Get the entire file */
>   
> -    fprintf (stderr, "Loading Acpi table from file %10s - Length %.8u (%06X)\n",
> +    fprintf (stderr, "Reading ACPI table from file %10s - Length %.8u (0x%06X)\n",
>           Filename, FileSize, FileSize);
>   
>       Status = AcpiUtReadTable (File, Table, &TableLength);
> diff --git a/src/acpica/source/components/utilities/uthex.c b/src/acpica/source/components/utilities/uthex.c
> index 500ab40..c652f6a 100644
> --- a/src/acpica/source/components/utilities/uthex.c
> +++ b/src/acpica/source/components/utilities/uthex.c
> @@ -154,9 +154,9 @@ AcpiUtHexToAsciiChar (
>   
>   /*******************************************************************************
>    *
> - * FUNCTION:    AcpiUtHexCharToValue
> + * FUNCTION:    AcpiUtAsciiCharToHex
>    *
> - * PARAMETERS:  AsciiChar             - Hex character in Ascii
> + * PARAMETERS:  HexChar                 - Hex character in Ascii
>    *
>    * RETURN:      The binary value of the ascii/hex character
>    *
> diff --git a/src/acpica/source/components/utilities/utxferror.c b/src/acpica/source/components/utilities/utxferror.c
> index bdbab99..b62e5df 100644
> --- a/src/acpica/source/components/utilities/utxferror.c
> +++ b/src/acpica/source/components/utilities/utxferror.c
> @@ -195,8 +195,18 @@ AcpiException (
>   
>   
>       ACPI_MSG_REDIRECT_BEGIN;
> -    AcpiOsPrintf (ACPI_MSG_EXCEPTION "%s, ", AcpiFormatException (Status));
>   
> +    /* For AE_OK, just print the message */
> +
> +    if (ACPI_SUCCESS (Status))
> +    {
> +        AcpiOsPrintf (ACPI_MSG_EXCEPTION);
> +
> +    }
> +    else
> +    {
> +        AcpiOsPrintf (ACPI_MSG_EXCEPTION "%s, ", AcpiFormatException (Status));
> +    }
>       va_start (ArgList, Format);
>       AcpiOsVprintf (Format, ArgList);
>       ACPI_MSG_SUFFIX;
> diff --git a/src/acpica/source/include/acdebug.h b/src/acpica/source/include/acdebug.h
> index 3c823e8..2d91725 100644
> --- a/src/acpica/source/include/acdebug.h
> +++ b/src/acpica/source/include/acdebug.h
> @@ -447,7 +447,8 @@ AcpiDbLoadAcpiTable (
>   ACPI_STATUS
>   AcpiDbGetTableFromFile (
>       char                    *Filename,
> -    ACPI_TABLE_HEADER       **Table);
> +    ACPI_TABLE_HEADER       **Table,
> +    BOOLEAN                 MustBeAmlTable);
>   
>   
>   /*
> diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h
> index 5776d5d..30fbece 100644
> --- a/src/acpica/source/include/acdisasm.h
> +++ b/src/acpica/source/include/acdisasm.h
> @@ -132,7 +132,7 @@
>   #define ACPI_RAW_TABLE_DATA_HEADER      "Raw Table Data"
>   
>   
> -typedef const struct acpi_dmtable_info
> +typedef struct acpi_dmtable_info
>   {
>       UINT8                       Opcode;
>       UINT16                      Offset;
> @@ -220,9 +220,11 @@ typedef enum
>       ACPI_DMT_HEST,
>       ACPI_DMT_HESTNTFY,
>       ACPI_DMT_HESTNTYP,
> +    ACPI_DMT_IORTMEM,
>       ACPI_DMT_IVRS,
>       ACPI_DMT_LPIT,
>       ACPI_DMT_MADT,
> +    ACPI_DMT_NFIT,
>       ACPI_DMT_PCCT,
>       ACPI_DMT_PMTT,
>       ACPI_DMT_SLIC,
> @@ -250,7 +252,6 @@ typedef struct acpi_dmtable_data
>       ACPI_DMTABLE_HANDLER    TableHandler;
>       ACPI_CMTABLE_HANDLER    CmTableHandler;
>       const unsigned char     *Template;
> -    char                    *Name;
>   
>   } ACPI_DMTABLE_DATA;
>   
> @@ -318,6 +319,7 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoCpep0[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoCsrt0[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoCsrt1[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoCsrt2[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoCsrt2a[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDbg2[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDbg2Device[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDbg2Addr[];
> @@ -334,6 +336,11 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDmar2[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDmar3[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDmar4[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDrtm[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDrtm0[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDrtm0a[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDrtm1[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDrtm1a[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDrtm2[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoEcdt[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoEinj[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoEinj0[];
> @@ -344,6 +351,7 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoFadt1[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoFadt2[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoFadt3[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoFadt5[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoFadt6[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoFpdt[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoFpdtHdr[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoFpdt0[];
> @@ -369,6 +377,20 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoHpet[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoLpitHdr[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoLpit0[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoLpit1[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIort[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIort0[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIort0a[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIort1[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIort1a[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIort2[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIort3[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIort3a[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIort3b[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIort3c[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIortAcc[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIortHdr[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIortMap[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIortPad[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs0[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs1[];
> @@ -393,6 +415,7 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt11[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt12[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt13[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt14[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt15[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadtHdr[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMcfg[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMcfg0[];
> @@ -407,6 +430,18 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMsct[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMsct0[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMtmr[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMtmr0[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNfit[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNfitHdr[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNfit0[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNfit1[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNfit2[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNfit2a[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNfit3[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNfit3a[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNfit4[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNfit5[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNfit6[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNfit6a[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPmtt[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPmtt0[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPmtt1[];
> @@ -434,6 +469,8 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSrat0[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSrat1[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSrat2[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSrat3[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoStao[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoStaoStr[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTcpa[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTpm2[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoUefi[];
> @@ -444,14 +481,17 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoWdat[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoWdat0[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoWddt[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoWdrt[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoWpbt[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoWpbt0[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoXenv[];
>   
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoGeneric[][2];
>   
> -
>   /*
> - * dmtable
> + * dmtable and ahtable
>    */
> -extern ACPI_DMTABLE_DATA        AcpiDmTableData[];
> +extern const ACPI_DMTABLE_DATA  AcpiDmTableData[];
> +extern const AH_TABLE           AcpiSupportedTables[];
>   
>   UINT8
>   AcpiDmGenerateChecksum (
> @@ -459,7 +499,7 @@ AcpiDmGenerateChecksum (
>       UINT32                  Length,
>       UINT8                   OriginalChecksum);
>   
> -ACPI_DMTABLE_DATA *
> +const ACPI_DMTABLE_DATA *
>   AcpiDmGetTableData (
>       char                    *Signature);
>   
> @@ -498,8 +538,13 @@ AcpiDmDumpBuffer (
>       UINT32                  BufferOffset,
>       UINT32                  Length,
>       UINT32                  AbsoluteOffset,
> -    char                    *Header,
> -    BOOLEAN                 MultiLine);
> +    char                    *Header);
> +
> +void
> +AcpiDmDumpUnicode (
> +    void                    *Table,
> +    UINT32                  BufferOffset,
> +    UINT32                  ByteLength);
>   
>   void
>   AcpiDmDumpAsf (
> @@ -522,6 +567,10 @@ AcpiDmDumpDmar (
>       ACPI_TABLE_HEADER       *Table);
>   
>   void
> +AcpiDmDumpDrtm (
> +    ACPI_TABLE_HEADER       *Table);
> +
> +void
>   AcpiDmDumpEinj (
>       ACPI_TABLE_HEADER       *Table);
>   
> @@ -546,6 +595,10 @@ AcpiDmDumpHest (
>       ACPI_TABLE_HEADER       *Table);
>   
>   void
> +AcpiDmDumpIort (
> +    ACPI_TABLE_HEADER       *Table);
> +
> +void
>   AcpiDmDumpIvrs (
>       ACPI_TABLE_HEADER       *Table);
>   
> @@ -574,6 +627,10 @@ AcpiDmDumpMtmr (
>       ACPI_TABLE_HEADER       *Table);
>   
>   void
> +AcpiDmDumpNfit (
> +    ACPI_TABLE_HEADER       *Table);
> +
> +void
>   AcpiDmDumpPcct (
>       ACPI_TABLE_HEADER       *Table);
>   
> @@ -606,6 +663,10 @@ AcpiDmDumpSrat (
>       ACPI_TABLE_HEADER       *Table);
>   
>   void
> +AcpiDmDumpStao (
> +    ACPI_TABLE_HEADER       *Table);
> +
> +void
>   AcpiDmDumpVrtc (
>       ACPI_TABLE_HEADER       *Table);
>   
> @@ -614,6 +675,10 @@ AcpiDmDumpWdat (
>       ACPI_TABLE_HEADER       *Table);
>   
>   void
> +AcpiDmDumpWpbt (
> +    ACPI_TABLE_HEADER       *Table);
> +
> +void
>   AcpiDmDumpXsdt (
>       ACPI_TABLE_HEADER       *Table);
>   
> diff --git a/src/acpica/source/include/aclocal.h b/src/acpica/source/include/aclocal.h
> index 9e0d08d..dc7a2eb 100644
> --- a/src/acpica/source/include/aclocal.h
> +++ b/src/acpica/source/include/aclocal.h
> @@ -473,12 +473,24 @@ typedef struct acpi_package_info3
>   
>   } ACPI_PACKAGE_INFO3;
>   
> +typedef struct acpi_package_info4
> +{
> +    UINT8                       Type;
> +    UINT8                       ObjectType1;
> +    UINT8                       Count1;
> +    UINT8                       SubObjectTypes;
> +    UINT8                       PkgCount;
> +    UINT16                      Reserved;
> +
> +} ACPI_PACKAGE_INFO4;
> +
>   typedef union acpi_predefined_info
>   {
>       ACPI_NAME_INFO              Info;
>       ACPI_PACKAGE_INFO           RetInfo;
>       ACPI_PACKAGE_INFO2          RetInfo2;
>       ACPI_PACKAGE_INFO3          RetInfo3;
> +    ACPI_PACKAGE_INFO4          RetInfo4;
>   
>   } ACPI_PREDEFINED_INFO;
>   
> @@ -1443,4 +1455,11 @@ typedef struct ah_uuid
>   
>   } AH_UUID;
>   
> +typedef struct ah_table
> +{
> +    char                    *Signature;
> +    char                    *Description;
> +
> +} AH_TABLE;
> +
>   #endif /* __ACLOCAL_H__ */
> diff --git a/src/acpica/source/include/acparser.h b/src/acpica/source/include/acparser.h
> index abbde50..e4fc0c7 100644
> --- a/src/acpica/source/include/acparser.h
> +++ b/src/acpica/source/include/acparser.h
> @@ -144,6 +144,9 @@
>    *
>    *****************************************************************************/
>   
> +extern const UINT8      AcpiGbl_ShortOpIndex[];
> +extern const UINT8      AcpiGbl_LongOpIndex[];
> +
>   
>   /*
>    * psxface - Parser external interfaces
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index 74de05e..93d4284 100644
> --- a/src/acpica/source/include/acpixf.h
> +++ b/src/acpica/source/include/acpixf.h
> @@ -118,7 +118,7 @@
>   
>   /* Current ACPICA subsystem version in YYYYMMDD format */
>   
> -#define ACPI_CA_VERSION                 0x20150410
> +#define ACPI_CA_VERSION                 0x20150515
>   
>   #include "acconfig.h"
>   #include "actypes.h"
> diff --git a/src/acpica/source/include/acpredef.h b/src/acpica/source/include/acpredef.h
> index b03f64b..37f0244 100644
> --- a/src/acpica/source/include/acpredef.h
> +++ b/src/acpica/source/include/acpredef.h
> @@ -178,6 +178,11 @@
>    *      count = 0 (optional)
>    *      (Used for _DLM)
>    *
> + * ACPI_PTYPE2_VAR_VAR: Variable number of subpackages, each of either a
> + *      constant or variable length. The subpackages are preceded by a
> + *      constant number of objects.
> + *      (Used for _LPI, _RDI)
> + *
>    * ACPI_PTYPE2_UUID_PAIR: Each subpackage is preceded by a UUID Buffer. The UUID
>    *      defines the format of the package. Zero-length parent package is
>    *      allowed.
> @@ -197,7 +202,8 @@ enum AcpiReturnPackageTypes
>       ACPI_PTYPE2_MIN         = 8,
>       ACPI_PTYPE2_REV_FIXED   = 9,
>       ACPI_PTYPE2_FIX_VAR     = 10,
> -    ACPI_PTYPE2_UUID_PAIR   = 11
> +    ACPI_PTYPE2_VAR_VAR     = 11,
> +    ACPI_PTYPE2_UUID_PAIR   = 12
>   };
>   
>   
> @@ -249,7 +255,7 @@ enum AcpiReturnPackageTypes
>    * These are the names that can actually be evaluated via AcpiEvaluateObject.
>    * Not present in this table are the following:
>    *
> - *      1) Predefined/Reserved names that are never evaluated via
> + *      1) Predefined/Reserved names that are not usually evaluated via
>    *         AcpiEvaluateObject:
>    *              _Lxx and _Exx GPE methods
>    *              _Qxx EC methods
> @@ -435,6 +441,9 @@ const ACPI_PREDEFINED_INFO          AcpiGbl_PredefinedMethods[] =
>                   METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (4 Int) */
>                       PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 4,0,0,0),
>   
> +    {{"_BTH",   METHOD_1ARGS (ACPI_TYPE_INTEGER),      /* ACPI 6.0 */
> +                METHOD_NO_RETURN_VALUE}},
> +
>       {{"_BTM",   METHOD_1ARGS (ACPI_TYPE_INTEGER),
>                   METHOD_RETURNS (ACPI_RTYPE_INTEGER)}},
>   
> @@ -462,6 +471,9 @@ const ACPI_PREDEFINED_INFO          AcpiGbl_PredefinedMethods[] =
>                   METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Ints/Bufs) */
>                       PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER | ACPI_RTYPE_BUFFER, 0,0,0,0),
>   
> +    {{"_CR3",   METHOD_0ARGS,                          /* ACPI 6.0 */
> +                METHOD_RETURNS (ACPI_RTYPE_INTEGER)}},
> +
>       {{"_CRS",   METHOD_0ARGS,
>                   METHOD_RETURNS (ACPI_RTYPE_BUFFER)}},
>   
> @@ -515,7 +527,7 @@ const ACPI_PREDEFINED_INFO          AcpiGbl_PredefinedMethods[] =
>       {{"_DOS",   METHOD_1ARGS (ACPI_TYPE_INTEGER),
>                   METHOD_NO_RETURN_VALUE}},
>   
> -    {{"_DSD",   METHOD_0ARGS,
> +    {{"_DSD",   METHOD_0ARGS,                          /* ACPI 6.0 */
>                   METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each: 1 Buf, 1 Pkg */
>                       PACKAGE_INFO (ACPI_PTYPE2_UUID_PAIR, ACPI_RTYPE_BUFFER, 1, ACPI_RTYPE_PACKAGE, 1,0),
>   
> @@ -669,6 +681,11 @@ const ACPI_PREDEFINED_INFO          AcpiGbl_PredefinedMethods[] =
>                   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),
>   
> +    {{"_LPI",   METHOD_0ARGS,                          /* ACPI 6.0 */
> +                METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (3 Int, n Pkg (10 Int/Buf) */
> +                    PACKAGE_INFO (ACPI_PTYPE2_VAR_VAR, ACPI_RTYPE_INTEGER, 3,
> +                    ACPI_RTYPE_INTEGER | ACPI_RTYPE_BUFFER | ACPI_RTYPE_STRING, 10,0),
> +
>       {{"_MAT",   METHOD_0ARGS,
>                   METHOD_RETURNS (ACPI_RTYPE_BUFFER)}},
>   
> @@ -686,6 +703,9 @@ const ACPI_PREDEFINED_INFO          AcpiGbl_PredefinedMethods[] =
>       {{"_MSM",   METHOD_4ARGS (ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER),
>                   METHOD_RETURNS (ACPI_RTYPE_INTEGER)}},
>   
> +    {{"_MTL",   METHOD_0ARGS,                          /* ACPI 6.0 */
> +                METHOD_RETURNS (ACPI_RTYPE_INTEGER)}},
> +
>       {{"_NTT",   METHOD_0ARGS,
>                   METHOD_RETURNS (ACPI_RTYPE_INTEGER)}},
>   
> @@ -773,6 +793,10 @@ const ACPI_PREDEFINED_INFO          AcpiGbl_PredefinedMethods[] =
>                   METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */
>                       PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0,0,0),
>   
> +    {{"_PRR",   METHOD_0ARGS,                          /* ACPI 6.0 */
> +                METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (1 Ref) */
> +                    PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_REFERENCE, 1,0,0,0),
> +
>       {{"_PRS",   METHOD_0ARGS,
>                   METHOD_RETURNS (ACPI_RTYPE_BUFFER)}},
>   
> @@ -850,6 +874,11 @@ const ACPI_PREDEFINED_INFO          AcpiGbl_PredefinedMethods[] =
>       {{"_PXM",   METHOD_0ARGS,
>                   METHOD_RETURNS (ACPI_RTYPE_INTEGER)}},
>   
> +    {{"_RDI",   METHOD_0ARGS,                          /* ACPI 6.0 */
> +                METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (1 Int, n Pkg (m Ref)) */
> +                    PACKAGE_INFO (ACPI_PTYPE2_VAR_VAR, ACPI_RTYPE_INTEGER, 1,
> +                    ACPI_RTYPE_REFERENCE,0,0),
> +
>       {{"_REG",   METHOD_2ARGS (ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER),
>                   METHOD_NO_RETURN_VALUE}},
>   
> @@ -862,6 +891,9 @@ const ACPI_PREDEFINED_INFO          AcpiGbl_PredefinedMethods[] =
>       {{"_ROM",   METHOD_2ARGS (ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER),
>                   METHOD_RETURNS (ACPI_RTYPE_BUFFER)}},
>   
> +    {{"_RST",   METHOD_0ARGS,                          /* ACPI 6.0 */
> +                METHOD_NO_RETURN_VALUE}},
> +
>       {{"_RTV",   METHOD_0ARGS,
>                   METHOD_RETURNS (ACPI_RTYPE_INTEGER)}},
>   
> @@ -988,6 +1020,9 @@ const ACPI_PREDEFINED_INFO          AcpiGbl_PredefinedMethods[] =
>       {{"_TDL",   METHOD_0ARGS,
>                   METHOD_RETURNS (ACPI_RTYPE_INTEGER)}},
>   
> +    {{"_TFP",   METHOD_0ARGS,                          /* ACPI 6.0 */
> +                METHOD_RETURNS (ACPI_RTYPE_INTEGER)}},
> +
>       {{"_TIP",   METHOD_1ARGS (ACPI_TYPE_INTEGER),
>                   METHOD_RETURNS (ACPI_RTYPE_INTEGER)}},
>   
> @@ -1011,6 +1046,9 @@ const ACPI_PREDEFINED_INFO          AcpiGbl_PredefinedMethods[] =
>                   METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each 5 Int with count */
>                       PACKAGE_INFO (ACPI_PTYPE2_COUNT,ACPI_RTYPE_INTEGER, 5,0,0,0),
>   
> +    {{"_TSN",   METHOD_0ARGS,                          /* ACPI 6.0 */
> +                METHOD_RETURNS (ACPI_RTYPE_REFERENCE)}},
> +
>       {{"_TSP",   METHOD_0ARGS,
>                   METHOD_RETURNS (ACPI_RTYPE_INTEGER)}},
>   
> diff --git a/src/acpica/source/include/actbl.h b/src/acpica/source/include/actbl.h
> index 68bbed4..f3cf709 100644
> --- a/src/acpica/source/include/actbl.h
> +++ b/src/acpica/source/include/actbl.h
> @@ -382,6 +382,7 @@ typedef struct acpi_table_fadt
>       ACPI_GENERIC_ADDRESS    XGpe1Block;         /* 64-bit Extended General Purpose Event 1 Reg Blk address */
>       ACPI_GENERIC_ADDRESS    SleepControl;       /* 64-bit Sleep Control register (ACPI 5.0) */
>       ACPI_GENERIC_ADDRESS    SleepStatus;        /* 64-bit Sleep Status register (ACPI 5.0) */
> +    UINT64                  HypervisorId;       /* Hypervisor Vendor ID (ACPI 6.0) */
>   
>   } ACPI_TABLE_FADT;
>   
> @@ -441,7 +442,7 @@ enum AcpiPreferredPmProfiles
>       PM_TABLET               = 8
>   };
>   
> -/* Values for SleepStatus and SleepControl registers (V5 FADT) */
> +/* Values for SleepStatus and SleepControl registers (V5+ FADT) */
>   
>   #define ACPI_X_WAKE_STATUS          0x80
>   #define ACPI_X_SLEEP_TYPE_MASK      0x1C
> @@ -506,15 +507,17 @@ typedef struct acpi_table_desc
>    * FADT is the bottom line as to what the version really is.
>    *
>    * For reference, the values below are as follows:
> - *     FADT V1  size: 0x074
> - *     FADT V2  size: 0x084
> - *     FADT V3  size: 0x0F4
> - *     FADT V4  size: 0x0F4
> - *     FADT V5  size: 0x10C
> + *     FADT V1 size: 0x074
> + *     FADT V2 size: 0x084
> + *     FADT V3 size: 0x0F4
> + *     FADT V4 size: 0x0F4
> + *     FADT V5 size: 0x10C
> + *     FADT V6 size: 0x114
>    */
>   #define ACPI_FADT_V1_SIZE       (UINT32) (ACPI_FADT_OFFSET (Flags) + 4)
>   #define ACPI_FADT_V2_SIZE       (UINT32) (ACPI_FADT_OFFSET (MinorRevision) + 1)
>   #define ACPI_FADT_V3_SIZE       (UINT32) (ACPI_FADT_OFFSET (SleepControl))
> -#define ACPI_FADT_V5_SIZE       (UINT32) (sizeof (ACPI_TABLE_FADT))
> +#define ACPI_FADT_V5_SIZE       (UINT32) (ACPI_FADT_OFFSET (HypervisorId))
> +#define ACPI_FADT_V6_SIZE       (UINT32) (sizeof (ACPI_TABLE_FADT))
>   
>   #endif /* __ACTBL_H__ */
> diff --git a/src/acpica/source/include/actbl1.h b/src/acpica/source/include/actbl1.h
> index 2c8b0ed..1c508a0 100644
> --- a/src/acpica/source/include/actbl1.h
> +++ b/src/acpica/source/include/actbl1.h
> @@ -145,6 +145,7 @@
>   #define ACPI_SIG_SBST           "SBST"      /* Smart Battery Specification Table */
>   #define ACPI_SIG_SLIT           "SLIT"      /* System Locality Distance Information Table */
>   #define ACPI_SIG_SRAT           "SRAT"      /* System Resource Affinity Table */
> +#define ACPI_SIG_NFIT           "NFIT"      /* NVDIMM Firmware Interface Table */
>   
>   
>   /*
> @@ -849,7 +850,8 @@ enum AcpiMadtType
>       ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR      = 12,
>       ACPI_MADT_TYPE_GENERIC_MSI_FRAME        = 13,
>       ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR    = 14,
> -    ACPI_MADT_TYPE_RESERVED                 = 15    /* 15 and greater are reserved */
> +    ACPI_MADT_TYPE_GENERIC_TRANSLATOR       = 15,
> +    ACPI_MADT_TYPE_RESERVED                 = 16    /* 16 and greater are reserved */
>   };
>   
>   
> @@ -1004,7 +1006,7 @@ typedef struct acpi_madt_local_x2apic_nmi
>   } ACPI_MADT_LOCAL_X2APIC_NMI;
>   
>   
> -/* 11: Generic Interrupt (ACPI 5.0) */
> +/* 11: Generic Interrupt (ACPI 5.0 + ACPI 6.0 changes) */
>   
>   typedef struct acpi_madt_generic_interrupt
>   {
> @@ -1022,6 +1024,8 @@ typedef struct acpi_madt_generic_interrupt
>       UINT32                  VgicInterrupt;
>       UINT64                  GicrBaseAddress;
>       UINT64                  ArmMpidr;
> +    UINT8                   EfficiencyClass;
> +    UINT8                   Reserved2[3];
>   
>   } ACPI_MADT_GENERIC_INTERRUPT;
>   
> @@ -1032,7 +1036,7 @@ typedef struct acpi_madt_generic_interrupt
>   #define ACPI_MADT_VGIC_IRQ_MODE         (1<<2)  /* 02: VGIC Maintenance Interrupt mode */
>   
>   
> -/* 12: Generic Distributor (ACPI 5.0) */
> +/* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */
>   
>   typedef struct acpi_madt_generic_distributor
>   {
> @@ -1041,7 +1045,8 @@ typedef struct acpi_madt_generic_distributor
>       UINT32                  GicId;
>       UINT64                  BaseAddress;
>       UINT32                  GlobalIrqBase;
> -    UINT32                  Reserved2;          /* Reserved - must be zero */
> +    UINT8                   Version;
> +    UINT8                   Reserved2[3];          /* Reserved - must be zero */
>   
>   } ACPI_MADT_GENERIC_DISTRIBUTOR;
>   
> @@ -1077,6 +1082,19 @@ typedef struct acpi_madt_generic_redistributor
>   } ACPI_MADT_GENERIC_REDISTRIBUTOR;
>   
>   
> +/* 15: Generic Translator (ACPI 6.0) */
> +
> +typedef struct acpi_madt_generic_translator
> +{
> +    ACPI_SUBTABLE_HEADER    Header;
> +    UINT16                  Reserved;           /* reserved - must be zero */
> +    UINT32                  TranslationId;
> +    UINT64                  BaseAddress;
> +    UINT32                  Reserved2;
> +
> +} ACPI_MADT_GENERIC_TRANSLATOR;
> +
> +
>   /*
>    * Common flags fields for MADT subtables
>    */
> @@ -1137,6 +1155,186 @@ typedef struct acpi_msct_proximity
>   
>   /*******************************************************************************
>    *
> + * NFIT - NVDIMM Interface Table (ACPI 6.0)
> + *        Version 1
> + *
> + ******************************************************************************/
> +
> +typedef struct acpi_table_nfit
> +{
> +    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
> +    UINT32                  Reserved;           /* Reserved, must be zero */
> +
> +} ACPI_TABLE_NFIT;
> +
> +/* Subtable header for NFIT */
> +
> +typedef struct acpi_nfit_header
> +{
> +    UINT16                   Type;
> +    UINT16                   Length;
> +
> +} ACPI_NFIT_HEADER;
> +
> +
> +/* Values for subtable type in ACPI_NFIT_HEADER */
> +
> +enum AcpiNfitType
> +{
> +    ACPI_NFIT_TYPE_SYSTEM_ADDRESS       = 0,
> +    ACPI_NFIT_TYPE_MEMORY_MAP           = 1,
> +    ACPI_NFIT_TYPE_INTERLEAVE           = 2,
> +    ACPI_NFIT_TYPE_SMBIOS               = 3,
> +    ACPI_NFIT_TYPE_CONTROL_REGION       = 4,
> +    ACPI_NFIT_TYPE_DATA_REGION          = 5,
> +    ACPI_NFIT_TYPE_FLUSH_ADDRESS        = 6,
> +    ACPI_NFIT_TYPE_RESERVED             = 7     /* 7 and greater are reserved */
> +};
> +
> +/*
> + * NFIT Subtables
> + */
> +
> +/* 0: System Physical Address Range Structure */
> +
> +typedef struct acpi_nfit_system_address
> +{
> +    ACPI_NFIT_HEADER        Header;
> +    UINT16                  RangeIndex;
> +    UINT16                  Flags;
> +    UINT32                  Reserved;           /* Reseved, must be zero */
> +    UINT32                  ProximityDomain;
> +    UINT8                   RangeGuid[16];
> +    UINT64                  Address;
> +    UINT64                  Length;
> +    UINT64                  MemoryMapping;
> +
> +} ACPI_NFIT_SYSTEM_ADDRESS;
> +
> +/* Flags */
> +
> +#define ACPI_NFIT_ADD_ONLINE_ONLY       (1)     /* 00: Add/Online Operation Only */
> +#define ACPI_NFIT_PROXIMITY_VALID       (1<<1)  /* 01: Proximity Domain Valid */
> +
> +/* Range Type GUIDs appear in the include/acuuid.h file */
> +
> +
> +/* 1: Memory Device to System Address Range Map Structure */
> +
> +typedef struct acpi_nfit_memory_map
> +{
> +    ACPI_NFIT_HEADER        Header;
> +    UINT32                  DeviceHandle;
> +    UINT16                  PhysicalId;
> +    UINT16                  RegionId;
> +    UINT16                  RangeIndex;
> +    UINT16                  RegionIndex;
> +    UINT64                  RegionSize;
> +    UINT64                  RegionOffset;
> +    UINT64                  Address;
> +    UINT16                  InterleaveIndex;
> +    UINT16                  InterleaveWays;
> +    UINT16                  Flags;
> +    UINT16                  Reserved;           /* Reserved, must be zero */
> +
> +} ACPI_NFIT_MEMORY_MAP;
> +
> +/* Flags */
> +
> +#define ACPI_NFIT_MEM_SAVE_FAILED       (1)     /* 00: Last SAVE to Memory Device failed */
> +#define ACPI_NFIT_MEM_RESTORE_FAILED    (1<<1)  /* 01: Last RESTORE from Memory Device failed */
> +#define ACPI_NFIT_MEM_FLUSH_FAILED      (1<<2)  /* 02: Platform flush failed */
> +#define ACPI_NFIT_MEM_ARMED             (1<<3)  /* 03: Memory Device observed to be not armed */
> +#define ACPI_NFIT_MEM_HEALTH_OBSERVED   (1<<4)  /* 04: Memory Device observed SMART/health events */
> +#define ACPI_NFIT_MEM_HEALTH_ENABLED    (1<<5)  /* 05: SMART/health events enabled */
> +
> +
> +/* 2: Interleave Structure */
> +
> +typedef struct acpi_nfit_interleave
> +{
> +    ACPI_NFIT_HEADER        Header;
> +    UINT16                  InterleaveIndex;
> +    UINT16                  Reserved;           /* Reserved, must be zero */
> +    UINT32                  LineCount;
> +    UINT32                  LineSize;
> +    UINT32                  LineOffset[1];      /* Variable length */
> +
> +} ACPI_NFIT_INTERLEAVE;
> +
> +
> +/* 3: SMBIOS Management Information Structure */
> +
> +typedef struct acpi_nfit_smbios
> +{
> +    ACPI_NFIT_HEADER        Header;
> +    UINT32                  Reserved;           /* Reserved, must be zero */
> +    UINT8                   Data[1];            /* Variable length */
> +
> +} ACPI_NFIT_SMBIOS;
> +
> +
> +/* 4: NVDIMM Control Region Structure */
> +
> +typedef struct acpi_nfit_control_region
> +{
> +    ACPI_NFIT_HEADER        Header;
> +    UINT16                  RegionIndex;
> +    UINT16                  VendorId;
> +    UINT16                  DeviceId;
> +    UINT16                  RevisionId;
> +    UINT16                  SubsystemVendorId;
> +    UINT16                  SubsystemDeviceId;
> +    UINT16                  SubsystemRevisionId;
> +    UINT8                   Reserved[6];        /* Reserved, must be zero */
> +    UINT32                  SerialNumber;
> +    UINT16                  Code;
> +    UINT16                  Windows;
> +    UINT64                  WindowSize;
> +    UINT64                  CommandOffset;
> +    UINT64                  CommandSize;
> +    UINT64                  StatusOffset;
> +    UINT64                  StatusSize;
> +    UINT16                  Flags;
> +    UINT8                   Reserved1[6];       /* Reserved, must be zero */
> +
> +} ACPI_NFIT_CONTROL_REGION;
> +
> +/* Flags */
> +
> +#define ACPI_NFIT_CONTROL_BUFFERED      (1)     /* Block Data Windows implementation is buffered */
> +
> +
> +/* 5: NVDIMM Block Data Window Region Structure */
> +
> +typedef struct acpi_nfit_data_region
> +{
> +    ACPI_NFIT_HEADER        Header;
> +    UINT16                  RegionIndex;
> +    UINT16                  Windows;
> +    UINT64                  Offset;
> +    UINT64                  Size;
> +    UINT64                  Capacity;
> +    UINT64                  StartAddress;
> +
> +} ACPI_NFIT_DATA_REGION;
> +
> +
> +/* 6: Flush Hint Address Structure */
> +
> +typedef struct acpi_nfit_flush_address
> +{
> +    ACPI_NFIT_HEADER        Header;
> +    UINT32                  DeviceHandle;
> +    UINT16                  HintCount;
> +    UINT8                   Reserved[6];        /* Reserved, must be zero */
> +    UINT64                  HintAddress[1];     /* Variable length */
> +
> +} ACPI_NFIT_FLUSH_ADDRESS;
> +
> +
> +/*******************************************************************************
> + *
>    * SBST - Smart Battery Specification Table
>    *        Version 1
>    *
> @@ -1274,6 +1472,7 @@ typedef struct acpi_srat_gicc_affinity
>   
>   #define ACPI_SRAT_GICC_ENABLED     (1)         /* 00: Use affinity structure */
>   
> +
>   /* Reset to default packing */
>   
>   #pragma pack()
> diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h
> index df0cfb1..acc0b5f 100644
> --- a/src/acpica/source/include/actbl2.h
> +++ b/src/acpica/source/include/actbl2.h
> @@ -143,6 +143,7 @@
>   #define ACPI_SIG_DMAR           "DMAR"      /* DMA Remapping table */
>   #define ACPI_SIG_HPET           "HPET"      /* High Precision Event Timer table */
>   #define ACPI_SIG_IBFT           "IBFT"      /* iSCSI Boot Firmware Table */
> +#define ACPI_SIG_IORT           "IORT"      /* IO Remapping 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 */
> @@ -824,6 +825,156 @@ typedef struct acpi_ibft_target
>   
>   /*******************************************************************************
>    *
> + * IORT - IO Remapping Table
> + *
> + * Conforms to "IO Remapping Table System Software on ARM Platforms",
> + * Document number: ARM DEN 0049A, 2015
> + *
> + ******************************************************************************/
> +
> +typedef struct acpi_table_iort
> +{
> +    ACPI_TABLE_HEADER       Header;
> +    UINT32                  NodeCount;
> +    UINT32                  NodeOffset;
> +    UINT32                  Reserved;
> +
> +} ACPI_TABLE_IORT;
> +
> +
> +/*
> + * IORT subtables
> + */
> +typedef struct acpi_iort_node
> +{
> +    UINT8                   Type;
> +    UINT16                  Length;
> +    UINT8                   Revision;
> +    UINT32                  Reserved;
> +    UINT32                  MappingCount;
> +    UINT32                  MappingOffset;
> +    char                    NodeData[1];
> +
> +} ACPI_IORT_NODE;
> +
> +/* Values for subtable Type above */
> +
> +enum AcpiIortNodeType
> +{
> +    ACPI_IORT_NODE_ITS_GROUP            = 0x00,
> +    ACPI_IORT_NODE_NAMED_COMPONENT      = 0x01,
> +    ACPI_IORT_NODE_PCI_ROOT_COMPLEX     = 0x02,
> +    ACPI_IORT_NODE_SMMU                 = 0x03
> +};
> +
> +
> +typedef struct acpi_iort_id_mapping
> +{
> +    UINT32                  InputBase;          /* Lowest value in input range */
> +    UINT32                  IdCount;            /* Number of IDs */
> +    UINT32                  OutputBase;         /* Lowest value in output range */
> +    UINT32                  OutputReference;    /* A reference to the output node */
> +    UINT32                  Flags;
> +
> +} ACPI_IORT_ID_MAPPING;
> +
> +/* Masks for Flags field above for IORT subtable */
> +
> +#define ACPI_IORT_ID_SINGLE_MAPPING (1)
> +
> +
> +typedef struct acpi_iort_memory_access
> +{
> +    UINT32                  CacheCoherency;
> +    UINT8                   Hints;
> +    UINT16                  Reserved;
> +    UINT8                   MemoryFlags;
> +
> +} ACPI_IORT_MEMORY_ACCESS;
> +
> +/* Values for CacheCoherency field above */
> +
> +#define ACPI_IORT_NODE_COHERENT         0x00000001  /* The device node is fully coherent */
> +#define ACPI_IORT_NODE_NOT_COHERENT     0x00000000  /* The device node is not coherent */
> +
> +/* Masks for Hints field above */
> +
> +#define ACPI_IORT_HT_TRANSIENT          (1)
> +#define ACPI_IORT_HT_WRITE              (1<<1)
> +#define ACPI_IORT_HT_READ               (1<<2)
> +#define ACPI_IORT_HT_OVERRIDE           (1<<3)
> +
> +/* Masks for MemoryFlags field above */
> +
> +#define ACPI_IORT_MF_COHERENCY          (1)
> +#define ACPI_IORT_MF_ATTRIBUTES         (1<<1)
> +
> +
> +/*
> + * IORT node specific subtables
> + */
> +typedef struct acpi_iort_its_group
> +{
> +    UINT32                  ItsCount;
> +    UINT32                  Identifiers[1];         /* GIC ITS identifier arrary */
> +
> +} ACPI_IORT_ITS_GROUP;
> +
> +
> +typedef struct acpi_iort_named_component
> +{
> +    UINT32                  NodeFlags;
> +    UINT64                  MemoryProperties;       /* Memory access properties */
> +    UINT8                   MemoryAddressLimit;     /* Memory address size limit */
> +    char                    DeviceName[1];          /* Path of namespace object */
> +
> +} ACPI_IORT_NAMED_COMPONENT;
> +
> +
> +typedef struct acpi_iort_root_complex
> +{
> +    UINT64                  MemoryProperties;       /* Memory access properties */
> +    UINT32                  AtsAttribute;
> +    UINT32                  PciSegmentNumber;
> +
> +} ACPI_IORT_ROOT_COMPLEX;
> +
> +/* Values for AtsAttribute field above */
> +
> +#define ACPI_IORT_ATS_SUPPORTED         0x00000001  /* The root complex supports ATS */
> +#define ACPI_IORT_ATS_UNSUPPORTED       0x00000000  /* The root complex doesn't support ATS */
> +
> +
> +typedef struct acpi_iort_smmu
> +{
> +    UINT64                  BaseAddress;            /* SMMU base address */
> +    UINT64                  Span;                   /* Length of memory range */
> +    UINT32                  Model;
> +    UINT32                  Flags;
> +    UINT32                  GlobalInterruptOffset;
> +    UINT32                  ContextInterruptCount;
> +    UINT32                  ContextInterruptOffset;
> +    UINT32                  PmuInterruptCount;
> +    UINT32                  PmuInterruptOffset;
> +    UINT64                  Interrupts[1];          /* Interrupt array */
> +
> +} ACPI_IORT_SMMU;
> +
> +/* Values for Model field above */
> +
> +#define ACPI_IORT_SMMU_V1               0x00000000  /* Generic SMMUv1 */
> +#define ACPI_IORT_SMMU_V2               0x00000001  /* Generic SMMUv2 */
> +#define ACPI_IORT_SMMU_CORELINK_MMU400  0x00000002  /* ARM Corelink MMU-400 */
> +#define ACPI_IORT_SMMU_CORELINK_MMU500  0x00000003  /* ARM Corelink MMU-500 */
> +
> +/* Masks for Flags field above */
> +
> +#define ACPI_IORT_SMMU_DVM_SUPPORTED    (1)
> +#define ACPI_IORT_SMMU_COHERENT_WALK    (1<<1)
> +
> +
> +/*******************************************************************************
> + *
>    * IVRS - I/O Virtualization Reporting Structure
>    *        Version 1
>    *
> @@ -1024,7 +1175,7 @@ typedef struct acpi_ivrs_memory
>    *
>    * LPIT - Low Power Idle Table
>    *
> - * Conforms to "ACPI Low Power Idle Table (LPIT) and _LPD Proposal (DRAFT)"
> + * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014.
>    *
>    ******************************************************************************/
>   
> @@ -1052,8 +1203,7 @@ typedef struct acpi_lpit_header
>   enum AcpiLpitType
>   {
>       ACPI_LPIT_TYPE_NATIVE_CSTATE    = 0x00,
> -    ACPI_LPIT_TYPE_SIMPLE_IO        = 0x01,
> -    ACPI_LPIT_TYPE_RESERVED         = 0x02      /* 2 and above are reserved */
> +    ACPI_LPIT_TYPE_RESERVED         = 0x01      /* 1 and above are reserved */
>   };
>   
>   /* Masks for Flags field above  */
> @@ -1079,24 +1229,6 @@ typedef struct acpi_lpit_native
>   } 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
> diff --git a/src/acpica/source/include/actbl3.h b/src/acpica/source/include/actbl3.h
> index b4ce8af..88ac753 100644
> --- a/src/acpica/source/include/actbl3.h
> +++ b/src/acpica/source/include/actbl3.h
> @@ -142,7 +142,10 @@
>   #define ACPI_SIG_PCCT           "PCCT"      /* Platform Communications Channel Table */
>   #define ACPI_SIG_PMTT           "PMTT"      /* Platform Memory Topology Table */
>   #define ACPI_SIG_RASF           "RASF"      /* RAS Feature table */
> +#define ACPI_SIG_STAO           "STAO"      /* Status Override table */
>   #define ACPI_SIG_TPM2           "TPM2"      /* Trusted Platform Module 2.0 H/W interface table */
> +#define ACPI_SIG_WPBT           "WPBT"      /* Windows Platform Binary Table */
> +#define ACPI_SIG_XENV           "XENV"      /* Xen Environment table */
>   
>   #define ACPI_SIG_S3PT           "S3PT"      /* S3 Performance (sub)Table */
>   #define ACPI_SIG_PCCS           "PCC"       /* PCC Shared Memory Region */
> @@ -151,7 +154,6 @@
>   
>   #define ACPI_SIG_MATR           "MATR"      /* Memory Address Translation Table */
>   #define ACPI_SIG_MSDM           "MSDM"      /* Microsoft Data Management Table */
> -#define ACPI_SIG_WPBT           "WPBT"      /* Windows Platform Binary Table */
>   
>   /*
>    * All tables must be byte-packed to match the ACPI specification, since
> @@ -195,6 +197,8 @@ typedef struct acpi_table_bgrt
>   /*******************************************************************************
>    *
>    * DRTM - Dynamic Root of Trust for Measurement table
> + * Conforms to "TCG D-RTM Architecture" June 17 2013, Version 1.0.0
> + * Table version 1
>    *
>    ******************************************************************************/
>   
> @@ -213,29 +217,50 @@ typedef struct acpi_table_drtm
>   
>   } ACPI_TABLE_DRTM;
>   
> -/* 1) Validated Tables List */
> +/* Flag Definitions for above */
> +
> +#define ACPI_DRTM_ACCESS_ALLOWED            (1)
> +#define ACPI_DRTM_ENABLE_GAP_CODE           (1<<1)
> +#define ACPI_DRTM_INCOMPLETE_MEASUREMENTS   (1<<2)
> +#define ACPI_DRTM_AUTHORITY_ORDER           (1<<3)
>   
> -typedef struct acpi_drtm_vtl_list
> +
> +/* 1) Validated Tables List (64-bit addresses) */
> +
> +typedef struct acpi_drtm_vtable_list
>   {
> -    UINT32                  ValidatedTableListCount;
> +    UINT32                  ValidatedTableCount;
> +    UINT64                  ValidatedTables[1];
> +
> +} ACPI_DRTM_VTABLE_LIST;
>   
> -} ACPI_DRTM_VTL_LIST;
> +/* 2) Resources List (of Resource Descriptors) */
>   
> -/* 2) Resources List */
> +/* Resource Descriptor */
> +
> +typedef struct acpi_drtm_resource
> +{
> +    UINT8                   Size[7];
> +    UINT8                   Type;
> +    UINT64                  Address;
> +
> +} ACPI_DRTM_RESOURCE;
>   
>   typedef struct acpi_drtm_resource_list
>   {
> -    UINT32                  ResourceListCount;
> +    UINT32                  ResourceCount;
> +    ACPI_DRTM_RESOURCE      Resources[1];
>   
>   } ACPI_DRTM_RESOURCE_LIST;
>   
>   /* 3) Platform-specific Identifiers List */
>   
> -typedef struct acpi_drtm_id_list
> +typedef struct acpi_drtm_dps_id
>   {
> -    UINT32                  IdListCount;
> +    UINT32                  DpsIdLength;
> +    UINT8                   DpsId[16];
>   
> -} ACPI_DRTM_ID_LIST;
> +} ACPI_DRTM_DPS_ID;
>   
>   
>   /*******************************************************************************
> @@ -877,6 +902,24 @@ enum AcpiRasfStatus
>   
>   /*******************************************************************************
>    *
> + * STAO - Status Override Table (_STA override) - ACPI 6.0
> + *        Version 1
> + *
> + * Conforms to "ACPI Specification for Status Override Table"
> + * 6 January 2015
> + *
> + ******************************************************************************/
> +
> +typedef struct acpi_table_stao
> +{
> +    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
> +    UINT8                   IgnoreUart;
> +
> +} ACPI_TABLE_STAO;
> +
> +
> +/*******************************************************************************
> + *
>    * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table
>    *        Version 3
>    *
> @@ -910,6 +953,47 @@ typedef struct acpi_tpm2_control
>   } ACPI_TPM2_CONTROL;
>   
>   
> +/*******************************************************************************
> + *
> + * WPBT - Windows Platform Environment Table (ACPI 6.0)
> + *        Version 1
> + *
> + * Conforms to "Windows Platform Binary Table (WPBT)" 29 November 2011
> + *
> + ******************************************************************************/
> +
> +typedef struct acpi_table_wpbt
> +{
> +    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
> +    UINT32                  HandoffSize;
> +    UINT64                  HandoffAddress;
> +    UINT8                   Layout;
> +    UINT8                   Type;
> +    UINT16                  ArgumentsLength;
> +
> +} ACPI_TABLE_WPBT;
> +
> +
> +/*******************************************************************************
> + *
> + * XENV - Xen Environment Table (ACPI 6.0)
> + *        Version 1
> + *
> + * Conforms to "ACPI Specification for Xen Environment Table" 4 January 2015
> + *
> + ******************************************************************************/
> +
> +typedef struct acpi_table_xenv
> +{
> +    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
> +    UINT64                  GrantTableAddress;
> +    UINT64                  GrantTableSize;
> +    UINT32                  EventInterrupt;
> +    UINT8                   EventFlags;
> +
> +} ACPI_TABLE_XENV;
> +
> +
>   /* Reset to default packing */
>   
>   #pragma pack()
> diff --git a/src/acpica/source/include/actypes.h b/src/acpica/source/include/actypes.h
> index 2c7d1bb..98fcf48 100644
> --- a/src/acpica/source/include/actypes.h
> +++ b/src/acpica/source/include/actypes.h
> @@ -610,6 +610,7 @@ typedef UINT64                          ACPI_INTEGER;
>   #define ACPI_CAST_PTR(t, p)             ((t *) (ACPI_UINTPTR_T) (p))
>   #define ACPI_CAST_INDIRECT_PTR(t, p)    ((t **) (ACPI_UINTPTR_T) (p))
>   #define ACPI_ADD_PTR(t, a, b)           ACPI_CAST_PTR (t, (ACPI_CAST_PTR (UINT8, (a)) + (ACPI_SIZE)(b)))
> +#define ACPI_SUB_PTR(t, a, b)           ACPI_CAST_PTR (t, (ACPI_CAST_PTR (UINT8, (a)) - (ACPI_SIZE)(b)))
>   #define ACPI_PTR_DIFF(a, b)             (ACPI_SIZE) (ACPI_CAST_PTR (UINT8, (a)) - ACPI_CAST_PTR (UINT8, (b)))
>   
>   /* Pointer/Integer type conversions */
> diff --git a/src/acpica/source/include/acutils.h b/src/acpica/source/include/acutils.h
> index 2b3dad4..93edeee 100644
> --- a/src/acpica/source/include/acutils.h
> +++ b/src/acpica/source/include/acutils.h
> @@ -411,7 +411,7 @@ extern const UINT8 _acpi_ctype[];
>   #define _ACPI_DI     0x04    /* '0'-'9' */
>   #define _ACPI_LO     0x02    /* 'a'-'z' */
>   #define _ACPI_PU     0x10    /* punctuation */
> -#define _ACPI_SP     0x08    /* space */
> +#define _ACPI_SP     0x08    /* space, tab, CR, LF, VT, FF */
>   #define _ACPI_UP     0x01    /* 'A'-'Z' */
>   #define _ACPI_XD     0x80    /* '0'-'9', 'A'-'F', 'a'-'f' */
>   
> diff --git a/src/acpica/source/include/platform/acenv.h b/src/acpica/source/include/platform/acenv.h
> index 83ac402..f596d8c 100644
> --- a/src/acpica/source/include/platform/acenv.h
> +++ b/src/acpica/source/include/platform/acenv.h
> @@ -247,6 +247,9 @@
>   #elif defined(_APPLE) || defined(__APPLE__)
>   #include "acmacosx.h"
>   
> +#elif defined(__DragonFly__)
> +#include "acdragonfly.h"
> +
>   #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
>   #include "acfreebsd.h"
>   
> diff --git a/src/acpica/source/include/platform/acenvex.h b/src/acpica/source/include/platform/acenvex.h
> index 6c59337..26467b9 100644
> --- a/src/acpica/source/include/platform/acenvex.h
> +++ b/src/acpica/source/include/platform/acenvex.h
> @@ -128,6 +128,9 @@
>   #if defined(_LINUX) || defined(__linux__)
>   #include "aclinuxex.h"
>   
> +#elif defined(__DragonFly__)
> +#include "acdragonflyex.h"
> +
>   #endif
>   
>   /*! [End] no source code translation !*/
Acked-by: Ivan Hu<ivan.hu at canonical.com>



More information about the fwts-devel mailing list