diff mbox

[1/3] ACPICA: update to version 20140724 (LP: #1348342)

Message ID 1406231880-22595-2-git-send-email-colin.king@canonical.com
State Accepted
Headers show

Commit Message

Colin Ian King July 24, 2014, 7:57 p.m. UTC
From: Colin Ian King <colin.king@canonical.com>

Update to ACPICA version 20140724. Refer to
https://lists.acpica.org/pipermail/devel/2014-July/000658.html
for a full list of new features and fixes.

Signed-off-by: Colin Ian King <colin.king@canonical.com>
---
 src/acpica/Makefile.am                             |   3 +
 src/acpica/source/common/ahids.c                   |   6 +-
 src/acpica/source/common/ahpredef.c                |   2 +
 src/acpica/source/common/ahuuids.c                 | 201 +++++++++++++++++++++
 src/acpica/source/common/dmextern.c                |  31 +++-
 src/acpica/source/common/dmtable.c                 |  80 ++++++--
 src/acpica/source/common/dmtbdump.c                | 171 +++++++++++++++++-
 src/acpica/source/common/dmtbinfo.c                | 178 ++++++++++++++++--
 src/acpica/source/compiler/Makefile.am             |   2 +
 src/acpica/source/compiler/aslanalyze.c            |  48 +++++
 src/acpica/source/compiler/aslcompiler.h           |  14 +-
 src/acpica/source/compiler/aslcompiler.l           |  10 +-
 src/acpica/source/compiler/asldefine.h             |   2 +-
 src/acpica/source/compiler/aslglobal.h             |   6 -
 src/acpica/source/compiler/aslmessages.c           |   1 +
 src/acpica/source/compiler/aslmessages.h           |   1 +
 src/acpica/source/compiler/aslmethod.c             |  20 ++
 src/acpica/source/compiler/aslopcodes.c            |  12 +-
 src/acpica/source/compiler/aslprepkg.c             |  35 ++++
 src/acpica/source/compiler/aslutils.c              |  41 +----
 src/acpica/source/compiler/asluuid.c               |  74 +-------
 src/acpica/source/compiler/dtcompiler.h            |   4 +
 src/acpica/source/compiler/dtfield.c               |   2 +-
 src/acpica/source/compiler/dttable.c               | 157 +++++++++++++++-
 src/acpica/source/compiler/dttemplate.h            | 127 +++++++------
 src/acpica/source/compiler/dtutils.c               |   2 +
 .../source/components/disassembler/dmbuffer.c      | 143 ++++++++++++++-
 .../source/components/disassembler/dmopcode.c      |   7 +-
 src/acpica/source/components/disassembler/dmwalk.c |   3 +-
 src/acpica/source/components/events/evgpe.c        |  34 ++--
 src/acpica/source/components/events/evxfgpe.c      |  71 +++++++-
 src/acpica/source/components/executer/exdebug.c    |  11 +-
 src/acpica/source/components/executer/exdump.c     |   6 +-
 src/acpica/source/components/executer/exfield.c    |  30 ++-
 src/acpica/source/components/namespace/nsobject.c  |  19 +-
 src/acpica/source/components/utilities/utdecode.c  |  37 +---
 src/acpica/source/components/utilities/utfileio.c  |   3 +-
 src/acpica/source/components/utilities/uthex.c     | 185 +++++++++++++++++++
 src/acpica/source/components/utilities/utprint.c   |  65 ++++---
 src/acpica/source/components/utilities/utuuid.c    | 175 ++++++++++++++++++
 src/acpica/source/include/acconfig.h               |  19 ++
 src/acpica/source/include/acdisasm.h               |  18 ++
 src/acpica/source/include/aclocal.h                |  20 +-
 src/acpica/source/include/acnames.h                |   1 +
 src/acpica/source/include/acpixf.h                 |   8 +-
 src/acpica/source/include/acpredef.h               |  15 +-
 src/acpica/source/include/actbl.h                  |  12 +-
 src/acpica/source/include/actbl1.h                 |  76 ++++++--
 src/acpica/source/include/actbl2.h                 |  26 ++-
 src/acpica/source/include/actbl3.h                 | 134 ++++++++++++--
 src/acpica/source/include/actypes.h                |   5 +-
 src/acpica/source/include/acutils.h                |  16 ++
 src/acpica/source/include/platform/aclinux.h       |   6 -
 src/acpica/source/include/platform/aclinuxex.h     |  10 -
 .../source/os_specific/service_layers/oslibcfs.c   |  34 ++--
 .../source/os_specific/service_layers/osunixxf.c   |   8 +-
 src/acpica/source/tools/acpiexec/aehandlers.c      |   6 +-
 57 files changed, 1992 insertions(+), 441 deletions(-)
 create mode 100644 src/acpica/source/common/ahuuids.c
 create mode 100644 src/acpica/source/components/utilities/uthex.c
 create mode 100644 src/acpica/source/components/utilities/utuuid.c

Comments

Alex Hung July 30, 2014, 2:19 a.m. UTC | #1
On 07/25/2014 03:57 AM, Colin King wrote:
> From: Colin Ian King <colin.king@canonical.com>
> 
> Update to ACPICA version 20140724. Refer to
> https://lists.acpica.org/pipermail/devel/2014-July/000658.html
> for a full list of new features and fixes.
> 
> Signed-off-by: Colin Ian King <colin.king@canonical.com>
> ---
>  src/acpica/Makefile.am                             |   3 +
>  src/acpica/source/common/ahids.c                   |   6 +-
>  src/acpica/source/common/ahpredef.c                |   2 +
>  src/acpica/source/common/ahuuids.c                 | 201 +++++++++++++++++++++
>  src/acpica/source/common/dmextern.c                |  31 +++-
>  src/acpica/source/common/dmtable.c                 |  80 ++++++--
>  src/acpica/source/common/dmtbdump.c                | 171 +++++++++++++++++-
>  src/acpica/source/common/dmtbinfo.c                | 178 ++++++++++++++++--
>  src/acpica/source/compiler/Makefile.am             |   2 +
>  src/acpica/source/compiler/aslanalyze.c            |  48 +++++
>  src/acpica/source/compiler/aslcompiler.h           |  14 +-
>  src/acpica/source/compiler/aslcompiler.l           |  10 +-
>  src/acpica/source/compiler/asldefine.h             |   2 +-
>  src/acpica/source/compiler/aslglobal.h             |   6 -
>  src/acpica/source/compiler/aslmessages.c           |   1 +
>  src/acpica/source/compiler/aslmessages.h           |   1 +
>  src/acpica/source/compiler/aslmethod.c             |  20 ++
>  src/acpica/source/compiler/aslopcodes.c            |  12 +-
>  src/acpica/source/compiler/aslprepkg.c             |  35 ++++
>  src/acpica/source/compiler/aslutils.c              |  41 +----
>  src/acpica/source/compiler/asluuid.c               |  74 +-------
>  src/acpica/source/compiler/dtcompiler.h            |   4 +
>  src/acpica/source/compiler/dtfield.c               |   2 +-
>  src/acpica/source/compiler/dttable.c               | 157 +++++++++++++++-
>  src/acpica/source/compiler/dttemplate.h            | 127 +++++++------
>  src/acpica/source/compiler/dtutils.c               |   2 +
>  .../source/components/disassembler/dmbuffer.c      | 143 ++++++++++++++-
>  .../source/components/disassembler/dmopcode.c      |   7 +-
>  src/acpica/source/components/disassembler/dmwalk.c |   3 +-
>  src/acpica/source/components/events/evgpe.c        |  34 ++--
>  src/acpica/source/components/events/evxfgpe.c      |  71 +++++++-
>  src/acpica/source/components/executer/exdebug.c    |  11 +-
>  src/acpica/source/components/executer/exdump.c     |   6 +-
>  src/acpica/source/components/executer/exfield.c    |  30 ++-
>  src/acpica/source/components/namespace/nsobject.c  |  19 +-
>  src/acpica/source/components/utilities/utdecode.c  |  37 +---
>  src/acpica/source/components/utilities/utfileio.c  |   3 +-
>  src/acpica/source/components/utilities/uthex.c     | 185 +++++++++++++++++++
>  src/acpica/source/components/utilities/utprint.c   |  65 ++++---
>  src/acpica/source/components/utilities/utuuid.c    | 175 ++++++++++++++++++
>  src/acpica/source/include/acconfig.h               |  19 ++
>  src/acpica/source/include/acdisasm.h               |  18 ++
>  src/acpica/source/include/aclocal.h                |  20 +-
>  src/acpica/source/include/acnames.h                |   1 +
>  src/acpica/source/include/acpixf.h                 |   8 +-
>  src/acpica/source/include/acpredef.h               |  15 +-
>  src/acpica/source/include/actbl.h                  |  12 +-
>  src/acpica/source/include/actbl1.h                 |  76 ++++++--
>  src/acpica/source/include/actbl2.h                 |  26 ++-
>  src/acpica/source/include/actbl3.h                 | 134 ++++++++++++--
>  src/acpica/source/include/actypes.h                |   5 +-
>  src/acpica/source/include/acutils.h                |  16 ++
>  src/acpica/source/include/platform/aclinux.h       |   6 -
>  src/acpica/source/include/platform/aclinuxex.h     |  10 -
>  .../source/os_specific/service_layers/oslibcfs.c   |  34 ++--
>  .../source/os_specific/service_layers/osunixxf.c   |   8 +-
>  src/acpica/source/tools/acpiexec/aehandlers.c      |   6 +-
>  57 files changed, 1992 insertions(+), 441 deletions(-)
>  create mode 100644 src/acpica/source/common/ahuuids.c
>  create mode 100644 src/acpica/source/components/utilities/uthex.c
>  create mode 100644 src/acpica/source/components/utilities/utuuid.c
> 
> diff --git a/src/acpica/Makefile.am b/src/acpica/Makefile.am
> index b2dd752..cbd38c6 100644
> --- a/src/acpica/Makefile.am
> +++ b/src/acpica/Makefile.am
> @@ -216,6 +216,7 @@ libfwtsacpica_la_SOURCES =				\
>  	source/components/utilities/uteval.c		\
>  	source/components/utilities/utfileio.c		\
>  	source/components/utilities/utglobal.c		\
> +	source/components/utilities/uthex.c		\
>  	source/components/utilities/utids.c		\
>  	source/components/utilities/utinit.c		\
>  	source/components/utilities/utlock.c		\
> @@ -238,9 +239,11 @@ libfwtsacpica_la_SOURCES =				\
>  	source/components/utilities/utxfinit.c		\
>  	source/components/utilities/uterror.c		\
>  	source/components/utilities/utbuffer.c 		\
> +	source/components/utilities/utuuid.c		\
>  	source/common/acgetline.c            		\
>  	source/common/ahids.c				\
>  	source/common/cmfsize.c            		\
> +	source/common/ahuuids.c				\
>  	source/tools/acpiexec/aehandlers.c
>  
>  libfwtsacpica_la_LIBADD = \
> diff --git a/src/acpica/source/common/ahids.c b/src/acpica/source/common/ahids.c
> index 3e12961..af6771b 100755
> --- a/src/acpica/source/common/ahids.c
> +++ b/src/acpica/source/common/ahids.c
> @@ -246,7 +246,11 @@ const AH_DEVICE_ID  AslDeviceIds[] =
>      {"PNP0C60",     "Display Sensor Device"},
>      {"PNP0C70",     "Dock Sensor Device"},
>      {"PNP0C80",     "Memory Device"},
> -    {"PNP0D40",     "Standard Compliant SD Host Controller"},
> +    {"PNP0D10",     "XHCI USB Controller with debug"},
> +    {"PNP0D15",     "XHCI USB Controller without debug"},
> +    {"PNP0D20",     "EHCI USB Controller without debug"},
> +    {"PNP0D25",     "EHCI USB Controller with debug"},
> +    {"PNP0D40",     "SDA Standard Compliant SD Host Controller"},
>      {"PNP0D80",     "Windows-compatible System Power Management Controller"},
>      {"PNP0F03",     "Microsoft PS/2-style Mouse"},
>      {"SMO91D0",     "Sensor Hub"},
> diff --git a/src/acpica/source/common/ahpredef.c b/src/acpica/source/common/ahpredef.c
> index 525c7bb..7123b7f 100644
> --- a/src/acpica/source/common/ahpredef.c
> +++ b/src/acpica/source/common/ahpredef.c
> @@ -169,6 +169,7 @@ const AH_PREDEFINED_NAME    AslPredefinedInfo[] =
>      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"),
> +    AH_PREDEF ("_CCA",    "Cache Coherency Attribute", "Returns a device's support level for cache coherency"),
>      AH_PREDEF ("_CDM",    "Clock Domain", "Returns a logical processor's clock domain identifier"),
>      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"),
> @@ -193,6 +194,7 @@ const AH_PREDEFINED_NAME    AslPredefinedInfo[] =
>      AH_PREDEF ("_DOS",    "Disable Output Switching", "Sets the display output switching mode"),
>      AH_PREDEF ("_DPL",    "Device Selection Polarity", "Polarity of Device Selection signal, Resource Descriptor field"),
>      AH_PREDEF ("_DRS",    "Drive Strength", "Drive Strength setting for GPIO connection, Resource Descriptor field"),
> +    AH_PREDEF ("_DSD",    "Device-Specific Data", "Returns a list of device property information"),
>      AH_PREDEF ("_DSM",    "Device-Specific Method", "Executes device-specific functions"),
>      AH_PREDEF ("_DSS",    "Device Set State", "Sets the display device state"),
>      AH_PREDEF ("_DSW",    "Device Sleep Wake", "Sets the sleep and wake transition states for a device"),
> diff --git a/src/acpica/source/common/ahuuids.c b/src/acpica/source/common/ahuuids.c
> new file mode 100644
> index 0000000..1bf362c
> --- /dev/null
> +++ b/src/acpica/source/common/ahuuids.c
> @@ -0,0 +1,201 @@
> +/******************************************************************************
> + *
> + * Module Name: ahuuids - Table of known ACPI-related UUIDs
> + *
> + *****************************************************************************/
> +
> +/******************************************************************************
> + *
> + * 1. Copyright Notice
> + *
> + * Some or all of this work - Copyright (c) 1999 - 2014, Intel Corp.
> + * All rights reserved.
> + *
> + * 2. License
> + *
> + * 2.1. This is your license from Intel Corp. under its intellectual property
> + * rights. You may have additional license terms from the party that provided
> + * you this software, covering your right to use that party's intellectual
> + * property rights.
> + *
> + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
> + * copy of the source code appearing in this file ("Covered Code") an
> + * irrevocable, perpetual, worldwide license under Intel's copyrights in the
> + * base code distributed originally by Intel ("Original Intel Code") to copy,
> + * make derivatives, distribute, use and display any portion of the Covered
> + * Code in any form, with the right to sublicense such rights; and
> + *
> + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
> + * license (with the right to sublicense), under only those claims of Intel
> + * patents that are infringed by the Original Intel Code, to make, use, sell,
> + * offer to sell, and import the Covered Code and derivative works thereof
> + * solely to the minimum extent necessary to exercise the above copyright
> + * license, and in no event shall the patent license extend to any additions
> + * to or modifications of the Original Intel Code. No other license or right
> + * is granted directly or by implication, estoppel or otherwise;
> + *
> + * The above copyright and patent license is granted only if the following
> + * conditions are met:
> + *
> + * 3. Conditions
> + *
> + * 3.1. Redistribution of Source with Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification with rights to further distribute source must include
> + * the above Copyright Notice, the above License, this list of Conditions,
> + * and the following Disclaimer and Export Compliance provision. In addition,
> + * Licensee must cause all Covered Code to which Licensee contributes to
> + * contain a file documenting the changes Licensee made to create that Covered
> + * Code and the date of any change. Licensee must include in that file the
> + * documentation of any changes made by any predecessor Licensee. Licensee
> + * must include a prominent statement that the modification is derived,
> + * directly or indirectly, from Original Intel Code.
> + *
> + * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification without rights to further distribute source must
> + * include the following Disclaimer and Export Compliance provision in the
> + * documentation and/or other materials provided with distribution. In
> + * addition, Licensee may not authorize further sublicense of source of any
> + * portion of the Covered Code, and must include terms to the effect that the
> + * license from Licensee to its licensee is limited to the intellectual
> + * property embodied in the software Licensee provides to its licensee, and
> + * not to intellectual property embodied in modifications its licensee may
> + * make.
> + *
> + * 3.3. Redistribution of Executable. Redistribution in executable form of any
> + * substantial portion of the Covered Code or modification must reproduce the
> + * above Copyright Notice, and the following Disclaimer and Export Compliance
> + * provision in the documentation and/or other materials provided with the
> + * distribution.
> + *
> + * 3.4. Intel retains all right, title, and interest in and to the Original
> + * Intel Code.
> + *
> + * 3.5. Neither the name Intel nor any other trademark owned or controlled by
> + * Intel shall be used in advertising or otherwise to promote the sale, use or
> + * other dealings in products derived from or relating to the Covered Code
> + * without prior written authorization from Intel.
> + *
> + * 4. Disclaimer and Export Compliance
> + *
> + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
> + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
> + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
> + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
> + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
> + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
> + * PARTICULAR PURPOSE.
> + *
> + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
> + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
> + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
> + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
> + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
> + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
> + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
> + * LIMITED REMEDY.
> + *
> + * 4.3. Licensee shall not export, either directly or indirectly, any of this
> + * software or system incorporating such software without first obtaining any
> + * required license or other approval from the U. S. Department of Commerce or
> + * any other agency or department of the United States Government. In the
> + * event Licensee exports any such software from the United States or
> + * re-exports any such software from a foreign destination, Licensee shall
> + * ensure that the distribution and export/re-export of the software is in
> + * compliance with all laws, regulations, orders, or other restrictions of the
> + * U.S. Export Administration Regulations. Licensee agrees that neither it nor
> + * any of its subsidiaries will export/re-export any technical data, process,
> + * software, or service, directly or indirectly, to any country for which the
> + * United States government or any agency thereof requires an export license,
> + * other governmental approval, or letter of assurance, without first obtaining
> + * such license, approval or letter.
> + *
> + *****************************************************************************/
> +
> +#include "acpi.h"
> +#include "accommon.h"
> +
> +#define _COMPONENT          ACPI_UTILITIES
> +        ACPI_MODULE_NAME    ("ahuuids")
> +
> +/*
> + * Table of "known" (ACPI-related) UUIDs
> + */
> +const AH_UUID  AcpiUuids[] =
> +{
> +    {"PCI Host Bridge Device",
> +        "33db4d5b-1ff7-401c-9657-7441c03dd766"},
> +
> +    {"Platform-wide Capabilities",
> +        "0811b06e-4a27-44f9-8d60-3cbbc22e7b48"},
> +
> +    {"Dynamic Enumeration",
> +        "d8c1a3a6-be9b-4c9b-91bf-c3cb81fc5daf"},
> +
> +    {"GPIO Controller",
> +        "4f248f40-d5e2-499f-834c-27758ea1cd3f"},
> +
> +    {"Battery Thermal Limit",
> +        "4c2067e3-887d-475c-9720-4af1d3ed602e"},
> +
> +    {"Thermal Extensions",
> +        "14d399cd-7a27-4b18-8fb4-7cb7b9f4e500"},
> +
> +    {"USB Controller",
> +        "ce2ee385-00e6-48cb-9f05-2edb927c4899"},
> +
> +    {"HID I2C Device",
> +        "3cdff6f7-4267-4555-ad05-b30a3d8938de"},
> +
> +    {"Power Button Device",
> +        "dfbcf3c5-e7a5-44e6-9c1f-29c76f6e059c"},
> +
> +    {"Device Labeling Interface",
> +        "e5c937d0-3553-4d7a-9117-ea4d19c3434d"},
> +
> +    {"SATA Controller",
> +        "e4db149b-fcfe-425b-a6d8-92357d78fc7f"},
> +
> +    {"Physical Presence Interface",
> +        "3dddfaa6-361b-4eb4-a424-8d10089d1653"},
> +
> +    {NULL, NULL}
> +};
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiAhMatchUuid
> + *
> + * PARAMETERS:  Data                - Data buffer containing a UUID
> + *
> + * RETURN:      ASCII description string for the UUID if it is found.
> + *
> + * DESCRIPTION: Returns a description string for "known" UUIDs, which are
> + *              are UUIDs that are related to ACPI in some way.
> + *
> + ******************************************************************************/
> +
> +const char *
> +AcpiAhMatchUuid (
> +    UINT8                   *Data)
> +{
> +    const AH_UUID           *Info;
> +    UINT8                   UuidBuffer[UUID_BUFFER_LENGTH];
> +
> +
> +    /* Walk the table of known ACPI-related UUIDs */
> +
> +    for (Info = AcpiUuids; Info->Description; Info++)
> +    {
> +        AcpiUtConvertStringToUuid (Info->String, UuidBuffer);
> +
> +        if (!ACPI_MEMCMP (Data, UuidBuffer, UUID_BUFFER_LENGTH))
> +        {
> +            return (Info->Description);
> +        }
> +    }
> +
> +    return (NULL);
> +}
> diff --git a/src/acpica/source/common/dmextern.c b/src/acpica/source/common/dmextern.c
> index efd72f6..30196df 100644
> --- a/src/acpica/source/common/dmextern.c
> +++ b/src/acpica/source/common/dmextern.c
> @@ -478,18 +478,37 @@ AcpiDmGetExternalsFromFile (
>      while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ExternalRefFile))
>      {
>          Token = strtok (StringBuffer, METHOD_SEPARATORS);   /* "External" */
> -        if (!Token) continue;
> -        if (strcmp (Token, "External")) continue;
> +        if (!Token)
> +        {
> +            continue;
> +        }
> +        if (strcmp (Token, "External"))
> +        {
> +            continue;
> +        }
>  
>          MethodName = strtok (NULL, METHOD_SEPARATORS);      /* Method namepath */
> -        if (!MethodName) continue;
> +        if (!MethodName)
> +        {
> +            continue;
> +        }
>  
>          Token = strtok (NULL, METHOD_SEPARATORS);           /* "MethodObj" */
> -        if (!Token) continue;
> -        if (strcmp (Token, "MethodObj")) continue;
> +        if (!Token)
> +        {
> +            continue;
> +        }
> +
> +        if (strcmp (Token, "MethodObj"))
> +        {
> +            continue;
> +        }
>  
>          Token = strtok (NULL, METHOD_SEPARATORS);           /* Arg count */
> -        if (!Token) continue;
> +        if (!Token)
> +        {
> +            continue;
> +        }
>  
>          /* Convert arg count string to an integer */
>  
> diff --git a/src/acpica/source/common/dmtable.c b/src/acpica/source/common/dmtable.c
> index e2abd7a..efb50b5 100644
> --- a/src/acpica/source/common/dmtable.c
> +++ b/src/acpica/source/common/dmtable.c
> @@ -159,9 +159,21 @@ static const char           *AcpiDmDmarSubnames[] =
>      "Reserved Memory Region",
>      "Root Port ATS Capability",
>      "Remapping Hardware Static Affinity",
> +    "ACPI Namespace Device Declaration",
>      "Unknown SubTable Type"         /* Reserved */
>  };
>  
> +static const char           *AcpiDmDmarScope[] =
> +{
> +    "Reserved value",
> +    "PCI Endpoint Device",
> +    "PCI Bridge Device",
> +    "IOAPIC Device",
> +    "Message-capable HPET Device",
> +    "Namespace Device",
> +    "Unknown Scope Type"            /* Reserved */
> +};
> +
>  static const char           *AcpiDmEinjActions[] =
>  {
>      "Begin Operation",
> @@ -232,6 +244,13 @@ static const char           *AcpiDmErstInstructions[] =
>      "Unknown Instruction"
>  };
>  
> +static const char           *AcpiDmGtdtSubnames[] =
> +{
> +    "Generic Timer Block",
> +    "Generic Watchdog Timer",
> +    "Unknown SubTable Type"         /* Reserved */
> +};
> +
>  static const char           *AcpiDmHestSubnames[] =
>  {
>      "IA-32 Machine Check Exception",
> @@ -261,25 +280,28 @@ static const char           *AcpiDmHestNotifySubnames[] =
>  
>  static const char           *AcpiDmMadtSubnames[] =
>  {
> -    "Processor Local APIC",         /* ACPI_MADT_TYPE_LOCAL_APIC */
> -    "I/O APIC",                     /* ACPI_MADT_TYPE_IO_APIC */
> -    "Interrupt Source Override",    /* ACPI_MADT_TYPE_INTERRUPT_OVERRIDE */
> -    "NMI Source",                   /* ACPI_MADT_TYPE_NMI_SOURCE */
> -    "Local APIC NMI",               /* ACPI_MADT_TYPE_LOCAL_APIC_NMI */
> -    "Local APIC Address Override",  /* ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE */
> -    "I/O SAPIC",                    /* ACPI_MADT_TYPE_IO_SAPIC */
> -    "Local SAPIC",                  /* ACPI_MADT_TYPE_LOCAL_SAPIC */
> -    "Platform Interrupt Sources",   /* ACPI_MADT_TYPE_INTERRUPT_SOURCE */
> -    "Processor Local x2APIC",       /* ACPI_MADT_TYPE_LOCAL_X2APIC */
> -    "Local x2APIC NMI",             /* ACPI_MADT_TYPE_LOCAL_X2APIC_NMI */
> -    "Generic Interrupt Controller", /* ACPI_MADT_GENERIC_INTERRUPT */
> -    "Generic Interrupt Distributor",/* ACPI_MADT_GENERIC_DISTRIBUTOR */
> -    "Unknown SubTable Type"         /* Reserved */
> +    "Processor Local APIC",             /* ACPI_MADT_TYPE_LOCAL_APIC */
> +    "I/O APIC",                         /* ACPI_MADT_TYPE_IO_APIC */
> +    "Interrupt Source Override",        /* ACPI_MADT_TYPE_INTERRUPT_OVERRIDE */
> +    "NMI Source",                       /* ACPI_MADT_TYPE_NMI_SOURCE */
> +    "Local APIC NMI",                   /* ACPI_MADT_TYPE_LOCAL_APIC_NMI */
> +    "Local APIC Address Override",      /* ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE */
> +    "I/O SAPIC",                        /* ACPI_MADT_TYPE_IO_SAPIC */
> +    "Local SAPIC",                      /* ACPI_MADT_TYPE_LOCAL_SAPIC */
> +    "Platform Interrupt Sources",       /* ACPI_MADT_TYPE_INTERRUPT_SOURCE */
> +    "Processor Local x2APIC",           /* ACPI_MADT_TYPE_LOCAL_X2APIC */
> +    "Local x2APIC NMI",                 /* ACPI_MADT_TYPE_LOCAL_X2APIC_NMI */
> +    "Generic Interrupt Controller",     /* ACPI_MADT_GENERIC_INTERRUPT */
> +    "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 */
>  };
>  
>  static const char           *AcpiDmPcctSubnames[] =
>  {
>      "Generic Communications Subspace",  /* ACPI_PCCT_TYPE_GENERIC_SUBSPACE */
> +    "HW-Reduced Communications Subspace",
>      "Unknown SubTable Type"             /* Reserved */
>  };
>  
> @@ -378,7 +400,7 @@ ACPI_DMTABLE_DATA    AcpiDmTableData[] =
>      {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, AcpiDmTableInfoGtdt,    NULL,           NULL,           TemplateGtdt,   "Generic Timer Description 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"},
> @@ -777,6 +799,7 @@ AcpiDmDumpTable (
>          case ACPI_DMT_SPACEID:
>          case ACPI_DMT_ACCWIDTH:
>          case ACPI_DMT_IVRS:
> +        case ACPI_DMT_GTDT:
>          case ACPI_DMT_MADT:
>          case ACPI_DMT_PCCT:
>          case ACPI_DMT_PMTT:
> @@ -788,6 +811,7 @@ AcpiDmDumpTable (
>          case ACPI_DMT_EINJINST:
>          case ACPI_DMT_ERSTACT:
>          case ACPI_DMT_ERSTINST:
> +        case ACPI_DMT_DMAR_SCOPE:
>  
>              ByteLength = 1;
>              break;
> @@ -1119,6 +1143,19 @@ AcpiDmDumpTable (
>              AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target), AcpiDmDmarSubnames[Temp16]);
>              break;
>  
> +        case ACPI_DMT_DMAR_SCOPE:
> +
> +            /* DMAR device scope types */
> +
> +            Temp8 = *Target;
> +            if (Temp8 > ACPI_DMAR_SCOPE_TYPE_RESERVED)
> +            {
> +                Temp8 = ACPI_DMAR_SCOPE_TYPE_RESERVED;
> +            }
> +
> +            AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmDmarScope[Temp8]);
> +            break;
> +
>          case ACPI_DMT_EINJACT:
>  
>              /* EINJ Action types */
> @@ -1171,6 +1208,19 @@ AcpiDmDumpTable (
>              AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmErstInstructions[Temp8]);
>              break;
>  
> +        case ACPI_DMT_GTDT:
> +
> +            /* GTDT subtable types */
> +
> +            Temp8 = *Target;
> +            if (Temp8 > ACPI_GTDT_TYPE_RESERVED)
> +            {
> +                Temp8 = ACPI_GTDT_TYPE_RESERVED;
> +            }
> +
> +            AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmGtdtSubnames[Temp8]);
> +            break;
> +
>          case ACPI_DMT_HEST:
>  
>              /* HEST subtable types */
> diff --git a/src/acpica/source/common/dmtbdump.c b/src/acpica/source/common/dmtbdump.c
> index 70e9d4e..b0ae905 100644
> --- a/src/acpica/source/common/dmtbdump.c
> +++ b/src/acpica/source/common/dmtbdump.c
> @@ -963,18 +963,24 @@ AcpiDmDumpDmar (
>              ScopeOffset = sizeof (ACPI_DMAR_RESERVED_MEMORY);
>              break;
>  
> -        case ACPI_DMAR_TYPE_ATSR:
> +        case ACPI_DMAR_TYPE_ROOT_ATS:
>  
>              InfoTable = AcpiDmTableInfoDmar2;
>              ScopeOffset = sizeof (ACPI_DMAR_ATSR);
>              break;
>  
> -        case ACPI_DMAR_HARDWARE_AFFINITY:
> +        case ACPI_DMAR_TYPE_HARDWARE_AFFINITY:
>  
>              InfoTable = AcpiDmTableInfoDmar3;
>              ScopeOffset = sizeof (ACPI_DMAR_RHSA);
>              break;
>  
> +        case ACPI_DMAR_TYPE_NAMESPACE:
> +
> +            InfoTable = AcpiDmTableInfoDmar4;
> +            ScopeOffset = sizeof (ACPI_DMAR_ANDD);
> +            break;
> +
>          default:
>  
>              AcpiOsPrintf ("\n**** Unknown DMAR subtable type 0x%X\n\n", SubTable->Type);
> @@ -988,7 +994,16 @@ AcpiDmDumpDmar (
>              return;
>          }
>  
> -        /* Dump the device scope entries (if any) */
> +        /*
> +         * Dump the optional device scope entries
> +         */
> +        if ((SubTable->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
> +            (SubTable->Type == ACPI_DMAR_TYPE_NAMESPACE))
> +        {
> +            /* These types do not support device scopes */
> +
> +            goto NextSubtable;
> +        }
>  
>          ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, SubTable, ScopeOffset);
>          while (ScopeOffset < SubTable->Length)
> @@ -1028,6 +1043,7 @@ AcpiDmDumpDmar (
>                  ScopeTable, ScopeTable->Length);
>          }
>  
> +NextSubtable:
>          /* Point to next subtable */
>  
>          Offset += SubTable->Length;
> @@ -1227,6 +1243,123 @@ NextSubTable:
>  
>  /*******************************************************************************
>   *
> + * FUNCTION:    AcpiDmDumpGtdt
> + *
> + * PARAMETERS:  Table               - A GTDT table
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Format the contents of a GTDT. This table type consists
> + *              of an open-ended number of subtables.
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmDumpGtdt (
> +    ACPI_TABLE_HEADER       *Table)
> +{
> +    ACPI_STATUS             Status;
> +    ACPI_GTDT_HEADER        *SubTable;
> +    UINT32                  Length = Table->Length;
> +    UINT32                  Offset = sizeof (ACPI_TABLE_GTDT);
> +    ACPI_DMTABLE_INFO       *InfoTable;
> +    UINT32                  SubTableLength;
> +    UINT32                  GtCount;
> +    ACPI_GTDT_TIMER_ENTRY   *GtxTable;
> +
> +
> +    /* Main table */
> +
> +    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoGtdt);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return;
> +    }
> +
> +    /* Subtables */
> +
> +    SubTable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Table, Offset);
> +    while (Offset < Table->Length)
> +    {
> +        /* Common subtable header */
> +
> +        AcpiOsPrintf ("\n");
> +        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> +                    SubTable->Length, AcpiDmTableInfoGtdtHdr);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return;
> +        }
> +
> +        GtCount = 0;
> +        switch (SubTable->Type)
> +        {
> +        case ACPI_GTDT_TYPE_TIMER_BLOCK:
> +
> +            SubTableLength = sizeof (ACPI_GTDT_TIMER_BLOCK);
> +            GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
> +                        SubTable))->TimerCount;
> +
> +            InfoTable = AcpiDmTableInfoGtdt0;
> +            break;
> +
> +        case ACPI_GTDT_TYPE_WATCHDOG:
> +
> +            SubTableLength = sizeof (ACPI_GTDT_WATCHDOG);
> +
> +            InfoTable = AcpiDmTableInfoGtdt1;
> +            break;
> +
> +        default:
> +
> +            /* Cannot continue on unknown type - no length */
> +
> +            AcpiOsPrintf ("\n**** Unknown GTDT subtable type 0x%X\n", SubTable->Type);
> +            return;
> +        }
> +
> +        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> +                    SubTable->Length, InfoTable);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return;
> +        }
> +
> +        /* Point to end of current subtable (each subtable above is of fixed length) */
> +
> +        Offset += SubTableLength;
> +
> +        /* If there are any Gt Timer Blocks from above, dump them now */
> +
> +        if (GtCount)
> +        {
> +            GtxTable = ACPI_ADD_PTR (ACPI_GTDT_TIMER_ENTRY, SubTable, SubTableLength);
> +            SubTableLength += GtCount * sizeof (ACPI_GTDT_TIMER_ENTRY);
> +
> +            while (GtCount)
> +            {
> +                AcpiOsPrintf ("\n");
> +                Status = AcpiDmDumpTable (Length, Offset, GtxTable,
> +                            sizeof (ACPI_GTDT_TIMER_ENTRY), AcpiDmTableInfoGtdt0a);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return;
> +                }
> +                Offset += sizeof (ACPI_GTDT_TIMER_ENTRY);
> +                GtxTable++;
> +                GtCount--;
> +            }
> +        }
> +
> +        /* Point to next subtable */
> +
> +        SubTable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, SubTable, SubTableLength);
> +    }
> +}
> +
> +
> +/*******************************************************************************
> + *
>   * FUNCTION:    AcpiDmDumpHest
>   *
>   * PARAMETERS:  Table               - A HEST table
> @@ -1734,6 +1867,16 @@ AcpiDmDumpMadt (
>              InfoTable = AcpiDmTableInfoMadt12;
>              break;
>  
> +        case ACPI_MADT_TYPE_GENERIC_MSI_FRAME:
> +
> +            InfoTable = AcpiDmTableInfoMadt13;
> +            break;
> +
> +        case ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR:
> +
> +            InfoTable = AcpiDmTableInfoMadt14;
> +            break;
> +
>          default:
>  
>              AcpiOsPrintf ("\n**** Unknown MADT subtable type 0x%X\n\n", SubTable->Type);
> @@ -2089,6 +2232,7 @@ AcpiDmDumpPcct (
>  {
>      ACPI_STATUS             Status;
>      ACPI_PCCT_SUBSPACE      *SubTable;
> +    ACPI_DMTABLE_INFO       *InfoTable;
>      UINT32                  Length = Table->Length;
>      UINT32                  Offset = sizeof (ACPI_TABLE_PCCT);
>  
> @@ -2116,10 +2260,20 @@ AcpiDmDumpPcct (
>              return;
>          }
>  
> -        /* ACPI 5.0: Only one type of PCCT subtable is supported */
> -
> -        if (SubTable->Header.Type != ACPI_PCCT_TYPE_GENERIC_SUBSPACE)
> +        switch (SubTable->Header.Type)
>          {
> +        case ACPI_PCCT_TYPE_GENERIC_SUBSPACE:
> +
> +            InfoTable = AcpiDmTableInfoPcct0;
> +            break;
> +
> +        case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE:
> +
> +            InfoTable = AcpiDmTableInfoPcct1;
> +            break;
> +
> +        default:
> +
>              AcpiOsPrintf (
>                  "\n**** Unexpected or unknown PCCT subtable type 0x%X\n\n",
>                  SubTable->Header.Type);
> @@ -2128,7 +2282,7 @@ AcpiDmDumpPcct (
>  
>          AcpiOsPrintf ("\n");
>          Status = AcpiDmDumpTable (Length, Offset, SubTable,
> -                    SubTable->Header.Length, AcpiDmTableInfoPcct0);
> +                    SubTable->Header.Length, InfoTable);
>          if (ACPI_FAILURE (Status))
>          {
>              return;
> @@ -2282,8 +2436,7 @@ AcpiDmDumpPmtt (
>              if (DomainCount)
>              {
>                  AcpiOsPrintf (
> -                    "\n**** DomainCount exceeds subtable length\n\n",
> -                    MemSubTable->Type);
> +                    "\n**** DomainCount exceeds subtable length\n\n");
>              }
>  
>              /* Walk the physical component (DIMM) subtables */
> diff --git a/src/acpica/source/common/dmtbinfo.c b/src/acpica/source/common/dmtbinfo.c
> index 7a9520d..2a3bed4 100644
> --- a/src/acpica/source/common/dmtbinfo.c
> +++ b/src/acpica/source/common/dmtbinfo.c
> @@ -209,11 +209,16 @@
>  #define ACPI_DMAR1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_DMAR_RESERVED_MEMORY,f)
>  #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_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)
>  #define ACPI_FPDT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_FPDT_BOOT,f)
>  #define ACPI_FPDT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_FPDT_S3PT_PTR,f)
> +#define ACPI_GTDT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_GTDT_TIMER_BLOCK,f)
> +#define ACPI_GTDT0a_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_GTDT_TIMER_ENTRY,f)
> +#define ACPI_GTDT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_GTDT_WATCHDOG,f)
> +#define ACPI_GTDTH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_GTDT_HEADER,f)
>  #define ACPI_HEST0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_HEST_IA_MACHINE_CHECK,f)
>  #define ACPI_HEST1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_HEST_IA_CORRECTED,f)
>  #define ACPI_HEST2_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_HEST_IA_NMI,f)
> @@ -246,6 +251,8 @@
>  #define ACPI_MADT10_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_X2APIC_NMI,f)
>  #define ACPI_MADT11_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_INTERRUPT,f)
>  #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_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)
> @@ -256,6 +263,7 @@
>  #define ACPI_MSCT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MSCT_PROXIMITY,f)
>  #define ACPI_MTMR0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MTMR_ENTRY,f)
>  #define ACPI_PCCT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PCCT_SUBSPACE,f)
> +#define ACPI_PCCT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PCCT_HW_REDUCED,f)
>  #define ACPI_PMTT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PMTT_SOCKET,f)
>  #define ACPI_PMTT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PMTT_CONTROLLER,f)
>  #define ACPI_PMTT1A_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_PMTT_DOMAIN,f)
> @@ -288,6 +296,8 @@
>  #define ACPI_SRAT1_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_SRAT_MEM_AFFINITY,f,o)
>  #define ACPI_SRAT2_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_SRAT_X2APIC_CPU_AFFINITY,f,o)
>  #define ACPI_GTDT_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_GTDT,f,o)
> +#define ACPI_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_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)
> @@ -299,9 +309,11 @@
>  #define ACPI_MADT9_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_X2APIC,f,o)
>  #define ACPI_MADT10_FLAG_OFFSET(f,o)    ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_X2APIC_NMI,f,o)
>  #define ACPI_MADT11_FLAG_OFFSET(f,o)    ACPI_FLAG_OFFSET (ACPI_MADT_GENERIC_INTERRUPT,f,o)
> +#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_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)
>  #define ACPI_WDDT_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_WDDT,f,o)
>  #define ACPI_EINJ0_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_WHEA_HEADER,f,o)
> @@ -512,17 +524,22 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoFadt2[] =
>  {
>      {ACPI_DMT_GAS,      ACPI_FADT_OFFSET (ResetRegister),           "Reset Register", 0},
>      {ACPI_DMT_UINT8,    ACPI_FADT_OFFSET (ResetValue),              "Value to cause reset", 0},
> -    {ACPI_DMT_UINT24,   ACPI_FADT_OFFSET (Reserved4[0]),            "Reserved", 0},
> +    {ACPI_DMT_UINT16,   ACPI_FADT_OFFSET (ArmBootFlags),            "Reserved", 0},
> +    {ACPI_DMT_UINT8,    ACPI_FADT_OFFSET (MinorRevision),           "Reserved", 0},
>      ACPI_DMT_TERMINATOR
>  };
>  
> -/* ACPI 2.0+ Extensions (FADT version 3 and 4) */
> +/* ACPI 2.0+ Extensions (FADT version 3, 4, and 5) */
>  
>  ACPI_DMTABLE_INFO           AcpiDmTableInfoFadt3[] =
>  {
>      {ACPI_DMT_GAS,      ACPI_FADT_OFFSET (ResetRegister),           "Reset Register", 0},
>      {ACPI_DMT_UINT8,    ACPI_FADT_OFFSET (ResetValue),              "Value to cause reset", 0},
> -    {ACPI_DMT_UINT24,   ACPI_FADT_OFFSET (Reserved4[0]),            "Reserved", 0},
> +    {ACPI_DMT_UINT16,   ACPI_FADT_OFFSET (ArmBootFlags),            "ARM Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_FADT_FLAG_OFFSET(ArmBootFlags,0),      "PSCI Compliant", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_FADT_FLAG_OFFSET(ArmBootFlags,0),      "Must use HVC for PSCI", 0},
> +    ACPI_DMT_NEW_LINE,
> +    {ACPI_DMT_UINT8,    ACPI_FADT_OFFSET (MinorRevision),           "FADT Minor Revision", 0},
>      {ACPI_DMT_UINT64,   ACPI_FADT_OFFSET (XFacs),                   "FACS Address", 0},
>      {ACPI_DMT_UINT64,   ACPI_FADT_OFFSET (XDsdt),                   "DSDT Address", 0},
>      {ACPI_DMT_GAS,      ACPI_FADT_OFFSET (XPm1aEventBlock),         "PM1A Event Block", 0},
> @@ -879,7 +896,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoDmarHdr[] =
>  
>  ACPI_DMTABLE_INFO           AcpiDmTableInfoDmarScope[] =
>  {
> -    {ACPI_DMT_UINT8,    ACPI_DMARS_OFFSET (EntryType),              "Device Scope Entry Type", 0},
> +    {ACPI_DMT_DMAR_SCOPE, ACPI_DMARS_OFFSET (EntryType),            "Device Scope Type", 0},
>      {ACPI_DMT_UINT8,    ACPI_DMARS_OFFSET (Length),                 "Entry Length", DT_LENGTH},
>      {ACPI_DMT_UINT16,   ACPI_DMARS_OFFSET (Reserved),               "Reserved", 0},
>      {ACPI_DMT_UINT8,    ACPI_DMARS_OFFSET (EnumerationId),          "Enumeration ID", 0},
> @@ -931,6 +948,16 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoDmar3[] =
>      ACPI_DMT_TERMINATOR
>  };
>  
> +/* 4: ACPI Namespace Device Declaration Structure */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoDmar4[] =
> +{
> +    {ACPI_DMT_UINT24,   ACPI_DMAR4_OFFSET (Reserved[0]),            "Reserved", 0},
> +    {ACPI_DMT_UINT8,    ACPI_DMAR4_OFFSET (DeviceNumber),           "Device Number", 0},
> +    {ACPI_DMT_STRING,   ACPI_DMAR4_OFFSET (DeviceName[0]),          "Device Name", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
>  
>  /*******************************************************************************
>   *
> @@ -1070,29 +1097,89 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoFpdt1[] =
>  
>  ACPI_DMTABLE_INFO           AcpiDmTableInfoGtdt[] =
>  {
> -    {ACPI_DMT_UINT64,   ACPI_GTDT_OFFSET (Address),                 "Timer Address", 0},
> -    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (Flags),                   "Flags (decoded below)", DT_FLAG},
> -    {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (Flags,0),            "Memory Present", 0},
> +    {ACPI_DMT_UINT64,   ACPI_GTDT_OFFSET (CounterBlockAddresss),    "Counter Block Address", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (Reserved),                "Reserved", 0},
>      ACPI_DMT_NEW_LINE,
> -    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (SecurePl1Interrupt),      "Secure PL1 Interrupt", 0},
> -    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (SecurePl1Flags),          "SPL1 Flags (decoded below)", DT_FLAG},
> -    {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (SecurePl1Flags,0),   "Trigger Mode", 0},
> -    {ACPI_DMT_FLAG1,    ACPI_GTDT_FLAG_OFFSET (SecurePl1Flags,0),   "Polarity", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (SecureEl1Interrupt),      "Secure EL1 Interrupt", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (SecureEl1Flags),          "EL1 Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0),   "Trigger Mode", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0),   "Polarity", 0},
> +    {ACPI_DMT_FLAG2,    ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0),   "Always On", 0},
>      ACPI_DMT_NEW_LINE,
> -    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (NonSecurePl1Interrupt),   "Non-Secure PL1 Interrupt", 0},
> -    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (NonSecurePl1Flags),       "NSPL1 Flags (decoded below)", DT_FLAG},
> -    {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (NonSecurePl1Flags,0),"Trigger Mode", 0},
> -    {ACPI_DMT_FLAG1,    ACPI_GTDT_FLAG_OFFSET (NonSecurePl1Flags,0),"Polarity", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (NonSecureEl1Interrupt),   "Non-Secure EL1 Interrupt", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (NonSecureEl1Flags),       "NEL1 Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Trigger Mode", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Polarity", 0},
> +    {ACPI_DMT_FLAG2,    ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Always On", 0},
>      ACPI_DMT_NEW_LINE,
>      {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (VirtualTimerInterrupt),   "Virtual Timer Interrupt", 0},
>      {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (VirtualTimerFlags),       "VT Flags (decoded below)", DT_FLAG},
>      {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Trigger Mode", 0},
>      {ACPI_DMT_FLAG1,    ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Polarity", 0},
> +    {ACPI_DMT_FLAG2,    ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Always On", 0},
> +    ACPI_DMT_NEW_LINE,
> +    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (NonSecureEl2Interrupt),   "Non-Secure EL2 Interrupt", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (NonSecureEl2Flags),       "NEL2 Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Trigger Mode", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Polarity", 0},
> +    {ACPI_DMT_FLAG2,    ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Always On", 0},
> +    {ACPI_DMT_UINT64,   ACPI_GTDT_OFFSET (CounterReadBlockAddress), "Counter Read Block Address", 0},
>      ACPI_DMT_NEW_LINE,
> -    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (NonSecurePl2Interrupt),   "Non-Secure PL2 Interrupt", 0},
> -    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (NonSecurePl2Flags),       "NSPL2 Flags (decoded below)", DT_FLAG},
> -    {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (NonSecurePl2Flags,0),"Trigger Mode", 0},
> -    {ACPI_DMT_FLAG1,    ACPI_GTDT_FLAG_OFFSET (NonSecurePl2Flags,0),"Polarity", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (PlatformTimerCount),      "Platform Timer Count", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (PlatformTimerOffset),     "Platform Timer Offset", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* GTDT Subtable header (one per Subtable) */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoGtdtHdr[] =
> +{
> +    {ACPI_DMT_GTDT,     ACPI_GTDTH_OFFSET (Type),                   "Subtable Type", 0},
> +    {ACPI_DMT_UINT16,   ACPI_GTDTH_OFFSET (Length),                 "Length", DT_LENGTH},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* GTDT Subtables */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoGtdt0[] =
> +{
> +    {ACPI_DMT_UINT8,    ACPI_GTDT0_OFFSET (Reserved),               "Reserved", 0},
> +    {ACPI_DMT_UINT64,   ACPI_GTDT0_OFFSET (BlockAddress),           "Block Address", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT0_OFFSET (TimerCount),             "Timer Count", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT0_OFFSET (TimerOffset),            "Timer Offset", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoGtdt0a[] =
> +{
> +    {ACPI_DMT_UINT8 ,   ACPI_GTDT0a_OFFSET (FrameNumber),               "Frame Number", 0},
> +    {ACPI_DMT_UINT24,   ACPI_GTDT0a_OFFSET (Reserved[0]),               "Reserved", 0},
> +    {ACPI_DMT_UINT64,   ACPI_GTDT0a_OFFSET (BaseAddress),               "Base Address", 0},
> +    {ACPI_DMT_UINT64,   ACPI_GTDT0a_OFFSET (El0BaseAddress),            "EL0 Base Address", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT0a_OFFSET (TimerInterrupt),            "Timer Interrupt", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT0a_OFFSET (TimerFlags),                "Timer Flags (decoded below)", 0},
> +    {ACPI_DMT_FLAG0,    ACPI_GTDT0a_FLAG_OFFSET (TimerFlags,0),         "Trigger Mode", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_GTDT0a_FLAG_OFFSET (TimerFlags,0),         "Polarity", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT0a_OFFSET (VirtualTimerInterrupt),     "Virtual Timer Interrupt", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT0a_OFFSET (VirtualTimerFlags),         "Virtual Timer Flags (decoded below)", 0},
> +    {ACPI_DMT_FLAG0,    ACPI_GTDT0a_FLAG_OFFSET (VirtualTimerFlags,0),  "Trigger Mode", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_GTDT0a_FLAG_OFFSET (VirtualTimerFlags,0),  "Polarity", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT0a_OFFSET (CommonFlags),               "Common Flags (decoded below)", 0},
> +    {ACPI_DMT_FLAG0,    ACPI_GTDT0a_FLAG_OFFSET (CommonFlags,0),        "Secure", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_GTDT0a_FLAG_OFFSET (CommonFlags,0),        "Always On", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoGtdt1[] =
> +{
> +    {ACPI_DMT_UINT8,    ACPI_GTDT1_OFFSET (Reserved),               "Reserved", 0},
> +    {ACPI_DMT_UINT64,   ACPI_GTDT1_OFFSET (RefreshFrameAddress),    "Refresh Frame Address", 0},
> +    {ACPI_DMT_UINT64,   ACPI_GTDT1_OFFSET (ControlFrameAddress),    "Control Frame Address", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT1_OFFSET (TimerInterrupt),         "Timer Interrupt", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT1_OFFSET (TimerFlags),             "Timer Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0),      "Trigger Mode", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0),      "Polarity", 0},
> +    {ACPI_DMT_FLAG2,    ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0),      "Security", 0},
>      ACPI_DMT_TERMINATOR
>  };
>  
> @@ -1599,14 +1686,21 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoMadt10[] =
>  ACPI_DMTABLE_INFO           AcpiDmTableInfoMadt11[] =
>  {
>      {ACPI_DMT_UINT16,   ACPI_MADT11_OFFSET (Reserved),              "Reserved", 0},
> -    {ACPI_DMT_UINT32,   ACPI_MADT11_OFFSET (GicId),                 "Local GIC Hardware ID", 0},
> +    {ACPI_DMT_UINT32,   ACPI_MADT11_OFFSET (CpuInterfaceNumber),    "CPU Interface Number", 0},
>      {ACPI_DMT_UINT32,   ACPI_MADT11_OFFSET (Uid),                   "Processor UID", 0},
>      {ACPI_DMT_UINT32,   ACPI_MADT11_OFFSET (Flags),                 "Flags (decoded below)", DT_FLAG},
>      {ACPI_DMT_FLAG0,    ACPI_MADT11_FLAG_OFFSET (Flags,0),          "Processor Enabled", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_MADT11_FLAG_OFFSET (Flags,0),          "Performance Interrupt Trigger Mode", 0},
> +    {ACPI_DMT_FLAG2,    ACPI_MADT11_FLAG_OFFSET (Flags,0),          "Virtual GIC Interrupt Trigger Mode", 0},
>      {ACPI_DMT_UINT32,   ACPI_MADT11_OFFSET (ParkingVersion),        "Parking Protocol Version", 0},
>      {ACPI_DMT_UINT32,   ACPI_MADT11_OFFSET (PerformanceInterrupt),  "Performance Interrupt", 0},
>      {ACPI_DMT_UINT64,   ACPI_MADT11_OFFSET (ParkedAddress),         "Parked Address", 0},
>      {ACPI_DMT_UINT64,   ACPI_MADT11_OFFSET (BaseAddress),           "Base Address", 0},
> +    {ACPI_DMT_UINT64,   ACPI_MADT11_OFFSET (GicvBaseAddress),       "Virtual GIC Base Address", 0},
> +    {ACPI_DMT_UINT64,   ACPI_MADT11_OFFSET (GichBaseAddress),       "Hypervisor GIC Base Address", 0},
> +    {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_TERMINATOR
>  };
>  
> @@ -1622,6 +1716,30 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoMadt12[] =
>     ACPI_DMT_TERMINATOR
>  };
>  
> +/* 13: Generic MSI Frame (ACPI 5.1) */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoMadt13[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_MADT13_OFFSET (Reserved),              "Reserved", 0},
> +    {ACPI_DMT_UINT32,   ACPI_MADT13_OFFSET (MsiFrameId),            "MSI Frame ID", 0},
> +    {ACPI_DMT_UINT64,   ACPI_MADT13_OFFSET (BaseAddress),           "Base Address", 0},
> +    {ACPI_DMT_UINT32,   ACPI_MADT13_OFFSET (Flags),                 "Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_MADT13_FLAG_OFFSET (Flags,0),          "Select SPI", 0},
> +    {ACPI_DMT_UINT16,   ACPI_MADT13_OFFSET (SpiCount),              "SPI Count", 0},
> +    {ACPI_DMT_UINT16,   ACPI_MADT13_OFFSET (SpiBase),               "SPI Base", 0},
> +   ACPI_DMT_TERMINATOR
> +};
> +
> +/* 14: Generic Redistributor (ACPI 5.1) */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoMadt14[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_MADT14_OFFSET (Reserved),              "Reserved", 0},
> +    {ACPI_DMT_UINT64,   ACPI_MADT14_OFFSET (BaseAddress),           "Base Address", 0},
> +    {ACPI_DMT_UINT32,   ACPI_MADT14_OFFSET (Length),                "Length", 0},
> +   ACPI_DMT_TERMINATOR
> +};
> +
>  
>  /*******************************************************************************
>   *
> @@ -1841,6 +1959,26 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoPcct0[] =
>      ACPI_DMT_TERMINATOR
>  };
>  
> +/* 1: HW-reduced Communications Subspace (ACPI 5.1) */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoPcct1[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_PCCT1_OFFSET (DoorbellInterrupt),      "Doorbell Interrupt", 0},
> +    {ACPI_DMT_UINT8,    ACPI_PCCT1_OFFSET (Flags),                  "Flags (Decoded Below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_PCCT1_FLAG_OFFSET (Flags,0),           "Polarity", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_PCCT1_FLAG_OFFSET (Flags,0),           "Mode", 0},
> +    {ACPI_DMT_UINT8,    ACPI_PCCT1_OFFSET (Reserved),               "Reserved", 0},
> +    {ACPI_DMT_UINT64,   ACPI_PCCT1_OFFSET (BaseAddress),            "Base Address", 0},
> +    {ACPI_DMT_UINT64,   ACPI_PCCT1_OFFSET (Length),                 "Address Length", 0},
> +    {ACPI_DMT_GAS,      ACPI_PCCT1_OFFSET (DoorbellRegister),       "Doorbell Register", 0},
> +    {ACPI_DMT_UINT64,   ACPI_PCCT1_OFFSET (PreserveMask),           "Preserve Mask", 0},
> +    {ACPI_DMT_UINT64,   ACPI_PCCT1_OFFSET (WriteMask),              "Write Mask", 0},
> +    {ACPI_DMT_UINT32,   ACPI_PCCT1_OFFSET (Latency),                "Command Latency", 0},
> +    {ACPI_DMT_UINT32,   ACPI_PCCT1_OFFSET (MaxAccessRate),          "Maximum Access Rate", 0},
> +    {ACPI_DMT_UINT16,   ACPI_PCCT1_OFFSET (MinTurnaroundTime),      "Minimum Turnaround Time", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
>  
>  /*******************************************************************************
>   *
> diff --git a/src/acpica/source/compiler/Makefile.am b/src/acpica/source/compiler/Makefile.am
> index 55eccb9..a1de14a 100644
> --- a/src/acpica/source/compiler/Makefile.am
> +++ b/src/acpica/source/compiler/Makefile.am
> @@ -124,6 +124,7 @@ libfwtsiasl_la_SOURCES = 			\
>  	../components/utilities/utdebug.c 	\
>  	../components/utilities/utdelete.c 	\
>  	../components/utilities/utglobal.c 	\
> +	../components/utilities/uthex.c		\
>  	../components/utilities/utinit.c 	\
>  	../components/utilities/utlock.c 	\
>  	../components/utilities/utobject.c 	\
> @@ -140,6 +141,7 @@ libfwtsiasl_la_SOURCES = 			\
>  	../components/utilities/utaddress.c 	\
>  	../components/utilities/utownerid.c 	\
>  	../components/utilities/utexcep.c 	\
> +	../components/utilities/utuuid.c	\
>  	../components/namespace/nsaccess.c 	\
>  	../components/namespace/nsalloc.c 	\
>  	../components/namespace/nsdump.c 	\
> diff --git a/src/acpica/source/compiler/aslanalyze.c b/src/acpica/source/compiler/aslanalyze.c
> index 16e28d3..8bfc9ac 100644
> --- a/src/acpica/source/compiler/aslanalyze.c
> +++ b/src/acpica/source/compiler/aslanalyze.c
> @@ -641,3 +641,51 @@ ApCheckRegMethod (
>  
>      AslError (ASL_WARNING, ASL_MSG_NO_REGION, Op, NULL);
>  }
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    ApFindNameInScope
> + *
> + * PARAMETERS:  Name                - Name to search for
> + *              Op                  - Current parse op
> + *
> + * RETURN:      TRUE if name found in the same scope as Op.
> + *
> + * DESCRIPTION: Determine if a name appears in the same scope as Op, as either
> + *              a Method() or a Name().
> + *
> + ******************************************************************************/
> +
> +BOOLEAN
> +ApFindNameInScope (
> +    char                    *Name,
> +    ACPI_PARSE_OBJECT       *Op)
> +{
> +    ACPI_PARSE_OBJECT       *Next;
> +    ACPI_PARSE_OBJECT       *Parent;
> +
> +
> +    /* Get the start of the current scope */
> +
> +    Parent = Op->Asl.Parent;
> +    Next = Parent->Asl.Child;
> +
> +    /* Search entire scope for a match to the name */
> +
> +    while (Next)
> +    {
> +        if ((Next->Asl.ParseOpcode == PARSEOP_METHOD) ||
> +            (Next->Asl.ParseOpcode == PARSEOP_NAME))
> +        {
> +            if (ACPI_COMPARE_NAME (Name, Next->Asl.NameSeg))
> +            {
> +                return (TRUE);
> +            }
> +        }
> +
> +        Next = Next->Asl.Next;
> +    }
> +
> +    return (FALSE);
> +}
> diff --git a/src/acpica/source/compiler/aslcompiler.h b/src/acpica/source/compiler/aslcompiler.h
> index 6e59b0f..c4afef4 100644
> --- a/src/acpica/source/compiler/aslcompiler.h
> +++ b/src/acpica/source/compiler/aslcompiler.h
> @@ -347,6 +347,11 @@ void
>  ApCheckRegMethod (
>      ACPI_PARSE_OBJECT       *Op);
>  
> +BOOLEAN
> +ApFindNameInScope (
> +    char                    *Name,
> +    ACPI_PARSE_OBJECT       *Op);
> +
>  
>  /*
>   * aslerror - error handling/reporting
> @@ -962,10 +967,6 @@ void
>  UtDisplaySummary (
>      UINT32                  FileId);
>  
> -UINT8
> -UtHexCharToValue (
> -    int                     HexChar);
> -
>  void
>  UtConvertByteToHex (
>      UINT8                   RawByte,
> @@ -1027,11 +1028,6 @@ AuValidateUuid (
>      char                    *InString);
>  
>  ACPI_STATUS
> -AuConvertStringToUuid (
> -    char                    *InString,
> -    char                    *UuIdBuffer);
> -
> -ACPI_STATUS
>  AuConvertUuidToString (
>      char                    *UuIdBuffer,
>      char                    *OutString);
> diff --git a/src/acpica/source/compiler/aslcompiler.l b/src/acpica/source/compiler/aslcompiler.l
> index b06aa65..bdcc8ed 100644
> --- a/src/acpica/source/compiler/aslcompiler.l
> +++ b/src/acpica/source/compiler/aslcompiler.l
> @@ -182,10 +182,10 @@ NamePathTail                [.]{NameSeg}
>  [ \t]                       { count (0); }
>  
>  
> -"/*"                        { if (!AslDoComment ()) yyterminate (); }
> -"//"                        { if (!AslDoCommentType2 ()) yyterminate (); }
> +"/*"                        { if (!AslDoComment ()) {yyterminate ();} }
> +"//"                        { if (!AslDoCommentType2 ()) {yyterminate ();} }
>  
> -"\""                        { if (AslDoStringLiteral ()) return (PARSEOP_STRING_LITERAL); else yyterminate (); }
> +"\""                        { if (AslDoStringLiteral ()) {return (PARSEOP_STRING_LITERAL);} else {yyterminate ();} }
>  ";"                         { count (0); return(';'); }
>  
>  
> @@ -711,9 +711,9 @@ NamePathTail                [.]{NameSeg}
>                                  AslCompilererror (MsgBuffer);}
>  
>  <<EOF>>                     { if (AslPopInputFileStack ())
> -                                yyterminate();
> +                                {yyterminate();}
>                                else
> -                                return (PARSEOP_INCLUDE_END);};
> +                                {return (PARSEOP_INCLUDE_END);} };
>  
>  %%
>  
> diff --git a/src/acpica/source/compiler/asldefine.h b/src/acpica/source/compiler/asldefine.h
> index 71f52db..b05bd7f 100644
> --- a/src/acpica/source/compiler/asldefine.h
> +++ b/src/acpica/source/compiler/asldefine.h
> @@ -127,7 +127,7 @@
>  #define ASL_INVOCATION_NAME         "iasl"
>  #define ASL_CREATOR_ID              "INTL"
>  
> -#define ASL_COMPLIANCE              "Supports ACPI Specification Revision 5.0A"
> +#define ASL_COMPLIANCE              "Supports ACPI Specification Revision 5.1"
>  
>  
>  /* Configuration constants */
> diff --git a/src/acpica/source/compiler/aslglobal.h b/src/acpica/source/compiler/aslglobal.h
> index 4d56c05..53a500e 100644
> --- a/src/acpica/source/compiler/aslglobal.h
> +++ b/src/acpica/source/compiler/aslglobal.h
> @@ -135,11 +135,6 @@
>  
>  #ifdef _DECLARE_GLOBALS
>  UINT32                              Gbl_ExceptionCount[ASL_NUM_REPORT_LEVELS] = {0,0,0,0,0,0};
> -char                                AslHexLookup[] =
> -{
> -    '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
> -};
> -
>  
>  /* Table below must match ASL_FILE_TYPES in asltypes.h */
>  
> @@ -164,7 +159,6 @@ ASL_FILE_INFO                       Gbl_Files [ASL_NUM_FILES] =
>  
>  #else
>  extern UINT32                       Gbl_ExceptionCount[ASL_NUM_REPORT_LEVELS];
> -extern char                         AslHexLookup[];
>  extern ASL_FILE_INFO                Gbl_Files [ASL_NUM_FILES];
>  #endif
>  
> diff --git a/src/acpica/source/compiler/aslmessages.c b/src/acpica/source/compiler/aslmessages.c
> index 5b271d3..11b5d57 100644
> --- a/src/acpica/source/compiler/aslmessages.c
> +++ b/src/acpica/source/compiler/aslmessages.c
> @@ -305,6 +305,7 @@ const char                      *AslCompilerMsgs [] =
>  /*    ASL_MSG_WRITE */                      "Could not write file",
>  /*    ASL_MSG_RANGE */                      "Constant out of range",
>  /*    ASL_MSG_BUFFER_ALLOCATION */          "Could not allocate line buffer",
> +/*    ASL_MSG_MISSING_DEPENDENCY */         "Missing dependency"
>  };
>  
>  /* Table compiler */
> diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h
> index 150425c..5743075 100644
> --- a/src/acpica/source/compiler/aslmessages.h
> +++ b/src/acpica/source/compiler/aslmessages.h
> @@ -307,6 +307,7 @@ typedef enum
>      ASL_MSG_WRITE,
>      ASL_MSG_RANGE,
>      ASL_MSG_BUFFER_ALLOCATION,
> +    ASL_MSG_MISSING_DEPENDENCY,
>  
>      /* These messages are used by the Data Table compiler only */
>  
> diff --git a/src/acpica/source/compiler/aslmethod.c b/src/acpica/source/compiler/aslmethod.c
> index edf2fa4..58c1cc8 100644
> --- a/src/acpica/source/compiler/aslmethod.c
> +++ b/src/acpica/source/compiler/aslmethod.c
> @@ -180,6 +180,17 @@ MtMethodAnalysisWalkBegin (
>  
>          WalkInfo->MethodStack = MethodInfo;
>  
> +        /* Special handling for _DSD, must have a _HID also */
> +
> +        if (!ACPI_STRCMP (METHOD_NAME__DSD, Op->Asl.NameSeg))
> +        {
> +            if (!ApFindNameInScope (METHOD_NAME__HID, Op))
> +            {
> +                AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op,
> +                    "_DSD requires _HID in same scope");
> +            }
> +        }
> +
>          /* Get the name node */
>  
>          Next = Op->Asl.Child;
> @@ -485,6 +496,15 @@ MtMethodAnalysisWalkBegin (
>              }
>          }
>  
> +        else if (!ACPI_STRCMP (METHOD_NAME__DSD, Op->Asl.NameSeg))
> +        {
> +            if (!ApFindNameInScope (METHOD_NAME__HID, Op))
> +            {
> +                AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op,
> +                    "_DSD requires _HID in same scope");
> +            }
> +        }
> +
>          break;
>  
>      default:
> diff --git a/src/acpica/source/compiler/aslopcodes.c b/src/acpica/source/compiler/aslopcodes.c
> index 53971e0..bd8ea0e 100644
> --- a/src/acpica/source/compiler/aslopcodes.c
> +++ b/src/acpica/source/compiler/aslopcodes.c
> @@ -695,10 +695,10 @@ OpcDoEisaId (
>              (UINT32) ((UINT8) (InString[1] - 0x40)) << 21 |
>              (UINT32) ((UINT8) (InString[2] - 0x40)) << 16 |
>  
> -            (UtHexCharToValue (InString[3])) << 12 |
> -            (UtHexCharToValue (InString[4])) << 8  |
> -            (UtHexCharToValue (InString[5])) << 4  |
> -             UtHexCharToValue (InString[6]);
> +            (AcpiUtAsciiCharToHex (InString[3])) << 12 |
> +            (AcpiUtAsciiCharToHex (InString[4])) << 8  |
> +            (AcpiUtAsciiCharToHex (InString[5])) << 4  |
> +             AcpiUtAsciiCharToHex (InString[6]);
>  
>          /* Swap to little-endian to get final ID (see function header) */
>  
> @@ -738,7 +738,7 @@ OpcDoUuId (
>      ACPI_PARSE_OBJECT       *Op)
>  {
>      char                    *InString;
> -    char                    *Buffer;
> +    UINT8                   *Buffer;
>      ACPI_STATUS             Status = AE_OK;
>      ACPI_PARSE_OBJECT       *NewOp;
>  
> @@ -753,7 +753,7 @@ OpcDoUuId (
>      }
>      else
>      {
> -        (void) AuConvertStringToUuid (InString, Buffer);
> +        AcpiUtConvertStringToUuid (InString, Buffer);
>      }
>  
>      /* Change Op to a Buffer */
> diff --git a/src/acpica/source/compiler/aslprepkg.c b/src/acpica/source/compiler/aslprepkg.c
> index 2de5559..8184a3d 100644
> --- a/src/acpica/source/compiler/aslprepkg.c
> +++ b/src/acpica/source/compiler/aslprepkg.c
> @@ -361,6 +361,41 @@ ApCheckPackage (
>              Package, 1, Count);
>          break;
>  
> +    case ACPI_PTYPE2_UUID_PAIR:
> +
> +        /* The package contains a variable list of UUID Buffer/Package pairs */
> +
> +        /* The length of the package must be even */
> +
> +        if (Count & 1)
> +        {
> +            sprintf (MsgBuffer, "%4.4s: Package length, %d, must be even.",
> +                Predefined->Info.Name, Count);
> +
> +            AslError (ASL_ERROR, ASL_MSG_RESERVED_PACKAGE_LENGTH,
> +                ParentOp->Asl.Child, MsgBuffer);
> +        }
> +
> +        /* Validate the alternating types */
> +
> +        for (i = 0; i < Count; ++i)
> +        {
> +            if (i & 1)
> +            {
> +                ApCheckObjectType (Predefined->Info.Name, Op,
> +                    Package->RetInfo.ObjectType2, i);
> +            }
> +            else
> +            {
> +                ApCheckObjectType (Predefined->Info.Name, Op,
> +                    Package->RetInfo.ObjectType1, i);
> +            }
> +
> +            Op = Op->Asl.Next;
> +        }
> +
> +        break;
> +
>      case ACPI_PTYPE2:
>      case ACPI_PTYPE2_FIXED:
>      case ACPI_PTYPE2_MIN:
> diff --git a/src/acpica/source/compiler/aslutils.c b/src/acpica/source/compiler/aslutils.c
> index f33c3bd..5a02470 100644
> --- a/src/acpica/source/compiler/aslutils.c
> +++ b/src/acpica/source/compiler/aslutils.c
> @@ -315,37 +315,6 @@ UtEndEvent (
>  
>  /*******************************************************************************
>   *
> - * FUNCTION:    UtHexCharToValue
> - *
> - * PARAMETERS:  HexChar             - Hex character in Ascii
> - *
> - * RETURN:      The binary value of the hex character
> - *
> - * DESCRIPTION: Perform ascii-to-hex translation
> - *
> - ******************************************************************************/
> -
> -UINT8
> -UtHexCharToValue (
> -    int                     HexChar)
> -{
> -
> -    if (HexChar <= 0x39)
> -    {
> -        return ((UINT8) (HexChar - 0x30));
> -    }
> -
> -    if (HexChar <= 0x46)
> -    {
> -        return ((UINT8) (HexChar - 0x37));
> -    }
> -
> -    return ((UINT8) (HexChar - 0x57));
> -}
> -
> -
> -/*******************************************************************************
> - *
>   * FUNCTION:    UtConvertByteToHex
>   *
>   * PARAMETERS:  RawByte             - Binary data
> @@ -368,8 +337,8 @@ UtConvertByteToHex (
>      Buffer[0] = '0';
>      Buffer[1] = 'x';
>  
> -    Buffer[2] = (UINT8) AslHexLookup[(RawByte >> 4) & 0xF];
> -    Buffer[3] = (UINT8) AslHexLookup[RawByte & 0xF];
> +    Buffer[2] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 4);
> +    Buffer[3] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 0);
>  }
>  
>  
> @@ -384,7 +353,7 @@ UtConvertByteToHex (
>   * RETURN:      Ascii hex byte is stored in Buffer.
>   *
>   * DESCRIPTION: Perform hex-to-ascii translation. The return data is prefixed
> - *              with "0x"
> + *              with '0', and a trailing 'h' is added.
>   *
>   ******************************************************************************/
>  
> @@ -395,8 +364,8 @@ UtConvertByteToAsmHex (
>  {
>  
>      Buffer[0] = '0';
> -    Buffer[1] = (UINT8) AslHexLookup[(RawByte >> 4) & 0xF];
> -    Buffer[2] = (UINT8) AslHexLookup[RawByte & 0xF];
> +    Buffer[1] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 4);
> +    Buffer[2] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 0);
>      Buffer[3] = 'h';
>  }
>  
> diff --git a/src/acpica/source/compiler/asluuid.c b/src/acpica/source/compiler/asluuid.c
> index ad76c2d..98a63a3 100644
> --- a/src/acpica/source/compiler/asluuid.c
> +++ b/src/acpica/source/compiler/asluuid.c
> @@ -113,42 +113,13 @@
>   *
>   *****************************************************************************/
>  
> -
>  #include "aslcompiler.h"
>  
>  #define _COMPONENT          ACPI_COMPILER
>          ACPI_MODULE_NAME    ("asluuid")
>  
>  
> -/*
> - * UUID support functions.
> - *
> - * This table is used to convert an input UUID ascii string to a 16 byte
> - * buffer and the reverse. The table maps a UUID buffer index 0-15 to
> - * the index within the 36-byte UUID string where the associated 2-byte
> - * hex value can be found.
> - *
> - * 36-byte UUID strings are of the form:
> - *     aabbccdd-eeff-gghh-iijj-kkllmmnnoopp
> - * Where aa-pp are one byte hex numbers, made up of two hex digits
> - *
> - * Note: This table is basically the inverse of the string-to-offset table
> - * found in the ACPI spec in the description of the ToUUID macro.
> - */
> -static UINT8    Gbl_MapToUuidOffset[16] =
> -{
> -    6,4,2,0,11,9,16,14,19,21,24,26,28,30,32,34
> -};
> -
> -#define UUID_BUFFER_LENGTH          16
> -#define UUID_STRING_LENGTH          36
> -
> -/* Positions for required hyphens (dashes) in UUID strings */
> -
> -#define UUID_HYPHEN1_OFFSET         8
> -#define UUID_HYPHEN2_OFFSET         13
> -#define UUID_HYPHEN3_OFFSET         18
> -#define UUID_HYPHEN4_OFFSET         23
> +extern UINT8    AcpiGbl_MapToUuidOffset[UUID_BUFFER_LENGTH];
>  
>  
>  /*******************************************************************************
> @@ -209,42 +180,6 @@ AuValidateUuid (
>  
>  /*******************************************************************************
>   *
> - * FUNCTION:    AuConvertStringToUuid
> - *
> - * PARAMETERS:  InString            - 36-byte formatted UUID string
> - *              UuidBuffer          - 16-byte UUID buffer
> - *
> - * RETURN:      Status
> - *
> - * DESCRIPTION: Convert 36-byte formatted UUID string to 16-byte UUID buffer
> - *
> - ******************************************************************************/
> -
> -ACPI_STATUS
> -AuConvertStringToUuid (
> -    char                    *InString,
> -    char                    *UuidBuffer)
> -{
> -    UINT32                  i;
> -
> -
> -    if (!InString || !UuidBuffer)
> -    {
> -        return (AE_BAD_PARAMETER);
> -    }
> -
> -    for (i = 0; i < UUID_BUFFER_LENGTH; i++)
> -    {
> -        UuidBuffer[i]  = (char) (UtHexCharToValue (InString[Gbl_MapToUuidOffset[i]]) << 4);
> -        UuidBuffer[i] |= (char)  UtHexCharToValue (InString[Gbl_MapToUuidOffset[i] + 1]);
> -    }
> -
> -    return (AE_OK);
> -}
> -
> -
> -/*******************************************************************************
> - *
>   * FUNCTION:    AuConvertUuidToString
>   *
>   * PARAMETERS:  UuidBuffer          - 16-byte UUID buffer
> @@ -272,8 +207,11 @@ AuConvertUuidToString (
>  
>      for (i = 0; i < UUID_BUFFER_LENGTH; i++)
>      {
> -        OutString[Gbl_MapToUuidOffset[i]] =     (UINT8) AslHexLookup[(UuidBuffer[i] >> 4) & 0xF];
> -        OutString[Gbl_MapToUuidOffset[i] + 1] = (UINT8) AslHexLookup[UuidBuffer[i] & 0xF];
> +        OutString[AcpiGbl_MapToUuidOffset[i]] =
> +            AcpiUtHexToAsciiChar (UuidBuffer[i], 4);
> +
> +        OutString[AcpiGbl_MapToUuidOffset[i] + 1] =
> +            AcpiUtHexToAsciiChar (UuidBuffer[i], 0);
>      }
>  
>      /* Insert required hyphens (dashes) */
> diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h
> index 313650a..1fb1f12 100644
> --- a/src/acpica/source/compiler/dtcompiler.h
> +++ b/src/acpica/source/compiler/dtcompiler.h
> @@ -492,6 +492,10 @@ DtCompileFpdt (
>      void                    **PFieldList);
>  
>  ACPI_STATUS
> +DtCompileGtdt (
> +    void                    **PFieldList);
> +
> +ACPI_STATUS
>  DtCompileHest (
>      void                    **PFieldList);
>  
> diff --git a/src/acpica/source/compiler/dtfield.c b/src/acpica/source/compiler/dtfield.c
> index 46d56f8..e03f891 100644
> --- a/src/acpica/source/compiler/dtfield.c
> +++ b/src/acpica/source/compiler/dtfield.c
> @@ -331,7 +331,7 @@ DtCompileUuid (
>      }
>      else
>      {
> -        Status = AuConvertStringToUuid (InString, (char *) Buffer);
> +        AcpiUtConvertStringToUuid (InString, Buffer);
>      }
>  
>      return (Status);
> diff --git a/src/acpica/source/compiler/dttable.c b/src/acpica/source/compiler/dttable.c
> index 5e310d6..db95850 100644
> --- a/src/acpica/source/compiler/dttable.c
> +++ b/src/acpica/source/compiler/dttable.c
> @@ -808,16 +808,21 @@ DtCompileDmar (
>              InfoTable = AcpiDmTableInfoDmar1;
>              break;
>  
> -        case ACPI_DMAR_TYPE_ATSR:
> +        case ACPI_DMAR_TYPE_ROOT_ATS:
>  
>              InfoTable = AcpiDmTableInfoDmar2;
>              break;
>  
> -        case ACPI_DMAR_HARDWARE_AFFINITY:
> +        case ACPI_DMAR_TYPE_HARDWARE_AFFINITY:
>  
>              InfoTable = AcpiDmTableInfoDmar3;
>              break;
>  
> +        case ACPI_DMAR_TYPE_NAMESPACE:
> +
> +            InfoTable = AcpiDmTableInfoDmar4;
> +            break;
> +
>          default:
>  
>              DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "DMAR");
> @@ -834,10 +839,20 @@ DtCompileDmar (
>  
>          ParentTable = DtPeekSubtable ();
>          DtInsertSubtable (ParentTable, Subtable);
> -        DtPushSubtable (Subtable);
>  
> -        /* Optional Device Scope subtables */
> +        /*
> +         * Optional Device Scope subtables
> +         */
> +        if ((DmarHeader->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
> +            (DmarHeader->Type == ACPI_DMAR_TYPE_NAMESPACE))
> +        {
> +            /* These types do not support device scopes */
>  
> +            DtPopSubtable ();
> +            continue;
> +        }
> +
> +        DtPushSubtable (Subtable);
>          DeviceScopeLength = DmarHeader->Length - Subtable->Length -
>              ParentTable->Length;
>          while (DeviceScopeLength)
> @@ -1010,6 +1025,125 @@ DtCompileFadt (
>      return (AE_OK);
>  }
>  
> +/******************************************************************************
> + *
> + * FUNCTION:    DtCompileGtdt
> + *
> + * PARAMETERS:  List                - Current field list pointer
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Compile GTDT.
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +DtCompileGtdt (
> +    void                    **List)
> +{
> +    ACPI_STATUS             Status;
> +    DT_SUBTABLE             *Subtable;
> +    DT_SUBTABLE             *ParentTable;
> +    DT_FIELD                **PFieldList = (DT_FIELD **) List;
> +    DT_FIELD                *SubtableStart;
> +    ACPI_SUBTABLE_HEADER    *GtdtHeader;
> +    ACPI_DMTABLE_INFO       *InfoTable;
> +    UINT32                  GtCount;
> +
> +
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdt,
> +                &Subtable, TRUE);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +
> +    ParentTable = DtPeekSubtable ();
> +    DtInsertSubtable (ParentTable, Subtable);
> +
> +    while (*PFieldList)
> +    {
> +        SubtableStart = *PFieldList;
> +        Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdtHdr,
> +                    &Subtable, TRUE);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        ParentTable = DtPeekSubtable ();
> +        DtInsertSubtable (ParentTable, Subtable);
> +        DtPushSubtable (Subtable);
> +
> +        GtdtHeader = ACPI_CAST_PTR (ACPI_SUBTABLE_HEADER, Subtable->Buffer);
> +
> +        switch (GtdtHeader->Type)
> +        {
> +        case ACPI_GTDT_TYPE_TIMER_BLOCK:
> +
> +            InfoTable = AcpiDmTableInfoGtdt0;
> +            break;
> +
> +        case ACPI_GTDT_TYPE_WATCHDOG:
> +
> +            InfoTable = AcpiDmTableInfoGtdt1;
> +            break;
> +
> +        default:
> +
> +            DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "GTDT");
> +            return (AE_ERROR);
> +        }
> +
> +        Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        ParentTable = DtPeekSubtable ();
> +        DtInsertSubtable (ParentTable, Subtable);
> +
> +        /*
> +         * Additional GT block subtable data
> +         */
> +
> +        switch (GtdtHeader->Type)
> +        {
> +        case ACPI_GTDT_TYPE_TIMER_BLOCK:
> +
> +            DtPushSubtable (Subtable);
> +            ParentTable = DtPeekSubtable ();
> +
> +            GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
> +                Subtable->Buffer - sizeof(ACPI_GTDT_HEADER)))->TimerCount;
> +            while (GtCount)
> +            {
> +                Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdt0a,
> +                            &Subtable, TRUE);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return (Status);
> +                }
> +
> +
> +                DtInsertSubtable (ParentTable, Subtable);
> +                GtCount--;
> +            }
> +            DtPopSubtable ();
> +            break;
> +
> +        default:
> +
> +            break;
> +        }
> +
> +        DtPopSubtable ();
> +    }
> +
> +    return (AE_OK);
> +}
> +
>  
>  /******************************************************************************
>   *
> @@ -1573,6 +1707,16 @@ DtCompileMadt (
>              InfoTable = AcpiDmTableInfoMadt12;
>              break;
>  
> +        case ACPI_MADT_TYPE_GENERIC_MSI_FRAME:
> +
> +            InfoTable = AcpiDmTableInfoMadt13;
> +            break;
> +
> +        case ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR:
> +
> +            InfoTable = AcpiDmTableInfoMadt14;
> +            break;
> +
>          default:
>  
>              DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "MADT");
> @@ -1864,6 +2008,11 @@ DtCompilePcct (
>              InfoTable = AcpiDmTableInfoPcct0;
>              break;
>  
> +        case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE:
> +
> +            InfoTable = AcpiDmTableInfoPcct1;
> +            break;
> +
>          default:
>  
>              DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "PCCT");
> diff --git a/src/acpica/source/compiler/dttemplate.h b/src/acpica/source/compiler/dttemplate.h
> index 681d3e5..eefae69 100644
> --- a/src/acpica/source/compiler/dttemplate.h
> +++ b/src/acpica/source/compiler/dttemplate.h
> @@ -467,7 +467,7 @@ const unsigned char TemplateFadt[] =
>      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000068    "........" */
>      0x00,0x00,0x00,0x00,0x01,0x08,0x00,0x01,  /* 00000070    "........" */
>      0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000078    "........" */
> -    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000080    "........" */
> +    0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,  /* 00000080    "........" */
>      0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000088    "........" */
>      0x00,0x00,0x00,0x00,0x01,0x20,0x00,0x02,  /* 00000090    "..... .." */
>      0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000098    "........" */
> @@ -506,16 +506,34 @@ const unsigned char TemplateFpdt[] =
>  
>  const unsigned char TemplateGtdt[] =
>  {
> -    0x47,0x54,0x44,0x54,0x50,0x00,0x00,0x00,  /* 00000000    "GTDTP..." */
> -    0x01,0xF1,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" */
> -    0x23,0x06,0x11,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "#.. ...." */
> -    0x00,0x00,0x00,0x00,0x01,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    "........" */
> +    0x47,0x54,0x44,0x54,0xe0,0x00,0x00,0x00,  /* 00000000    "GTDT...." */
> +    0x02,0xb0,0x4c,0x49,0x4e,0x41,0x52,0x4f,  /* 00000008    "..LINARO" */
> +    0x52,0x54,0x53,0x4d,0x56,0x45,0x56,0x38,  /* 00000010    "RTSMVEV8" */
> +    0x01,0x00,0x00,0x00,0x49,0x4e,0x54,0x4c,  /* 00000018    "....INTL" */
> +    0x24,0x04,0x14,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "$.. ...." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000028    "........" */
> +    0x1d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000030    "........" */
> +    0x1e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000038    "........" */
> +    0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000040    "........" */
> +    0x1a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000048    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000050    "........" */
> +    0x02,0x00,0x00,0x00,0x60,0x00,0x00,0x00,  /* 00000058    "....`..." */
> +    0x00,0x64,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000060    ".d......" */
> +    0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,  /* 00000068    "........" */
> +    0x14,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,0x00,0x00,0x00,  /* 00000088    "........" */
> +    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000090    "........" */
> +    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000098    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000a0    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000a8    "........" */
> +    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 000000b0    "........" */
> +    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 000000b8    "........" */
> +    0x00,0x00,0x00,0x00,0x01,0x1c,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,0x01,0x00,0x00,0x00,  /* 000000d8    "........" */
>  };
>  
>  const unsigned char TemplateHest[] =
> @@ -647,41 +665,48 @@ const unsigned char TemplateLpit[] =
>      0x00,0x00,0x00,0x00                       /* 000000B0    "...."     */
>  };
>  
> -/* MADT with ACPI 5.0 subtables */
> +/* MADT with ACPI 5.1 subtables */
>  
>  const unsigned char TemplateMadt[] =
>  {
> -    0x41,0x50,0x49,0x43,0xF6,0x00,0x00,0x00,  /* 00000000    "APIC...." */
> -    0x01,0xB0,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" */
> -    0x23,0x06,0x11,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "#.. ...." */
> +    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    "$.. ...." */
>      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,0x28,  /* 000000B0    ".......(" */
> -    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,0x0C,0x18,  /* 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             /* 000000F0    "......"   */
> +    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,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,  /* 00000120    "........" */
> +    0x00,0x00                                 /* 00000128    "..      " */
>  };
>  
>  const unsigned char TemplateMcfg[] =
> @@ -775,27 +800,27 @@ const unsigned char TemplateMtmr[] =
>  const unsigned char TemplatePcct[] =
>  {
>      0x50,0x43,0x43,0x54,0xAC,0x00,0x00,0x00,  /* 00000000    "PCCT...." */
> -    0x01,0x97,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
> -    0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45,  /* 00000010    "TEMPLATE" */
> +    0x01,0xCF,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" */
> -    0x15,0x11,0x13,0x20,0x01,0x00,0x00,0x00,  /* 00000020    "... ...." */
> +    0x27,0x06,0x14,0x20,0x01,0x00,0x00,0x00,  /* 00000020    "'.. ...." */
>      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000028    "........" */
>      0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000030    ".>......" */
> -    0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,  /* 00000038    "........" */
> -    0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,  /* 00000040    """""""""" */
> -    0x01,0x32,0x00,0x03,0x33,0x33,0x33,0x33,  /* 00000048    ".2..3333" */
> -    0x33,0x33,0x33,0x33,0x44,0x44,0x44,0x44,  /* 00000050    "3333DDDD" */
> -    0x44,0x44,0x44,0x44,0x55,0x55,0x55,0x55,  /* 00000058    "DDDDUUUU" */
> -    0x55,0x55,0x55,0x55,0x66,0x66,0x66,0x66,  /* 00000060    "UUUUffff" */
> -    0x77,0x77,0x77,0x77,0x88,0x88,0x00,0x3E,  /* 00000068    "wwww...>" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,  /* 00000070    "........" */
> -    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEE,0xEE,  /* 00000078    "........" */
> -    0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0x01,0x32,  /* 00000080    ".......2" */
> -    0x00,0x03,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,  /* 00000088    "........" */
> -    0xDD,0xDD,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,  /* 00000090    "........" */
> -    0xCC,0xCC,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,  /* 00000098    "........" */
> -    0xBB,0xBB,0xAA,0xAA,0xAA,0xAA,0x99,0x99,  /* 000000A0    "........" */
> -    0x99,0x99,0x88,0x88                       /* 000000A8    "...."     */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000038    "........" */
> +    0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000040    "........" */
> +    0x01,0x32,0x00,0x03,0x00,0x00,0x00,0x00,  /* 00000048    ".2......" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000050    "........" */
> +    0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,  /* 00000058    "........" */
> +    0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,  /* 00000060    "........" */
> +    0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x3E,  /* 00000068    ".......>" */
> +    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000070    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,  /* 00000078    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x32,  /* 00000080    ".......2" */
> +    0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000088    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000090    "........" */
> +    0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,  /* 00000098    "........" */
> +    0xFF,0xFF,0x01,0x00,0x00,0x00,0x01,0x00,  /* 000000A0    "........" */
> +    0x00,0x00,0x01,0x00                       /* 000000A8    "...."     */
>  };
>  
>  const unsigned char TemplatePmtt[] =
> diff --git a/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c
> index d3cedf1..51d50c7 100644
> --- a/src/acpica/source/compiler/dtutils.c
> +++ b/src/acpica/source/compiler/dtutils.c
> @@ -573,6 +573,7 @@ DtGetFieldLength (
>      case ACPI_DMT_SPACEID:
>      case ACPI_DMT_ACCWIDTH:
>      case ACPI_DMT_IVRS:
> +    case ACPI_DMT_GTDT:
>      case ACPI_DMT_MADT:
>      case ACPI_DMT_PCCT:
>      case ACPI_DMT_PMTT:
> @@ -584,6 +585,7 @@ DtGetFieldLength (
>      case ACPI_DMT_EINJINST:
>      case ACPI_DMT_ERSTACT:
>      case ACPI_DMT_ERSTINST:
> +    case ACPI_DMT_DMAR_SCOPE:
>  
>          ByteLength = 1;
>          break;
> diff --git a/src/acpica/source/components/disassembler/dmbuffer.c b/src/acpica/source/components/disassembler/dmbuffer.c
> index 70d28e3..a43497c 100644
> --- a/src/acpica/source/components/disassembler/dmbuffer.c
> +++ b/src/acpica/source/components/disassembler/dmbuffer.c
> @@ -113,9 +113,9 @@
>   *
>   *****************************************************************************/
>  
> -
>  #include "acpi.h"
>  #include "accommon.h"
> +#include "acutils.h"
>  #include "acdisasm.h"
>  #include "acparser.h"
>  #include "amlcode.h"
> @@ -130,6 +130,10 @@
>  /* Local prototypes */
>  
>  static void
> +AcpiDmUuid (
> +    ACPI_PARSE_OBJECT       *Op);
> +
> +static void
>  AcpiDmUnicode (
>      ACPI_PARSE_OBJECT       *Op);
>  
> @@ -143,6 +147,7 @@ AcpiDmPldBuffer (
>      UINT8                   *ByteData,
>      UINT32                  ByteCount);
>  
> +
>  #define ACPI_BUFFER_BYTES_PER_LINE      8
>  
>  
> @@ -288,6 +293,11 @@ AcpiDmByteList (
>          AcpiOsPrintf ("\n");
>          break;
>  
> +    case ACPI_DASM_UUID:
> +
> +        AcpiDmUuid (Op);
> +        break;
> +
>      case ACPI_DASM_UNICODE:
>  
>          AcpiDmUnicode (Op);
> @@ -313,6 +323,137 @@ AcpiDmByteList (
>  
>  /*******************************************************************************
>   *
> + * FUNCTION:    AcpiDmIsUuidBuffer
> + *
> + * PARAMETERS:  Op              - Buffer Object to be examined
> + *
> + * RETURN:      TRUE if buffer contains a UUID
> + *
> + * DESCRIPTION: Determine if a buffer Op contains a UUID
> + *
> + * To help determine whether the buffer is a UUID versus a raw data buffer,
> + * there a are a couple bytes we can look at:
> + *
> + *    xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
> + *
> + * The variant covered by the UUID specification is indicated by the two most
> + * significant bits of N being 1 0 (i.e., the hexadecimal N will always be
> + * 8, 9, A, or B).
> + *
> + * The variant covered by the UUID specification has five versions. For this
> + * variant, the four bits of M indicates the UUID version (i.e., the
> + * hexadecimal M will be either 1, 2, 3, 4, or 5).
> + *
> + ******************************************************************************/
> +
> +BOOLEAN
> +AcpiDmIsUuidBuffer (
> +    ACPI_PARSE_OBJECT       *Op)
> +{
> +    UINT8                   *ByteData;
> +    UINT32                  ByteCount;
> +    ACPI_PARSE_OBJECT       *SizeOp;
> +    ACPI_PARSE_OBJECT       *NextOp;
> +
> +
> +    /* Buffer size is the buffer argument */
> +
> +    SizeOp = Op->Common.Value.Arg;
> +
> +    /* Next, the initializer byte list to examine */
> +
> +    NextOp = SizeOp->Common.Next;
> +    if (!NextOp)
> +    {
> +        return (FALSE);
> +    }
> +
> +    /* Extract the byte list info */
> +
> +    ByteData = NextOp->Named.Data;
> +    ByteCount = (UINT32) NextOp->Common.Value.Integer;
> +
> +    /* Byte count must be exactly 16 */
> +
> +    if (ByteCount != UUID_BUFFER_LENGTH)
> +    {
> +        return (FALSE);
> +    }
> +
> +    /* Check for valid "M" and "N" values (see function header above) */
> +
> +    if (((ByteData[7] & 0xF0) == 0x00) || /* M={1,2,3,4,5} */
> +        ((ByteData[7] & 0xF0) > 0x50)  ||
> +        ((ByteData[8] & 0xF0) < 0x80)  || /* N={8,9,A,B} */
> +        ((ByteData[8] & 0xF0) > 0xB0))
> +    {
> +        return (FALSE);
> +    }
> +
> +    /* Ignore the Size argument in the disassembly of this buffer op */
> +
> +    SizeOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
> +    return (TRUE);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiDmUuid
> + *
> + * PARAMETERS:  Op              - Byte List op containing a UUID
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Dump a buffer containing a UUID as a standard ASCII string.
> + *
> + * Output Format:
> + * In its canonical form, the UUID is represented by a string containing 32
> + * lowercase hexadecimal digits, displayed in 5 groups separated by hyphens.
> + * The complete form is 8-4-4-4-12 for a total of 36 characters (32
> + * alphanumeric characters representing hex digits and 4 hyphens). In bytes,
> + * 4-2-2-2-6. Example:
> + *
> + *    ToUUID ("107ededd-d381-4fd7-8da9-08e9a6c79644")
> + *
> + ******************************************************************************/
> +
> +static void
> +AcpiDmUuid (
> +    ACPI_PARSE_OBJECT       *Op)
> +{
> +    UINT8                   *Data;
> +    const char              *Description;
> +
> +
> +    Data = ACPI_CAST_PTR (UINT8, Op->Named.Data);
> +
> +    /* Emit the 36-byte UUID string in the proper format/order */
> +
> +    AcpiOsPrintf (
> +        "\"%2.2x%2.2x%2.2x%2.2x-"
> +        "%2.2x%2.2x-"
> +        "%2.2x%2.2x-"
> +        "%2.2x%2.2x-"
> +        "%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x\")",
> +        Data[3], Data[2], Data[1], Data[0],
> +        Data[5], Data[4],
> +        Data[7], Data[6],
> +        Data[8], Data[9],
> +        Data[10], Data[11], Data[12], Data[13], Data[14], Data[15]);
> +
> +    /* Dump the UUID description string if available */
> +
> +    Description = AcpiAhMatchUuid (Data);
> +    if (Description)
> +    {
> +        AcpiOsPrintf (" /* %s */", Description);
> +    }
> +}
> +
> +
> +/*******************************************************************************
> + *
>   * FUNCTION:    AcpiDmIsUnicodeBuffer
>   *
>   * PARAMETERS:  Op              - Buffer Object to be examined
> diff --git a/src/acpica/source/components/disassembler/dmopcode.c b/src/acpica/source/components/disassembler/dmopcode.c
> index db30c00..d15e215 100644
> --- a/src/acpica/source/components/disassembler/dmopcode.c
> +++ b/src/acpica/source/components/disassembler/dmopcode.c
> @@ -899,7 +899,12 @@ AcpiDmDisassembleOneOp (
>              }
>          }
>  
> -        if (AcpiDmIsUnicodeBuffer (Op))
> +        if (AcpiDmIsUuidBuffer (Op))
> +        {
> +            Op->Common.DisasmOpcode = ACPI_DASM_UUID;
> +            AcpiOsPrintf ("ToUUID (");
> +        }
> +        else if (AcpiDmIsUnicodeBuffer (Op))
>          {
>              Op->Common.DisasmOpcode = ACPI_DASM_UNICODE;
>              AcpiOsPrintf ("Unicode (");
> diff --git a/src/acpica/source/components/disassembler/dmwalk.c b/src/acpica/source/components/disassembler/dmwalk.c
> index 8c877ae..1f63e08 100644
> --- a/src/acpica/source/components/disassembler/dmwalk.c
> +++ b/src/acpica/source/components/disassembler/dmwalk.c
> @@ -357,7 +357,8 @@ AcpiDmBlockType (
>  
>      case AML_BUFFER_OP:
>  
> -        if (Op->Common.DisasmOpcode == ACPI_DASM_UNICODE)
> +        if ((Op->Common.DisasmOpcode == ACPI_DASM_UNICODE) ||
> +            (Op->Common.DisasmOpcode == ACPI_DASM_UUID))
>          {
>              return (BLOCK_NONE);
>          }
> diff --git a/src/acpica/source/components/events/evgpe.c b/src/acpica/source/components/events/evgpe.c
> index bb955ac..ea1a3a6 100644
> --- a/src/acpica/source/components/events/evgpe.c
> +++ b/src/acpica/source/components/events/evgpe.c
> @@ -833,22 +833,6 @@ AcpiEvGpeDispatch (
>      }
>  
>      /*
> -     * If edge-triggered, clear the GPE status bit now. Note that
> -     * level-triggered events are cleared after the GPE is serviced.
> -     */
> -    if ((GpeEventInfo->Flags & ACPI_GPE_XRUPT_TYPE_MASK) ==
> -            ACPI_GPE_EDGE_TRIGGERED)
> -    {
> -        Status = AcpiHwClearGpe (GpeEventInfo);
> -        if (ACPI_FAILURE (Status))
> -        {
> -            ACPI_EXCEPTION ((AE_INFO, Status,
> -                "Unable to clear GPE %02X", GpeNumber));
> -            return_UINT32 (ACPI_INTERRUPT_NOT_HANDLED);
> -        }
> -    }
> -
> -    /*
>       * Always disable the GPE so that it does not keep firing before
>       * any asynchronous activity completes (either from the execution
>       * of a GPE method or an asynchronous GPE handler.)
> @@ -866,6 +850,24 @@ AcpiEvGpeDispatch (
>      }
>  
>      /*
> +     * If edge-triggered, clear the GPE status bit now. Note that
> +     * level-triggered events are cleared after the GPE is serviced.
> +     */
> +    if ((GpeEventInfo->Flags & ACPI_GPE_XRUPT_TYPE_MASK) ==
> +            ACPI_GPE_EDGE_TRIGGERED)
> +    {
> +        Status = AcpiHwClearGpe (GpeEventInfo);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            ACPI_EXCEPTION ((AE_INFO, Status,
> +                "Unable to clear GPE %02X", GpeNumber));
> +            (void) AcpiHwLowSetGpe (GpeEventInfo,
> +                    ACPI_GPE_CONDITIONAL_ENABLE);
> +            return_UINT32 (ACPI_INTERRUPT_NOT_HANDLED);
> +        }
> +    }
> +
> +    /*
>       * Dispatch the GPE to either an installed handler or the control
>       * method associated with this GPE (_Lxx or _Exx). If a handler
>       * exists, we invoke it and do not attempt to run the method.
> diff --git a/src/acpica/source/components/events/evxfgpe.c b/src/acpica/source/components/events/evxfgpe.c
> index e180bd3..b116322 100644
> --- a/src/acpica/source/components/events/evxfgpe.c
> +++ b/src/acpica/source/components/events/evxfgpe.c
> @@ -213,12 +213,23 @@ AcpiEnableGpe (
>  
>      Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock);
>  
> -    /* Ensure that we have a valid GPE number */
> -
> +    /*
> +     * Ensure that we have a valid GPE number and that there is some way
> +     * of handling the GPE (handler or a GPE method). In other words, we
> +     * won't allow a valid GPE to be enabled if there is no way to handle it.
> +     */
>      GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber);
>      if (GpeEventInfo)
>      {
> -        Status = AcpiEvAddGpeReference (GpeEventInfo);
> +        if ((GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK) !=
> +            ACPI_GPE_DISPATCH_NONE)
> +        {
> +            Status = AcpiEvAddGpeReference (GpeEventInfo);
> +        }
> +        else
> +        {
> +            Status = AE_NO_HANDLER;
> +        }
>      }
>  
>      AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags);
> @@ -348,6 +359,60 @@ ACPI_EXPORT_SYMBOL (AcpiSetGpe)
>  
>  /*******************************************************************************
>   *
> + * FUNCTION:    AcpiMarkGpeForWake
> + *
> + * PARAMETERS:  GpeDevice           - Parent GPE Device. NULL for GPE0/GPE1
> + *              GpeNumber           - GPE level within the GPE block
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Mark a GPE as having the ability to wake the system. Simply
> + *              sets the ACPI_GPE_CAN_WAKE flag.
> + *
> + * Some potential callers of AcpiSetupGpeForWake may know in advance that
> + * there won't be any notify handlers installed for device wake notifications
> + * from the given GPE (one example is a button GPE in Linux). For these cases,
> + * AcpiMarkGpeForWake should be used instead of AcpiSetupGpeForWake.
> + * This will set the ACPI_GPE_CAN_WAKE flag for the GPE without trying to
> + * setup implicit wake notification for it (since there's no handler method).
> + *
> + ******************************************************************************/
> +
> +ACPI_STATUS
> +AcpiMarkGpeForWake (
> +    ACPI_HANDLE             GpeDevice,
> +    UINT32                  GpeNumber)
> +{
> +    ACPI_GPE_EVENT_INFO     *GpeEventInfo;
> +    ACPI_STATUS             Status = AE_BAD_PARAMETER;
> +    ACPI_CPU_FLAGS          Flags;
> +
> +
> +    ACPI_FUNCTION_TRACE (AcpiMarkGpeForWake);
> +
> +
> +    Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock);
> +
> +    /* Ensure that we have a valid GPE number */
> +
> +    GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber);
> +    if (GpeEventInfo)
> +    {
> +        /* Mark the GPE as a possible wake event */
> +
> +        GpeEventInfo->Flags |= ACPI_GPE_CAN_WAKE;
> +        Status = AE_OK;
> +    }
> +
> +    AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags);
> +    return_ACPI_STATUS (Status);
> +}
> +
> +ACPI_EXPORT_SYMBOL (AcpiMarkGpeForWake)
> +
> +
> +/*******************************************************************************
> + *
>   * FUNCTION:    AcpiSetupGpeForWake
>   *
>   * PARAMETERS:  WakeDevice          - Device associated with the GPE (via _PRW)
> diff --git a/src/acpica/source/components/executer/exdebug.c b/src/acpica/source/components/executer/exdebug.c
> index e374e13..b7d47fd 100644
> --- a/src/acpica/source/components/executer/exdebug.c
> +++ b/src/acpica/source/components/executer/exdebug.c
> @@ -154,6 +154,7 @@ AcpiExDoDebugObject (
>      UINT32                  Index)
>  {
>      UINT32                  i;
> +    UINT32                  Timer;
>  
>  
>      ACPI_FUNCTION_TRACE_PTR (ExDoDebugObject, SourceDesc);
> @@ -168,12 +169,20 @@ AcpiExDoDebugObject (
>      }
>  
>      /*
> +     * We will emit the current timer value (in microseconds) with each
> +     * debug output. Only need the lower 26 bits. This allows for 67
> +     * million microseconds or 67 seconds before rollover.
> +     */
> +    Timer = (UINT32) (AcpiOsGetTimer () / 10); /* (100 nanoseconds to microseconds) */
> +    Timer &= 0x03FFFFFF;
> +
> +    /*
>       * Print line header as long as we are not in the middle of an
>       * object display
>       */
>      if (!((Level > 0) && Index == 0))
>      {
> -        AcpiOsPrintf ("[ACPI Debug] %*s", Level, " ");
> +        AcpiOsPrintf ("[ACPI Debug %.8u] %*s", Timer, Level, " ");
>      }
>  
>      /* Display the index for package output only */
> diff --git a/src/acpica/source/components/executer/exdump.c b/src/acpica/source/components/executer/exdump.c
> index 7f66714..68a0054 100644
> --- a/src/acpica/source/components/executer/exdump.c
> +++ b/src/acpica/source/components/executer/exdump.c
> @@ -580,7 +580,7 @@ AcpiExDumpObject (
>                  }
>              }
>  
> -            AcpiOsPrintf ("\n", Next);
> +            AcpiOsPrintf ("\n");
>              break;
>  
>          case ACPI_EXD_HDLR_LIST:
> @@ -614,7 +614,7 @@ AcpiExDumpObject (
>                  }
>              }
>  
> -            AcpiOsPrintf ("\n", Next);
> +            AcpiOsPrintf ("\n");
>              break;
>  
>          case ACPI_EXD_RGN_LIST:
> @@ -648,7 +648,7 @@ AcpiExDumpObject (
>                  }
>              }
>  
> -            AcpiOsPrintf ("\n", Next);
> +            AcpiOsPrintf ("\n");
>              break;
>  
>          case ACPI_EXD_NODE:
> diff --git a/src/acpica/source/components/executer/exfield.c b/src/acpica/source/components/executer/exfield.c
> index e8ddec8..55934de 100644
> --- a/src/acpica/source/components/executer/exfield.c
> +++ b/src/acpica/source/components/executer/exfield.c
> @@ -275,14 +275,13 @@ AcpiExReadDataFromField (
>              Length = AcpiExGetSerialAccessLength (AccessorType,
>                  ObjDesc->Field.AccessLength);
>  
> -	    /*
> -             * Add additional 2 bytes for modeled GenericSerialBus data buffer:
> -             * typedef struct {
> -             *     BYTEStatus; // Byte 0 of the data buffer
> -             *     BYTELength; // Byte 1 of the data buffer
> -             *     BYTE[x-1]Data; // Bytes 2-x of the arbitrary length data buffer,
> -             * }
> -	     */
> +            /*
> +             * Add additional 2 bytes for the GenericSerialBus data buffer:
> +             *
> +             *     Status;      (Byte 0 of the data buffer)
> +             *     Length;      (Byte 1 of the data buffer)
> +             *     Data[x-1];   (Bytes 2-x of the arbitrary length data buffer)
> +             */
>              Length += 2;
>              Function = ACPI_READ | (AccessorType << 16);
>          }
> @@ -469,14 +468,13 @@ AcpiExWriteDataToField (
>              Length = AcpiExGetSerialAccessLength (AccessorType,
>                  ObjDesc->Field.AccessLength);
>  
> -	    /*
> -             * Add additional 2 bytes for modeled GenericSerialBus data buffer:
> -             * typedef struct {
> -             *     BYTEStatus; // Byte 0 of the data buffer
> -             *     BYTELength; // Byte 1 of the data buffer
> -             *     BYTE[x-1]Data; // Bytes 2-x of the arbitrary length data buffer,
> -             * }
> -	     */
> +            /*
> +             * Add additional 2 bytes for the GenericSerialBus data buffer:
> +             *
> +             *     Status;      (Byte 0 of the data buffer)
> +             *     Length;      (Byte 1 of the data buffer)
> +             *     Data[x-1];   (Bytes 2-x of the arbitrary length data buffer)
> +             */
>              Length += 2;
>              Function = ACPI_WRITE | (AccessorType << 16);
>          }
> diff --git a/src/acpica/source/components/namespace/nsobject.c b/src/acpica/source/components/namespace/nsobject.c
> index 060157b..74470f0 100644
> --- a/src/acpica/source/components/namespace/nsobject.c
> +++ b/src/acpica/source/components/namespace/nsobject.c
> @@ -335,17 +335,16 @@ AcpiNsDetachObject (
>          {
>              Node->Object = Node->Object->Common.NextObject;
>          }
> -    }
>  
> -    /*
> -     * Detach the object from any data objects (which are still held by
> -     * the namespace node)
> -     */
> -
> -    if (ObjDesc->Common.NextObject &&
> -       ((ObjDesc->Common.NextObject)->Common.Type == ACPI_TYPE_LOCAL_DATA))
> -    {
> -       ObjDesc->Common.NextObject = NULL;
> +        /*
> +         * Detach the object from any data objects (which are still held by
> +         * the namespace node)
> +         */
> +        if (ObjDesc->Common.NextObject &&
> +           ((ObjDesc->Common.NextObject)->Common.Type == ACPI_TYPE_LOCAL_DATA))
> +        {
> +           ObjDesc->Common.NextObject = NULL;
> +        }
>      }
>  
>      /* Reset the node type to untyped */
> diff --git a/src/acpica/source/components/utilities/utdecode.c b/src/acpica/source/components/utilities/utdecode.c
> index 8566819..61826fe 100644
> --- a/src/acpica/source/components/utilities/utdecode.c
> +++ b/src/acpica/source/components/utilities/utdecode.c
> @@ -165,38 +165,6 @@ const UINT8                     AcpiGbl_NsProperties[ACPI_NUM_NS_TYPES] =
>  
>  /*******************************************************************************
>   *
> - * FUNCTION:    AcpiUtHexToAsciiChar
> - *
> - * PARAMETERS:  Integer             - Contains the hex digit
> - *              Position            - bit position of the digit within the
> - *                                    integer (multiple of 4)
> - *
> - * RETURN:      The converted Ascii character
> - *
> - * DESCRIPTION: Convert a hex digit to an Ascii character
> - *
> - ******************************************************************************/
> -
> -/* Hex to ASCII conversion table */
> -
> -static const char           AcpiGbl_HexToAscii[] =
> -{
> -    '0','1','2','3','4','5','6','7',
> -    '8','9','A','B','C','D','E','F'
> -};
> -
> -char
> -AcpiUtHexToAsciiChar (
> -    UINT64                  Integer,
> -    UINT32                  Position)
> -{
> -
> -    return (AcpiGbl_HexToAscii[(Integer >> Position) & 0xF]);
> -}
> -
> -
> -/*******************************************************************************
> - *
>   * FUNCTION:    AcpiUtGetRegionName
>   *
>   * PARAMETERS:  Space ID            - ID for the region
> @@ -613,7 +581,8 @@ static const char           *AcpiGbl_GenericNotify[ACPI_NOTIFY_MAX + 1] =
>      /* 09 */ "Device PLD Check",
>      /* 0A */ "Reserved",
>      /* 0B */ "System Locality Update",
> -    /* 0C */ "Shutdown Request"
> +    /* 0C */ "Shutdown Request",
> +    /* 0D */ "System Resource Affinity Update"
>  };
>  
>  static const char           *AcpiGbl_DeviceNotify[4] =
> @@ -647,7 +616,7 @@ AcpiUtGetNotifyName (
>      ACPI_OBJECT_TYPE        Type)
>  {
>  
> -    /* 00 - 0C are common to all object types */
> +    /* 00 - 0D are common to all object types */
>  
>      if (NotifyValue <= ACPI_NOTIFY_MAX)
>      {
> diff --git a/src/acpica/source/components/utilities/utfileio.c b/src/acpica/source/components/utilities/utfileio.c
> index 78807f2..9501e22 100644
> --- a/src/acpica/source/components/utilities/utfileio.c
> +++ b/src/acpica/source/components/utilities/utfileio.c
> @@ -304,8 +304,7 @@ AcpiUtReadTable (
>              Status = FlCheckForAscii (fp, NULL, FALSE);
>              if (ACPI_SUCCESS (Status))
>              {
> -                AcpiOsPrintf ("File appears to be ASCII only, must be binary\n",
> -                    TableHeader.Length, FileSize);
> +                AcpiOsPrintf ("File appears to be ASCII only, must be binary\n");
>              }
>  #endif
>              return (AE_BAD_HEADER);
> diff --git a/src/acpica/source/components/utilities/uthex.c b/src/acpica/source/components/utilities/uthex.c
> new file mode 100644
> index 0000000..ba2b259
> --- /dev/null
> +++ b/src/acpica/source/components/utilities/uthex.c
> @@ -0,0 +1,185 @@
> +/******************************************************************************
> + *
> + * Module Name: uthex -- Hex/ASCII support functions
> + *
> + *****************************************************************************/
> +
> +/******************************************************************************
> + *
> + * 1. Copyright Notice
> + *
> + * Some or all of this work - Copyright (c) 1999 - 2014, Intel Corp.
> + * All rights reserved.
> + *
> + * 2. License
> + *
> + * 2.1. This is your license from Intel Corp. under its intellectual property
> + * rights. You may have additional license terms from the party that provided
> + * you this software, covering your right to use that party's intellectual
> + * property rights.
> + *
> + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
> + * copy of the source code appearing in this file ("Covered Code") an
> + * irrevocable, perpetual, worldwide license under Intel's copyrights in the
> + * base code distributed originally by Intel ("Original Intel Code") to copy,
> + * make derivatives, distribute, use and display any portion of the Covered
> + * Code in any form, with the right to sublicense such rights; and
> + *
> + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
> + * license (with the right to sublicense), under only those claims of Intel
> + * patents that are infringed by the Original Intel Code, to make, use, sell,
> + * offer to sell, and import the Covered Code and derivative works thereof
> + * solely to the minimum extent necessary to exercise the above copyright
> + * license, and in no event shall the patent license extend to any additions
> + * to or modifications of the Original Intel Code. No other license or right
> + * is granted directly or by implication, estoppel or otherwise;
> + *
> + * The above copyright and patent license is granted only if the following
> + * conditions are met:
> + *
> + * 3. Conditions
> + *
> + * 3.1. Redistribution of Source with Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification with rights to further distribute source must include
> + * the above Copyright Notice, the above License, this list of Conditions,
> + * and the following Disclaimer and Export Compliance provision. In addition,
> + * Licensee must cause all Covered Code to which Licensee contributes to
> + * contain a file documenting the changes Licensee made to create that Covered
> + * Code and the date of any change. Licensee must include in that file the
> + * documentation of any changes made by any predecessor Licensee. Licensee
> + * must include a prominent statement that the modification is derived,
> + * directly or indirectly, from Original Intel Code.
> + *
> + * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification without rights to further distribute source must
> + * include the following Disclaimer and Export Compliance provision in the
> + * documentation and/or other materials provided with distribution. In
> + * addition, Licensee may not authorize further sublicense of source of any
> + * portion of the Covered Code, and must include terms to the effect that the
> + * license from Licensee to its licensee is limited to the intellectual
> + * property embodied in the software Licensee provides to its licensee, and
> + * not to intellectual property embodied in modifications its licensee may
> + * make.
> + *
> + * 3.3. Redistribution of Executable. Redistribution in executable form of any
> + * substantial portion of the Covered Code or modification must reproduce the
> + * above Copyright Notice, and the following Disclaimer and Export Compliance
> + * provision in the documentation and/or other materials provided with the
> + * distribution.
> + *
> + * 3.4. Intel retains all right, title, and interest in and to the Original
> + * Intel Code.
> + *
> + * 3.5. Neither the name Intel nor any other trademark owned or controlled by
> + * Intel shall be used in advertising or otherwise to promote the sale, use or
> + * other dealings in products derived from or relating to the Covered Code
> + * without prior written authorization from Intel.
> + *
> + * 4. Disclaimer and Export Compliance
> + *
> + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
> + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
> + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
> + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
> + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
> + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
> + * PARTICULAR PURPOSE.
> + *
> + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
> + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
> + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
> + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
> + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
> + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
> + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
> + * LIMITED REMEDY.
> + *
> + * 4.3. Licensee shall not export, either directly or indirectly, any of this
> + * software or system incorporating such software without first obtaining any
> + * required license or other approval from the U. S. Department of Commerce or
> + * any other agency or department of the United States Government. In the
> + * event Licensee exports any such software from the United States or
> + * re-exports any such software from a foreign destination, Licensee shall
> + * ensure that the distribution and export/re-export of the software is in
> + * compliance with all laws, regulations, orders, or other restrictions of the
> + * U.S. Export Administration Regulations. Licensee agrees that neither it nor
> + * any of its subsidiaries will export/re-export any technical data, process,
> + * software, or service, directly or indirectly, to any country for which the
> + * United States government or any agency thereof requires an export license,
> + * other governmental approval, or letter of assurance, without first obtaining
> + * such license, approval or letter.
> + *
> + *****************************************************************************/
> +
> +#define __UTHEX_C__
> +
> +#include "acpi.h"
> +#include "accommon.h"
> +
> +#define _COMPONENT          ACPI_COMPILER
> +        ACPI_MODULE_NAME    ("uthex")
> +
> +
> +/* Hex to ASCII conversion table */
> +
> +static char                 AcpiGbl_HexToAscii[] =
> +{
> +    '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
> +};
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiUtHexToAsciiChar
> + *
> + * PARAMETERS:  Integer             - Contains the hex digit
> + *              Position            - bit position of the digit within the
> + *                                    integer (multiple of 4)
> + *
> + * RETURN:      The converted Ascii character
> + *
> + * DESCRIPTION: Convert a hex digit to an Ascii character
> + *
> + ******************************************************************************/
> +
> +char
> +AcpiUtHexToAsciiChar (
> +    UINT64                  Integer,
> +    UINT32                  Position)
> +{
> +
> +    return (AcpiGbl_HexToAscii[(Integer >> Position) & 0xF]);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiUtHexCharToValue
> + *
> + * PARAMETERS:  AsciiChar             - Hex character in Ascii
> + *
> + * RETURN:      The binary value of the ascii/hex character
> + *
> + * DESCRIPTION: Perform ascii-to-hex translation
> + *
> + ******************************************************************************/
> +
> +UINT8
> +AcpiUtAsciiCharToHex (
> +    int                     HexChar)
> +{
> +
> +    if (HexChar <= 0x39)
> +    {
> +        return ((UINT8) (HexChar - 0x30));
> +    }
> +
> +    if (HexChar <= 0x46)
> +    {
> +        return ((UINT8) (HexChar - 0x37));
> +    }
> +
> +    return ((UINT8) (HexChar - 0x57));
> +}
> diff --git a/src/acpica/source/components/utilities/utprint.c b/src/acpica/source/components/utilities/utprint.c
> index d1bcccf..543bad8 100644
> --- a/src/acpica/source/components/utilities/utprint.c
> +++ b/src/acpica/source/components/utilities/utprint.c
> @@ -160,6 +160,12 @@ AcpiUtPutNumber (
>      BOOLEAN                 Upper);
>  
>  
> +/* Module globals */
> +
> +static const char           AcpiGbl_LowerHexDigits[] = "0123456789abcdef";
> +static const char           AcpiGbl_UpperHexDigits[] = "0123456789ABCDEF";
> +
> +
>  /*******************************************************************************
>   *
>   * FUNCTION:    AcpiUtBoundStringLength
> @@ -167,7 +173,7 @@ AcpiUtPutNumber (
>   * PARAMETERS:  String              - String with boundary
>   *              Count               - Boundary of the string
>   *
> - * RETURN:      Length of the string.
> + * RETURN:      Length of the string. Less than or equal to Count.
>   *
>   * DESCRIPTION: Calculate the length of a string with boundary.
>   *
> @@ -217,8 +223,8 @@ AcpiUtBoundStringOutput (
>      {
>          *String = c;
>      }
> -    ++String;
>  
> +    ++String;
>      return (String);
>  }
>  
> @@ -246,15 +252,13 @@ AcpiUtPutNumber (
>      UINT8                   Base,
>      BOOLEAN                 Upper)
>  {
> -    const char              LowerDigits[] = "0123456789abcdef";
> -    const char              UpperDigits[] = "0123456789ABCDEF";
>      const char              *Digits;
>      UINT64                  DigitIndex;
>      char                    *Pos;
>  
>  
>      Pos = String;
> -    Digits = Upper ? UpperDigits : LowerDigits;
> +    Digits = Upper ? AcpiGbl_UpperHexDigits : AcpiGbl_LowerHexDigits;
>  
>      if (Number == 0)
>      {
> @@ -268,8 +272,8 @@ AcpiUtPutNumber (
>              *(Pos++) = Digits[DigitIndex];
>          }
>      }
> -    /* *(Pos++) = '0'; */
>  
> +    /* *(Pos++) = '0'; */
>      return (Pos);
>  }
>  
> @@ -300,8 +304,8 @@ AcpiUtScanNumber (
>          Number *= 10;
>          Number += *(String++) - '0';
>      }
> -    *NumberPtr = Number;
>  
> +    *NumberPtr = Number;
>      return (String);
>  }
>  
> @@ -336,8 +340,8 @@ AcpiUtPrintNumber (
>      {
>          *(Pos2++) = *(--Pos1);
>      }
> -    *Pos2 = 0;
>  
> +    *Pos2 = 0;
>      return (String);
>  }
>  
> @@ -370,6 +374,7 @@ AcpiUtFormatNumber (
>      INT32                   Precision,
>      UINT8                   Type)
>  {
> +    char                    *Pos;
>      char                    Sign;
>      char                    Zero;
>      BOOLEAN                 NeedPrefix;
> @@ -378,12 +383,13 @@ AcpiUtFormatNumber (
>      char                    ReversedString[66];
>  
>  
> -    /* Perform sanity checks */
> +    /* Parameter validation */
>  
>      if (Base < 2 || Base > 16)
>      {
> -        return NULL;
> +        return (NULL);
>      }
> +
>      if (Type & ACPI_FORMAT_LEFT)
>      {
>          Type &= ~ACPI_FORMAT_ZERO;
> @@ -426,9 +432,8 @@ AcpiUtFormatNumber (
>  
>      /* Generate full string in reverse order */
>  
> -    i = ACPI_PTR_DIFF (
> -            AcpiUtPutNumber (ReversedString, Number, Base, Upper),
> -	    ReversedString);
> +    Pos = AcpiUtPutNumber (ReversedString, Number, Base, Upper);
> +    i = ACPI_PTR_DIFF (Pos, ReversedString);
>  
>      /* Printing 100 using %2d gives "100", not "00" */
>  
> @@ -436,6 +441,7 @@ AcpiUtFormatNumber (
>      {
>          Precision = i;
>      }
> +
>      Width -= Precision;
>  
>      /* Output the string */
> @@ -458,7 +464,7 @@ AcpiUtFormatNumber (
>          {
>              String = AcpiUtBoundStringOutput (String, End,
>                          Upper ? 'X' : 'x');
> -	}
> +        }
>      }
>      if (!(Type & ACPI_FORMAT_LEFT))
>      {
> @@ -467,6 +473,7 @@ AcpiUtFormatNumber (
>              String = AcpiUtBoundStringOutput (String, End, Zero);
>          }
>      }
> +
>      while (i <= --Precision)
>      {
>          String = AcpiUtBoundStringOutput (String, End, '0');
> @@ -494,7 +501,7 @@ AcpiUtFormatNumber (
>   *              Format              - Standard printf format
>   *              Args                - Argument list
>   *
> - * RETURN:      Size of successfully output bytes
> + * RETURN:      Number of bytes actually written.
>   *
>   * DESCRIPTION: Formatted output to a string using argument list pointer.
>   *
> @@ -525,7 +532,7 @@ AcpiUtVsnprintf (
>      Pos = String;
>      End = String + Size;
>  
> -    for (; *Format ; ++Format)
> +    for (; *Format; ++Format)
>      {
>          if (*Format != '%')
>          {
> @@ -566,6 +573,7 @@ AcpiUtVsnprintf (
>  
>          /* Process width */
>  
> +        Width = -1;
>          if (ACPI_IS_DIGIT (*Format))
>          {
>              Format = AcpiUtScanNumber (Format, &Number);
> @@ -574,7 +582,7 @@ AcpiUtVsnprintf (
>          else if (*Format == '*')
>          {
>              ++Format;
> -            Width = va_arg(Args, int);
> +            Width = va_arg (Args, int);
>              if (Width < 0)
>              {
>                  Width = -Width;
> @@ -584,6 +592,7 @@ AcpiUtVsnprintf (
>  
>          /* Process precision */
>  
> +        Precision = -1;
>          if (*Format == '.')
>          {
>              ++Format;
> @@ -595,7 +604,7 @@ AcpiUtVsnprintf (
>              else if (*Format == '*')
>              {
>                  ++Format;
> -                Precision = va_arg(Args, int);
> +                Precision = va_arg (Args, int);
>              }
>              if (Precision < 0)
>              {
> @@ -605,10 +614,12 @@ AcpiUtVsnprintf (
>  
>          /* Process qualifier */
>  
> +        Qualifier = -1;
>          if (*Format == 'h' || *Format == 'l' || *Format == 'L')
>          {
>              Qualifier = *Format;
>              ++Format;
> +
>              if (Qualifier == 'l' && *Format == 'l')
>              {
>                  Qualifier = 'L';
> @@ -632,8 +643,10 @@ AcpiUtVsnprintf (
>                      Pos = AcpiUtBoundStringOutput (Pos, End, ' ');
>                  }
>              }
> +
>              c = (char) va_arg (Args, int);
>              Pos = AcpiUtBoundStringOutput (Pos, End, c);
> +
>              while (--Width > 0)
>              {
>                  Pos = AcpiUtBoundStringOutput (Pos, End, ' ');
> @@ -696,10 +709,10 @@ AcpiUtVsnprintf (
>                  Width = 2 * sizeof (void *);
>                  Type |= ACPI_FORMAT_ZERO;
>              }
> +
>              p = va_arg (Args, void *);
>              Pos = AcpiUtFormatNumber (Pos, End,
> -                    ACPI_TO_INTEGER (p),
> -                    16, Width, Precision, Type);
> +                    ACPI_TO_INTEGER (p), 16, Width, Precision, Type);
>              continue;
>  
>          default:
> @@ -748,7 +761,8 @@ AcpiUtVsnprintf (
>                  Number = (signed int) Number;
>              }
>          }
> -        Pos = AcpiUtFormatNumber(Pos, End, Number, Base,
> +
> +        Pos = AcpiUtFormatNumber (Pos, End, Number, Base,
>                  Width, Precision, Type);
>      }
>  
> @@ -776,7 +790,7 @@ AcpiUtVsnprintf (
>   *              Size                - Boundary of the string
>   *              Format, ...         - Standard printf format
>   *
> - * RETURN:      Size of successfully output bytes
> + * RETURN:      Number of bytes actually written.
>   *
>   * DESCRIPTION: Formatted output to a string.
>   *
> @@ -810,7 +824,7 @@ AcpiUtSnprintf (
>   *              Format              - Standard printf format
>   *              Args                - Argument list
>   *
> - * RETURN:      Size of successfully output bytes
> + * RETURN:      Number of bytes actually written.
>   *
>   * DESCRIPTION: Formatted output to a file using argument list pointer.
>   *
> @@ -827,8 +841,9 @@ AcpiUtFileVprintf (
>  
>  
>      Flags = AcpiOsAcquireLock (AcpiGbl_PrintLock);
> -    Length = AcpiUtVsnprintf(AcpiGbl_PrintBuffer,
> +    Length = AcpiUtVsnprintf (AcpiGbl_PrintBuffer,
>                  sizeof (AcpiGbl_PrintBuffer), Format, Args);
> +
>      (void) AcpiOsWriteFile (File, AcpiGbl_PrintBuffer, Length, 1);
>      AcpiOsReleaseLock (AcpiGbl_PrintLock, Flags);
>  
> @@ -843,7 +858,7 @@ AcpiUtFileVprintf (
>   * PARAMETERS:  File                - File descriptor
>   *              Format, ...         - Standard printf format
>   *
> - * RETURN:      Size of successfully output bytes
> + * RETURN:      Number of bytes actually written.
>   *
>   * DESCRIPTION: Formatted output to a file.
>   *
> diff --git a/src/acpica/source/components/utilities/utuuid.c b/src/acpica/source/components/utilities/utuuid.c
> new file mode 100644
> index 0000000..f5c2e40
> --- /dev/null
> +++ b/src/acpica/source/components/utilities/utuuid.c
> @@ -0,0 +1,175 @@
> +/******************************************************************************
> + *
> + * Module Name: utuuid -- UUID support functions
> + *
> + *****************************************************************************/
> +
> +/******************************************************************************
> + *
> + * 1. Copyright Notice
> + *
> + * Some or all of this work - Copyright (c) 1999 - 2014, Intel Corp.
> + * All rights reserved.
> + *
> + * 2. License
> + *
> + * 2.1. This is your license from Intel Corp. under its intellectual property
> + * rights. You may have additional license terms from the party that provided
> + * you this software, covering your right to use that party's intellectual
> + * property rights.
> + *
> + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
> + * copy of the source code appearing in this file ("Covered Code") an
> + * irrevocable, perpetual, worldwide license under Intel's copyrights in the
> + * base code distributed originally by Intel ("Original Intel Code") to copy,
> + * make derivatives, distribute, use and display any portion of the Covered
> + * Code in any form, with the right to sublicense such rights; and
> + *
> + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
> + * license (with the right to sublicense), under only those claims of Intel
> + * patents that are infringed by the Original Intel Code, to make, use, sell,
> + * offer to sell, and import the Covered Code and derivative works thereof
> + * solely to the minimum extent necessary to exercise the above copyright
> + * license, and in no event shall the patent license extend to any additions
> + * to or modifications of the Original Intel Code. No other license or right
> + * is granted directly or by implication, estoppel or otherwise;
> + *
> + * The above copyright and patent license is granted only if the following
> + * conditions are met:
> + *
> + * 3. Conditions
> + *
> + * 3.1. Redistribution of Source with Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification with rights to further distribute source must include
> + * the above Copyright Notice, the above License, this list of Conditions,
> + * and the following Disclaimer and Export Compliance provision. In addition,
> + * Licensee must cause all Covered Code to which Licensee contributes to
> + * contain a file documenting the changes Licensee made to create that Covered
> + * Code and the date of any change. Licensee must include in that file the
> + * documentation of any changes made by any predecessor Licensee. Licensee
> + * must include a prominent statement that the modification is derived,
> + * directly or indirectly, from Original Intel Code.
> + *
> + * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification without rights to further distribute source must
> + * include the following Disclaimer and Export Compliance provision in the
> + * documentation and/or other materials provided with distribution. In
> + * addition, Licensee may not authorize further sublicense of source of any
> + * portion of the Covered Code, and must include terms to the effect that the
> + * license from Licensee to its licensee is limited to the intellectual
> + * property embodied in the software Licensee provides to its licensee, and
> + * not to intellectual property embodied in modifications its licensee may
> + * make.
> + *
> + * 3.3. Redistribution of Executable. Redistribution in executable form of any
> + * substantial portion of the Covered Code or modification must reproduce the
> + * above Copyright Notice, and the following Disclaimer and Export Compliance
> + * provision in the documentation and/or other materials provided with the
> + * distribution.
> + *
> + * 3.4. Intel retains all right, title, and interest in and to the Original
> + * Intel Code.
> + *
> + * 3.5. Neither the name Intel nor any other trademark owned or controlled by
> + * Intel shall be used in advertising or otherwise to promote the sale, use or
> + * other dealings in products derived from or relating to the Covered Code
> + * without prior written authorization from Intel.
> + *
> + * 4. Disclaimer and Export Compliance
> + *
> + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
> + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
> + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
> + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
> + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
> + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
> + * PARTICULAR PURPOSE.
> + *
> + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
> + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
> + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
> + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
> + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
> + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
> + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
> + * LIMITED REMEDY.
> + *
> + * 4.3. Licensee shall not export, either directly or indirectly, any of this
> + * software or system incorporating such software without first obtaining any
> + * required license or other approval from the U. S. Department of Commerce or
> + * any other agency or department of the United States Government. In the
> + * event Licensee exports any such software from the United States or
> + * re-exports any such software from a foreign destination, Licensee shall
> + * ensure that the distribution and export/re-export of the software is in
> + * compliance with all laws, regulations, orders, or other restrictions of the
> + * U.S. Export Administration Regulations. Licensee agrees that neither it nor
> + * any of its subsidiaries will export/re-export any technical data, process,
> + * software, or service, directly or indirectly, to any country for which the
> + * United States government or any agency thereof requires an export license,
> + * other governmental approval, or letter of assurance, without first obtaining
> + * such license, approval or letter.
> + *
> + *****************************************************************************/
> +
> +#define __UTUUID_C__
> +
> +#include "acpi.h"
> +#include "accommon.h"
> +
> +#define _COMPONENT          ACPI_COMPILER
> +        ACPI_MODULE_NAME    ("utuuid")
> +
> +
> +/*
> + * UUID support functions.
> + *
> + * This table is used to convert an input UUID ascii string to a 16 byte
> + * buffer and the reverse. The table maps a UUID buffer index 0-15 to
> + * the index within the 36-byte UUID string where the associated 2-byte
> + * hex value can be found.
> + *
> + * 36-byte UUID strings are of the form:
> + *     aabbccdd-eeff-gghh-iijj-kkllmmnnoopp
> + * Where aa-pp are one byte hex numbers, made up of two hex digits
> + *
> + * Note: This table is basically the inverse of the string-to-offset table
> + * found in the ACPI spec in the description of the ToUUID macro.
> + */
> +const UINT8    AcpiGbl_MapToUuidOffset[UUID_BUFFER_LENGTH] =
> +{
> +    6,4,2,0,11,9,16,14,19,21,24,26,28,30,32,34
> +};
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiUtConvertStringToUuid
> + *
> + * PARAMETERS:  InString            - 36-byte formatted UUID string
> + *              UuidBuffer          - Where the 16-byte UUID buffer is returned
> + *
> + * RETURN:      None. Output data is returned in the UuidBuffer
> + *
> + * DESCRIPTION: Convert a 36-byte formatted UUID string to 16-byte UUID buffer
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiUtConvertStringToUuid (
> +    char                    *InString,
> +    UINT8                   *UuidBuffer)
> +{
> +    UINT32                  i;
> +
> +
> +    for (i = 0; i < UUID_BUFFER_LENGTH; i++)
> +    {
> +        UuidBuffer[i] =
> +            (AcpiUtAsciiCharToHex (InString[AcpiGbl_MapToUuidOffset[i]]) << 4);
> +
> +        UuidBuffer[i] |=
> +            AcpiUtAsciiCharToHex (InString[AcpiGbl_MapToUuidOffset[i] + 1]);
> +    }
> +}
> diff --git a/src/acpica/source/include/acconfig.h b/src/acpica/source/include/acconfig.h
> index 6b34484..3c7a3bd 100644
> --- a/src/acpica/source/include/acconfig.h
> +++ b/src/acpica/source/include/acconfig.h
> @@ -295,6 +295,25 @@
>  
>  /******************************************************************************
>   *
> + * Miscellaneous constants
> + *
> + *****************************************************************************/
> +
> +/* UUID constants */
> +
> +#define UUID_BUFFER_LENGTH          16 /* Length of UUID in memory */
> +#define UUID_STRING_LENGTH          36 /* Total length of a UUID string */
> +
> +/* Positions for required hyphens (dashes) in UUID strings */
> +
> +#define UUID_HYPHEN1_OFFSET         8
> +#define UUID_HYPHEN2_OFFSET         13
> +#define UUID_HYPHEN3_OFFSET         18
> +#define UUID_HYPHEN4_OFFSET         23
> +
> +
> +/******************************************************************************
> + *
>   * ACPI AML Debugger
>   *
>   *****************************************************************************/
> diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h
> index 049a95c..21e26e6 100644
> --- a/src/acpica/source/include/acdisasm.h
> +++ b/src/acpica/source/include/acdisasm.h
> @@ -209,11 +209,13 @@ typedef enum
>  
>      ACPI_DMT_ASF,
>      ACPI_DMT_DMAR,
> +    ACPI_DMT_DMAR_SCOPE,
>      ACPI_DMT_EINJACT,
>      ACPI_DMT_EINJINST,
>      ACPI_DMT_ERSTACT,
>      ACPI_DMT_ERSTINST,
>      ACPI_DMT_FADTPM,
> +    ACPI_DMT_GTDT,
>      ACPI_DMT_HEST,
>      ACPI_DMT_HESTNTFY,
>      ACPI_DMT_HESTNTYP,
> @@ -327,6 +329,7 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDmar0[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDmar1[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDmar2[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDmar3[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDmar4[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDrtm[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoEcdt[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoEinj[];
> @@ -344,6 +347,10 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoFpdt0[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoFpdt1[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoGas[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoGtdt[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoGtdtHdr[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoGtdt0[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoGtdt0a[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoGtdt1[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoHeader[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoHest[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoHest0[];
> @@ -381,6 +388,8 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt9[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt10[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt11[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt12[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt13[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt14[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadtHdr[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMcfg[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMcfg0[];
> @@ -404,6 +413,7 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPmttHdr[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPcct[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPcctHdr[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPcct0[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPcct1[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoRsdp1[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoRsdp2[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoS3pt[];
> @@ -517,6 +527,10 @@ AcpiDmDumpFpdt (
>      ACPI_TABLE_HEADER       *Table);
>  
>  void
> +AcpiDmDumpGtdt (
> +    ACPI_TABLE_HEADER       *Table);
> +
> +void
>  AcpiDmDumpHest (
>      ACPI_TABLE_HEADER       *Table);
>  
> @@ -727,6 +741,10 @@ AcpiDmDecompressEisaId (
>      UINT32                  EncodedId);
>  
>  BOOLEAN
> +AcpiDmIsUuidBuffer (
> +    ACPI_PARSE_OBJECT       *Op);
> +
> +BOOLEAN
>  AcpiDmIsUnicodeBuffer (
>      ACPI_PARSE_OBJECT       *Op);
>  
> diff --git a/src/acpica/source/include/aclocal.h b/src/acpica/source/include/aclocal.h
> index 12925a8..1ea772e 100644
> --- a/src/acpica/source/include/aclocal.h
> +++ b/src/acpica/source/include/aclocal.h
> @@ -950,12 +950,13 @@ typedef union acpi_parse_value
>  #define ACPI_DASM_STRING                0x02        /* Buffer is a ASCII string */
>  #define ACPI_DASM_UNICODE               0x03        /* Buffer is a Unicode string */
>  #define ACPI_DASM_PLD_METHOD            0x04        /* Buffer is a _PLD method bit-packed buffer */
> -#define ACPI_DASM_EISAID                0x05        /* Integer is an EISAID */
> -#define ACPI_DASM_MATCHOP               0x06        /* Parent opcode is a Match() operator */
> -#define ACPI_DASM_LNOT_PREFIX           0x07        /* Start of a LNotEqual (etc.) pair of opcodes */
> -#define ACPI_DASM_LNOT_SUFFIX           0x08        /* End  of a LNotEqual (etc.) pair of opcodes */
> -#define ACPI_DASM_HID_STRING            0x09        /* String is a _HID or _CID */
> -#define ACPI_DASM_IGNORE                0x0A        /* Not used at this time */
> +#define ACPI_DASM_UUID                  0x05        /* Buffer is a UUID/GUID */
> +#define ACPI_DASM_EISAID                0x06        /* Integer is an EISAID */
> +#define ACPI_DASM_MATCHOP               0x07        /* Parent opcode is a Match() operator */
> +#define ACPI_DASM_LNOT_PREFIX           0x08        /* Start of a LNotEqual (etc.) pair of opcodes */
> +#define ACPI_DASM_LNOT_SUFFIX           0x09        /* End  of a LNotEqual (etc.) pair of opcodes */
> +#define ACPI_DASM_HID_STRING            0x0A        /* String is a _HID or _CID */
> +#define ACPI_DASM_IGNORE                0x0B        /* Not used at this time */
>  
>  /*
>   * Generic operation (for example:  If, While, Store)
> @@ -1430,4 +1431,11 @@ typedef struct ah_device_id
>  
>  } AH_DEVICE_ID;
>  
> +typedef struct ah_uuid
> +{
> +    char            *Description;
> +    char            *String;
> +
> +} AH_UUID;
> +
>  #endif /* __ACLOCAL_H__ */
> diff --git a/src/acpica/source/include/acnames.h b/src/acpica/source/include/acnames.h
> index bde34f5..6ccf47f 100644
> --- a/src/acpica/source/include/acnames.h
> +++ b/src/acpica/source/include/acnames.h
> @@ -127,6 +127,7 @@
>  #define METHOD_NAME__HID        "_HID"
>  #define METHOD_NAME__INI        "_INI"
>  #define METHOD_NAME__PLD        "_PLD"
> +#define METHOD_NAME__DSD        "_DSD"
>  #define METHOD_NAME__PRS        "_PRS"
>  #define METHOD_NAME__PRT        "_PRT"
>  #define METHOD_NAME__PRW        "_PRW"
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index ef85424..cafc37b 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                 0x20140627
> +#define ACPI_CA_VERSION                 0x20140724
>  
>  #include "acconfig.h"
>  #include "actypes.h"
> @@ -923,6 +923,12 @@ AcpiFinishGpe (
>  
>  ACPI_HW_DEPENDENT_RETURN_STATUS (
>  ACPI_STATUS
> +AcpiMarkGpeForWake (
> +    ACPI_HANDLE             GpeDevice,
> +    UINT32                  GpeNumber))
> +
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
> +ACPI_STATUS
>  AcpiSetupGpeForWake (
>      ACPI_HANDLE             ParentDevice,
>      ACPI_HANDLE             GpeDevice,
> diff --git a/src/acpica/source/include/acpredef.h b/src/acpica/source/include/acpredef.h
> index 1d42f1d..1c1776a 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_UUID_PAIR: Each subpackage is preceded by a UUID Buffer. The UUID
> + *      defines the format of the package. Zero-length parent package is
> + *      allowed.
> + *      (Used for _DSD)
> + *
>   *****************************************************************************/
>  
>  enum AcpiReturnPackageTypes
> @@ -191,7 +196,8 @@ enum AcpiReturnPackageTypes
>      ACPI_PTYPE2_FIXED       = 7,
>      ACPI_PTYPE2_MIN         = 8,
>      ACPI_PTYPE2_REV_FIXED   = 9,
> -    ACPI_PTYPE2_FIX_VAR     = 10
> +    ACPI_PTYPE2_FIX_VAR     = 10,
> +    ACPI_PTYPE2_UUID_PAIR   = 11
>  };
>  
>  
> @@ -438,6 +444,9 @@ const ACPI_PREDEFINED_INFO          AcpiGbl_PredefinedMethods[] =
>      {{"_CBA",   METHOD_0ARGS,
>                  METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, /* See PCI firmware spec 3.0 */
>  
> +    {{"_CCA",   METHOD_0ARGS,
> +                METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, /* ACPI 5.1 */
> +
>      {{"_CDM",   METHOD_0ARGS,
>                  METHOD_RETURNS (ACPI_RTYPE_INTEGER)}},
>  
> @@ -506,6 +515,10 @@ const ACPI_PREDEFINED_INFO          AcpiGbl_PredefinedMethods[] =
>      {{"_DOS",   METHOD_1ARGS (ACPI_TYPE_INTEGER),
>                  METHOD_NO_RETURN_VALUE}},
>  
> +    {{"_DSD",   METHOD_0ARGS,
> +                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),
> +
>      {{"_DSM",   METHOD_4ARGS (ACPI_TYPE_BUFFER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_PACKAGE),
>                  METHOD_RETURNS (ACPI_RTYPE_ALL)}}, /* Must return a value, but it can be of any type */
>  
> diff --git a/src/acpica/source/include/actbl.h b/src/acpica/source/include/actbl.h
> index 9a6625c..ea9fc58 100644
> --- a/src/acpica/source/include/actbl.h
> +++ b/src/acpica/source/include/actbl.h
> @@ -368,7 +368,8 @@ typedef struct acpi_table_fadt
>      UINT32                  Flags;              /* Miscellaneous flag bits (see below for individual flags) */
>      ACPI_GENERIC_ADDRESS    ResetRegister;      /* 64-bit address of the Reset register */
>      UINT8                   ResetValue;         /* Value to write to the ResetRegister port to reset the system */
> -    UINT8                   Reserved4[3];       /* Reserved, must be zero */
> +    UINT16                  ArmBootFlags;       /* ARM-Specific Boot Flags (see below for individual flags) (ACPI 5.1) */
> +    UINT8                   MinorRevision;      /* FADT Minor Revision (ACPI 5.1) */
>      UINT64                  XFacs;              /* 64-bit physical address of FACS */
>      UINT64                  XDsdt;              /* 64-bit physical address of DSDT */
>      ACPI_GENERIC_ADDRESS    XPm1aEventBlock;    /* 64-bit Extended Power Mgt 1a Event Reg Blk address */
> @@ -385,7 +386,7 @@ typedef struct acpi_table_fadt
>  } ACPI_TABLE_FADT;
>  
>  
> -/* Masks for FADT Boot Architecture Flags (BootFlags) [Vx]=Introduced in this FADT revision */
> +/* Masks for FADT IA-PC Boot Architecture Flags (boot_flags) [Vx]=Introduced in this FADT revision */
>  
>  #define ACPI_FADT_LEGACY_DEVICES    (1)         /* 00: [V2] System has LPC or ISA bus devices */
>  #define ACPI_FADT_8042              (1<<1)      /* 01: [V3] System has an 8042 controller on port 60/64 */
> @@ -394,6 +395,11 @@ typedef struct acpi_table_fadt
>  #define ACPI_FADT_NO_ASPM           (1<<4)      /* 04: [V4] PCIe ASPM control must not be enabled */
>  #define ACPI_FADT_NO_CMOS_RTC       (1<<5)      /* 05: [V5] No CMOS real-time clock present */
>  
> +/* Masks for FADT ARM Boot Architecture Flags (arm_boot_flags) ACPI 5.1 */
> +
> +#define ACPI_FADT_PSCI_COMPLIANT    (1)         /* 00: [V5+] PSCI 0.2+ is implemented */
> +#define ACPI_FADT_PSCI_USE_HVC      (1<<1)      /* 01: [V5+] HVC must be used instead of SMC as the PSCI conduit */
> +
>  /* Masks for FADT flags */
>  
>  #define ACPI_FADT_WBINVD            (1)         /* 00: [V1] The WBINVD instruction works properly */
> @@ -507,7 +513,7 @@ typedef struct acpi_table_desc
>   *     FADT V5  size: 0x10C
>   */
>  #define ACPI_FADT_V1_SIZE       (UINT32) (ACPI_FADT_OFFSET (Flags) + 4)
> -#define ACPI_FADT_V2_SIZE       (UINT32) (ACPI_FADT_OFFSET (Reserved4[0]) + 3)
> +#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))
>  
> diff --git a/src/acpica/source/include/actbl1.h b/src/acpica/source/include/actbl1.h
> index e0905ee..d28faa3 100644
> --- a/src/acpica/source/include/actbl1.h
> +++ b/src/acpica/source/include/actbl1.h
> @@ -834,20 +834,22 @@ typedef struct acpi_table_madt
>  
>  enum AcpiMadtType
>  {
> -    ACPI_MADT_TYPE_LOCAL_APIC           = 0,
> -    ACPI_MADT_TYPE_IO_APIC              = 1,
> -    ACPI_MADT_TYPE_INTERRUPT_OVERRIDE   = 2,
> -    ACPI_MADT_TYPE_NMI_SOURCE           = 3,
> -    ACPI_MADT_TYPE_LOCAL_APIC_NMI       = 4,
> -    ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE  = 5,
> -    ACPI_MADT_TYPE_IO_SAPIC             = 6,
> -    ACPI_MADT_TYPE_LOCAL_SAPIC          = 7,
> -    ACPI_MADT_TYPE_INTERRUPT_SOURCE     = 8,
> -    ACPI_MADT_TYPE_LOCAL_X2APIC         = 9,
> -    ACPI_MADT_TYPE_LOCAL_X2APIC_NMI     = 10,
> -    ACPI_MADT_TYPE_GENERIC_INTERRUPT    = 11,
> -    ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR  = 12,
> -    ACPI_MADT_TYPE_RESERVED             = 13    /* 13 and greater are reserved */
> +    ACPI_MADT_TYPE_LOCAL_APIC               = 0,
> +    ACPI_MADT_TYPE_IO_APIC                  = 1,
> +    ACPI_MADT_TYPE_INTERRUPT_OVERRIDE       = 2,
> +    ACPI_MADT_TYPE_NMI_SOURCE               = 3,
> +    ACPI_MADT_TYPE_LOCAL_APIC_NMI           = 4,
> +    ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE      = 5,
> +    ACPI_MADT_TYPE_IO_SAPIC                 = 6,
> +    ACPI_MADT_TYPE_LOCAL_SAPIC              = 7,
> +    ACPI_MADT_TYPE_INTERRUPT_SOURCE         = 8,
> +    ACPI_MADT_TYPE_LOCAL_X2APIC             = 9,
> +    ACPI_MADT_TYPE_LOCAL_X2APIC_NMI         = 10,
> +    ACPI_MADT_TYPE_GENERIC_INTERRUPT        = 11,
> +    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 */
>  };
>  
>  
> @@ -1008,16 +1010,27 @@ typedef struct acpi_madt_generic_interrupt
>  {
>      ACPI_SUBTABLE_HEADER    Header;
>      UINT16                  Reserved;           /* Reserved - must be zero */
> -    UINT32                  GicId;
> +    UINT32                  CpuInterfaceNumber;
>      UINT32                  Uid;
>      UINT32                  Flags;
>      UINT32                  ParkingVersion;
>      UINT32                  PerformanceInterrupt;
>      UINT64                  ParkedAddress;
>      UINT64                  BaseAddress;
> +    UINT64                  GicvBaseAddress;
> +    UINT64                  GichBaseAddress;
> +    UINT32                  VgicInterrupt;
> +    UINT64                  GicrBaseAddress;
> +    UINT64                  ArmMpidr;
>  
>  } ACPI_MADT_GENERIC_INTERRUPT;
>  
> +/* Masks for Flags field above */
> +
> +/* ACPI_MADT_ENABLED                    (1)      Processor is usable if set */
> +#define ACPI_MADT_PERFORMANCE_IRQ_MODE  (1<<1)  /* 01: Performance Interrupt Mode */
> +#define ACPI_MADT_VGIC_IRQ_MODE         (1<<2)  /* 02: VGIC Maintenance Interrupt mode */
> +
>  
>  /* 12: Generic Distributor (ACPI 5.0) */
>  
> @@ -1033,11 +1046,42 @@ typedef struct acpi_madt_generic_distributor
>  } ACPI_MADT_GENERIC_DISTRIBUTOR;
>  
>  
> +/* 13: Generic MSI Frame (ACPI 5.1) */
> +
> +typedef struct acpi_madt_generic_msi_frame
> +{
> +    ACPI_SUBTABLE_HEADER    Header;
> +    UINT16                  Reserved;           /* Reserved - must be zero */
> +    UINT32                  MsiFrameId;
> +    UINT64                  BaseAddress;
> +    UINT32                  Flags;
> +    UINT16                  SpiCount;
> +    UINT16                  SpiBase;
> +
> +} ACPI_MADT_GENERIC_MSI_FRAME;
> +
> +/* Masks for Flags field above */
> +
> +#define ACPI_MADT_OVERRIDE_SPI_VALUES   (1)
> +
> +
> +/* 14: Generic Redistributor (ACPI 5.1) */
> +
> +typedef struct acpi_madt_generic_redistributor
> +{
> +    ACPI_SUBTABLE_HEADER    Header;
> +    UINT16                  Reserved;           /* reserved - must be zero */
> +    UINT64                  BaseAddress;
> +    UINT32                  Length;
> +
> +} ACPI_MADT_GENERIC_REDISTRIBUTOR;
> +
> +
>  /*
>   * Common flags fields for MADT subtables
>   */
>  
> -/* MADT Local APIC flags (LapicFlags) and GIC flags */
> +/* MADT Local APIC flags */
>  
>  #define ACPI_MADT_ENABLED           (1)         /* 00: Processor is usable if set */
>  
> diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h
> index 7a64788..7d62862 100644
> --- a/src/acpica/source/include/actbl2.h
> +++ b/src/acpica/source/include/actbl2.h
> @@ -522,7 +522,7 @@ typedef struct acpi_table_dbgp
>   *        Version 1
>   *
>   * Conforms to "Intel Virtualization Technology for Directed I/O",
> - * Version 1.2, Sept. 2008
> + * Version 2.2, Sept. 2013
>   *
>   ******************************************************************************/
>  
> @@ -555,9 +555,10 @@ enum AcpiDmarType
>  {
>      ACPI_DMAR_TYPE_HARDWARE_UNIT        = 0,
>      ACPI_DMAR_TYPE_RESERVED_MEMORY      = 1,
> -    ACPI_DMAR_TYPE_ATSR                 = 2,
> -    ACPI_DMAR_HARDWARE_AFFINITY         = 3,
> -    ACPI_DMAR_TYPE_RESERVED             = 4     /* 4 and greater are reserved */
> +    ACPI_DMAR_TYPE_ROOT_ATS             = 2,
> +    ACPI_DMAR_TYPE_HARDWARE_AFFINITY    = 3,
> +    ACPI_DMAR_TYPE_NAMESPACE            = 4,
> +    ACPI_DMAR_TYPE_RESERVED             = 5     /* 5 and greater are reserved */
>  };
>  
>  
> @@ -573,7 +574,7 @@ typedef struct acpi_dmar_device_scope
>  
>  } ACPI_DMAR_DEVICE_SCOPE;
>  
> -/* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE */
> +/* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE - device types */
>  
>  enum AcpiDmarScopeType
>  {
> @@ -582,7 +583,8 @@ enum AcpiDmarScopeType
>      ACPI_DMAR_SCOPE_TYPE_BRIDGE         = 2,
>      ACPI_DMAR_SCOPE_TYPE_IOAPIC         = 3,
>      ACPI_DMAR_SCOPE_TYPE_HPET           = 4,
> -    ACPI_DMAR_SCOPE_TYPE_RESERVED       = 5     /* 5 and greater are reserved */
> +    ACPI_DMAR_SCOPE_TYPE_NAMESPACE      = 5,
> +    ACPI_DMAR_SCOPE_TYPE_RESERVED       = 6     /* 6 and greater are reserved */
>  };
>  
>  typedef struct acpi_dmar_pci_path
> @@ -659,6 +661,18 @@ typedef struct acpi_dmar_rhsa
>  } ACPI_DMAR_RHSA;
>  
>  
> +/* 4: ACPI Namespace Device Declaration Structure */
> +
> +typedef struct acpi_dmar_andd
> +{
> +    ACPI_DMAR_HEADER        Header;
> +    UINT8                   Reserved[3];
> +    UINT8                   DeviceNumber;
> +    char                    DeviceName[1];
> +
> +} ACPI_DMAR_ANDD;
> +
> +
>  /*******************************************************************************
>   *
>   * HPET - High Precision Event Timer table
> diff --git a/src/acpica/source/include/actbl3.h b/src/acpica/source/include/actbl3.h
> index efec7e8..b30e80f 100644
> --- a/src/acpica/source/include/actbl3.h
> +++ b/src/acpica/source/include/actbl3.h
> @@ -352,35 +352,111 @@ typedef struct acpi_s3pt_suspend
>  
>  /*******************************************************************************
>   *
> - * GTDT - Generic Timer Description Table (ACPI 5.0)
> - *        Version 1
> + * GTDT - Generic Timer Description Table (ACPI 5.1)
> + *        Version 2
>   *
>   ******************************************************************************/
>  
>  typedef struct acpi_table_gtdt
>  {
>      ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
> -    UINT64                  Address;
> -    UINT32                  Flags;
> -    UINT32                  SecurePl1Interrupt;
> -    UINT32                  SecurePl1Flags;
> -    UINT32                  NonSecurePl1Interrupt;
> -    UINT32                  NonSecurePl1Flags;
> +    UINT64                  CounterBlockAddresss;
> +    UINT32                  Reserved;
> +    UINT32                  SecureEl1Interrupt;
> +    UINT32                  SecureEl1Flags;
> +    UINT32                  NonSecureEl1Interrupt;
> +    UINT32                  NonSecureEl1Flags;
>      UINT32                  VirtualTimerInterrupt;
>      UINT32                  VirtualTimerFlags;
> -    UINT32                  NonSecurePl2Interrupt;
> -    UINT32                  NonSecurePl2Flags;
> +    UINT32                  NonSecureEl2Interrupt;
> +    UINT32                  NonSecureEl2Flags;
> +    UINT64                  CounterReadBlockAddress;
> +    UINT32                  PlatformTimerCount;
> +    UINT32                  PlatformTimerOffset;
>  
>  } ACPI_TABLE_GTDT;
>  
> -/* Values for Flags field above */
> +/* Flag Definitions: Timer Block Physical Timers and Virtual timers */
> +
> +#define ACPI_GTDT_INTERRUPT_MODE        (1)
> +#define ACPI_GTDT_INTERRUPT_POLARITY    (1<<1)
> +#define ACPI_GTDT_ALWAYS_ON             (1<<2)
> +
> +
> +/* Common GTDT subtable header */
> +
> +typedef struct acpi_gtdt_header
> +{
> +    UINT8                   Type;
> +    UINT16                  Length;
> +
> +} ACPI_GTDT_HEADER;
> +
> +/* Values for GTDT subtable type above */
> +
> +enum AcpiGtdtType
> +{
> +    ACPI_GTDT_TYPE_TIMER_BLOCK      = 0,
> +    ACPI_GTDT_TYPE_WATCHDOG         = 1,
> +    ACPI_GTDT_TYPE_RESERVED         = 2    /* 2 and greater are reserved */
> +};
> +
> +
> +/* GTDT Subtables, correspond to Type in acpi_gtdt_header */
> +
> +/* 0: Generic Timer Block */
> +
> +typedef struct acpi_gtdt_timer_block
> +{
> +    ACPI_GTDT_HEADER        Header;
> +    UINT8                   Reserved;
> +    UINT64                  BlockAddress;
> +    UINT32                  TimerCount;
> +    UINT32                  TimerOffset;
> +
> +} ACPI_GTDT_TIMER_BLOCK;
> +
> +/* Timer Sub-Structure, one per timer */
> +
> +typedef struct acpi_gtdt_timer_entry
> +{
> +    UINT8                   FrameNumber;
> +    UINT8                   Reserved[3];
> +    UINT64                  BaseAddress;
> +    UINT64                  El0BaseAddress;
> +    UINT32                  TimerInterrupt;
> +    UINT32                  TimerFlags;
> +    UINT32                  VirtualTimerInterrupt;
> +    UINT32                  VirtualTimerFlags;
> +    UINT32                  CommonFlags;
> +
> +} ACPI_GTDT_TIMER_ENTRY;
> +
> +
> +/* Flag Definitions: CommonFlags above */
> +
> +#define ACPI_GTDT_GT_IS_SECURE_TIMER    (1)
> +#define ACPI_GTDT_GT_ALWAYS_ON          (1<<1)
> +
>  
> -#define ACPI_GTDT_MAPPED_BLOCK_PRESENT      1
> +/* 1: SBSA Generic Watchdog Structure */
>  
> -/* Values for all "TimerFlags" fields above */
> +typedef struct acpi_gtdt_watchdog
> +{
> +    ACPI_GTDT_HEADER        Header;
> +    UINT8                   Reserved;
> +    UINT64                  RefreshFrameAddress;
> +    UINT64                  ControlFrameAddress;
> +    UINT32                  TimerInterrupt;
> +    UINT32                  TimerFlags;
> +
> +} ACPI_GTDT_WATCHDOG;
>  
> -#define ACPI_GTDT_INTERRUPT_MODE            1
> -#define ACPI_GTDT_INTERRUPT_POLARITY        2
> +/* Flag Definitions: TimerFlags above */
> +
> +#define ACPI_GTDT_WATCHDOG_IRQ_MODE         (1)
> +#define ACPI_GTDT_WATCHDOG_IRQ_POLARITY     (1<<1)
> +#define ACPI_GTDT_WATCHDOG_SECURE           (1<<2)
>  
>  
>  /*******************************************************************************
> @@ -525,7 +601,8 @@ typedef struct acpi_table_pcct
>  enum AcpiPcctType
>  {
>      ACPI_PCCT_TYPE_GENERIC_SUBSPACE     = 0,
> -    ACPI_PCCT_TYPE_RESERVED             = 1     /* 1 and greater are reserved */
> +    ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE  = 1,
> +    ACPI_PCCT_TYPE_RESERVED             = 2     /* 2 and greater are reserved */
>  };
>  
>  /*
> @@ -550,6 +627,31 @@ typedef struct acpi_pcct_subspace
>  } ACPI_PCCT_SUBSPACE;
>  
>  
> +/* 1: HW-reduced Communications Subspace (ACPI 5.1) */
> +
> +typedef struct acpi_pcct_hw_reduced
> +{
> +    ACPI_SUBTABLE_HEADER    Header;
> +    UINT32                  DoorbellInterrupt;
> +    UINT8                   Flags;
> +    UINT8                   Reserved;
> +    UINT64                  BaseAddress;
> +    UINT64                  Length;
> +    ACPI_GENERIC_ADDRESS    DoorbellRegister;
> +    UINT64                  PreserveMask;
> +    UINT64                  WriteMask;
> +    UINT32                  Latency;
> +    UINT32                  MaxAccessRate;
> +    UINT16                  MinTurnaroundTime;
> +
> +} ACPI_PCCT_HW_REDUCED;
> +
> +/* Values for doorbell flags above */
> +
> +#define ACPI_PCCT_INTERRUPT_POLARITY    (1)
> +#define ACPI_PCCT_INTERRUPT_MODE        (1<<1)
> +
> +
>  /*
>   * PCC memory structures (not part of the ACPI table)
>   */
> diff --git a/src/acpica/source/include/actypes.h b/src/acpica/source/include/actypes.h
> index 6ffb2ce..b6371ae 100644
> --- a/src/acpica/source/include/actypes.h
> +++ b/src/acpica/source/include/actypes.h
> @@ -596,7 +596,7 @@ typedef UINT64                          ACPI_INTEGER;
>  
>  #define ACPI_TO_POINTER(i)              ACPI_ADD_PTR (void, (void *) NULL,(ACPI_SIZE) i)
>  #define ACPI_TO_INTEGER(p)              ACPI_PTR_DIFF (p, (void *) NULL)
> -#define ACPI_OFFSET(d, f)               (ACPI_SIZE) ACPI_PTR_DIFF (&(((d *)0)->f), (void *) NULL)
> +#define ACPI_OFFSET(d, f)               ACPI_PTR_DIFF (&(((d *) 0)->f), (void *) NULL)
>  #define ACPI_PHYSADDR_TO_PTR(i)         ACPI_TO_POINTER(i)
>  #define ACPI_PTR_TO_PHYSADDR(i)         ACPI_TO_INTEGER(i)
>  
> @@ -690,8 +690,9 @@ typedef UINT64                          ACPI_INTEGER;
>  #define ACPI_NOTIFY_RESERVED            (UINT8) 0x0A
>  #define ACPI_NOTIFY_LOCALITY_UPDATE     (UINT8) 0x0B
>  #define ACPI_NOTIFY_SHUTDOWN_REQUEST    (UINT8) 0x0C
> +#define ACPI_NOTIFY_AFFINITY_UPDATE     (UINT8) 0x0D
>  
> -#define ACPI_NOTIFY_MAX                 0x0C
> +#define ACPI_NOTIFY_MAX                 0x0D
>  
>  /*
>   * Types associated with ACPI names and objects. The first group of
> diff --git a/src/acpica/source/include/acutils.h b/src/acpica/source/include/acutils.h
> index bac5fd8..2aea248 100644
> --- a/src/acpica/source/include/acutils.h
> +++ b/src/acpica/source/include/acutils.h
> @@ -297,6 +297,10 @@ AcpiUtHexToAsciiChar (
>      UINT64                  Integer,
>      UINT32                  Position);
>  
> +UINT8
> +AcpiUtAsciiCharToHex (
> +    int                     HexChar);
> +
>  BOOLEAN
>  AcpiUtValidObjectType (
>      ACPI_OBJECT_TYPE        Type);
> @@ -1207,6 +1211,10 @@ const AH_DEVICE_ID *
>  AcpiAhMatchHardwareId (
>      char                    *Hid);
>  
> +const char *
> +AcpiAhMatchUuid (
> +    UINT8                   *Data);
> +
>  /*
>   * utprint - printf/vprintf output functions
>   */
> @@ -1248,4 +1256,12 @@ AcpiUtFilePrintf (
>      ...);
>  #endif
>  
> +/*
> + * utuuid -- UUID support functions
> + */
> +void
> +AcpiUtConvertStringToUuid (
> +    char                    *InString,
> +    UINT8                   *UuidBuffer);
> +
>  #endif /* _ACUTILS_H */
> diff --git a/src/acpica/source/include/platform/aclinux.h b/src/acpica/source/include/platform/aclinux.h
> index 1f1d7c1..d5c1501 100644
> --- a/src/acpica/source/include/platform/aclinux.h
> +++ b/src/acpica/source/include/platform/aclinux.h
> @@ -201,8 +201,6 @@
>  #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireObject
>  #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetThreadId
>  #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateLock
> -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsMapMemory
> -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsUnmapMemory
>  
>  /*
>   * OSL interfaces used by debugger/disassembler
> @@ -236,10 +234,6 @@
>  #define __init
>  #endif
>  
> -#ifndef __iomem
> -#define __iomem
> -#endif
> -
>  /* Host-dependent types and defines for user-space ACPICA */
>  
>  #define ACPI_FLUSH_CPU_CACHE()
> diff --git a/src/acpica/source/include/platform/aclinuxex.h b/src/acpica/source/include/platform/aclinuxex.h
> index 67e42ab..e3d5d5b 100644
> --- a/src/acpica/source/include/platform/aclinuxex.h
> +++ b/src/acpica/source/include/platform/aclinuxex.h
> @@ -186,16 +186,6 @@ AcpiOsGetThreadId (
>          Lock ? AE_OK : AE_NO_MEMORY; \
>      })
>  
> -void __iomem *
> -AcpiOsMapMemory (
> -    ACPI_PHYSICAL_ADDRESS   Where,
> -    ACPI_SIZE               Length);
> -
> -void
> -AcpiOsUnmapMemory (
> -    void __iomem            *LogicalAddress,
> -    ACPI_SIZE               Size);
> -
>  /*
>   * OSL interfaces added by Linux
>   */
> diff --git a/src/acpica/source/os_specific/service_layers/oslibcfs.c b/src/acpica/source/os_specific/service_layers/oslibcfs.c
> index 3343a0c..e1ca8be 100644
> --- a/src/acpica/source/os_specific/service_layers/oslibcfs.c
> +++ b/src/acpica/source/os_specific/service_layers/oslibcfs.c
> @@ -1,6 +1,6 @@
>  /******************************************************************************
>   *
> - * Module Name: oslibcfs - C library OSL for file IO
> + * Module Name: oslibcfs - C library OSL for file I/O
>   *
>   *****************************************************************************/
>  
> @@ -141,8 +141,9 @@ AcpiOsOpenFile (
>      UINT8                   Modes)
>  {
>      ACPI_FILE               File;
> -    char                    ModesStr[4];
>      UINT32                  i = 0;
> +    char                    ModesStr[4];
> +
>  
>      if (Modes & ACPI_FILE_READING)
>      {
> @@ -156,6 +157,7 @@ AcpiOsOpenFile (
>      {
>          ModesStr[i++] = 'b';
>      }
> +
>      ModesStr[i++] = '\0';
>  
>      File = fopen (Path, ModesStr);
> @@ -172,11 +174,11 @@ AcpiOsOpenFile (
>   *
>   * FUNCTION:    AcpiOsCloseFile
>   *
> - * PARAMETERS:  File                - File descriptor
> + * PARAMETERS:  File                - An open file descriptor
>   *
>   * RETURN:      None.
>   *
> - * DESCRIPTION: Close a file.
> + * DESCRIPTION: Close a file opened via AcpiOsOpenFile.
>   *
>   ******************************************************************************/
>  
> @@ -192,14 +194,14 @@ AcpiOsCloseFile (
>   *
>   * FUNCTION:    AcpiOsReadFile
>   *
> - * PARAMETERS:  File                - File descriptor
> + * PARAMETERS:  File                - An open file descriptor
>   *              Buffer              - Data buffer
>   *              Size                - Data block size
>   *              Count               - Number of data blocks
>   *
> - * RETURN:      Size of successfully read buffer.
> + * RETURN:      Number of bytes actually read.
>   *
> - * DESCRIPTION: Read a file.
> + * DESCRIPTION: Read from a file.
>   *
>   ******************************************************************************/
>  
> @@ -212,6 +214,7 @@ AcpiOsReadFile (
>  {
>      int                     Length;
>  
> +
>      Length = fread (Buffer, Size, Count, File);
>      if (Length < 0)
>      {
> @@ -226,14 +229,14 @@ AcpiOsReadFile (
>   *
>   * FUNCTION:    AcpiOsWriteFile
>   *
> - * PARAMETERS:  File                - File descriptor
> + * PARAMETERS:  File                - An open file descriptor
>   *              Buffer              - Data buffer
>   *              Size                - Data block size
>   *              Count               - Number of data blocks
>   *
> - * RETURN:      Size of successfully written buffer.
> + * RETURN:      Number of bytes actually written.
>   *
> - * DESCRIPTION: Write a file.
> + * DESCRIPTION: Write to a file.
>   *
>   ******************************************************************************/
>  
> @@ -246,6 +249,7 @@ AcpiOsWriteFile (
>  {
>      int                     Length;
>  
> +
>      Length = fwrite (Buffer, Size, Count, File);
>      if (Length < 0)
>      {
> @@ -260,9 +264,9 @@ AcpiOsWriteFile (
>   *
>   * FUNCTION:    AcpiOsGetFileOffset
>   *
> - * PARAMETERS:  File                - File descriptor
> + * PARAMETERS:  File                - An open file descriptor
>   *
> - * RETURN:      Size of current position.
> + * RETURN:      Current file pointer position.
>   *
>   * DESCRIPTION: Get current file offset.
>   *
> @@ -274,8 +278,8 @@ AcpiOsGetFileOffset (
>  {
>      long                    Offset;
>  
> -    Offset = ftell (File);
>  
> +    Offset = ftell (File);
>      return (Offset);
>  }
>  
> @@ -284,8 +288,8 @@ AcpiOsGetFileOffset (
>   *
>   * FUNCTION:    AcpiOsSetFileOffset
>   *
> - * PARAMETERS:  File                - File descriptor
> - *              Offset              - File offset
> + * PARAMETERS:  File                - An open file descriptor
> + *              Offset              - New file offset
>   *              From                - From begin/end of file
>   *
>   * RETURN:      Status
> diff --git a/src/acpica/source/os_specific/service_layers/osunixxf.c b/src/acpica/source/os_specific/service_layers/osunixxf.c
> index c237ac2..6f0bdfe 100644
> --- a/src/acpica/source/os_specific/service_layers/osunixxf.c
> +++ b/src/acpica/source/os_specific/service_layers/osunixxf.c
> @@ -1231,7 +1231,7 @@ AcpiOsGetTimer (
>   * FUNCTION:    AcpiOsReadPciConfiguration
>   *
>   * PARAMETERS:  PciId               - Seg/Bus/Dev
> - *              Register            - Device Register
> + *              PciRegister         - Device Register
>   *              Value               - Buffer where value is placed
>   *              Width               - Number of bits
>   *
> @@ -1244,7 +1244,7 @@ AcpiOsGetTimer (
>  ACPI_STATUS
>  AcpiOsReadPciConfiguration (
>      ACPI_PCI_ID             *PciId,
> -    UINT32                  Register,
> +    UINT32                  PciRegister,
>      UINT64                  *Value,
>      UINT32                  Width)
>  {
> @@ -1259,7 +1259,7 @@ AcpiOsReadPciConfiguration (
>   * FUNCTION:    AcpiOsWritePciConfiguration
>   *
>   * PARAMETERS:  PciId               - Seg/Bus/Dev
> - *              Register            - Device Register
> + *              PciRegister         - Device Register
>   *              Value               - Value to be written
>   *              Width               - Number of bits
>   *
> @@ -1272,7 +1272,7 @@ AcpiOsReadPciConfiguration (
>  ACPI_STATUS
>  AcpiOsWritePciConfiguration (
>      ACPI_PCI_ID             *PciId,
> -    UINT32                  Register,
> +    UINT32                  PciRegister,
>      UINT64                  Value,
>      UINT32                  Width)
>  {
> diff --git a/src/acpica/source/tools/acpiexec/aehandlers.c b/src/acpica/source/tools/acpiexec/aehandlers.c
> index 06283f4..14b5e90 100644
> --- a/src/acpica/source/tools/acpiexec/aehandlers.c
> +++ b/src/acpica/source/tools/acpiexec/aehandlers.c
> @@ -1413,8 +1413,7 @@ AeRegionHandler (
>              case AML_FIELD_ATTRIB_RAW_BYTES:
>              case AML_FIELD_ATTRIB_RAW_PROCESS:
>  
> -                /* (-2) for status/length */
> -                Length = MyContext->AccessLength - 2;
> +                Length = MyContext->AccessLength;
>                  break;
>  
>              default:
> @@ -1448,8 +1447,7 @@ AeRegionHandler (
>              case AML_FIELD_ATTRIB_RAW_BYTES:
>              case AML_FIELD_ATTRIB_RAW_PROCESS:
>  
> -                /* (-2) for status/length */
> -                Length = MyContext->AccessLength - 2;
> +                Length = MyContext->AccessLength;
>                  break;
>  
>              default:
> 

Acked-by: Alex Hung <alex.hung@canonical.com>
Ivan Hu July 31, 2014, 8:56 a.m. UTC | #2
On 07/25/2014 03:57 AM, Colin King wrote:
> From: Colin Ian King <colin.king@canonical.com>
>
> Update to ACPICA version 20140724. Refer to
> https://lists.acpica.org/pipermail/devel/2014-July/000658.html
> for a full list of new features and fixes.
>
> Signed-off-by: Colin Ian King <colin.king@canonical.com>
> ---
>   src/acpica/Makefile.am                             |   3 +
>   src/acpica/source/common/ahids.c                   |   6 +-
>   src/acpica/source/common/ahpredef.c                |   2 +
>   src/acpica/source/common/ahuuids.c                 | 201 +++++++++++++++++++++
>   src/acpica/source/common/dmextern.c                |  31 +++-
>   src/acpica/source/common/dmtable.c                 |  80 ++++++--
>   src/acpica/source/common/dmtbdump.c                | 171 +++++++++++++++++-
>   src/acpica/source/common/dmtbinfo.c                | 178 ++++++++++++++++--
>   src/acpica/source/compiler/Makefile.am             |   2 +
>   src/acpica/source/compiler/aslanalyze.c            |  48 +++++
>   src/acpica/source/compiler/aslcompiler.h           |  14 +-
>   src/acpica/source/compiler/aslcompiler.l           |  10 +-
>   src/acpica/source/compiler/asldefine.h             |   2 +-
>   src/acpica/source/compiler/aslglobal.h             |   6 -
>   src/acpica/source/compiler/aslmessages.c           |   1 +
>   src/acpica/source/compiler/aslmessages.h           |   1 +
>   src/acpica/source/compiler/aslmethod.c             |  20 ++
>   src/acpica/source/compiler/aslopcodes.c            |  12 +-
>   src/acpica/source/compiler/aslprepkg.c             |  35 ++++
>   src/acpica/source/compiler/aslutils.c              |  41 +----
>   src/acpica/source/compiler/asluuid.c               |  74 +-------
>   src/acpica/source/compiler/dtcompiler.h            |   4 +
>   src/acpica/source/compiler/dtfield.c               |   2 +-
>   src/acpica/source/compiler/dttable.c               | 157 +++++++++++++++-
>   src/acpica/source/compiler/dttemplate.h            | 127 +++++++------
>   src/acpica/source/compiler/dtutils.c               |   2 +
>   .../source/components/disassembler/dmbuffer.c      | 143 ++++++++++++++-
>   .../source/components/disassembler/dmopcode.c      |   7 +-
>   src/acpica/source/components/disassembler/dmwalk.c |   3 +-
>   src/acpica/source/components/events/evgpe.c        |  34 ++--
>   src/acpica/source/components/events/evxfgpe.c      |  71 +++++++-
>   src/acpica/source/components/executer/exdebug.c    |  11 +-
>   src/acpica/source/components/executer/exdump.c     |   6 +-
>   src/acpica/source/components/executer/exfield.c    |  30 ++-
>   src/acpica/source/components/namespace/nsobject.c  |  19 +-
>   src/acpica/source/components/utilities/utdecode.c  |  37 +---
>   src/acpica/source/components/utilities/utfileio.c  |   3 +-
>   src/acpica/source/components/utilities/uthex.c     | 185 +++++++++++++++++++
>   src/acpica/source/components/utilities/utprint.c   |  65 ++++---
>   src/acpica/source/components/utilities/utuuid.c    | 175 ++++++++++++++++++
>   src/acpica/source/include/acconfig.h               |  19 ++
>   src/acpica/source/include/acdisasm.h               |  18 ++
>   src/acpica/source/include/aclocal.h                |  20 +-
>   src/acpica/source/include/acnames.h                |   1 +
>   src/acpica/source/include/acpixf.h                 |   8 +-
>   src/acpica/source/include/acpredef.h               |  15 +-
>   src/acpica/source/include/actbl.h                  |  12 +-
>   src/acpica/source/include/actbl1.h                 |  76 ++++++--
>   src/acpica/source/include/actbl2.h                 |  26 ++-
>   src/acpica/source/include/actbl3.h                 | 134 ++++++++++++--
>   src/acpica/source/include/actypes.h                |   5 +-
>   src/acpica/source/include/acutils.h                |  16 ++
>   src/acpica/source/include/platform/aclinux.h       |   6 -
>   src/acpica/source/include/platform/aclinuxex.h     |  10 -
>   .../source/os_specific/service_layers/oslibcfs.c   |  34 ++--
>   .../source/os_specific/service_layers/osunixxf.c   |   8 +-
>   src/acpica/source/tools/acpiexec/aehandlers.c      |   6 +-
>   57 files changed, 1992 insertions(+), 441 deletions(-)
>   create mode 100644 src/acpica/source/common/ahuuids.c
>   create mode 100644 src/acpica/source/components/utilities/uthex.c
>   create mode 100644 src/acpica/source/components/utilities/utuuid.c
>
> diff --git a/src/acpica/Makefile.am b/src/acpica/Makefile.am
> index b2dd752..cbd38c6 100644
> --- a/src/acpica/Makefile.am
> +++ b/src/acpica/Makefile.am
> @@ -216,6 +216,7 @@ libfwtsacpica_la_SOURCES =				\
>   	source/components/utilities/uteval.c		\
>   	source/components/utilities/utfileio.c		\
>   	source/components/utilities/utglobal.c		\
> +	source/components/utilities/uthex.c		\
>   	source/components/utilities/utids.c		\
>   	source/components/utilities/utinit.c		\
>   	source/components/utilities/utlock.c		\
> @@ -238,9 +239,11 @@ libfwtsacpica_la_SOURCES =				\
>   	source/components/utilities/utxfinit.c		\
>   	source/components/utilities/uterror.c		\
>   	source/components/utilities/utbuffer.c 		\
> +	source/components/utilities/utuuid.c		\
>   	source/common/acgetline.c            		\
>   	source/common/ahids.c				\
>   	source/common/cmfsize.c            		\
> +	source/common/ahuuids.c				\
>   	source/tools/acpiexec/aehandlers.c
>
>   libfwtsacpica_la_LIBADD = \
> diff --git a/src/acpica/source/common/ahids.c b/src/acpica/source/common/ahids.c
> index 3e12961..af6771b 100755
> --- a/src/acpica/source/common/ahids.c
> +++ b/src/acpica/source/common/ahids.c
> @@ -246,7 +246,11 @@ const AH_DEVICE_ID  AslDeviceIds[] =
>       {"PNP0C60",     "Display Sensor Device"},
>       {"PNP0C70",     "Dock Sensor Device"},
>       {"PNP0C80",     "Memory Device"},
> -    {"PNP0D40",     "Standard Compliant SD Host Controller"},
> +    {"PNP0D10",     "XHCI USB Controller with debug"},
> +    {"PNP0D15",     "XHCI USB Controller without debug"},
> +    {"PNP0D20",     "EHCI USB Controller without debug"},
> +    {"PNP0D25",     "EHCI USB Controller with debug"},
> +    {"PNP0D40",     "SDA Standard Compliant SD Host Controller"},
>       {"PNP0D80",     "Windows-compatible System Power Management Controller"},
>       {"PNP0F03",     "Microsoft PS/2-style Mouse"},
>       {"SMO91D0",     "Sensor Hub"},
> diff --git a/src/acpica/source/common/ahpredef.c b/src/acpica/source/common/ahpredef.c
> index 525c7bb..7123b7f 100644
> --- a/src/acpica/source/common/ahpredef.c
> +++ b/src/acpica/source/common/ahpredef.c
> @@ -169,6 +169,7 @@ const AH_PREDEFINED_NAME    AslPredefinedInfo[] =
>       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"),
> +    AH_PREDEF ("_CCA",    "Cache Coherency Attribute", "Returns a device's support level for cache coherency"),
>       AH_PREDEF ("_CDM",    "Clock Domain", "Returns a logical processor's clock domain identifier"),
>       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"),
> @@ -193,6 +194,7 @@ const AH_PREDEFINED_NAME    AslPredefinedInfo[] =
>       AH_PREDEF ("_DOS",    "Disable Output Switching", "Sets the display output switching mode"),
>       AH_PREDEF ("_DPL",    "Device Selection Polarity", "Polarity of Device Selection signal, Resource Descriptor field"),
>       AH_PREDEF ("_DRS",    "Drive Strength", "Drive Strength setting for GPIO connection, Resource Descriptor field"),
> +    AH_PREDEF ("_DSD",    "Device-Specific Data", "Returns a list of device property information"),
>       AH_PREDEF ("_DSM",    "Device-Specific Method", "Executes device-specific functions"),
>       AH_PREDEF ("_DSS",    "Device Set State", "Sets the display device state"),
>       AH_PREDEF ("_DSW",    "Device Sleep Wake", "Sets the sleep and wake transition states for a device"),
> diff --git a/src/acpica/source/common/ahuuids.c b/src/acpica/source/common/ahuuids.c
> new file mode 100644
> index 0000000..1bf362c
> --- /dev/null
> +++ b/src/acpica/source/common/ahuuids.c
> @@ -0,0 +1,201 @@
> +/******************************************************************************
> + *
> + * Module Name: ahuuids - Table of known ACPI-related UUIDs
> + *
> + *****************************************************************************/
> +
> +/******************************************************************************
> + *
> + * 1. Copyright Notice
> + *
> + * Some or all of this work - Copyright (c) 1999 - 2014, Intel Corp.
> + * All rights reserved.
> + *
> + * 2. License
> + *
> + * 2.1. This is your license from Intel Corp. under its intellectual property
> + * rights. You may have additional license terms from the party that provided
> + * you this software, covering your right to use that party's intellectual
> + * property rights.
> + *
> + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
> + * copy of the source code appearing in this file ("Covered Code") an
> + * irrevocable, perpetual, worldwide license under Intel's copyrights in the
> + * base code distributed originally by Intel ("Original Intel Code") to copy,
> + * make derivatives, distribute, use and display any portion of the Covered
> + * Code in any form, with the right to sublicense such rights; and
> + *
> + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
> + * license (with the right to sublicense), under only those claims of Intel
> + * patents that are infringed by the Original Intel Code, to make, use, sell,
> + * offer to sell, and import the Covered Code and derivative works thereof
> + * solely to the minimum extent necessary to exercise the above copyright
> + * license, and in no event shall the patent license extend to any additions
> + * to or modifications of the Original Intel Code. No other license or right
> + * is granted directly or by implication, estoppel or otherwise;
> + *
> + * The above copyright and patent license is granted only if the following
> + * conditions are met:
> + *
> + * 3. Conditions
> + *
> + * 3.1. Redistribution of Source with Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification with rights to further distribute source must include
> + * the above Copyright Notice, the above License, this list of Conditions,
> + * and the following Disclaimer and Export Compliance provision. In addition,
> + * Licensee must cause all Covered Code to which Licensee contributes to
> + * contain a file documenting the changes Licensee made to create that Covered
> + * Code and the date of any change. Licensee must include in that file the
> + * documentation of any changes made by any predecessor Licensee. Licensee
> + * must include a prominent statement that the modification is derived,
> + * directly or indirectly, from Original Intel Code.
> + *
> + * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification without rights to further distribute source must
> + * include the following Disclaimer and Export Compliance provision in the
> + * documentation and/or other materials provided with distribution. In
> + * addition, Licensee may not authorize further sublicense of source of any
> + * portion of the Covered Code, and must include terms to the effect that the
> + * license from Licensee to its licensee is limited to the intellectual
> + * property embodied in the software Licensee provides to its licensee, and
> + * not to intellectual property embodied in modifications its licensee may
> + * make.
> + *
> + * 3.3. Redistribution of Executable. Redistribution in executable form of any
> + * substantial portion of the Covered Code or modification must reproduce the
> + * above Copyright Notice, and the following Disclaimer and Export Compliance
> + * provision in the documentation and/or other materials provided with the
> + * distribution.
> + *
> + * 3.4. Intel retains all right, title, and interest in and to the Original
> + * Intel Code.
> + *
> + * 3.5. Neither the name Intel nor any other trademark owned or controlled by
> + * Intel shall be used in advertising or otherwise to promote the sale, use or
> + * other dealings in products derived from or relating to the Covered Code
> + * without prior written authorization from Intel.
> + *
> + * 4. Disclaimer and Export Compliance
> + *
> + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
> + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
> + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
> + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
> + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
> + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
> + * PARTICULAR PURPOSE.
> + *
> + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
> + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
> + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
> + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
> + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
> + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
> + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
> + * LIMITED REMEDY.
> + *
> + * 4.3. Licensee shall not export, either directly or indirectly, any of this
> + * software or system incorporating such software without first obtaining any
> + * required license or other approval from the U. S. Department of Commerce or
> + * any other agency or department of the United States Government. In the
> + * event Licensee exports any such software from the United States or
> + * re-exports any such software from a foreign destination, Licensee shall
> + * ensure that the distribution and export/re-export of the software is in
> + * compliance with all laws, regulations, orders, or other restrictions of the
> + * U.S. Export Administration Regulations. Licensee agrees that neither it nor
> + * any of its subsidiaries will export/re-export any technical data, process,
> + * software, or service, directly or indirectly, to any country for which the
> + * United States government or any agency thereof requires an export license,
> + * other governmental approval, or letter of assurance, without first obtaining
> + * such license, approval or letter.
> + *
> + *****************************************************************************/
> +
> +#include "acpi.h"
> +#include "accommon.h"
> +
> +#define _COMPONENT          ACPI_UTILITIES
> +        ACPI_MODULE_NAME    ("ahuuids")
> +
> +/*
> + * Table of "known" (ACPI-related) UUIDs
> + */
> +const AH_UUID  AcpiUuids[] =
> +{
> +    {"PCI Host Bridge Device",
> +        "33db4d5b-1ff7-401c-9657-7441c03dd766"},
> +
> +    {"Platform-wide Capabilities",
> +        "0811b06e-4a27-44f9-8d60-3cbbc22e7b48"},
> +
> +    {"Dynamic Enumeration",
> +        "d8c1a3a6-be9b-4c9b-91bf-c3cb81fc5daf"},
> +
> +    {"GPIO Controller",
> +        "4f248f40-d5e2-499f-834c-27758ea1cd3f"},
> +
> +    {"Battery Thermal Limit",
> +        "4c2067e3-887d-475c-9720-4af1d3ed602e"},
> +
> +    {"Thermal Extensions",
> +        "14d399cd-7a27-4b18-8fb4-7cb7b9f4e500"},
> +
> +    {"USB Controller",
> +        "ce2ee385-00e6-48cb-9f05-2edb927c4899"},
> +
> +    {"HID I2C Device",
> +        "3cdff6f7-4267-4555-ad05-b30a3d8938de"},
> +
> +    {"Power Button Device",
> +        "dfbcf3c5-e7a5-44e6-9c1f-29c76f6e059c"},
> +
> +    {"Device Labeling Interface",
> +        "e5c937d0-3553-4d7a-9117-ea4d19c3434d"},
> +
> +    {"SATA Controller",
> +        "e4db149b-fcfe-425b-a6d8-92357d78fc7f"},
> +
> +    {"Physical Presence Interface",
> +        "3dddfaa6-361b-4eb4-a424-8d10089d1653"},
> +
> +    {NULL, NULL}
> +};
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiAhMatchUuid
> + *
> + * PARAMETERS:  Data                - Data buffer containing a UUID
> + *
> + * RETURN:      ASCII description string for the UUID if it is found.
> + *
> + * DESCRIPTION: Returns a description string for "known" UUIDs, which are
> + *              are UUIDs that are related to ACPI in some way.
> + *
> + ******************************************************************************/
> +
> +const char *
> +AcpiAhMatchUuid (
> +    UINT8                   *Data)
> +{
> +    const AH_UUID           *Info;
> +    UINT8                   UuidBuffer[UUID_BUFFER_LENGTH];
> +
> +
> +    /* Walk the table of known ACPI-related UUIDs */
> +
> +    for (Info = AcpiUuids; Info->Description; Info++)
> +    {
> +        AcpiUtConvertStringToUuid (Info->String, UuidBuffer);
> +
> +        if (!ACPI_MEMCMP (Data, UuidBuffer, UUID_BUFFER_LENGTH))
> +        {
> +            return (Info->Description);
> +        }
> +    }
> +
> +    return (NULL);
> +}
> diff --git a/src/acpica/source/common/dmextern.c b/src/acpica/source/common/dmextern.c
> index efd72f6..30196df 100644
> --- a/src/acpica/source/common/dmextern.c
> +++ b/src/acpica/source/common/dmextern.c
> @@ -478,18 +478,37 @@ AcpiDmGetExternalsFromFile (
>       while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ExternalRefFile))
>       {
>           Token = strtok (StringBuffer, METHOD_SEPARATORS);   /* "External" */
> -        if (!Token) continue;
> -        if (strcmp (Token, "External")) continue;
> +        if (!Token)
> +        {
> +            continue;
> +        }
> +        if (strcmp (Token, "External"))
> +        {
> +            continue;
> +        }
>
>           MethodName = strtok (NULL, METHOD_SEPARATORS);      /* Method namepath */
> -        if (!MethodName) continue;
> +        if (!MethodName)
> +        {
> +            continue;
> +        }
>
>           Token = strtok (NULL, METHOD_SEPARATORS);           /* "MethodObj" */
> -        if (!Token) continue;
> -        if (strcmp (Token, "MethodObj")) continue;
> +        if (!Token)
> +        {
> +            continue;
> +        }
> +
> +        if (strcmp (Token, "MethodObj"))
> +        {
> +            continue;
> +        }
>
>           Token = strtok (NULL, METHOD_SEPARATORS);           /* Arg count */
> -        if (!Token) continue;
> +        if (!Token)
> +        {
> +            continue;
> +        }
>
>           /* Convert arg count string to an integer */
>
> diff --git a/src/acpica/source/common/dmtable.c b/src/acpica/source/common/dmtable.c
> index e2abd7a..efb50b5 100644
> --- a/src/acpica/source/common/dmtable.c
> +++ b/src/acpica/source/common/dmtable.c
> @@ -159,9 +159,21 @@ static const char           *AcpiDmDmarSubnames[] =
>       "Reserved Memory Region",
>       "Root Port ATS Capability",
>       "Remapping Hardware Static Affinity",
> +    "ACPI Namespace Device Declaration",
>       "Unknown SubTable Type"         /* Reserved */
>   };
>
> +static const char           *AcpiDmDmarScope[] =
> +{
> +    "Reserved value",
> +    "PCI Endpoint Device",
> +    "PCI Bridge Device",
> +    "IOAPIC Device",
> +    "Message-capable HPET Device",
> +    "Namespace Device",
> +    "Unknown Scope Type"            /* Reserved */
> +};
> +
>   static const char           *AcpiDmEinjActions[] =
>   {
>       "Begin Operation",
> @@ -232,6 +244,13 @@ static const char           *AcpiDmErstInstructions[] =
>       "Unknown Instruction"
>   };
>
> +static const char           *AcpiDmGtdtSubnames[] =
> +{
> +    "Generic Timer Block",
> +    "Generic Watchdog Timer",
> +    "Unknown SubTable Type"         /* Reserved */
> +};
> +
>   static const char           *AcpiDmHestSubnames[] =
>   {
>       "IA-32 Machine Check Exception",
> @@ -261,25 +280,28 @@ static const char           *AcpiDmHestNotifySubnames[] =
>
>   static const char           *AcpiDmMadtSubnames[] =
>   {
> -    "Processor Local APIC",         /* ACPI_MADT_TYPE_LOCAL_APIC */
> -    "I/O APIC",                     /* ACPI_MADT_TYPE_IO_APIC */
> -    "Interrupt Source Override",    /* ACPI_MADT_TYPE_INTERRUPT_OVERRIDE */
> -    "NMI Source",                   /* ACPI_MADT_TYPE_NMI_SOURCE */
> -    "Local APIC NMI",               /* ACPI_MADT_TYPE_LOCAL_APIC_NMI */
> -    "Local APIC Address Override",  /* ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE */
> -    "I/O SAPIC",                    /* ACPI_MADT_TYPE_IO_SAPIC */
> -    "Local SAPIC",                  /* ACPI_MADT_TYPE_LOCAL_SAPIC */
> -    "Platform Interrupt Sources",   /* ACPI_MADT_TYPE_INTERRUPT_SOURCE */
> -    "Processor Local x2APIC",       /* ACPI_MADT_TYPE_LOCAL_X2APIC */
> -    "Local x2APIC NMI",             /* ACPI_MADT_TYPE_LOCAL_X2APIC_NMI */
> -    "Generic Interrupt Controller", /* ACPI_MADT_GENERIC_INTERRUPT */
> -    "Generic Interrupt Distributor",/* ACPI_MADT_GENERIC_DISTRIBUTOR */
> -    "Unknown SubTable Type"         /* Reserved */
> +    "Processor Local APIC",             /* ACPI_MADT_TYPE_LOCAL_APIC */
> +    "I/O APIC",                         /* ACPI_MADT_TYPE_IO_APIC */
> +    "Interrupt Source Override",        /* ACPI_MADT_TYPE_INTERRUPT_OVERRIDE */
> +    "NMI Source",                       /* ACPI_MADT_TYPE_NMI_SOURCE */
> +    "Local APIC NMI",                   /* ACPI_MADT_TYPE_LOCAL_APIC_NMI */
> +    "Local APIC Address Override",      /* ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE */
> +    "I/O SAPIC",                        /* ACPI_MADT_TYPE_IO_SAPIC */
> +    "Local SAPIC",                      /* ACPI_MADT_TYPE_LOCAL_SAPIC */
> +    "Platform Interrupt Sources",       /* ACPI_MADT_TYPE_INTERRUPT_SOURCE */
> +    "Processor Local x2APIC",           /* ACPI_MADT_TYPE_LOCAL_X2APIC */
> +    "Local x2APIC NMI",                 /* ACPI_MADT_TYPE_LOCAL_X2APIC_NMI */
> +    "Generic Interrupt Controller",     /* ACPI_MADT_GENERIC_INTERRUPT */
> +    "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 */
>   };
>
>   static const char           *AcpiDmPcctSubnames[] =
>   {
>       "Generic Communications Subspace",  /* ACPI_PCCT_TYPE_GENERIC_SUBSPACE */
> +    "HW-Reduced Communications Subspace",
>       "Unknown SubTable Type"             /* Reserved */
>   };
>
> @@ -378,7 +400,7 @@ ACPI_DMTABLE_DATA    AcpiDmTableData[] =
>       {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, AcpiDmTableInfoGtdt,    NULL,           NULL,           TemplateGtdt,   "Generic Timer Description 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"},
> @@ -777,6 +799,7 @@ AcpiDmDumpTable (
>           case ACPI_DMT_SPACEID:
>           case ACPI_DMT_ACCWIDTH:
>           case ACPI_DMT_IVRS:
> +        case ACPI_DMT_GTDT:
>           case ACPI_DMT_MADT:
>           case ACPI_DMT_PCCT:
>           case ACPI_DMT_PMTT:
> @@ -788,6 +811,7 @@ AcpiDmDumpTable (
>           case ACPI_DMT_EINJINST:
>           case ACPI_DMT_ERSTACT:
>           case ACPI_DMT_ERSTINST:
> +        case ACPI_DMT_DMAR_SCOPE:
>
>               ByteLength = 1;
>               break;
> @@ -1119,6 +1143,19 @@ AcpiDmDumpTable (
>               AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target), AcpiDmDmarSubnames[Temp16]);
>               break;
>
> +        case ACPI_DMT_DMAR_SCOPE:
> +
> +            /* DMAR device scope types */
> +
> +            Temp8 = *Target;
> +            if (Temp8 > ACPI_DMAR_SCOPE_TYPE_RESERVED)
> +            {
> +                Temp8 = ACPI_DMAR_SCOPE_TYPE_RESERVED;
> +            }
> +
> +            AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmDmarScope[Temp8]);
> +            break;
> +
>           case ACPI_DMT_EINJACT:
>
>               /* EINJ Action types */
> @@ -1171,6 +1208,19 @@ AcpiDmDumpTable (
>               AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmErstInstructions[Temp8]);
>               break;
>
> +        case ACPI_DMT_GTDT:
> +
> +            /* GTDT subtable types */
> +
> +            Temp8 = *Target;
> +            if (Temp8 > ACPI_GTDT_TYPE_RESERVED)
> +            {
> +                Temp8 = ACPI_GTDT_TYPE_RESERVED;
> +            }
> +
> +            AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmGtdtSubnames[Temp8]);
> +            break;
> +
>           case ACPI_DMT_HEST:
>
>               /* HEST subtable types */
> diff --git a/src/acpica/source/common/dmtbdump.c b/src/acpica/source/common/dmtbdump.c
> index 70e9d4e..b0ae905 100644
> --- a/src/acpica/source/common/dmtbdump.c
> +++ b/src/acpica/source/common/dmtbdump.c
> @@ -963,18 +963,24 @@ AcpiDmDumpDmar (
>               ScopeOffset = sizeof (ACPI_DMAR_RESERVED_MEMORY);
>               break;
>
> -        case ACPI_DMAR_TYPE_ATSR:
> +        case ACPI_DMAR_TYPE_ROOT_ATS:
>
>               InfoTable = AcpiDmTableInfoDmar2;
>               ScopeOffset = sizeof (ACPI_DMAR_ATSR);
>               break;
>
> -        case ACPI_DMAR_HARDWARE_AFFINITY:
> +        case ACPI_DMAR_TYPE_HARDWARE_AFFINITY:
>
>               InfoTable = AcpiDmTableInfoDmar3;
>               ScopeOffset = sizeof (ACPI_DMAR_RHSA);
>               break;
>
> +        case ACPI_DMAR_TYPE_NAMESPACE:
> +
> +            InfoTable = AcpiDmTableInfoDmar4;
> +            ScopeOffset = sizeof (ACPI_DMAR_ANDD);
> +            break;
> +
>           default:
>
>               AcpiOsPrintf ("\n**** Unknown DMAR subtable type 0x%X\n\n", SubTable->Type);
> @@ -988,7 +994,16 @@ AcpiDmDumpDmar (
>               return;
>           }
>
> -        /* Dump the device scope entries (if any) */
> +        /*
> +         * Dump the optional device scope entries
> +         */
> +        if ((SubTable->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
> +            (SubTable->Type == ACPI_DMAR_TYPE_NAMESPACE))
> +        {
> +            /* These types do not support device scopes */
> +
> +            goto NextSubtable;
> +        }
>
>           ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, SubTable, ScopeOffset);
>           while (ScopeOffset < SubTable->Length)
> @@ -1028,6 +1043,7 @@ AcpiDmDumpDmar (
>                   ScopeTable, ScopeTable->Length);
>           }
>
> +NextSubtable:
>           /* Point to next subtable */
>
>           Offset += SubTable->Length;
> @@ -1227,6 +1243,123 @@ NextSubTable:
>
>   /*******************************************************************************
>    *
> + * FUNCTION:    AcpiDmDumpGtdt
> + *
> + * PARAMETERS:  Table               - A GTDT table
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Format the contents of a GTDT. This table type consists
> + *              of an open-ended number of subtables.
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmDumpGtdt (
> +    ACPI_TABLE_HEADER       *Table)
> +{
> +    ACPI_STATUS             Status;
> +    ACPI_GTDT_HEADER        *SubTable;
> +    UINT32                  Length = Table->Length;
> +    UINT32                  Offset = sizeof (ACPI_TABLE_GTDT);
> +    ACPI_DMTABLE_INFO       *InfoTable;
> +    UINT32                  SubTableLength;
> +    UINT32                  GtCount;
> +    ACPI_GTDT_TIMER_ENTRY   *GtxTable;
> +
> +
> +    /* Main table */
> +
> +    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoGtdt);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return;
> +    }
> +
> +    /* Subtables */
> +
> +    SubTable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Table, Offset);
> +    while (Offset < Table->Length)
> +    {
> +        /* Common subtable header */
> +
> +        AcpiOsPrintf ("\n");
> +        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> +                    SubTable->Length, AcpiDmTableInfoGtdtHdr);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return;
> +        }
> +
> +        GtCount = 0;
> +        switch (SubTable->Type)
> +        {
> +        case ACPI_GTDT_TYPE_TIMER_BLOCK:
> +
> +            SubTableLength = sizeof (ACPI_GTDT_TIMER_BLOCK);
> +            GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
> +                        SubTable))->TimerCount;
> +
> +            InfoTable = AcpiDmTableInfoGtdt0;
> +            break;
> +
> +        case ACPI_GTDT_TYPE_WATCHDOG:
> +
> +            SubTableLength = sizeof (ACPI_GTDT_WATCHDOG);
> +
> +            InfoTable = AcpiDmTableInfoGtdt1;
> +            break;
> +
> +        default:
> +
> +            /* Cannot continue on unknown type - no length */
> +
> +            AcpiOsPrintf ("\n**** Unknown GTDT subtable type 0x%X\n", SubTable->Type);
> +            return;
> +        }
> +
> +        Status = AcpiDmDumpTable (Length, Offset, SubTable,
> +                    SubTable->Length, InfoTable);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return;
> +        }
> +
> +        /* Point to end of current subtable (each subtable above is of fixed length) */
> +
> +        Offset += SubTableLength;
> +
> +        /* If there are any Gt Timer Blocks from above, dump them now */
> +
> +        if (GtCount)
> +        {
> +            GtxTable = ACPI_ADD_PTR (ACPI_GTDT_TIMER_ENTRY, SubTable, SubTableLength);
> +            SubTableLength += GtCount * sizeof (ACPI_GTDT_TIMER_ENTRY);
> +
> +            while (GtCount)
> +            {
> +                AcpiOsPrintf ("\n");
> +                Status = AcpiDmDumpTable (Length, Offset, GtxTable,
> +                            sizeof (ACPI_GTDT_TIMER_ENTRY), AcpiDmTableInfoGtdt0a);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return;
> +                }
> +                Offset += sizeof (ACPI_GTDT_TIMER_ENTRY);
> +                GtxTable++;
> +                GtCount--;
> +            }
> +        }
> +
> +        /* Point to next subtable */
> +
> +        SubTable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, SubTable, SubTableLength);
> +    }
> +}
> +
> +
> +/*******************************************************************************
> + *
>    * FUNCTION:    AcpiDmDumpHest
>    *
>    * PARAMETERS:  Table               - A HEST table
> @@ -1734,6 +1867,16 @@ AcpiDmDumpMadt (
>               InfoTable = AcpiDmTableInfoMadt12;
>               break;
>
> +        case ACPI_MADT_TYPE_GENERIC_MSI_FRAME:
> +
> +            InfoTable = AcpiDmTableInfoMadt13;
> +            break;
> +
> +        case ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR:
> +
> +            InfoTable = AcpiDmTableInfoMadt14;
> +            break;
> +
>           default:
>
>               AcpiOsPrintf ("\n**** Unknown MADT subtable type 0x%X\n\n", SubTable->Type);
> @@ -2089,6 +2232,7 @@ AcpiDmDumpPcct (
>   {
>       ACPI_STATUS             Status;
>       ACPI_PCCT_SUBSPACE      *SubTable;
> +    ACPI_DMTABLE_INFO       *InfoTable;
>       UINT32                  Length = Table->Length;
>       UINT32                  Offset = sizeof (ACPI_TABLE_PCCT);
>
> @@ -2116,10 +2260,20 @@ AcpiDmDumpPcct (
>               return;
>           }
>
> -        /* ACPI 5.0: Only one type of PCCT subtable is supported */
> -
> -        if (SubTable->Header.Type != ACPI_PCCT_TYPE_GENERIC_SUBSPACE)
> +        switch (SubTable->Header.Type)
>           {
> +        case ACPI_PCCT_TYPE_GENERIC_SUBSPACE:
> +
> +            InfoTable = AcpiDmTableInfoPcct0;
> +            break;
> +
> +        case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE:
> +
> +            InfoTable = AcpiDmTableInfoPcct1;
> +            break;
> +
> +        default:
> +
>               AcpiOsPrintf (
>                   "\n**** Unexpected or unknown PCCT subtable type 0x%X\n\n",
>                   SubTable->Header.Type);
> @@ -2128,7 +2282,7 @@ AcpiDmDumpPcct (
>
>           AcpiOsPrintf ("\n");
>           Status = AcpiDmDumpTable (Length, Offset, SubTable,
> -                    SubTable->Header.Length, AcpiDmTableInfoPcct0);
> +                    SubTable->Header.Length, InfoTable);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
> @@ -2282,8 +2436,7 @@ AcpiDmDumpPmtt (
>               if (DomainCount)
>               {
>                   AcpiOsPrintf (
> -                    "\n**** DomainCount exceeds subtable length\n\n",
> -                    MemSubTable->Type);
> +                    "\n**** DomainCount exceeds subtable length\n\n");
>               }
>
>               /* Walk the physical component (DIMM) subtables */
> diff --git a/src/acpica/source/common/dmtbinfo.c b/src/acpica/source/common/dmtbinfo.c
> index 7a9520d..2a3bed4 100644
> --- a/src/acpica/source/common/dmtbinfo.c
> +++ b/src/acpica/source/common/dmtbinfo.c
> @@ -209,11 +209,16 @@
>   #define ACPI_DMAR1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_DMAR_RESERVED_MEMORY,f)
>   #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_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)
>   #define ACPI_FPDT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_FPDT_BOOT,f)
>   #define ACPI_FPDT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_FPDT_S3PT_PTR,f)
> +#define ACPI_GTDT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_GTDT_TIMER_BLOCK,f)
> +#define ACPI_GTDT0a_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_GTDT_TIMER_ENTRY,f)
> +#define ACPI_GTDT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_GTDT_WATCHDOG,f)
> +#define ACPI_GTDTH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_GTDT_HEADER,f)
>   #define ACPI_HEST0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_HEST_IA_MACHINE_CHECK,f)
>   #define ACPI_HEST1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_HEST_IA_CORRECTED,f)
>   #define ACPI_HEST2_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_HEST_IA_NMI,f)
> @@ -246,6 +251,8 @@
>   #define ACPI_MADT10_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_X2APIC_NMI,f)
>   #define ACPI_MADT11_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_INTERRUPT,f)
>   #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_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)
> @@ -256,6 +263,7 @@
>   #define ACPI_MSCT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MSCT_PROXIMITY,f)
>   #define ACPI_MTMR0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MTMR_ENTRY,f)
>   #define ACPI_PCCT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PCCT_SUBSPACE,f)
> +#define ACPI_PCCT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PCCT_HW_REDUCED,f)
>   #define ACPI_PMTT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PMTT_SOCKET,f)
>   #define ACPI_PMTT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PMTT_CONTROLLER,f)
>   #define ACPI_PMTT1A_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_PMTT_DOMAIN,f)
> @@ -288,6 +296,8 @@
>   #define ACPI_SRAT1_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_SRAT_MEM_AFFINITY,f,o)
>   #define ACPI_SRAT2_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_SRAT_X2APIC_CPU_AFFINITY,f,o)
>   #define ACPI_GTDT_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_GTDT,f,o)
> +#define ACPI_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_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)
> @@ -299,9 +309,11 @@
>   #define ACPI_MADT9_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_X2APIC,f,o)
>   #define ACPI_MADT10_FLAG_OFFSET(f,o)    ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_X2APIC_NMI,f,o)
>   #define ACPI_MADT11_FLAG_OFFSET(f,o)    ACPI_FLAG_OFFSET (ACPI_MADT_GENERIC_INTERRUPT,f,o)
> +#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_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)
>   #define ACPI_WDDT_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_WDDT,f,o)
>   #define ACPI_EINJ0_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_WHEA_HEADER,f,o)
> @@ -512,17 +524,22 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoFadt2[] =
>   {
>       {ACPI_DMT_GAS,      ACPI_FADT_OFFSET (ResetRegister),           "Reset Register", 0},
>       {ACPI_DMT_UINT8,    ACPI_FADT_OFFSET (ResetValue),              "Value to cause reset", 0},
> -    {ACPI_DMT_UINT24,   ACPI_FADT_OFFSET (Reserved4[0]),            "Reserved", 0},
> +    {ACPI_DMT_UINT16,   ACPI_FADT_OFFSET (ArmBootFlags),            "Reserved", 0},
> +    {ACPI_DMT_UINT8,    ACPI_FADT_OFFSET (MinorRevision),           "Reserved", 0},
>       ACPI_DMT_TERMINATOR
>   };
>
> -/* ACPI 2.0+ Extensions (FADT version 3 and 4) */
> +/* ACPI 2.0+ Extensions (FADT version 3, 4, and 5) */
>
>   ACPI_DMTABLE_INFO           AcpiDmTableInfoFadt3[] =
>   {
>       {ACPI_DMT_GAS,      ACPI_FADT_OFFSET (ResetRegister),           "Reset Register", 0},
>       {ACPI_DMT_UINT8,    ACPI_FADT_OFFSET (ResetValue),              "Value to cause reset", 0},
> -    {ACPI_DMT_UINT24,   ACPI_FADT_OFFSET (Reserved4[0]),            "Reserved", 0},
> +    {ACPI_DMT_UINT16,   ACPI_FADT_OFFSET (ArmBootFlags),            "ARM Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_FADT_FLAG_OFFSET(ArmBootFlags,0),      "PSCI Compliant", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_FADT_FLAG_OFFSET(ArmBootFlags,0),      "Must use HVC for PSCI", 0},
> +    ACPI_DMT_NEW_LINE,
> +    {ACPI_DMT_UINT8,    ACPI_FADT_OFFSET (MinorRevision),           "FADT Minor Revision", 0},
>       {ACPI_DMT_UINT64,   ACPI_FADT_OFFSET (XFacs),                   "FACS Address", 0},
>       {ACPI_DMT_UINT64,   ACPI_FADT_OFFSET (XDsdt),                   "DSDT Address", 0},
>       {ACPI_DMT_GAS,      ACPI_FADT_OFFSET (XPm1aEventBlock),         "PM1A Event Block", 0},
> @@ -879,7 +896,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoDmarHdr[] =
>
>   ACPI_DMTABLE_INFO           AcpiDmTableInfoDmarScope[] =
>   {
> -    {ACPI_DMT_UINT8,    ACPI_DMARS_OFFSET (EntryType),              "Device Scope Entry Type", 0},
> +    {ACPI_DMT_DMAR_SCOPE, ACPI_DMARS_OFFSET (EntryType),            "Device Scope Type", 0},
>       {ACPI_DMT_UINT8,    ACPI_DMARS_OFFSET (Length),                 "Entry Length", DT_LENGTH},
>       {ACPI_DMT_UINT16,   ACPI_DMARS_OFFSET (Reserved),               "Reserved", 0},
>       {ACPI_DMT_UINT8,    ACPI_DMARS_OFFSET (EnumerationId),          "Enumeration ID", 0},
> @@ -931,6 +948,16 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoDmar3[] =
>       ACPI_DMT_TERMINATOR
>   };
>
> +/* 4: ACPI Namespace Device Declaration Structure */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoDmar4[] =
> +{
> +    {ACPI_DMT_UINT24,   ACPI_DMAR4_OFFSET (Reserved[0]),            "Reserved", 0},
> +    {ACPI_DMT_UINT8,    ACPI_DMAR4_OFFSET (DeviceNumber),           "Device Number", 0},
> +    {ACPI_DMT_STRING,   ACPI_DMAR4_OFFSET (DeviceName[0]),          "Device Name", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
>
>   /*******************************************************************************
>    *
> @@ -1070,29 +1097,89 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoFpdt1[] =
>
>   ACPI_DMTABLE_INFO           AcpiDmTableInfoGtdt[] =
>   {
> -    {ACPI_DMT_UINT64,   ACPI_GTDT_OFFSET (Address),                 "Timer Address", 0},
> -    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (Flags),                   "Flags (decoded below)", DT_FLAG},
> -    {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (Flags,0),            "Memory Present", 0},
> +    {ACPI_DMT_UINT64,   ACPI_GTDT_OFFSET (CounterBlockAddresss),    "Counter Block Address", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (Reserved),                "Reserved", 0},
>       ACPI_DMT_NEW_LINE,
> -    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (SecurePl1Interrupt),      "Secure PL1 Interrupt", 0},
> -    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (SecurePl1Flags),          "SPL1 Flags (decoded below)", DT_FLAG},
> -    {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (SecurePl1Flags,0),   "Trigger Mode", 0},
> -    {ACPI_DMT_FLAG1,    ACPI_GTDT_FLAG_OFFSET (SecurePl1Flags,0),   "Polarity", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (SecureEl1Interrupt),      "Secure EL1 Interrupt", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (SecureEl1Flags),          "EL1 Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0),   "Trigger Mode", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0),   "Polarity", 0},
> +    {ACPI_DMT_FLAG2,    ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0),   "Always On", 0},
>       ACPI_DMT_NEW_LINE,
> -    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (NonSecurePl1Interrupt),   "Non-Secure PL1 Interrupt", 0},
> -    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (NonSecurePl1Flags),       "NSPL1 Flags (decoded below)", DT_FLAG},
> -    {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (NonSecurePl1Flags,0),"Trigger Mode", 0},
> -    {ACPI_DMT_FLAG1,    ACPI_GTDT_FLAG_OFFSET (NonSecurePl1Flags,0),"Polarity", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (NonSecureEl1Interrupt),   "Non-Secure EL1 Interrupt", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (NonSecureEl1Flags),       "NEL1 Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Trigger Mode", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Polarity", 0},
> +    {ACPI_DMT_FLAG2,    ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Always On", 0},
>       ACPI_DMT_NEW_LINE,
>       {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (VirtualTimerInterrupt),   "Virtual Timer Interrupt", 0},
>       {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (VirtualTimerFlags),       "VT Flags (decoded below)", DT_FLAG},
>       {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Trigger Mode", 0},
>       {ACPI_DMT_FLAG1,    ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Polarity", 0},
> +    {ACPI_DMT_FLAG2,    ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Always On", 0},
> +    ACPI_DMT_NEW_LINE,
> +    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (NonSecureEl2Interrupt),   "Non-Secure EL2 Interrupt", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (NonSecureEl2Flags),       "NEL2 Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Trigger Mode", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Polarity", 0},
> +    {ACPI_DMT_FLAG2,    ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Always On", 0},
> +    {ACPI_DMT_UINT64,   ACPI_GTDT_OFFSET (CounterReadBlockAddress), "Counter Read Block Address", 0},
>       ACPI_DMT_NEW_LINE,
> -    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (NonSecurePl2Interrupt),   "Non-Secure PL2 Interrupt", 0},
> -    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (NonSecurePl2Flags),       "NSPL2 Flags (decoded below)", DT_FLAG},
> -    {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (NonSecurePl2Flags,0),"Trigger Mode", 0},
> -    {ACPI_DMT_FLAG1,    ACPI_GTDT_FLAG_OFFSET (NonSecurePl2Flags,0),"Polarity", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (PlatformTimerCount),      "Platform Timer Count", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (PlatformTimerOffset),     "Platform Timer Offset", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* GTDT Subtable header (one per Subtable) */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoGtdtHdr[] =
> +{
> +    {ACPI_DMT_GTDT,     ACPI_GTDTH_OFFSET (Type),                   "Subtable Type", 0},
> +    {ACPI_DMT_UINT16,   ACPI_GTDTH_OFFSET (Length),                 "Length", DT_LENGTH},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* GTDT Subtables */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoGtdt0[] =
> +{
> +    {ACPI_DMT_UINT8,    ACPI_GTDT0_OFFSET (Reserved),               "Reserved", 0},
> +    {ACPI_DMT_UINT64,   ACPI_GTDT0_OFFSET (BlockAddress),           "Block Address", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT0_OFFSET (TimerCount),             "Timer Count", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT0_OFFSET (TimerOffset),            "Timer Offset", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoGtdt0a[] =
> +{
> +    {ACPI_DMT_UINT8 ,   ACPI_GTDT0a_OFFSET (FrameNumber),               "Frame Number", 0},
> +    {ACPI_DMT_UINT24,   ACPI_GTDT0a_OFFSET (Reserved[0]),               "Reserved", 0},
> +    {ACPI_DMT_UINT64,   ACPI_GTDT0a_OFFSET (BaseAddress),               "Base Address", 0},
> +    {ACPI_DMT_UINT64,   ACPI_GTDT0a_OFFSET (El0BaseAddress),            "EL0 Base Address", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT0a_OFFSET (TimerInterrupt),            "Timer Interrupt", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT0a_OFFSET (TimerFlags),                "Timer Flags (decoded below)", 0},
> +    {ACPI_DMT_FLAG0,    ACPI_GTDT0a_FLAG_OFFSET (TimerFlags,0),         "Trigger Mode", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_GTDT0a_FLAG_OFFSET (TimerFlags,0),         "Polarity", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT0a_OFFSET (VirtualTimerInterrupt),     "Virtual Timer Interrupt", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT0a_OFFSET (VirtualTimerFlags),         "Virtual Timer Flags (decoded below)", 0},
> +    {ACPI_DMT_FLAG0,    ACPI_GTDT0a_FLAG_OFFSET (VirtualTimerFlags,0),  "Trigger Mode", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_GTDT0a_FLAG_OFFSET (VirtualTimerFlags,0),  "Polarity", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT0a_OFFSET (CommonFlags),               "Common Flags (decoded below)", 0},
> +    {ACPI_DMT_FLAG0,    ACPI_GTDT0a_FLAG_OFFSET (CommonFlags,0),        "Secure", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_GTDT0a_FLAG_OFFSET (CommonFlags,0),        "Always On", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoGtdt1[] =
> +{
> +    {ACPI_DMT_UINT8,    ACPI_GTDT1_OFFSET (Reserved),               "Reserved", 0},
> +    {ACPI_DMT_UINT64,   ACPI_GTDT1_OFFSET (RefreshFrameAddress),    "Refresh Frame Address", 0},
> +    {ACPI_DMT_UINT64,   ACPI_GTDT1_OFFSET (ControlFrameAddress),    "Control Frame Address", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT1_OFFSET (TimerInterrupt),         "Timer Interrupt", 0},
> +    {ACPI_DMT_UINT32,   ACPI_GTDT1_OFFSET (TimerFlags),             "Timer Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0),      "Trigger Mode", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0),      "Polarity", 0},
> +    {ACPI_DMT_FLAG2,    ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0),      "Security", 0},
>       ACPI_DMT_TERMINATOR
>   };
>
> @@ -1599,14 +1686,21 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoMadt10[] =
>   ACPI_DMTABLE_INFO           AcpiDmTableInfoMadt11[] =
>   {
>       {ACPI_DMT_UINT16,   ACPI_MADT11_OFFSET (Reserved),              "Reserved", 0},
> -    {ACPI_DMT_UINT32,   ACPI_MADT11_OFFSET (GicId),                 "Local GIC Hardware ID", 0},
> +    {ACPI_DMT_UINT32,   ACPI_MADT11_OFFSET (CpuInterfaceNumber),    "CPU Interface Number", 0},
>       {ACPI_DMT_UINT32,   ACPI_MADT11_OFFSET (Uid),                   "Processor UID", 0},
>       {ACPI_DMT_UINT32,   ACPI_MADT11_OFFSET (Flags),                 "Flags (decoded below)", DT_FLAG},
>       {ACPI_DMT_FLAG0,    ACPI_MADT11_FLAG_OFFSET (Flags,0),          "Processor Enabled", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_MADT11_FLAG_OFFSET (Flags,0),          "Performance Interrupt Trigger Mode", 0},
> +    {ACPI_DMT_FLAG2,    ACPI_MADT11_FLAG_OFFSET (Flags,0),          "Virtual GIC Interrupt Trigger Mode", 0},
>       {ACPI_DMT_UINT32,   ACPI_MADT11_OFFSET (ParkingVersion),        "Parking Protocol Version", 0},
>       {ACPI_DMT_UINT32,   ACPI_MADT11_OFFSET (PerformanceInterrupt),  "Performance Interrupt", 0},
>       {ACPI_DMT_UINT64,   ACPI_MADT11_OFFSET (ParkedAddress),         "Parked Address", 0},
>       {ACPI_DMT_UINT64,   ACPI_MADT11_OFFSET (BaseAddress),           "Base Address", 0},
> +    {ACPI_DMT_UINT64,   ACPI_MADT11_OFFSET (GicvBaseAddress),       "Virtual GIC Base Address", 0},
> +    {ACPI_DMT_UINT64,   ACPI_MADT11_OFFSET (GichBaseAddress),       "Hypervisor GIC Base Address", 0},
> +    {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_TERMINATOR
>   };
>
> @@ -1622,6 +1716,30 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoMadt12[] =
>      ACPI_DMT_TERMINATOR
>   };
>
> +/* 13: Generic MSI Frame (ACPI 5.1) */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoMadt13[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_MADT13_OFFSET (Reserved),              "Reserved", 0},
> +    {ACPI_DMT_UINT32,   ACPI_MADT13_OFFSET (MsiFrameId),            "MSI Frame ID", 0},
> +    {ACPI_DMT_UINT64,   ACPI_MADT13_OFFSET (BaseAddress),           "Base Address", 0},
> +    {ACPI_DMT_UINT32,   ACPI_MADT13_OFFSET (Flags),                 "Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_MADT13_FLAG_OFFSET (Flags,0),          "Select SPI", 0},
> +    {ACPI_DMT_UINT16,   ACPI_MADT13_OFFSET (SpiCount),              "SPI Count", 0},
> +    {ACPI_DMT_UINT16,   ACPI_MADT13_OFFSET (SpiBase),               "SPI Base", 0},
> +   ACPI_DMT_TERMINATOR
> +};
> +
> +/* 14: Generic Redistributor (ACPI 5.1) */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoMadt14[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_MADT14_OFFSET (Reserved),              "Reserved", 0},
> +    {ACPI_DMT_UINT64,   ACPI_MADT14_OFFSET (BaseAddress),           "Base Address", 0},
> +    {ACPI_DMT_UINT32,   ACPI_MADT14_OFFSET (Length),                "Length", 0},
> +   ACPI_DMT_TERMINATOR
> +};
> +
>
>   /*******************************************************************************
>    *
> @@ -1841,6 +1959,26 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoPcct0[] =
>       ACPI_DMT_TERMINATOR
>   };
>
> +/* 1: HW-reduced Communications Subspace (ACPI 5.1) */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoPcct1[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_PCCT1_OFFSET (DoorbellInterrupt),      "Doorbell Interrupt", 0},
> +    {ACPI_DMT_UINT8,    ACPI_PCCT1_OFFSET (Flags),                  "Flags (Decoded Below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_PCCT1_FLAG_OFFSET (Flags,0),           "Polarity", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_PCCT1_FLAG_OFFSET (Flags,0),           "Mode", 0},
> +    {ACPI_DMT_UINT8,    ACPI_PCCT1_OFFSET (Reserved),               "Reserved", 0},
> +    {ACPI_DMT_UINT64,   ACPI_PCCT1_OFFSET (BaseAddress),            "Base Address", 0},
> +    {ACPI_DMT_UINT64,   ACPI_PCCT1_OFFSET (Length),                 "Address Length", 0},
> +    {ACPI_DMT_GAS,      ACPI_PCCT1_OFFSET (DoorbellRegister),       "Doorbell Register", 0},
> +    {ACPI_DMT_UINT64,   ACPI_PCCT1_OFFSET (PreserveMask),           "Preserve Mask", 0},
> +    {ACPI_DMT_UINT64,   ACPI_PCCT1_OFFSET (WriteMask),              "Write Mask", 0},
> +    {ACPI_DMT_UINT32,   ACPI_PCCT1_OFFSET (Latency),                "Command Latency", 0},
> +    {ACPI_DMT_UINT32,   ACPI_PCCT1_OFFSET (MaxAccessRate),          "Maximum Access Rate", 0},
> +    {ACPI_DMT_UINT16,   ACPI_PCCT1_OFFSET (MinTurnaroundTime),      "Minimum Turnaround Time", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
>
>   /*******************************************************************************
>    *
> diff --git a/src/acpica/source/compiler/Makefile.am b/src/acpica/source/compiler/Makefile.am
> index 55eccb9..a1de14a 100644
> --- a/src/acpica/source/compiler/Makefile.am
> +++ b/src/acpica/source/compiler/Makefile.am
> @@ -124,6 +124,7 @@ libfwtsiasl_la_SOURCES = 			\
>   	../components/utilities/utdebug.c 	\
>   	../components/utilities/utdelete.c 	\
>   	../components/utilities/utglobal.c 	\
> +	../components/utilities/uthex.c		\
>   	../components/utilities/utinit.c 	\
>   	../components/utilities/utlock.c 	\
>   	../components/utilities/utobject.c 	\
> @@ -140,6 +141,7 @@ libfwtsiasl_la_SOURCES = 			\
>   	../components/utilities/utaddress.c 	\
>   	../components/utilities/utownerid.c 	\
>   	../components/utilities/utexcep.c 	\
> +	../components/utilities/utuuid.c	\
>   	../components/namespace/nsaccess.c 	\
>   	../components/namespace/nsalloc.c 	\
>   	../components/namespace/nsdump.c 	\
> diff --git a/src/acpica/source/compiler/aslanalyze.c b/src/acpica/source/compiler/aslanalyze.c
> index 16e28d3..8bfc9ac 100644
> --- a/src/acpica/source/compiler/aslanalyze.c
> +++ b/src/acpica/source/compiler/aslanalyze.c
> @@ -641,3 +641,51 @@ ApCheckRegMethod (
>
>       AslError (ASL_WARNING, ASL_MSG_NO_REGION, Op, NULL);
>   }
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    ApFindNameInScope
> + *
> + * PARAMETERS:  Name                - Name to search for
> + *              Op                  - Current parse op
> + *
> + * RETURN:      TRUE if name found in the same scope as Op.
> + *
> + * DESCRIPTION: Determine if a name appears in the same scope as Op, as either
> + *              a Method() or a Name().
> + *
> + ******************************************************************************/
> +
> +BOOLEAN
> +ApFindNameInScope (
> +    char                    *Name,
> +    ACPI_PARSE_OBJECT       *Op)
> +{
> +    ACPI_PARSE_OBJECT       *Next;
> +    ACPI_PARSE_OBJECT       *Parent;
> +
> +
> +    /* Get the start of the current scope */
> +
> +    Parent = Op->Asl.Parent;
> +    Next = Parent->Asl.Child;
> +
> +    /* Search entire scope for a match to the name */
> +
> +    while (Next)
> +    {
> +        if ((Next->Asl.ParseOpcode == PARSEOP_METHOD) ||
> +            (Next->Asl.ParseOpcode == PARSEOP_NAME))
> +        {
> +            if (ACPI_COMPARE_NAME (Name, Next->Asl.NameSeg))
> +            {
> +                return (TRUE);
> +            }
> +        }
> +
> +        Next = Next->Asl.Next;
> +    }
> +
> +    return (FALSE);
> +}
> diff --git a/src/acpica/source/compiler/aslcompiler.h b/src/acpica/source/compiler/aslcompiler.h
> index 6e59b0f..c4afef4 100644
> --- a/src/acpica/source/compiler/aslcompiler.h
> +++ b/src/acpica/source/compiler/aslcompiler.h
> @@ -347,6 +347,11 @@ void
>   ApCheckRegMethod (
>       ACPI_PARSE_OBJECT       *Op);
>
> +BOOLEAN
> +ApFindNameInScope (
> +    char                    *Name,
> +    ACPI_PARSE_OBJECT       *Op);
> +
>
>   /*
>    * aslerror - error handling/reporting
> @@ -962,10 +967,6 @@ void
>   UtDisplaySummary (
>       UINT32                  FileId);
>
> -UINT8
> -UtHexCharToValue (
> -    int                     HexChar);
> -
>   void
>   UtConvertByteToHex (
>       UINT8                   RawByte,
> @@ -1027,11 +1028,6 @@ AuValidateUuid (
>       char                    *InString);
>
>   ACPI_STATUS
> -AuConvertStringToUuid (
> -    char                    *InString,
> -    char                    *UuIdBuffer);
> -
> -ACPI_STATUS
>   AuConvertUuidToString (
>       char                    *UuIdBuffer,
>       char                    *OutString);
> diff --git a/src/acpica/source/compiler/aslcompiler.l b/src/acpica/source/compiler/aslcompiler.l
> index b06aa65..bdcc8ed 100644
> --- a/src/acpica/source/compiler/aslcompiler.l
> +++ b/src/acpica/source/compiler/aslcompiler.l
> @@ -182,10 +182,10 @@ NamePathTail                [.]{NameSeg}
>   [ \t]                       { count (0); }
>
>
> -"/*"                        { if (!AslDoComment ()) yyterminate (); }
> -"//"                        { if (!AslDoCommentType2 ()) yyterminate (); }
> +"/*"                        { if (!AslDoComment ()) {yyterminate ();} }
> +"//"                        { if (!AslDoCommentType2 ()) {yyterminate ();} }
>
> -"\""                        { if (AslDoStringLiteral ()) return (PARSEOP_STRING_LITERAL); else yyterminate (); }
> +"\""                        { if (AslDoStringLiteral ()) {return (PARSEOP_STRING_LITERAL);} else {yyterminate ();} }
>   ";"                         { count (0); return(';'); }
>
>
> @@ -711,9 +711,9 @@ NamePathTail                [.]{NameSeg}
>                                   AslCompilererror (MsgBuffer);}
>
>   <<EOF>>                     { if (AslPopInputFileStack ())
> -                                yyterminate();
> +                                {yyterminate();}
>                                 else
> -                                return (PARSEOP_INCLUDE_END);};
> +                                {return (PARSEOP_INCLUDE_END);} };
>
>   %%
>
> diff --git a/src/acpica/source/compiler/asldefine.h b/src/acpica/source/compiler/asldefine.h
> index 71f52db..b05bd7f 100644
> --- a/src/acpica/source/compiler/asldefine.h
> +++ b/src/acpica/source/compiler/asldefine.h
> @@ -127,7 +127,7 @@
>   #define ASL_INVOCATION_NAME         "iasl"
>   #define ASL_CREATOR_ID              "INTL"
>
> -#define ASL_COMPLIANCE              "Supports ACPI Specification Revision 5.0A"
> +#define ASL_COMPLIANCE              "Supports ACPI Specification Revision 5.1"
>
>
>   /* Configuration constants */
> diff --git a/src/acpica/source/compiler/aslglobal.h b/src/acpica/source/compiler/aslglobal.h
> index 4d56c05..53a500e 100644
> --- a/src/acpica/source/compiler/aslglobal.h
> +++ b/src/acpica/source/compiler/aslglobal.h
> @@ -135,11 +135,6 @@
>
>   #ifdef _DECLARE_GLOBALS
>   UINT32                              Gbl_ExceptionCount[ASL_NUM_REPORT_LEVELS] = {0,0,0,0,0,0};
> -char                                AslHexLookup[] =
> -{
> -    '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
> -};
> -
>
>   /* Table below must match ASL_FILE_TYPES in asltypes.h */
>
> @@ -164,7 +159,6 @@ ASL_FILE_INFO                       Gbl_Files [ASL_NUM_FILES] =
>
>   #else
>   extern UINT32                       Gbl_ExceptionCount[ASL_NUM_REPORT_LEVELS];
> -extern char                         AslHexLookup[];
>   extern ASL_FILE_INFO                Gbl_Files [ASL_NUM_FILES];
>   #endif
>
> diff --git a/src/acpica/source/compiler/aslmessages.c b/src/acpica/source/compiler/aslmessages.c
> index 5b271d3..11b5d57 100644
> --- a/src/acpica/source/compiler/aslmessages.c
> +++ b/src/acpica/source/compiler/aslmessages.c
> @@ -305,6 +305,7 @@ const char                      *AslCompilerMsgs [] =
>   /*    ASL_MSG_WRITE */                      "Could not write file",
>   /*    ASL_MSG_RANGE */                      "Constant out of range",
>   /*    ASL_MSG_BUFFER_ALLOCATION */          "Could not allocate line buffer",
> +/*    ASL_MSG_MISSING_DEPENDENCY */         "Missing dependency"
>   };
>
>   /* Table compiler */
> diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h
> index 150425c..5743075 100644
> --- a/src/acpica/source/compiler/aslmessages.h
> +++ b/src/acpica/source/compiler/aslmessages.h
> @@ -307,6 +307,7 @@ typedef enum
>       ASL_MSG_WRITE,
>       ASL_MSG_RANGE,
>       ASL_MSG_BUFFER_ALLOCATION,
> +    ASL_MSG_MISSING_DEPENDENCY,
>
>       /* These messages are used by the Data Table compiler only */
>
> diff --git a/src/acpica/source/compiler/aslmethod.c b/src/acpica/source/compiler/aslmethod.c
> index edf2fa4..58c1cc8 100644
> --- a/src/acpica/source/compiler/aslmethod.c
> +++ b/src/acpica/source/compiler/aslmethod.c
> @@ -180,6 +180,17 @@ MtMethodAnalysisWalkBegin (
>
>           WalkInfo->MethodStack = MethodInfo;
>
> +        /* Special handling for _DSD, must have a _HID also */
> +
> +        if (!ACPI_STRCMP (METHOD_NAME__DSD, Op->Asl.NameSeg))
> +        {
> +            if (!ApFindNameInScope (METHOD_NAME__HID, Op))
> +            {
> +                AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op,
> +                    "_DSD requires _HID in same scope");
> +            }
> +        }
> +
>           /* Get the name node */
>
>           Next = Op->Asl.Child;
> @@ -485,6 +496,15 @@ MtMethodAnalysisWalkBegin (
>               }
>           }
>
> +        else if (!ACPI_STRCMP (METHOD_NAME__DSD, Op->Asl.NameSeg))
> +        {
> +            if (!ApFindNameInScope (METHOD_NAME__HID, Op))
> +            {
> +                AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op,
> +                    "_DSD requires _HID in same scope");
> +            }
> +        }
> +
>           break;
>
>       default:
> diff --git a/src/acpica/source/compiler/aslopcodes.c b/src/acpica/source/compiler/aslopcodes.c
> index 53971e0..bd8ea0e 100644
> --- a/src/acpica/source/compiler/aslopcodes.c
> +++ b/src/acpica/source/compiler/aslopcodes.c
> @@ -695,10 +695,10 @@ OpcDoEisaId (
>               (UINT32) ((UINT8) (InString[1] - 0x40)) << 21 |
>               (UINT32) ((UINT8) (InString[2] - 0x40)) << 16 |
>
> -            (UtHexCharToValue (InString[3])) << 12 |
> -            (UtHexCharToValue (InString[4])) << 8  |
> -            (UtHexCharToValue (InString[5])) << 4  |
> -             UtHexCharToValue (InString[6]);
> +            (AcpiUtAsciiCharToHex (InString[3])) << 12 |
> +            (AcpiUtAsciiCharToHex (InString[4])) << 8  |
> +            (AcpiUtAsciiCharToHex (InString[5])) << 4  |
> +             AcpiUtAsciiCharToHex (InString[6]);
>
>           /* Swap to little-endian to get final ID (see function header) */
>
> @@ -738,7 +738,7 @@ OpcDoUuId (
>       ACPI_PARSE_OBJECT       *Op)
>   {
>       char                    *InString;
> -    char                    *Buffer;
> +    UINT8                   *Buffer;
>       ACPI_STATUS             Status = AE_OK;
>       ACPI_PARSE_OBJECT       *NewOp;
>
> @@ -753,7 +753,7 @@ OpcDoUuId (
>       }
>       else
>       {
> -        (void) AuConvertStringToUuid (InString, Buffer);
> +        AcpiUtConvertStringToUuid (InString, Buffer);
>       }
>
>       /* Change Op to a Buffer */
> diff --git a/src/acpica/source/compiler/aslprepkg.c b/src/acpica/source/compiler/aslprepkg.c
> index 2de5559..8184a3d 100644
> --- a/src/acpica/source/compiler/aslprepkg.c
> +++ b/src/acpica/source/compiler/aslprepkg.c
> @@ -361,6 +361,41 @@ ApCheckPackage (
>               Package, 1, Count);
>           break;
>
> +    case ACPI_PTYPE2_UUID_PAIR:
> +
> +        /* The package contains a variable list of UUID Buffer/Package pairs */
> +
> +        /* The length of the package must be even */
> +
> +        if (Count & 1)
> +        {
> +            sprintf (MsgBuffer, "%4.4s: Package length, %d, must be even.",
> +                Predefined->Info.Name, Count);
> +
> +            AslError (ASL_ERROR, ASL_MSG_RESERVED_PACKAGE_LENGTH,
> +                ParentOp->Asl.Child, MsgBuffer);
> +        }
> +
> +        /* Validate the alternating types */
> +
> +        for (i = 0; i < Count; ++i)
> +        {
> +            if (i & 1)
> +            {
> +                ApCheckObjectType (Predefined->Info.Name, Op,
> +                    Package->RetInfo.ObjectType2, i);
> +            }
> +            else
> +            {
> +                ApCheckObjectType (Predefined->Info.Name, Op,
> +                    Package->RetInfo.ObjectType1, i);
> +            }
> +
> +            Op = Op->Asl.Next;
> +        }
> +
> +        break;
> +
>       case ACPI_PTYPE2:
>       case ACPI_PTYPE2_FIXED:
>       case ACPI_PTYPE2_MIN:
> diff --git a/src/acpica/source/compiler/aslutils.c b/src/acpica/source/compiler/aslutils.c
> index f33c3bd..5a02470 100644
> --- a/src/acpica/source/compiler/aslutils.c
> +++ b/src/acpica/source/compiler/aslutils.c
> @@ -315,37 +315,6 @@ UtEndEvent (
>
>   /*******************************************************************************
>    *
> - * FUNCTION:    UtHexCharToValue
> - *
> - * PARAMETERS:  HexChar             - Hex character in Ascii
> - *
> - * RETURN:      The binary value of the hex character
> - *
> - * DESCRIPTION: Perform ascii-to-hex translation
> - *
> - ******************************************************************************/
> -
> -UINT8
> -UtHexCharToValue (
> -    int                     HexChar)
> -{
> -
> -    if (HexChar <= 0x39)
> -    {
> -        return ((UINT8) (HexChar - 0x30));
> -    }
> -
> -    if (HexChar <= 0x46)
> -    {
> -        return ((UINT8) (HexChar - 0x37));
> -    }
> -
> -    return ((UINT8) (HexChar - 0x57));
> -}
> -
> -
> -/*******************************************************************************
> - *
>    * FUNCTION:    UtConvertByteToHex
>    *
>    * PARAMETERS:  RawByte             - Binary data
> @@ -368,8 +337,8 @@ UtConvertByteToHex (
>       Buffer[0] = '0';
>       Buffer[1] = 'x';
>
> -    Buffer[2] = (UINT8) AslHexLookup[(RawByte >> 4) & 0xF];
> -    Buffer[3] = (UINT8) AslHexLookup[RawByte & 0xF];
> +    Buffer[2] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 4);
> +    Buffer[3] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 0);
>   }
>
>
> @@ -384,7 +353,7 @@ UtConvertByteToHex (
>    * RETURN:      Ascii hex byte is stored in Buffer.
>    *
>    * DESCRIPTION: Perform hex-to-ascii translation. The return data is prefixed
> - *              with "0x"
> + *              with '0', and a trailing 'h' is added.
>    *
>    ******************************************************************************/
>
> @@ -395,8 +364,8 @@ UtConvertByteToAsmHex (
>   {
>
>       Buffer[0] = '0';
> -    Buffer[1] = (UINT8) AslHexLookup[(RawByte >> 4) & 0xF];
> -    Buffer[2] = (UINT8) AslHexLookup[RawByte & 0xF];
> +    Buffer[1] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 4);
> +    Buffer[2] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 0);
>       Buffer[3] = 'h';
>   }
>
> diff --git a/src/acpica/source/compiler/asluuid.c b/src/acpica/source/compiler/asluuid.c
> index ad76c2d..98a63a3 100644
> --- a/src/acpica/source/compiler/asluuid.c
> +++ b/src/acpica/source/compiler/asluuid.c
> @@ -113,42 +113,13 @@
>    *
>    *****************************************************************************/
>
> -
>   #include "aslcompiler.h"
>
>   #define _COMPONENT          ACPI_COMPILER
>           ACPI_MODULE_NAME    ("asluuid")
>
>
> -/*
> - * UUID support functions.
> - *
> - * This table is used to convert an input UUID ascii string to a 16 byte
> - * buffer and the reverse. The table maps a UUID buffer index 0-15 to
> - * the index within the 36-byte UUID string where the associated 2-byte
> - * hex value can be found.
> - *
> - * 36-byte UUID strings are of the form:
> - *     aabbccdd-eeff-gghh-iijj-kkllmmnnoopp
> - * Where aa-pp are one byte hex numbers, made up of two hex digits
> - *
> - * Note: This table is basically the inverse of the string-to-offset table
> - * found in the ACPI spec in the description of the ToUUID macro.
> - */
> -static UINT8    Gbl_MapToUuidOffset[16] =
> -{
> -    6,4,2,0,11,9,16,14,19,21,24,26,28,30,32,34
> -};
> -
> -#define UUID_BUFFER_LENGTH          16
> -#define UUID_STRING_LENGTH          36
> -
> -/* Positions for required hyphens (dashes) in UUID strings */
> -
> -#define UUID_HYPHEN1_OFFSET         8
> -#define UUID_HYPHEN2_OFFSET         13
> -#define UUID_HYPHEN3_OFFSET         18
> -#define UUID_HYPHEN4_OFFSET         23
> +extern UINT8    AcpiGbl_MapToUuidOffset[UUID_BUFFER_LENGTH];
>
>
>   /*******************************************************************************
> @@ -209,42 +180,6 @@ AuValidateUuid (
>
>   /*******************************************************************************
>    *
> - * FUNCTION:    AuConvertStringToUuid
> - *
> - * PARAMETERS:  InString            - 36-byte formatted UUID string
> - *              UuidBuffer          - 16-byte UUID buffer
> - *
> - * RETURN:      Status
> - *
> - * DESCRIPTION: Convert 36-byte formatted UUID string to 16-byte UUID buffer
> - *
> - ******************************************************************************/
> -
> -ACPI_STATUS
> -AuConvertStringToUuid (
> -    char                    *InString,
> -    char                    *UuidBuffer)
> -{
> -    UINT32                  i;
> -
> -
> -    if (!InString || !UuidBuffer)
> -    {
> -        return (AE_BAD_PARAMETER);
> -    }
> -
> -    for (i = 0; i < UUID_BUFFER_LENGTH; i++)
> -    {
> -        UuidBuffer[i]  = (char) (UtHexCharToValue (InString[Gbl_MapToUuidOffset[i]]) << 4);
> -        UuidBuffer[i] |= (char)  UtHexCharToValue (InString[Gbl_MapToUuidOffset[i] + 1]);
> -    }
> -
> -    return (AE_OK);
> -}
> -
> -
> -/*******************************************************************************
> - *
>    * FUNCTION:    AuConvertUuidToString
>    *
>    * PARAMETERS:  UuidBuffer          - 16-byte UUID buffer
> @@ -272,8 +207,11 @@ AuConvertUuidToString (
>
>       for (i = 0; i < UUID_BUFFER_LENGTH; i++)
>       {
> -        OutString[Gbl_MapToUuidOffset[i]] =     (UINT8) AslHexLookup[(UuidBuffer[i] >> 4) & 0xF];
> -        OutString[Gbl_MapToUuidOffset[i] + 1] = (UINT8) AslHexLookup[UuidBuffer[i] & 0xF];
> +        OutString[AcpiGbl_MapToUuidOffset[i]] =
> +            AcpiUtHexToAsciiChar (UuidBuffer[i], 4);
> +
> +        OutString[AcpiGbl_MapToUuidOffset[i] + 1] =
> +            AcpiUtHexToAsciiChar (UuidBuffer[i], 0);
>       }
>
>       /* Insert required hyphens (dashes) */
> diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h
> index 313650a..1fb1f12 100644
> --- a/src/acpica/source/compiler/dtcompiler.h
> +++ b/src/acpica/source/compiler/dtcompiler.h
> @@ -492,6 +492,10 @@ DtCompileFpdt (
>       void                    **PFieldList);
>
>   ACPI_STATUS
> +DtCompileGtdt (
> +    void                    **PFieldList);
> +
> +ACPI_STATUS
>   DtCompileHest (
>       void                    **PFieldList);
>
> diff --git a/src/acpica/source/compiler/dtfield.c b/src/acpica/source/compiler/dtfield.c
> index 46d56f8..e03f891 100644
> --- a/src/acpica/source/compiler/dtfield.c
> +++ b/src/acpica/source/compiler/dtfield.c
> @@ -331,7 +331,7 @@ DtCompileUuid (
>       }
>       else
>       {
> -        Status = AuConvertStringToUuid (InString, (char *) Buffer);
> +        AcpiUtConvertStringToUuid (InString, Buffer);
>       }
>
>       return (Status);
> diff --git a/src/acpica/source/compiler/dttable.c b/src/acpica/source/compiler/dttable.c
> index 5e310d6..db95850 100644
> --- a/src/acpica/source/compiler/dttable.c
> +++ b/src/acpica/source/compiler/dttable.c
> @@ -808,16 +808,21 @@ DtCompileDmar (
>               InfoTable = AcpiDmTableInfoDmar1;
>               break;
>
> -        case ACPI_DMAR_TYPE_ATSR:
> +        case ACPI_DMAR_TYPE_ROOT_ATS:
>
>               InfoTable = AcpiDmTableInfoDmar2;
>               break;
>
> -        case ACPI_DMAR_HARDWARE_AFFINITY:
> +        case ACPI_DMAR_TYPE_HARDWARE_AFFINITY:
>
>               InfoTable = AcpiDmTableInfoDmar3;
>               break;
>
> +        case ACPI_DMAR_TYPE_NAMESPACE:
> +
> +            InfoTable = AcpiDmTableInfoDmar4;
> +            break;
> +
>           default:
>
>               DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "DMAR");
> @@ -834,10 +839,20 @@ DtCompileDmar (
>
>           ParentTable = DtPeekSubtable ();
>           DtInsertSubtable (ParentTable, Subtable);
> -        DtPushSubtable (Subtable);
>
> -        /* Optional Device Scope subtables */
> +        /*
> +         * Optional Device Scope subtables
> +         */
> +        if ((DmarHeader->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
> +            (DmarHeader->Type == ACPI_DMAR_TYPE_NAMESPACE))
> +        {
> +            /* These types do not support device scopes */
>
> +            DtPopSubtable ();
> +            continue;
> +        }
> +
> +        DtPushSubtable (Subtable);
>           DeviceScopeLength = DmarHeader->Length - Subtable->Length -
>               ParentTable->Length;
>           while (DeviceScopeLength)
> @@ -1010,6 +1025,125 @@ DtCompileFadt (
>       return (AE_OK);
>   }
>
> +/******************************************************************************
> + *
> + * FUNCTION:    DtCompileGtdt
> + *
> + * PARAMETERS:  List                - Current field list pointer
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Compile GTDT.
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +DtCompileGtdt (
> +    void                    **List)
> +{
> +    ACPI_STATUS             Status;
> +    DT_SUBTABLE             *Subtable;
> +    DT_SUBTABLE             *ParentTable;
> +    DT_FIELD                **PFieldList = (DT_FIELD **) List;
> +    DT_FIELD                *SubtableStart;
> +    ACPI_SUBTABLE_HEADER    *GtdtHeader;
> +    ACPI_DMTABLE_INFO       *InfoTable;
> +    UINT32                  GtCount;
> +
> +
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdt,
> +                &Subtable, TRUE);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +
> +    ParentTable = DtPeekSubtable ();
> +    DtInsertSubtable (ParentTable, Subtable);
> +
> +    while (*PFieldList)
> +    {
> +        SubtableStart = *PFieldList;
> +        Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdtHdr,
> +                    &Subtable, TRUE);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        ParentTable = DtPeekSubtable ();
> +        DtInsertSubtable (ParentTable, Subtable);
> +        DtPushSubtable (Subtable);
> +
> +        GtdtHeader = ACPI_CAST_PTR (ACPI_SUBTABLE_HEADER, Subtable->Buffer);
> +
> +        switch (GtdtHeader->Type)
> +        {
> +        case ACPI_GTDT_TYPE_TIMER_BLOCK:
> +
> +            InfoTable = AcpiDmTableInfoGtdt0;
> +            break;
> +
> +        case ACPI_GTDT_TYPE_WATCHDOG:
> +
> +            InfoTable = AcpiDmTableInfoGtdt1;
> +            break;
> +
> +        default:
> +
> +            DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "GTDT");
> +            return (AE_ERROR);
> +        }
> +
> +        Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        ParentTable = DtPeekSubtable ();
> +        DtInsertSubtable (ParentTable, Subtable);
> +
> +        /*
> +         * Additional GT block subtable data
> +         */
> +
> +        switch (GtdtHeader->Type)
> +        {
> +        case ACPI_GTDT_TYPE_TIMER_BLOCK:
> +
> +            DtPushSubtable (Subtable);
> +            ParentTable = DtPeekSubtable ();
> +
> +            GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
> +                Subtable->Buffer - sizeof(ACPI_GTDT_HEADER)))->TimerCount;
> +            while (GtCount)
> +            {
> +                Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdt0a,
> +                            &Subtable, TRUE);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return (Status);
> +                }
> +
> +
> +                DtInsertSubtable (ParentTable, Subtable);
> +                GtCount--;
> +            }
> +            DtPopSubtable ();
> +            break;
> +
> +        default:
> +
> +            break;
> +        }
> +
> +        DtPopSubtable ();
> +    }
> +
> +    return (AE_OK);
> +}
> +
>
>   /******************************************************************************
>    *
> @@ -1573,6 +1707,16 @@ DtCompileMadt (
>               InfoTable = AcpiDmTableInfoMadt12;
>               break;
>
> +        case ACPI_MADT_TYPE_GENERIC_MSI_FRAME:
> +
> +            InfoTable = AcpiDmTableInfoMadt13;
> +            break;
> +
> +        case ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR:
> +
> +            InfoTable = AcpiDmTableInfoMadt14;
> +            break;
> +
>           default:
>
>               DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "MADT");
> @@ -1864,6 +2008,11 @@ DtCompilePcct (
>               InfoTable = AcpiDmTableInfoPcct0;
>               break;
>
> +        case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE:
> +
> +            InfoTable = AcpiDmTableInfoPcct1;
> +            break;
> +
>           default:
>
>               DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "PCCT");
> diff --git a/src/acpica/source/compiler/dttemplate.h b/src/acpica/source/compiler/dttemplate.h
> index 681d3e5..eefae69 100644
> --- a/src/acpica/source/compiler/dttemplate.h
> +++ b/src/acpica/source/compiler/dttemplate.h
> @@ -467,7 +467,7 @@ const unsigned char TemplateFadt[] =
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000068    "........" */
>       0x00,0x00,0x00,0x00,0x01,0x08,0x00,0x01,  /* 00000070    "........" */
>       0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000078    "........" */
> -    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000080    "........" */
> +    0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,  /* 00000080    "........" */
>       0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000088    "........" */
>       0x00,0x00,0x00,0x00,0x01,0x20,0x00,0x02,  /* 00000090    "..... .." */
>       0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000098    "........" */
> @@ -506,16 +506,34 @@ const unsigned char TemplateFpdt[] =
>
>   const unsigned char TemplateGtdt[] =
>   {
> -    0x47,0x54,0x44,0x54,0x50,0x00,0x00,0x00,  /* 00000000    "GTDTP..." */
> -    0x01,0xF1,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" */
> -    0x23,0x06,0x11,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "#.. ...." */
> -    0x00,0x00,0x00,0x00,0x01,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    "........" */
> +    0x47,0x54,0x44,0x54,0xe0,0x00,0x00,0x00,  /* 00000000    "GTDT...." */
> +    0x02,0xb0,0x4c,0x49,0x4e,0x41,0x52,0x4f,  /* 00000008    "..LINARO" */
> +    0x52,0x54,0x53,0x4d,0x56,0x45,0x56,0x38,  /* 00000010    "RTSMVEV8" */
> +    0x01,0x00,0x00,0x00,0x49,0x4e,0x54,0x4c,  /* 00000018    "....INTL" */
> +    0x24,0x04,0x14,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "$.. ...." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000028    "........" */
> +    0x1d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000030    "........" */
> +    0x1e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000038    "........" */
> +    0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000040    "........" */
> +    0x1a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000048    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000050    "........" */
> +    0x02,0x00,0x00,0x00,0x60,0x00,0x00,0x00,  /* 00000058    "....`..." */
> +    0x00,0x64,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000060    ".d......" */
> +    0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,  /* 00000068    "........" */
> +    0x14,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,0x00,0x00,0x00,  /* 00000088    "........" */
> +    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000090    "........" */
> +    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000098    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000a0    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000a8    "........" */
> +    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 000000b0    "........" */
> +    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 000000b8    "........" */
> +    0x00,0x00,0x00,0x00,0x01,0x1c,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,0x01,0x00,0x00,0x00,  /* 000000d8    "........" */
>   };
>
>   const unsigned char TemplateHest[] =
> @@ -647,41 +665,48 @@ const unsigned char TemplateLpit[] =
>       0x00,0x00,0x00,0x00                       /* 000000B0    "...."     */
>   };
>
> -/* MADT with ACPI 5.0 subtables */
> +/* MADT with ACPI 5.1 subtables */
>
>   const unsigned char TemplateMadt[] =
>   {
> -    0x41,0x50,0x49,0x43,0xF6,0x00,0x00,0x00,  /* 00000000    "APIC...." */
> -    0x01,0xB0,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" */
> -    0x23,0x06,0x11,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "#.. ...." */
> +    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    "$.. ...." */
>       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,0x28,  /* 000000B0    ".......(" */
> -    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,0x0C,0x18,  /* 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             /* 000000F0    "......"   */
> +    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,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,  /* 00000120    "........" */
> +    0x00,0x00                                 /* 00000128    "..      " */
>   };
>
>   const unsigned char TemplateMcfg[] =
> @@ -775,27 +800,27 @@ const unsigned char TemplateMtmr[] =
>   const unsigned char TemplatePcct[] =
>   {
>       0x50,0x43,0x43,0x54,0xAC,0x00,0x00,0x00,  /* 00000000    "PCCT...." */
> -    0x01,0x97,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
> -    0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45,  /* 00000010    "TEMPLATE" */
> +    0x01,0xCF,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" */
> -    0x15,0x11,0x13,0x20,0x01,0x00,0x00,0x00,  /* 00000020    "... ...." */
> +    0x27,0x06,0x14,0x20,0x01,0x00,0x00,0x00,  /* 00000020    "'.. ...." */
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000028    "........" */
>       0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000030    ".>......" */
> -    0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,  /* 00000038    "........" */
> -    0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,  /* 00000040    """""""""" */
> -    0x01,0x32,0x00,0x03,0x33,0x33,0x33,0x33,  /* 00000048    ".2..3333" */
> -    0x33,0x33,0x33,0x33,0x44,0x44,0x44,0x44,  /* 00000050    "3333DDDD" */
> -    0x44,0x44,0x44,0x44,0x55,0x55,0x55,0x55,  /* 00000058    "DDDDUUUU" */
> -    0x55,0x55,0x55,0x55,0x66,0x66,0x66,0x66,  /* 00000060    "UUUUffff" */
> -    0x77,0x77,0x77,0x77,0x88,0x88,0x00,0x3E,  /* 00000068    "wwww...>" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,  /* 00000070    "........" */
> -    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEE,0xEE,  /* 00000078    "........" */
> -    0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0x01,0x32,  /* 00000080    ".......2" */
> -    0x00,0x03,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,  /* 00000088    "........" */
> -    0xDD,0xDD,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,  /* 00000090    "........" */
> -    0xCC,0xCC,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,  /* 00000098    "........" */
> -    0xBB,0xBB,0xAA,0xAA,0xAA,0xAA,0x99,0x99,  /* 000000A0    "........" */
> -    0x99,0x99,0x88,0x88                       /* 000000A8    "...."     */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000038    "........" */
> +    0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000040    "........" */
> +    0x01,0x32,0x00,0x03,0x00,0x00,0x00,0x00,  /* 00000048    ".2......" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000050    "........" */
> +    0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,  /* 00000058    "........" */
> +    0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,  /* 00000060    "........" */
> +    0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x3E,  /* 00000068    ".......>" */
> +    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000070    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,  /* 00000078    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x32,  /* 00000080    ".......2" */
> +    0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000088    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000090    "........" */
> +    0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,  /* 00000098    "........" */
> +    0xFF,0xFF,0x01,0x00,0x00,0x00,0x01,0x00,  /* 000000A0    "........" */
> +    0x00,0x00,0x01,0x00                       /* 000000A8    "...."     */
>   };
>
>   const unsigned char TemplatePmtt[] =
> diff --git a/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c
> index d3cedf1..51d50c7 100644
> --- a/src/acpica/source/compiler/dtutils.c
> +++ b/src/acpica/source/compiler/dtutils.c
> @@ -573,6 +573,7 @@ DtGetFieldLength (
>       case ACPI_DMT_SPACEID:
>       case ACPI_DMT_ACCWIDTH:
>       case ACPI_DMT_IVRS:
> +    case ACPI_DMT_GTDT:
>       case ACPI_DMT_MADT:
>       case ACPI_DMT_PCCT:
>       case ACPI_DMT_PMTT:
> @@ -584,6 +585,7 @@ DtGetFieldLength (
>       case ACPI_DMT_EINJINST:
>       case ACPI_DMT_ERSTACT:
>       case ACPI_DMT_ERSTINST:
> +    case ACPI_DMT_DMAR_SCOPE:
>
>           ByteLength = 1;
>           break;
> diff --git a/src/acpica/source/components/disassembler/dmbuffer.c b/src/acpica/source/components/disassembler/dmbuffer.c
> index 70d28e3..a43497c 100644
> --- a/src/acpica/source/components/disassembler/dmbuffer.c
> +++ b/src/acpica/source/components/disassembler/dmbuffer.c
> @@ -113,9 +113,9 @@
>    *
>    *****************************************************************************/
>
> -
>   #include "acpi.h"
>   #include "accommon.h"
> +#include "acutils.h"
>   #include "acdisasm.h"
>   #include "acparser.h"
>   #include "amlcode.h"
> @@ -130,6 +130,10 @@
>   /* Local prototypes */
>
>   static void
> +AcpiDmUuid (
> +    ACPI_PARSE_OBJECT       *Op);
> +
> +static void
>   AcpiDmUnicode (
>       ACPI_PARSE_OBJECT       *Op);
>
> @@ -143,6 +147,7 @@ AcpiDmPldBuffer (
>       UINT8                   *ByteData,
>       UINT32                  ByteCount);
>
> +
>   #define ACPI_BUFFER_BYTES_PER_LINE      8
>
>
> @@ -288,6 +293,11 @@ AcpiDmByteList (
>           AcpiOsPrintf ("\n");
>           break;
>
> +    case ACPI_DASM_UUID:
> +
> +        AcpiDmUuid (Op);
> +        break;
> +
>       case ACPI_DASM_UNICODE:
>
>           AcpiDmUnicode (Op);
> @@ -313,6 +323,137 @@ AcpiDmByteList (
>
>   /*******************************************************************************
>    *
> + * FUNCTION:    AcpiDmIsUuidBuffer
> + *
> + * PARAMETERS:  Op              - Buffer Object to be examined
> + *
> + * RETURN:      TRUE if buffer contains a UUID
> + *
> + * DESCRIPTION: Determine if a buffer Op contains a UUID
> + *
> + * To help determine whether the buffer is a UUID versus a raw data buffer,
> + * there a are a couple bytes we can look at:
> + *
> + *    xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
> + *
> + * The variant covered by the UUID specification is indicated by the two most
> + * significant bits of N being 1 0 (i.e., the hexadecimal N will always be
> + * 8, 9, A, or B).
> + *
> + * The variant covered by the UUID specification has five versions. For this
> + * variant, the four bits of M indicates the UUID version (i.e., the
> + * hexadecimal M will be either 1, 2, 3, 4, or 5).
> + *
> + ******************************************************************************/
> +
> +BOOLEAN
> +AcpiDmIsUuidBuffer (
> +    ACPI_PARSE_OBJECT       *Op)
> +{
> +    UINT8                   *ByteData;
> +    UINT32                  ByteCount;
> +    ACPI_PARSE_OBJECT       *SizeOp;
> +    ACPI_PARSE_OBJECT       *NextOp;
> +
> +
> +    /* Buffer size is the buffer argument */
> +
> +    SizeOp = Op->Common.Value.Arg;
> +
> +    /* Next, the initializer byte list to examine */
> +
> +    NextOp = SizeOp->Common.Next;
> +    if (!NextOp)
> +    {
> +        return (FALSE);
> +    }
> +
> +    /* Extract the byte list info */
> +
> +    ByteData = NextOp->Named.Data;
> +    ByteCount = (UINT32) NextOp->Common.Value.Integer;
> +
> +    /* Byte count must be exactly 16 */
> +
> +    if (ByteCount != UUID_BUFFER_LENGTH)
> +    {
> +        return (FALSE);
> +    }
> +
> +    /* Check for valid "M" and "N" values (see function header above) */
> +
> +    if (((ByteData[7] & 0xF0) == 0x00) || /* M={1,2,3,4,5} */
> +        ((ByteData[7] & 0xF0) > 0x50)  ||
> +        ((ByteData[8] & 0xF0) < 0x80)  || /* N={8,9,A,B} */
> +        ((ByteData[8] & 0xF0) > 0xB0))
> +    {
> +        return (FALSE);
> +    }
> +
> +    /* Ignore the Size argument in the disassembly of this buffer op */
> +
> +    SizeOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
> +    return (TRUE);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiDmUuid
> + *
> + * PARAMETERS:  Op              - Byte List op containing a UUID
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Dump a buffer containing a UUID as a standard ASCII string.
> + *
> + * Output Format:
> + * In its canonical form, the UUID is represented by a string containing 32
> + * lowercase hexadecimal digits, displayed in 5 groups separated by hyphens.
> + * The complete form is 8-4-4-4-12 for a total of 36 characters (32
> + * alphanumeric characters representing hex digits and 4 hyphens). In bytes,
> + * 4-2-2-2-6. Example:
> + *
> + *    ToUUID ("107ededd-d381-4fd7-8da9-08e9a6c79644")
> + *
> + ******************************************************************************/
> +
> +static void
> +AcpiDmUuid (
> +    ACPI_PARSE_OBJECT       *Op)
> +{
> +    UINT8                   *Data;
> +    const char              *Description;
> +
> +
> +    Data = ACPI_CAST_PTR (UINT8, Op->Named.Data);
> +
> +    /* Emit the 36-byte UUID string in the proper format/order */
> +
> +    AcpiOsPrintf (
> +        "\"%2.2x%2.2x%2.2x%2.2x-"
> +        "%2.2x%2.2x-"
> +        "%2.2x%2.2x-"
> +        "%2.2x%2.2x-"
> +        "%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x\")",
> +        Data[3], Data[2], Data[1], Data[0],
> +        Data[5], Data[4],
> +        Data[7], Data[6],
> +        Data[8], Data[9],
> +        Data[10], Data[11], Data[12], Data[13], Data[14], Data[15]);
> +
> +    /* Dump the UUID description string if available */
> +
> +    Description = AcpiAhMatchUuid (Data);
> +    if (Description)
> +    {
> +        AcpiOsPrintf (" /* %s */", Description);
> +    }
> +}
> +
> +
> +/*******************************************************************************
> + *
>    * FUNCTION:    AcpiDmIsUnicodeBuffer
>    *
>    * PARAMETERS:  Op              - Buffer Object to be examined
> diff --git a/src/acpica/source/components/disassembler/dmopcode.c b/src/acpica/source/components/disassembler/dmopcode.c
> index db30c00..d15e215 100644
> --- a/src/acpica/source/components/disassembler/dmopcode.c
> +++ b/src/acpica/source/components/disassembler/dmopcode.c
> @@ -899,7 +899,12 @@ AcpiDmDisassembleOneOp (
>               }
>           }
>
> -        if (AcpiDmIsUnicodeBuffer (Op))
> +        if (AcpiDmIsUuidBuffer (Op))
> +        {
> +            Op->Common.DisasmOpcode = ACPI_DASM_UUID;
> +            AcpiOsPrintf ("ToUUID (");
> +        }
> +        else if (AcpiDmIsUnicodeBuffer (Op))
>           {
>               Op->Common.DisasmOpcode = ACPI_DASM_UNICODE;
>               AcpiOsPrintf ("Unicode (");
> diff --git a/src/acpica/source/components/disassembler/dmwalk.c b/src/acpica/source/components/disassembler/dmwalk.c
> index 8c877ae..1f63e08 100644
> --- a/src/acpica/source/components/disassembler/dmwalk.c
> +++ b/src/acpica/source/components/disassembler/dmwalk.c
> @@ -357,7 +357,8 @@ AcpiDmBlockType (
>
>       case AML_BUFFER_OP:
>
> -        if (Op->Common.DisasmOpcode == ACPI_DASM_UNICODE)
> +        if ((Op->Common.DisasmOpcode == ACPI_DASM_UNICODE) ||
> +            (Op->Common.DisasmOpcode == ACPI_DASM_UUID))
>           {
>               return (BLOCK_NONE);
>           }
> diff --git a/src/acpica/source/components/events/evgpe.c b/src/acpica/source/components/events/evgpe.c
> index bb955ac..ea1a3a6 100644
> --- a/src/acpica/source/components/events/evgpe.c
> +++ b/src/acpica/source/components/events/evgpe.c
> @@ -833,22 +833,6 @@ AcpiEvGpeDispatch (
>       }
>
>       /*
> -     * If edge-triggered, clear the GPE status bit now. Note that
> -     * level-triggered events are cleared after the GPE is serviced.
> -     */
> -    if ((GpeEventInfo->Flags & ACPI_GPE_XRUPT_TYPE_MASK) ==
> -            ACPI_GPE_EDGE_TRIGGERED)
> -    {
> -        Status = AcpiHwClearGpe (GpeEventInfo);
> -        if (ACPI_FAILURE (Status))
> -        {
> -            ACPI_EXCEPTION ((AE_INFO, Status,
> -                "Unable to clear GPE %02X", GpeNumber));
> -            return_UINT32 (ACPI_INTERRUPT_NOT_HANDLED);
> -        }
> -    }
> -
> -    /*
>        * Always disable the GPE so that it does not keep firing before
>        * any asynchronous activity completes (either from the execution
>        * of a GPE method or an asynchronous GPE handler.)
> @@ -866,6 +850,24 @@ AcpiEvGpeDispatch (
>       }
>
>       /*
> +     * If edge-triggered, clear the GPE status bit now. Note that
> +     * level-triggered events are cleared after the GPE is serviced.
> +     */
> +    if ((GpeEventInfo->Flags & ACPI_GPE_XRUPT_TYPE_MASK) ==
> +            ACPI_GPE_EDGE_TRIGGERED)
> +    {
> +        Status = AcpiHwClearGpe (GpeEventInfo);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            ACPI_EXCEPTION ((AE_INFO, Status,
> +                "Unable to clear GPE %02X", GpeNumber));
> +            (void) AcpiHwLowSetGpe (GpeEventInfo,
> +                    ACPI_GPE_CONDITIONAL_ENABLE);
> +            return_UINT32 (ACPI_INTERRUPT_NOT_HANDLED);
> +        }
> +    }
> +
> +    /*
>        * Dispatch the GPE to either an installed handler or the control
>        * method associated with this GPE (_Lxx or _Exx). If a handler
>        * exists, we invoke it and do not attempt to run the method.
> diff --git a/src/acpica/source/components/events/evxfgpe.c b/src/acpica/source/components/events/evxfgpe.c
> index e180bd3..b116322 100644
> --- a/src/acpica/source/components/events/evxfgpe.c
> +++ b/src/acpica/source/components/events/evxfgpe.c
> @@ -213,12 +213,23 @@ AcpiEnableGpe (
>
>       Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock);
>
> -    /* Ensure that we have a valid GPE number */
> -
> +    /*
> +     * Ensure that we have a valid GPE number and that there is some way
> +     * of handling the GPE (handler or a GPE method). In other words, we
> +     * won't allow a valid GPE to be enabled if there is no way to handle it.
> +     */
>       GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber);
>       if (GpeEventInfo)
>       {
> -        Status = AcpiEvAddGpeReference (GpeEventInfo);
> +        if ((GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK) !=
> +            ACPI_GPE_DISPATCH_NONE)
> +        {
> +            Status = AcpiEvAddGpeReference (GpeEventInfo);
> +        }
> +        else
> +        {
> +            Status = AE_NO_HANDLER;
> +        }
>       }
>
>       AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags);
> @@ -348,6 +359,60 @@ ACPI_EXPORT_SYMBOL (AcpiSetGpe)
>
>   /*******************************************************************************
>    *
> + * FUNCTION:    AcpiMarkGpeForWake
> + *
> + * PARAMETERS:  GpeDevice           - Parent GPE Device. NULL for GPE0/GPE1
> + *              GpeNumber           - GPE level within the GPE block
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Mark a GPE as having the ability to wake the system. Simply
> + *              sets the ACPI_GPE_CAN_WAKE flag.
> + *
> + * Some potential callers of AcpiSetupGpeForWake may know in advance that
> + * there won't be any notify handlers installed for device wake notifications
> + * from the given GPE (one example is a button GPE in Linux). For these cases,
> + * AcpiMarkGpeForWake should be used instead of AcpiSetupGpeForWake.
> + * This will set the ACPI_GPE_CAN_WAKE flag for the GPE without trying to
> + * setup implicit wake notification for it (since there's no handler method).
> + *
> + ******************************************************************************/
> +
> +ACPI_STATUS
> +AcpiMarkGpeForWake (
> +    ACPI_HANDLE             GpeDevice,
> +    UINT32                  GpeNumber)
> +{
> +    ACPI_GPE_EVENT_INFO     *GpeEventInfo;
> +    ACPI_STATUS             Status = AE_BAD_PARAMETER;
> +    ACPI_CPU_FLAGS          Flags;
> +
> +
> +    ACPI_FUNCTION_TRACE (AcpiMarkGpeForWake);
> +
> +
> +    Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock);
> +
> +    /* Ensure that we have a valid GPE number */
> +
> +    GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber);
> +    if (GpeEventInfo)
> +    {
> +        /* Mark the GPE as a possible wake event */
> +
> +        GpeEventInfo->Flags |= ACPI_GPE_CAN_WAKE;
> +        Status = AE_OK;
> +    }
> +
> +    AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags);
> +    return_ACPI_STATUS (Status);
> +}
> +
> +ACPI_EXPORT_SYMBOL (AcpiMarkGpeForWake)
> +
> +
> +/*******************************************************************************
> + *
>    * FUNCTION:    AcpiSetupGpeForWake
>    *
>    * PARAMETERS:  WakeDevice          - Device associated with the GPE (via _PRW)
> diff --git a/src/acpica/source/components/executer/exdebug.c b/src/acpica/source/components/executer/exdebug.c
> index e374e13..b7d47fd 100644
> --- a/src/acpica/source/components/executer/exdebug.c
> +++ b/src/acpica/source/components/executer/exdebug.c
> @@ -154,6 +154,7 @@ AcpiExDoDebugObject (
>       UINT32                  Index)
>   {
>       UINT32                  i;
> +    UINT32                  Timer;
>
>
>       ACPI_FUNCTION_TRACE_PTR (ExDoDebugObject, SourceDesc);
> @@ -168,12 +169,20 @@ AcpiExDoDebugObject (
>       }
>
>       /*
> +     * We will emit the current timer value (in microseconds) with each
> +     * debug output. Only need the lower 26 bits. This allows for 67
> +     * million microseconds or 67 seconds before rollover.
> +     */
> +    Timer = (UINT32) (AcpiOsGetTimer () / 10); /* (100 nanoseconds to microseconds) */
> +    Timer &= 0x03FFFFFF;
> +
> +    /*
>        * Print line header as long as we are not in the middle of an
>        * object display
>        */
>       if (!((Level > 0) && Index == 0))
>       {
> -        AcpiOsPrintf ("[ACPI Debug] %*s", Level, " ");
> +        AcpiOsPrintf ("[ACPI Debug %.8u] %*s", Timer, Level, " ");
>       }
>
>       /* Display the index for package output only */
> diff --git a/src/acpica/source/components/executer/exdump.c b/src/acpica/source/components/executer/exdump.c
> index 7f66714..68a0054 100644
> --- a/src/acpica/source/components/executer/exdump.c
> +++ b/src/acpica/source/components/executer/exdump.c
> @@ -580,7 +580,7 @@ AcpiExDumpObject (
>                   }
>               }
>
> -            AcpiOsPrintf ("\n", Next);
> +            AcpiOsPrintf ("\n");
>               break;
>
>           case ACPI_EXD_HDLR_LIST:
> @@ -614,7 +614,7 @@ AcpiExDumpObject (
>                   }
>               }
>
> -            AcpiOsPrintf ("\n", Next);
> +            AcpiOsPrintf ("\n");
>               break;
>
>           case ACPI_EXD_RGN_LIST:
> @@ -648,7 +648,7 @@ AcpiExDumpObject (
>                   }
>               }
>
> -            AcpiOsPrintf ("\n", Next);
> +            AcpiOsPrintf ("\n");
>               break;
>
>           case ACPI_EXD_NODE:
> diff --git a/src/acpica/source/components/executer/exfield.c b/src/acpica/source/components/executer/exfield.c
> index e8ddec8..55934de 100644
> --- a/src/acpica/source/components/executer/exfield.c
> +++ b/src/acpica/source/components/executer/exfield.c
> @@ -275,14 +275,13 @@ AcpiExReadDataFromField (
>               Length = AcpiExGetSerialAccessLength (AccessorType,
>                   ObjDesc->Field.AccessLength);
>
> -	    /*
> -             * Add additional 2 bytes for modeled GenericSerialBus data buffer:
> -             * typedef struct {
> -             *     BYTEStatus; // Byte 0 of the data buffer
> -             *     BYTELength; // Byte 1 of the data buffer
> -             *     BYTE[x-1]Data; // Bytes 2-x of the arbitrary length data buffer,
> -             * }
> -	     */
> +            /*
> +             * Add additional 2 bytes for the GenericSerialBus data buffer:
> +             *
> +             *     Status;      (Byte 0 of the data buffer)
> +             *     Length;      (Byte 1 of the data buffer)
> +             *     Data[x-1];   (Bytes 2-x of the arbitrary length data buffer)
> +             */
>               Length += 2;
>               Function = ACPI_READ | (AccessorType << 16);
>           }
> @@ -469,14 +468,13 @@ AcpiExWriteDataToField (
>               Length = AcpiExGetSerialAccessLength (AccessorType,
>                   ObjDesc->Field.AccessLength);
>
> -	    /*
> -             * Add additional 2 bytes for modeled GenericSerialBus data buffer:
> -             * typedef struct {
> -             *     BYTEStatus; // Byte 0 of the data buffer
> -             *     BYTELength; // Byte 1 of the data buffer
> -             *     BYTE[x-1]Data; // Bytes 2-x of the arbitrary length data buffer,
> -             * }
> -	     */
> +            /*
> +             * Add additional 2 bytes for the GenericSerialBus data buffer:
> +             *
> +             *     Status;      (Byte 0 of the data buffer)
> +             *     Length;      (Byte 1 of the data buffer)
> +             *     Data[x-1];   (Bytes 2-x of the arbitrary length data buffer)
> +             */
>               Length += 2;
>               Function = ACPI_WRITE | (AccessorType << 16);
>           }
> diff --git a/src/acpica/source/components/namespace/nsobject.c b/src/acpica/source/components/namespace/nsobject.c
> index 060157b..74470f0 100644
> --- a/src/acpica/source/components/namespace/nsobject.c
> +++ b/src/acpica/source/components/namespace/nsobject.c
> @@ -335,17 +335,16 @@ AcpiNsDetachObject (
>           {
>               Node->Object = Node->Object->Common.NextObject;
>           }
> -    }
>
> -    /*
> -     * Detach the object from any data objects (which are still held by
> -     * the namespace node)
> -     */
> -
> -    if (ObjDesc->Common.NextObject &&
> -       ((ObjDesc->Common.NextObject)->Common.Type == ACPI_TYPE_LOCAL_DATA))
> -    {
> -       ObjDesc->Common.NextObject = NULL;
> +        /*
> +         * Detach the object from any data objects (which are still held by
> +         * the namespace node)
> +         */
> +        if (ObjDesc->Common.NextObject &&
> +           ((ObjDesc->Common.NextObject)->Common.Type == ACPI_TYPE_LOCAL_DATA))
> +        {
> +           ObjDesc->Common.NextObject = NULL;
> +        }
>       }
>
>       /* Reset the node type to untyped */
> diff --git a/src/acpica/source/components/utilities/utdecode.c b/src/acpica/source/components/utilities/utdecode.c
> index 8566819..61826fe 100644
> --- a/src/acpica/source/components/utilities/utdecode.c
> +++ b/src/acpica/source/components/utilities/utdecode.c
> @@ -165,38 +165,6 @@ const UINT8                     AcpiGbl_NsProperties[ACPI_NUM_NS_TYPES] =
>
>   /*******************************************************************************
>    *
> - * FUNCTION:    AcpiUtHexToAsciiChar
> - *
> - * PARAMETERS:  Integer             - Contains the hex digit
> - *              Position            - bit position of the digit within the
> - *                                    integer (multiple of 4)
> - *
> - * RETURN:      The converted Ascii character
> - *
> - * DESCRIPTION: Convert a hex digit to an Ascii character
> - *
> - ******************************************************************************/
> -
> -/* Hex to ASCII conversion table */
> -
> -static const char           AcpiGbl_HexToAscii[] =
> -{
> -    '0','1','2','3','4','5','6','7',
> -    '8','9','A','B','C','D','E','F'
> -};
> -
> -char
> -AcpiUtHexToAsciiChar (
> -    UINT64                  Integer,
> -    UINT32                  Position)
> -{
> -
> -    return (AcpiGbl_HexToAscii[(Integer >> Position) & 0xF]);
> -}
> -
> -
> -/*******************************************************************************
> - *
>    * FUNCTION:    AcpiUtGetRegionName
>    *
>    * PARAMETERS:  Space ID            - ID for the region
> @@ -613,7 +581,8 @@ static const char           *AcpiGbl_GenericNotify[ACPI_NOTIFY_MAX + 1] =
>       /* 09 */ "Device PLD Check",
>       /* 0A */ "Reserved",
>       /* 0B */ "System Locality Update",
> -    /* 0C */ "Shutdown Request"
> +    /* 0C */ "Shutdown Request",
> +    /* 0D */ "System Resource Affinity Update"
>   };
>
>   static const char           *AcpiGbl_DeviceNotify[4] =
> @@ -647,7 +616,7 @@ AcpiUtGetNotifyName (
>       ACPI_OBJECT_TYPE        Type)
>   {
>
> -    /* 00 - 0C are common to all object types */
> +    /* 00 - 0D are common to all object types */
>
>       if (NotifyValue <= ACPI_NOTIFY_MAX)
>       {
> diff --git a/src/acpica/source/components/utilities/utfileio.c b/src/acpica/source/components/utilities/utfileio.c
> index 78807f2..9501e22 100644
> --- a/src/acpica/source/components/utilities/utfileio.c
> +++ b/src/acpica/source/components/utilities/utfileio.c
> @@ -304,8 +304,7 @@ AcpiUtReadTable (
>               Status = FlCheckForAscii (fp, NULL, FALSE);
>               if (ACPI_SUCCESS (Status))
>               {
> -                AcpiOsPrintf ("File appears to be ASCII only, must be binary\n",
> -                    TableHeader.Length, FileSize);
> +                AcpiOsPrintf ("File appears to be ASCII only, must be binary\n");
>               }
>   #endif
>               return (AE_BAD_HEADER);
> diff --git a/src/acpica/source/components/utilities/uthex.c b/src/acpica/source/components/utilities/uthex.c
> new file mode 100644
> index 0000000..ba2b259
> --- /dev/null
> +++ b/src/acpica/source/components/utilities/uthex.c
> @@ -0,0 +1,185 @@
> +/******************************************************************************
> + *
> + * Module Name: uthex -- Hex/ASCII support functions
> + *
> + *****************************************************************************/
> +
> +/******************************************************************************
> + *
> + * 1. Copyright Notice
> + *
> + * Some or all of this work - Copyright (c) 1999 - 2014, Intel Corp.
> + * All rights reserved.
> + *
> + * 2. License
> + *
> + * 2.1. This is your license from Intel Corp. under its intellectual property
> + * rights. You may have additional license terms from the party that provided
> + * you this software, covering your right to use that party's intellectual
> + * property rights.
> + *
> + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
> + * copy of the source code appearing in this file ("Covered Code") an
> + * irrevocable, perpetual, worldwide license under Intel's copyrights in the
> + * base code distributed originally by Intel ("Original Intel Code") to copy,
> + * make derivatives, distribute, use and display any portion of the Covered
> + * Code in any form, with the right to sublicense such rights; and
> + *
> + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
> + * license (with the right to sublicense), under only those claims of Intel
> + * patents that are infringed by the Original Intel Code, to make, use, sell,
> + * offer to sell, and import the Covered Code and derivative works thereof
> + * solely to the minimum extent necessary to exercise the above copyright
> + * license, and in no event shall the patent license extend to any additions
> + * to or modifications of the Original Intel Code. No other license or right
> + * is granted directly or by implication, estoppel or otherwise;
> + *
> + * The above copyright and patent license is granted only if the following
> + * conditions are met:
> + *
> + * 3. Conditions
> + *
> + * 3.1. Redistribution of Source with Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification with rights to further distribute source must include
> + * the above Copyright Notice, the above License, this list of Conditions,
> + * and the following Disclaimer and Export Compliance provision. In addition,
> + * Licensee must cause all Covered Code to which Licensee contributes to
> + * contain a file documenting the changes Licensee made to create that Covered
> + * Code and the date of any change. Licensee must include in that file the
> + * documentation of any changes made by any predecessor Licensee. Licensee
> + * must include a prominent statement that the modification is derived,
> + * directly or indirectly, from Original Intel Code.
> + *
> + * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification without rights to further distribute source must
> + * include the following Disclaimer and Export Compliance provision in the
> + * documentation and/or other materials provided with distribution. In
> + * addition, Licensee may not authorize further sublicense of source of any
> + * portion of the Covered Code, and must include terms to the effect that the
> + * license from Licensee to its licensee is limited to the intellectual
> + * property embodied in the software Licensee provides to its licensee, and
> + * not to intellectual property embodied in modifications its licensee may
> + * make.
> + *
> + * 3.3. Redistribution of Executable. Redistribution in executable form of any
> + * substantial portion of the Covered Code or modification must reproduce the
> + * above Copyright Notice, and the following Disclaimer and Export Compliance
> + * provision in the documentation and/or other materials provided with the
> + * distribution.
> + *
> + * 3.4. Intel retains all right, title, and interest in and to the Original
> + * Intel Code.
> + *
> + * 3.5. Neither the name Intel nor any other trademark owned or controlled by
> + * Intel shall be used in advertising or otherwise to promote the sale, use or
> + * other dealings in products derived from or relating to the Covered Code
> + * without prior written authorization from Intel.
> + *
> + * 4. Disclaimer and Export Compliance
> + *
> + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
> + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
> + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
> + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
> + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
> + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
> + * PARTICULAR PURPOSE.
> + *
> + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
> + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
> + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
> + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
> + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
> + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
> + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
> + * LIMITED REMEDY.
> + *
> + * 4.3. Licensee shall not export, either directly or indirectly, any of this
> + * software or system incorporating such software without first obtaining any
> + * required license or other approval from the U. S. Department of Commerce or
> + * any other agency or department of the United States Government. In the
> + * event Licensee exports any such software from the United States or
> + * re-exports any such software from a foreign destination, Licensee shall
> + * ensure that the distribution and export/re-export of the software is in
> + * compliance with all laws, regulations, orders, or other restrictions of the
> + * U.S. Export Administration Regulations. Licensee agrees that neither it nor
> + * any of its subsidiaries will export/re-export any technical data, process,
> + * software, or service, directly or indirectly, to any country for which the
> + * United States government or any agency thereof requires an export license,
> + * other governmental approval, or letter of assurance, without first obtaining
> + * such license, approval or letter.
> + *
> + *****************************************************************************/
> +
> +#define __UTHEX_C__
> +
> +#include "acpi.h"
> +#include "accommon.h"
> +
> +#define _COMPONENT          ACPI_COMPILER
> +        ACPI_MODULE_NAME    ("uthex")
> +
> +
> +/* Hex to ASCII conversion table */
> +
> +static char                 AcpiGbl_HexToAscii[] =
> +{
> +    '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
> +};
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiUtHexToAsciiChar
> + *
> + * PARAMETERS:  Integer             - Contains the hex digit
> + *              Position            - bit position of the digit within the
> + *                                    integer (multiple of 4)
> + *
> + * RETURN:      The converted Ascii character
> + *
> + * DESCRIPTION: Convert a hex digit to an Ascii character
> + *
> + ******************************************************************************/
> +
> +char
> +AcpiUtHexToAsciiChar (
> +    UINT64                  Integer,
> +    UINT32                  Position)
> +{
> +
> +    return (AcpiGbl_HexToAscii[(Integer >> Position) & 0xF]);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiUtHexCharToValue
> + *
> + * PARAMETERS:  AsciiChar             - Hex character in Ascii
> + *
> + * RETURN:      The binary value of the ascii/hex character
> + *
> + * DESCRIPTION: Perform ascii-to-hex translation
> + *
> + ******************************************************************************/
> +
> +UINT8
> +AcpiUtAsciiCharToHex (
> +    int                     HexChar)
> +{
> +
> +    if (HexChar <= 0x39)
> +    {
> +        return ((UINT8) (HexChar - 0x30));
> +    }
> +
> +    if (HexChar <= 0x46)
> +    {
> +        return ((UINT8) (HexChar - 0x37));
> +    }
> +
> +    return ((UINT8) (HexChar - 0x57));
> +}
> diff --git a/src/acpica/source/components/utilities/utprint.c b/src/acpica/source/components/utilities/utprint.c
> index d1bcccf..543bad8 100644
> --- a/src/acpica/source/components/utilities/utprint.c
> +++ b/src/acpica/source/components/utilities/utprint.c
> @@ -160,6 +160,12 @@ AcpiUtPutNumber (
>       BOOLEAN                 Upper);
>
>
> +/* Module globals */
> +
> +static const char           AcpiGbl_LowerHexDigits[] = "0123456789abcdef";
> +static const char           AcpiGbl_UpperHexDigits[] = "0123456789ABCDEF";
> +
> +
>   /*******************************************************************************
>    *
>    * FUNCTION:    AcpiUtBoundStringLength
> @@ -167,7 +173,7 @@ AcpiUtPutNumber (
>    * PARAMETERS:  String              - String with boundary
>    *              Count               - Boundary of the string
>    *
> - * RETURN:      Length of the string.
> + * RETURN:      Length of the string. Less than or equal to Count.
>    *
>    * DESCRIPTION: Calculate the length of a string with boundary.
>    *
> @@ -217,8 +223,8 @@ AcpiUtBoundStringOutput (
>       {
>           *String = c;
>       }
> -    ++String;
>
> +    ++String;
>       return (String);
>   }
>
> @@ -246,15 +252,13 @@ AcpiUtPutNumber (
>       UINT8                   Base,
>       BOOLEAN                 Upper)
>   {
> -    const char              LowerDigits[] = "0123456789abcdef";
> -    const char              UpperDigits[] = "0123456789ABCDEF";
>       const char              *Digits;
>       UINT64                  DigitIndex;
>       char                    *Pos;
>
>
>       Pos = String;
> -    Digits = Upper ? UpperDigits : LowerDigits;
> +    Digits = Upper ? AcpiGbl_UpperHexDigits : AcpiGbl_LowerHexDigits;
>
>       if (Number == 0)
>       {
> @@ -268,8 +272,8 @@ AcpiUtPutNumber (
>               *(Pos++) = Digits[DigitIndex];
>           }
>       }
> -    /* *(Pos++) = '0'; */
>
> +    /* *(Pos++) = '0'; */
>       return (Pos);
>   }
>
> @@ -300,8 +304,8 @@ AcpiUtScanNumber (
>           Number *= 10;
>           Number += *(String++) - '0';
>       }
> -    *NumberPtr = Number;
>
> +    *NumberPtr = Number;
>       return (String);
>   }
>
> @@ -336,8 +340,8 @@ AcpiUtPrintNumber (
>       {
>           *(Pos2++) = *(--Pos1);
>       }
> -    *Pos2 = 0;
>
> +    *Pos2 = 0;
>       return (String);
>   }
>
> @@ -370,6 +374,7 @@ AcpiUtFormatNumber (
>       INT32                   Precision,
>       UINT8                   Type)
>   {
> +    char                    *Pos;
>       char                    Sign;
>       char                    Zero;
>       BOOLEAN                 NeedPrefix;
> @@ -378,12 +383,13 @@ AcpiUtFormatNumber (
>       char                    ReversedString[66];
>
>
> -    /* Perform sanity checks */
> +    /* Parameter validation */
>
>       if (Base < 2 || Base > 16)
>       {
> -        return NULL;
> +        return (NULL);
>       }
> +
>       if (Type & ACPI_FORMAT_LEFT)
>       {
>           Type &= ~ACPI_FORMAT_ZERO;
> @@ -426,9 +432,8 @@ AcpiUtFormatNumber (
>
>       /* Generate full string in reverse order */
>
> -    i = ACPI_PTR_DIFF (
> -            AcpiUtPutNumber (ReversedString, Number, Base, Upper),
> -	    ReversedString);
> +    Pos = AcpiUtPutNumber (ReversedString, Number, Base, Upper);
> +    i = ACPI_PTR_DIFF (Pos, ReversedString);
>
>       /* Printing 100 using %2d gives "100", not "00" */
>
> @@ -436,6 +441,7 @@ AcpiUtFormatNumber (
>       {
>           Precision = i;
>       }
> +
>       Width -= Precision;
>
>       /* Output the string */
> @@ -458,7 +464,7 @@ AcpiUtFormatNumber (
>           {
>               String = AcpiUtBoundStringOutput (String, End,
>                           Upper ? 'X' : 'x');
> -	}
> +        }
>       }
>       if (!(Type & ACPI_FORMAT_LEFT))
>       {
> @@ -467,6 +473,7 @@ AcpiUtFormatNumber (
>               String = AcpiUtBoundStringOutput (String, End, Zero);
>           }
>       }
> +
>       while (i <= --Precision)
>       {
>           String = AcpiUtBoundStringOutput (String, End, '0');
> @@ -494,7 +501,7 @@ AcpiUtFormatNumber (
>    *              Format              - Standard printf format
>    *              Args                - Argument list
>    *
> - * RETURN:      Size of successfully output bytes
> + * RETURN:      Number of bytes actually written.
>    *
>    * DESCRIPTION: Formatted output to a string using argument list pointer.
>    *
> @@ -525,7 +532,7 @@ AcpiUtVsnprintf (
>       Pos = String;
>       End = String + Size;
>
> -    for (; *Format ; ++Format)
> +    for (; *Format; ++Format)
>       {
>           if (*Format != '%')
>           {
> @@ -566,6 +573,7 @@ AcpiUtVsnprintf (
>
>           /* Process width */
>
> +        Width = -1;
>           if (ACPI_IS_DIGIT (*Format))
>           {
>               Format = AcpiUtScanNumber (Format, &Number);
> @@ -574,7 +582,7 @@ AcpiUtVsnprintf (
>           else if (*Format == '*')
>           {
>               ++Format;
> -            Width = va_arg(Args, int);
> +            Width = va_arg (Args, int);
>               if (Width < 0)
>               {
>                   Width = -Width;
> @@ -584,6 +592,7 @@ AcpiUtVsnprintf (
>
>           /* Process precision */
>
> +        Precision = -1;
>           if (*Format == '.')
>           {
>               ++Format;
> @@ -595,7 +604,7 @@ AcpiUtVsnprintf (
>               else if (*Format == '*')
>               {
>                   ++Format;
> -                Precision = va_arg(Args, int);
> +                Precision = va_arg (Args, int);
>               }
>               if (Precision < 0)
>               {
> @@ -605,10 +614,12 @@ AcpiUtVsnprintf (
>
>           /* Process qualifier */
>
> +        Qualifier = -1;
>           if (*Format == 'h' || *Format == 'l' || *Format == 'L')
>           {
>               Qualifier = *Format;
>               ++Format;
> +
>               if (Qualifier == 'l' && *Format == 'l')
>               {
>                   Qualifier = 'L';
> @@ -632,8 +643,10 @@ AcpiUtVsnprintf (
>                       Pos = AcpiUtBoundStringOutput (Pos, End, ' ');
>                   }
>               }
> +
>               c = (char) va_arg (Args, int);
>               Pos = AcpiUtBoundStringOutput (Pos, End, c);
> +
>               while (--Width > 0)
>               {
>                   Pos = AcpiUtBoundStringOutput (Pos, End, ' ');
> @@ -696,10 +709,10 @@ AcpiUtVsnprintf (
>                   Width = 2 * sizeof (void *);
>                   Type |= ACPI_FORMAT_ZERO;
>               }
> +
>               p = va_arg (Args, void *);
>               Pos = AcpiUtFormatNumber (Pos, End,
> -                    ACPI_TO_INTEGER (p),
> -                    16, Width, Precision, Type);
> +                    ACPI_TO_INTEGER (p), 16, Width, Precision, Type);
>               continue;
>
>           default:
> @@ -748,7 +761,8 @@ AcpiUtVsnprintf (
>                   Number = (signed int) Number;
>               }
>           }
> -        Pos = AcpiUtFormatNumber(Pos, End, Number, Base,
> +
> +        Pos = AcpiUtFormatNumber (Pos, End, Number, Base,
>                   Width, Precision, Type);
>       }
>
> @@ -776,7 +790,7 @@ AcpiUtVsnprintf (
>    *              Size                - Boundary of the string
>    *              Format, ...         - Standard printf format
>    *
> - * RETURN:      Size of successfully output bytes
> + * RETURN:      Number of bytes actually written.
>    *
>    * DESCRIPTION: Formatted output to a string.
>    *
> @@ -810,7 +824,7 @@ AcpiUtSnprintf (
>    *              Format              - Standard printf format
>    *              Args                - Argument list
>    *
> - * RETURN:      Size of successfully output bytes
> + * RETURN:      Number of bytes actually written.
>    *
>    * DESCRIPTION: Formatted output to a file using argument list pointer.
>    *
> @@ -827,8 +841,9 @@ AcpiUtFileVprintf (
>
>
>       Flags = AcpiOsAcquireLock (AcpiGbl_PrintLock);
> -    Length = AcpiUtVsnprintf(AcpiGbl_PrintBuffer,
> +    Length = AcpiUtVsnprintf (AcpiGbl_PrintBuffer,
>                   sizeof (AcpiGbl_PrintBuffer), Format, Args);
> +
>       (void) AcpiOsWriteFile (File, AcpiGbl_PrintBuffer, Length, 1);
>       AcpiOsReleaseLock (AcpiGbl_PrintLock, Flags);
>
> @@ -843,7 +858,7 @@ AcpiUtFileVprintf (
>    * PARAMETERS:  File                - File descriptor
>    *              Format, ...         - Standard printf format
>    *
> - * RETURN:      Size of successfully output bytes
> + * RETURN:      Number of bytes actually written.
>    *
>    * DESCRIPTION: Formatted output to a file.
>    *
> diff --git a/src/acpica/source/components/utilities/utuuid.c b/src/acpica/source/components/utilities/utuuid.c
> new file mode 100644
> index 0000000..f5c2e40
> --- /dev/null
> +++ b/src/acpica/source/components/utilities/utuuid.c
> @@ -0,0 +1,175 @@
> +/******************************************************************************
> + *
> + * Module Name: utuuid -- UUID support functions
> + *
> + *****************************************************************************/
> +
> +/******************************************************************************
> + *
> + * 1. Copyright Notice
> + *
> + * Some or all of this work - Copyright (c) 1999 - 2014, Intel Corp.
> + * All rights reserved.
> + *
> + * 2. License
> + *
> + * 2.1. This is your license from Intel Corp. under its intellectual property
> + * rights. You may have additional license terms from the party that provided
> + * you this software, covering your right to use that party's intellectual
> + * property rights.
> + *
> + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
> + * copy of the source code appearing in this file ("Covered Code") an
> + * irrevocable, perpetual, worldwide license under Intel's copyrights in the
> + * base code distributed originally by Intel ("Original Intel Code") to copy,
> + * make derivatives, distribute, use and display any portion of the Covered
> + * Code in any form, with the right to sublicense such rights; and
> + *
> + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
> + * license (with the right to sublicense), under only those claims of Intel
> + * patents that are infringed by the Original Intel Code, to make, use, sell,
> + * offer to sell, and import the Covered Code and derivative works thereof
> + * solely to the minimum extent necessary to exercise the above copyright
> + * license, and in no event shall the patent license extend to any additions
> + * to or modifications of the Original Intel Code. No other license or right
> + * is granted directly or by implication, estoppel or otherwise;
> + *
> + * The above copyright and patent license is granted only if the following
> + * conditions are met:
> + *
> + * 3. Conditions
> + *
> + * 3.1. Redistribution of Source with Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification with rights to further distribute source must include
> + * the above Copyright Notice, the above License, this list of Conditions,
> + * and the following Disclaimer and Export Compliance provision. In addition,
> + * Licensee must cause all Covered Code to which Licensee contributes to
> + * contain a file documenting the changes Licensee made to create that Covered
> + * Code and the date of any change. Licensee must include in that file the
> + * documentation of any changes made by any predecessor Licensee. Licensee
> + * must include a prominent statement that the modification is derived,
> + * directly or indirectly, from Original Intel Code.
> + *
> + * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification without rights to further distribute source must
> + * include the following Disclaimer and Export Compliance provision in the
> + * documentation and/or other materials provided with distribution. In
> + * addition, Licensee may not authorize further sublicense of source of any
> + * portion of the Covered Code, and must include terms to the effect that the
> + * license from Licensee to its licensee is limited to the intellectual
> + * property embodied in the software Licensee provides to its licensee, and
> + * not to intellectual property embodied in modifications its licensee may
> + * make.
> + *
> + * 3.3. Redistribution of Executable. Redistribution in executable form of any
> + * substantial portion of the Covered Code or modification must reproduce the
> + * above Copyright Notice, and the following Disclaimer and Export Compliance
> + * provision in the documentation and/or other materials provided with the
> + * distribution.
> + *
> + * 3.4. Intel retains all right, title, and interest in and to the Original
> + * Intel Code.
> + *
> + * 3.5. Neither the name Intel nor any other trademark owned or controlled by
> + * Intel shall be used in advertising or otherwise to promote the sale, use or
> + * other dealings in products derived from or relating to the Covered Code
> + * without prior written authorization from Intel.
> + *
> + * 4. Disclaimer and Export Compliance
> + *
> + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
> + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
> + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
> + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
> + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
> + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
> + * PARTICULAR PURPOSE.
> + *
> + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
> + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
> + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
> + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
> + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
> + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
> + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
> + * LIMITED REMEDY.
> + *
> + * 4.3. Licensee shall not export, either directly or indirectly, any of this
> + * software or system incorporating such software without first obtaining any
> + * required license or other approval from the U. S. Department of Commerce or
> + * any other agency or department of the United States Government. In the
> + * event Licensee exports any such software from the United States or
> + * re-exports any such software from a foreign destination, Licensee shall
> + * ensure that the distribution and export/re-export of the software is in
> + * compliance with all laws, regulations, orders, or other restrictions of the
> + * U.S. Export Administration Regulations. Licensee agrees that neither it nor
> + * any of its subsidiaries will export/re-export any technical data, process,
> + * software, or service, directly or indirectly, to any country for which the
> + * United States government or any agency thereof requires an export license,
> + * other governmental approval, or letter of assurance, without first obtaining
> + * such license, approval or letter.
> + *
> + *****************************************************************************/
> +
> +#define __UTUUID_C__
> +
> +#include "acpi.h"
> +#include "accommon.h"
> +
> +#define _COMPONENT          ACPI_COMPILER
> +        ACPI_MODULE_NAME    ("utuuid")
> +
> +
> +/*
> + * UUID support functions.
> + *
> + * This table is used to convert an input UUID ascii string to a 16 byte
> + * buffer and the reverse. The table maps a UUID buffer index 0-15 to
> + * the index within the 36-byte UUID string where the associated 2-byte
> + * hex value can be found.
> + *
> + * 36-byte UUID strings are of the form:
> + *     aabbccdd-eeff-gghh-iijj-kkllmmnnoopp
> + * Where aa-pp are one byte hex numbers, made up of two hex digits
> + *
> + * Note: This table is basically the inverse of the string-to-offset table
> + * found in the ACPI spec in the description of the ToUUID macro.
> + */
> +const UINT8    AcpiGbl_MapToUuidOffset[UUID_BUFFER_LENGTH] =
> +{
> +    6,4,2,0,11,9,16,14,19,21,24,26,28,30,32,34
> +};
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiUtConvertStringToUuid
> + *
> + * PARAMETERS:  InString            - 36-byte formatted UUID string
> + *              UuidBuffer          - Where the 16-byte UUID buffer is returned
> + *
> + * RETURN:      None. Output data is returned in the UuidBuffer
> + *
> + * DESCRIPTION: Convert a 36-byte formatted UUID string to 16-byte UUID buffer
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiUtConvertStringToUuid (
> +    char                    *InString,
> +    UINT8                   *UuidBuffer)
> +{
> +    UINT32                  i;
> +
> +
> +    for (i = 0; i < UUID_BUFFER_LENGTH; i++)
> +    {
> +        UuidBuffer[i] =
> +            (AcpiUtAsciiCharToHex (InString[AcpiGbl_MapToUuidOffset[i]]) << 4);
> +
> +        UuidBuffer[i] |=
> +            AcpiUtAsciiCharToHex (InString[AcpiGbl_MapToUuidOffset[i] + 1]);
> +    }
> +}
> diff --git a/src/acpica/source/include/acconfig.h b/src/acpica/source/include/acconfig.h
> index 6b34484..3c7a3bd 100644
> --- a/src/acpica/source/include/acconfig.h
> +++ b/src/acpica/source/include/acconfig.h
> @@ -295,6 +295,25 @@
>
>   /******************************************************************************
>    *
> + * Miscellaneous constants
> + *
> + *****************************************************************************/
> +
> +/* UUID constants */
> +
> +#define UUID_BUFFER_LENGTH          16 /* Length of UUID in memory */
> +#define UUID_STRING_LENGTH          36 /* Total length of a UUID string */
> +
> +/* Positions for required hyphens (dashes) in UUID strings */
> +
> +#define UUID_HYPHEN1_OFFSET         8
> +#define UUID_HYPHEN2_OFFSET         13
> +#define UUID_HYPHEN3_OFFSET         18
> +#define UUID_HYPHEN4_OFFSET         23
> +
> +
> +/******************************************************************************
> + *
>    * ACPI AML Debugger
>    *
>    *****************************************************************************/
> diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h
> index 049a95c..21e26e6 100644
> --- a/src/acpica/source/include/acdisasm.h
> +++ b/src/acpica/source/include/acdisasm.h
> @@ -209,11 +209,13 @@ typedef enum
>
>       ACPI_DMT_ASF,
>       ACPI_DMT_DMAR,
> +    ACPI_DMT_DMAR_SCOPE,
>       ACPI_DMT_EINJACT,
>       ACPI_DMT_EINJINST,
>       ACPI_DMT_ERSTACT,
>       ACPI_DMT_ERSTINST,
>       ACPI_DMT_FADTPM,
> +    ACPI_DMT_GTDT,
>       ACPI_DMT_HEST,
>       ACPI_DMT_HESTNTFY,
>       ACPI_DMT_HESTNTYP,
> @@ -327,6 +329,7 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDmar0[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDmar1[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDmar2[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDmar3[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDmar4[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDrtm[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoEcdt[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoEinj[];
> @@ -344,6 +347,10 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoFpdt0[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoFpdt1[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoGas[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoGtdt[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoGtdtHdr[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoGtdt0[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoGtdt0a[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoGtdt1[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoHeader[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoHest[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoHest0[];
> @@ -381,6 +388,8 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt9[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt10[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt11[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt12[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt13[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt14[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadtHdr[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMcfg[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMcfg0[];
> @@ -404,6 +413,7 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPmttHdr[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPcct[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPcctHdr[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPcct0[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPcct1[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoRsdp1[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoRsdp2[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoS3pt[];
> @@ -517,6 +527,10 @@ AcpiDmDumpFpdt (
>       ACPI_TABLE_HEADER       *Table);
>
>   void
> +AcpiDmDumpGtdt (
> +    ACPI_TABLE_HEADER       *Table);
> +
> +void
>   AcpiDmDumpHest (
>       ACPI_TABLE_HEADER       *Table);
>
> @@ -727,6 +741,10 @@ AcpiDmDecompressEisaId (
>       UINT32                  EncodedId);
>
>   BOOLEAN
> +AcpiDmIsUuidBuffer (
> +    ACPI_PARSE_OBJECT       *Op);
> +
> +BOOLEAN
>   AcpiDmIsUnicodeBuffer (
>       ACPI_PARSE_OBJECT       *Op);
>
> diff --git a/src/acpica/source/include/aclocal.h b/src/acpica/source/include/aclocal.h
> index 12925a8..1ea772e 100644
> --- a/src/acpica/source/include/aclocal.h
> +++ b/src/acpica/source/include/aclocal.h
> @@ -950,12 +950,13 @@ typedef union acpi_parse_value
>   #define ACPI_DASM_STRING                0x02        /* Buffer is a ASCII string */
>   #define ACPI_DASM_UNICODE               0x03        /* Buffer is a Unicode string */
>   #define ACPI_DASM_PLD_METHOD            0x04        /* Buffer is a _PLD method bit-packed buffer */
> -#define ACPI_DASM_EISAID                0x05        /* Integer is an EISAID */
> -#define ACPI_DASM_MATCHOP               0x06        /* Parent opcode is a Match() operator */
> -#define ACPI_DASM_LNOT_PREFIX           0x07        /* Start of a LNotEqual (etc.) pair of opcodes */
> -#define ACPI_DASM_LNOT_SUFFIX           0x08        /* End  of a LNotEqual (etc.) pair of opcodes */
> -#define ACPI_DASM_HID_STRING            0x09        /* String is a _HID or _CID */
> -#define ACPI_DASM_IGNORE                0x0A        /* Not used at this time */
> +#define ACPI_DASM_UUID                  0x05        /* Buffer is a UUID/GUID */
> +#define ACPI_DASM_EISAID                0x06        /* Integer is an EISAID */
> +#define ACPI_DASM_MATCHOP               0x07        /* Parent opcode is a Match() operator */
> +#define ACPI_DASM_LNOT_PREFIX           0x08        /* Start of a LNotEqual (etc.) pair of opcodes */
> +#define ACPI_DASM_LNOT_SUFFIX           0x09        /* End  of a LNotEqual (etc.) pair of opcodes */
> +#define ACPI_DASM_HID_STRING            0x0A        /* String is a _HID or _CID */
> +#define ACPI_DASM_IGNORE                0x0B        /* Not used at this time */
>
>   /*
>    * Generic operation (for example:  If, While, Store)
> @@ -1430,4 +1431,11 @@ typedef struct ah_device_id
>
>   } AH_DEVICE_ID;
>
> +typedef struct ah_uuid
> +{
> +    char            *Description;
> +    char            *String;
> +
> +} AH_UUID;
> +
>   #endif /* __ACLOCAL_H__ */
> diff --git a/src/acpica/source/include/acnames.h b/src/acpica/source/include/acnames.h
> index bde34f5..6ccf47f 100644
> --- a/src/acpica/source/include/acnames.h
> +++ b/src/acpica/source/include/acnames.h
> @@ -127,6 +127,7 @@
>   #define METHOD_NAME__HID        "_HID"
>   #define METHOD_NAME__INI        "_INI"
>   #define METHOD_NAME__PLD        "_PLD"
> +#define METHOD_NAME__DSD        "_DSD"
>   #define METHOD_NAME__PRS        "_PRS"
>   #define METHOD_NAME__PRT        "_PRT"
>   #define METHOD_NAME__PRW        "_PRW"
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index ef85424..cafc37b 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                 0x20140627
> +#define ACPI_CA_VERSION                 0x20140724
>
>   #include "acconfig.h"
>   #include "actypes.h"
> @@ -923,6 +923,12 @@ AcpiFinishGpe (
>
>   ACPI_HW_DEPENDENT_RETURN_STATUS (
>   ACPI_STATUS
> +AcpiMarkGpeForWake (
> +    ACPI_HANDLE             GpeDevice,
> +    UINT32                  GpeNumber))
> +
> +ACPI_HW_DEPENDENT_RETURN_STATUS (
> +ACPI_STATUS
>   AcpiSetupGpeForWake (
>       ACPI_HANDLE             ParentDevice,
>       ACPI_HANDLE             GpeDevice,
> diff --git a/src/acpica/source/include/acpredef.h b/src/acpica/source/include/acpredef.h
> index 1d42f1d..1c1776a 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_UUID_PAIR: Each subpackage is preceded by a UUID Buffer. The UUID
> + *      defines the format of the package. Zero-length parent package is
> + *      allowed.
> + *      (Used for _DSD)
> + *
>    *****************************************************************************/
>
>   enum AcpiReturnPackageTypes
> @@ -191,7 +196,8 @@ enum AcpiReturnPackageTypes
>       ACPI_PTYPE2_FIXED       = 7,
>       ACPI_PTYPE2_MIN         = 8,
>       ACPI_PTYPE2_REV_FIXED   = 9,
> -    ACPI_PTYPE2_FIX_VAR     = 10
> +    ACPI_PTYPE2_FIX_VAR     = 10,
> +    ACPI_PTYPE2_UUID_PAIR   = 11
>   };
>
>
> @@ -438,6 +444,9 @@ const ACPI_PREDEFINED_INFO          AcpiGbl_PredefinedMethods[] =
>       {{"_CBA",   METHOD_0ARGS,
>                   METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, /* See PCI firmware spec 3.0 */
>
> +    {{"_CCA",   METHOD_0ARGS,
> +                METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, /* ACPI 5.1 */
> +
>       {{"_CDM",   METHOD_0ARGS,
>                   METHOD_RETURNS (ACPI_RTYPE_INTEGER)}},
>
> @@ -506,6 +515,10 @@ const ACPI_PREDEFINED_INFO          AcpiGbl_PredefinedMethods[] =
>       {{"_DOS",   METHOD_1ARGS (ACPI_TYPE_INTEGER),
>                   METHOD_NO_RETURN_VALUE}},
>
> +    {{"_DSD",   METHOD_0ARGS,
> +                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),
> +
>       {{"_DSM",   METHOD_4ARGS (ACPI_TYPE_BUFFER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_PACKAGE),
>                   METHOD_RETURNS (ACPI_RTYPE_ALL)}}, /* Must return a value, but it can be of any type */
>
> diff --git a/src/acpica/source/include/actbl.h b/src/acpica/source/include/actbl.h
> index 9a6625c..ea9fc58 100644
> --- a/src/acpica/source/include/actbl.h
> +++ b/src/acpica/source/include/actbl.h
> @@ -368,7 +368,8 @@ typedef struct acpi_table_fadt
>       UINT32                  Flags;              /* Miscellaneous flag bits (see below for individual flags) */
>       ACPI_GENERIC_ADDRESS    ResetRegister;      /* 64-bit address of the Reset register */
>       UINT8                   ResetValue;         /* Value to write to the ResetRegister port to reset the system */
> -    UINT8                   Reserved4[3];       /* Reserved, must be zero */
> +    UINT16                  ArmBootFlags;       /* ARM-Specific Boot Flags (see below for individual flags) (ACPI 5.1) */
> +    UINT8                   MinorRevision;      /* FADT Minor Revision (ACPI 5.1) */
>       UINT64                  XFacs;              /* 64-bit physical address of FACS */
>       UINT64                  XDsdt;              /* 64-bit physical address of DSDT */
>       ACPI_GENERIC_ADDRESS    XPm1aEventBlock;    /* 64-bit Extended Power Mgt 1a Event Reg Blk address */
> @@ -385,7 +386,7 @@ typedef struct acpi_table_fadt
>   } ACPI_TABLE_FADT;
>
>
> -/* Masks for FADT Boot Architecture Flags (BootFlags) [Vx]=Introduced in this FADT revision */
> +/* Masks for FADT IA-PC Boot Architecture Flags (boot_flags) [Vx]=Introduced in this FADT revision */
>
>   #define ACPI_FADT_LEGACY_DEVICES    (1)         /* 00: [V2] System has LPC or ISA bus devices */
>   #define ACPI_FADT_8042              (1<<1)      /* 01: [V3] System has an 8042 controller on port 60/64 */
> @@ -394,6 +395,11 @@ typedef struct acpi_table_fadt
>   #define ACPI_FADT_NO_ASPM           (1<<4)      /* 04: [V4] PCIe ASPM control must not be enabled */
>   #define ACPI_FADT_NO_CMOS_RTC       (1<<5)      /* 05: [V5] No CMOS real-time clock present */
>
> +/* Masks for FADT ARM Boot Architecture Flags (arm_boot_flags) ACPI 5.1 */
> +
> +#define ACPI_FADT_PSCI_COMPLIANT    (1)         /* 00: [V5+] PSCI 0.2+ is implemented */
> +#define ACPI_FADT_PSCI_USE_HVC      (1<<1)      /* 01: [V5+] HVC must be used instead of SMC as the PSCI conduit */
> +
>   /* Masks for FADT flags */
>
>   #define ACPI_FADT_WBINVD            (1)         /* 00: [V1] The WBINVD instruction works properly */
> @@ -507,7 +513,7 @@ typedef struct acpi_table_desc
>    *     FADT V5  size: 0x10C
>    */
>   #define ACPI_FADT_V1_SIZE       (UINT32) (ACPI_FADT_OFFSET (Flags) + 4)
> -#define ACPI_FADT_V2_SIZE       (UINT32) (ACPI_FADT_OFFSET (Reserved4[0]) + 3)
> +#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))
>
> diff --git a/src/acpica/source/include/actbl1.h b/src/acpica/source/include/actbl1.h
> index e0905ee..d28faa3 100644
> --- a/src/acpica/source/include/actbl1.h
> +++ b/src/acpica/source/include/actbl1.h
> @@ -834,20 +834,22 @@ typedef struct acpi_table_madt
>
>   enum AcpiMadtType
>   {
> -    ACPI_MADT_TYPE_LOCAL_APIC           = 0,
> -    ACPI_MADT_TYPE_IO_APIC              = 1,
> -    ACPI_MADT_TYPE_INTERRUPT_OVERRIDE   = 2,
> -    ACPI_MADT_TYPE_NMI_SOURCE           = 3,
> -    ACPI_MADT_TYPE_LOCAL_APIC_NMI       = 4,
> -    ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE  = 5,
> -    ACPI_MADT_TYPE_IO_SAPIC             = 6,
> -    ACPI_MADT_TYPE_LOCAL_SAPIC          = 7,
> -    ACPI_MADT_TYPE_INTERRUPT_SOURCE     = 8,
> -    ACPI_MADT_TYPE_LOCAL_X2APIC         = 9,
> -    ACPI_MADT_TYPE_LOCAL_X2APIC_NMI     = 10,
> -    ACPI_MADT_TYPE_GENERIC_INTERRUPT    = 11,
> -    ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR  = 12,
> -    ACPI_MADT_TYPE_RESERVED             = 13    /* 13 and greater are reserved */
> +    ACPI_MADT_TYPE_LOCAL_APIC               = 0,
> +    ACPI_MADT_TYPE_IO_APIC                  = 1,
> +    ACPI_MADT_TYPE_INTERRUPT_OVERRIDE       = 2,
> +    ACPI_MADT_TYPE_NMI_SOURCE               = 3,
> +    ACPI_MADT_TYPE_LOCAL_APIC_NMI           = 4,
> +    ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE      = 5,
> +    ACPI_MADT_TYPE_IO_SAPIC                 = 6,
> +    ACPI_MADT_TYPE_LOCAL_SAPIC              = 7,
> +    ACPI_MADT_TYPE_INTERRUPT_SOURCE         = 8,
> +    ACPI_MADT_TYPE_LOCAL_X2APIC             = 9,
> +    ACPI_MADT_TYPE_LOCAL_X2APIC_NMI         = 10,
> +    ACPI_MADT_TYPE_GENERIC_INTERRUPT        = 11,
> +    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 */
>   };
>
>
> @@ -1008,16 +1010,27 @@ typedef struct acpi_madt_generic_interrupt
>   {
>       ACPI_SUBTABLE_HEADER    Header;
>       UINT16                  Reserved;           /* Reserved - must be zero */
> -    UINT32                  GicId;
> +    UINT32                  CpuInterfaceNumber;
>       UINT32                  Uid;
>       UINT32                  Flags;
>       UINT32                  ParkingVersion;
>       UINT32                  PerformanceInterrupt;
>       UINT64                  ParkedAddress;
>       UINT64                  BaseAddress;
> +    UINT64                  GicvBaseAddress;
> +    UINT64                  GichBaseAddress;
> +    UINT32                  VgicInterrupt;
> +    UINT64                  GicrBaseAddress;
> +    UINT64                  ArmMpidr;
>
>   } ACPI_MADT_GENERIC_INTERRUPT;
>
> +/* Masks for Flags field above */
> +
> +/* ACPI_MADT_ENABLED                    (1)      Processor is usable if set */
> +#define ACPI_MADT_PERFORMANCE_IRQ_MODE  (1<<1)  /* 01: Performance Interrupt Mode */
> +#define ACPI_MADT_VGIC_IRQ_MODE         (1<<2)  /* 02: VGIC Maintenance Interrupt mode */
> +
>
>   /* 12: Generic Distributor (ACPI 5.0) */
>
> @@ -1033,11 +1046,42 @@ typedef struct acpi_madt_generic_distributor
>   } ACPI_MADT_GENERIC_DISTRIBUTOR;
>
>
> +/* 13: Generic MSI Frame (ACPI 5.1) */
> +
> +typedef struct acpi_madt_generic_msi_frame
> +{
> +    ACPI_SUBTABLE_HEADER    Header;
> +    UINT16                  Reserved;           /* Reserved - must be zero */
> +    UINT32                  MsiFrameId;
> +    UINT64                  BaseAddress;
> +    UINT32                  Flags;
> +    UINT16                  SpiCount;
> +    UINT16                  SpiBase;
> +
> +} ACPI_MADT_GENERIC_MSI_FRAME;
> +
> +/* Masks for Flags field above */
> +
> +#define ACPI_MADT_OVERRIDE_SPI_VALUES   (1)
> +
> +
> +/* 14: Generic Redistributor (ACPI 5.1) */
> +
> +typedef struct acpi_madt_generic_redistributor
> +{
> +    ACPI_SUBTABLE_HEADER    Header;
> +    UINT16                  Reserved;           /* reserved - must be zero */
> +    UINT64                  BaseAddress;
> +    UINT32                  Length;
> +
> +} ACPI_MADT_GENERIC_REDISTRIBUTOR;
> +
> +
>   /*
>    * Common flags fields for MADT subtables
>    */
>
> -/* MADT Local APIC flags (LapicFlags) and GIC flags */
> +/* MADT Local APIC flags */
>
>   #define ACPI_MADT_ENABLED           (1)         /* 00: Processor is usable if set */
>
> diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h
> index 7a64788..7d62862 100644
> --- a/src/acpica/source/include/actbl2.h
> +++ b/src/acpica/source/include/actbl2.h
> @@ -522,7 +522,7 @@ typedef struct acpi_table_dbgp
>    *        Version 1
>    *
>    * Conforms to "Intel Virtualization Technology for Directed I/O",
> - * Version 1.2, Sept. 2008
> + * Version 2.2, Sept. 2013
>    *
>    ******************************************************************************/
>
> @@ -555,9 +555,10 @@ enum AcpiDmarType
>   {
>       ACPI_DMAR_TYPE_HARDWARE_UNIT        = 0,
>       ACPI_DMAR_TYPE_RESERVED_MEMORY      = 1,
> -    ACPI_DMAR_TYPE_ATSR                 = 2,
> -    ACPI_DMAR_HARDWARE_AFFINITY         = 3,
> -    ACPI_DMAR_TYPE_RESERVED             = 4     /* 4 and greater are reserved */
> +    ACPI_DMAR_TYPE_ROOT_ATS             = 2,
> +    ACPI_DMAR_TYPE_HARDWARE_AFFINITY    = 3,
> +    ACPI_DMAR_TYPE_NAMESPACE            = 4,
> +    ACPI_DMAR_TYPE_RESERVED             = 5     /* 5 and greater are reserved */
>   };
>
>
> @@ -573,7 +574,7 @@ typedef struct acpi_dmar_device_scope
>
>   } ACPI_DMAR_DEVICE_SCOPE;
>
> -/* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE */
> +/* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE - device types */
>
>   enum AcpiDmarScopeType
>   {
> @@ -582,7 +583,8 @@ enum AcpiDmarScopeType
>       ACPI_DMAR_SCOPE_TYPE_BRIDGE         = 2,
>       ACPI_DMAR_SCOPE_TYPE_IOAPIC         = 3,
>       ACPI_DMAR_SCOPE_TYPE_HPET           = 4,
> -    ACPI_DMAR_SCOPE_TYPE_RESERVED       = 5     /* 5 and greater are reserved */
> +    ACPI_DMAR_SCOPE_TYPE_NAMESPACE      = 5,
> +    ACPI_DMAR_SCOPE_TYPE_RESERVED       = 6     /* 6 and greater are reserved */
>   };
>
>   typedef struct acpi_dmar_pci_path
> @@ -659,6 +661,18 @@ typedef struct acpi_dmar_rhsa
>   } ACPI_DMAR_RHSA;
>
>
> +/* 4: ACPI Namespace Device Declaration Structure */
> +
> +typedef struct acpi_dmar_andd
> +{
> +    ACPI_DMAR_HEADER        Header;
> +    UINT8                   Reserved[3];
> +    UINT8                   DeviceNumber;
> +    char                    DeviceName[1];
> +
> +} ACPI_DMAR_ANDD;
> +
> +
>   /*******************************************************************************
>    *
>    * HPET - High Precision Event Timer table
> diff --git a/src/acpica/source/include/actbl3.h b/src/acpica/source/include/actbl3.h
> index efec7e8..b30e80f 100644
> --- a/src/acpica/source/include/actbl3.h
> +++ b/src/acpica/source/include/actbl3.h
> @@ -352,35 +352,111 @@ typedef struct acpi_s3pt_suspend
>
>   /*******************************************************************************
>    *
> - * GTDT - Generic Timer Description Table (ACPI 5.0)
> - *        Version 1
> + * GTDT - Generic Timer Description Table (ACPI 5.1)
> + *        Version 2
>    *
>    ******************************************************************************/
>
>   typedef struct acpi_table_gtdt
>   {
>       ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
> -    UINT64                  Address;
> -    UINT32                  Flags;
> -    UINT32                  SecurePl1Interrupt;
> -    UINT32                  SecurePl1Flags;
> -    UINT32                  NonSecurePl1Interrupt;
> -    UINT32                  NonSecurePl1Flags;
> +    UINT64                  CounterBlockAddresss;
> +    UINT32                  Reserved;
> +    UINT32                  SecureEl1Interrupt;
> +    UINT32                  SecureEl1Flags;
> +    UINT32                  NonSecureEl1Interrupt;
> +    UINT32                  NonSecureEl1Flags;
>       UINT32                  VirtualTimerInterrupt;
>       UINT32                  VirtualTimerFlags;
> -    UINT32                  NonSecurePl2Interrupt;
> -    UINT32                  NonSecurePl2Flags;
> +    UINT32                  NonSecureEl2Interrupt;
> +    UINT32                  NonSecureEl2Flags;
> +    UINT64                  CounterReadBlockAddress;
> +    UINT32                  PlatformTimerCount;
> +    UINT32                  PlatformTimerOffset;
>
>   } ACPI_TABLE_GTDT;
>
> -/* Values for Flags field above */
> +/* Flag Definitions: Timer Block Physical Timers and Virtual timers */
> +
> +#define ACPI_GTDT_INTERRUPT_MODE        (1)
> +#define ACPI_GTDT_INTERRUPT_POLARITY    (1<<1)
> +#define ACPI_GTDT_ALWAYS_ON             (1<<2)
> +
> +
> +/* Common GTDT subtable header */
> +
> +typedef struct acpi_gtdt_header
> +{
> +    UINT8                   Type;
> +    UINT16                  Length;
> +
> +} ACPI_GTDT_HEADER;
> +
> +/* Values for GTDT subtable type above */
> +
> +enum AcpiGtdtType
> +{
> +    ACPI_GTDT_TYPE_TIMER_BLOCK      = 0,
> +    ACPI_GTDT_TYPE_WATCHDOG         = 1,
> +    ACPI_GTDT_TYPE_RESERVED         = 2    /* 2 and greater are reserved */
> +};
> +
> +
> +/* GTDT Subtables, correspond to Type in acpi_gtdt_header */
> +
> +/* 0: Generic Timer Block */
> +
> +typedef struct acpi_gtdt_timer_block
> +{
> +    ACPI_GTDT_HEADER        Header;
> +    UINT8                   Reserved;
> +    UINT64                  BlockAddress;
> +    UINT32                  TimerCount;
> +    UINT32                  TimerOffset;
> +
> +} ACPI_GTDT_TIMER_BLOCK;
> +
> +/* Timer Sub-Structure, one per timer */
> +
> +typedef struct acpi_gtdt_timer_entry
> +{
> +    UINT8                   FrameNumber;
> +    UINT8                   Reserved[3];
> +    UINT64                  BaseAddress;
> +    UINT64                  El0BaseAddress;
> +    UINT32                  TimerInterrupt;
> +    UINT32                  TimerFlags;
> +    UINT32                  VirtualTimerInterrupt;
> +    UINT32                  VirtualTimerFlags;
> +    UINT32                  CommonFlags;
> +
> +} ACPI_GTDT_TIMER_ENTRY;
> +
> +
> +/* Flag Definitions: CommonFlags above */
> +
> +#define ACPI_GTDT_GT_IS_SECURE_TIMER    (1)
> +#define ACPI_GTDT_GT_ALWAYS_ON          (1<<1)
> +
>
> -#define ACPI_GTDT_MAPPED_BLOCK_PRESENT      1
> +/* 1: SBSA Generic Watchdog Structure */
>
> -/* Values for all "TimerFlags" fields above */
> +typedef struct acpi_gtdt_watchdog
> +{
> +    ACPI_GTDT_HEADER        Header;
> +    UINT8                   Reserved;
> +    UINT64                  RefreshFrameAddress;
> +    UINT64                  ControlFrameAddress;
> +    UINT32                  TimerInterrupt;
> +    UINT32                  TimerFlags;
> +
> +} ACPI_GTDT_WATCHDOG;
>
> -#define ACPI_GTDT_INTERRUPT_MODE            1
> -#define ACPI_GTDT_INTERRUPT_POLARITY        2
> +/* Flag Definitions: TimerFlags above */
> +
> +#define ACPI_GTDT_WATCHDOG_IRQ_MODE         (1)
> +#define ACPI_GTDT_WATCHDOG_IRQ_POLARITY     (1<<1)
> +#define ACPI_GTDT_WATCHDOG_SECURE           (1<<2)
>
>
>   /*******************************************************************************
> @@ -525,7 +601,8 @@ typedef struct acpi_table_pcct
>   enum AcpiPcctType
>   {
>       ACPI_PCCT_TYPE_GENERIC_SUBSPACE     = 0,
> -    ACPI_PCCT_TYPE_RESERVED             = 1     /* 1 and greater are reserved */
> +    ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE  = 1,
> +    ACPI_PCCT_TYPE_RESERVED             = 2     /* 2 and greater are reserved */
>   };
>
>   /*
> @@ -550,6 +627,31 @@ typedef struct acpi_pcct_subspace
>   } ACPI_PCCT_SUBSPACE;
>
>
> +/* 1: HW-reduced Communications Subspace (ACPI 5.1) */
> +
> +typedef struct acpi_pcct_hw_reduced
> +{
> +    ACPI_SUBTABLE_HEADER    Header;
> +    UINT32                  DoorbellInterrupt;
> +    UINT8                   Flags;
> +    UINT8                   Reserved;
> +    UINT64                  BaseAddress;
> +    UINT64                  Length;
> +    ACPI_GENERIC_ADDRESS    DoorbellRegister;
> +    UINT64                  PreserveMask;
> +    UINT64                  WriteMask;
> +    UINT32                  Latency;
> +    UINT32                  MaxAccessRate;
> +    UINT16                  MinTurnaroundTime;
> +
> +} ACPI_PCCT_HW_REDUCED;
> +
> +/* Values for doorbell flags above */
> +
> +#define ACPI_PCCT_INTERRUPT_POLARITY    (1)
> +#define ACPI_PCCT_INTERRUPT_MODE        (1<<1)
> +
> +
>   /*
>    * PCC memory structures (not part of the ACPI table)
>    */
> diff --git a/src/acpica/source/include/actypes.h b/src/acpica/source/include/actypes.h
> index 6ffb2ce..b6371ae 100644
> --- a/src/acpica/source/include/actypes.h
> +++ b/src/acpica/source/include/actypes.h
> @@ -596,7 +596,7 @@ typedef UINT64                          ACPI_INTEGER;
>
>   #define ACPI_TO_POINTER(i)              ACPI_ADD_PTR (void, (void *) NULL,(ACPI_SIZE) i)
>   #define ACPI_TO_INTEGER(p)              ACPI_PTR_DIFF (p, (void *) NULL)
> -#define ACPI_OFFSET(d, f)               (ACPI_SIZE) ACPI_PTR_DIFF (&(((d *)0)->f), (void *) NULL)
> +#define ACPI_OFFSET(d, f)               ACPI_PTR_DIFF (&(((d *) 0)->f), (void *) NULL)
>   #define ACPI_PHYSADDR_TO_PTR(i)         ACPI_TO_POINTER(i)
>   #define ACPI_PTR_TO_PHYSADDR(i)         ACPI_TO_INTEGER(i)
>
> @@ -690,8 +690,9 @@ typedef UINT64                          ACPI_INTEGER;
>   #define ACPI_NOTIFY_RESERVED            (UINT8) 0x0A
>   #define ACPI_NOTIFY_LOCALITY_UPDATE     (UINT8) 0x0B
>   #define ACPI_NOTIFY_SHUTDOWN_REQUEST    (UINT8) 0x0C
> +#define ACPI_NOTIFY_AFFINITY_UPDATE     (UINT8) 0x0D
>
> -#define ACPI_NOTIFY_MAX                 0x0C
> +#define ACPI_NOTIFY_MAX                 0x0D
>
>   /*
>    * Types associated with ACPI names and objects. The first group of
> diff --git a/src/acpica/source/include/acutils.h b/src/acpica/source/include/acutils.h
> index bac5fd8..2aea248 100644
> --- a/src/acpica/source/include/acutils.h
> +++ b/src/acpica/source/include/acutils.h
> @@ -297,6 +297,10 @@ AcpiUtHexToAsciiChar (
>       UINT64                  Integer,
>       UINT32                  Position);
>
> +UINT8
> +AcpiUtAsciiCharToHex (
> +    int                     HexChar);
> +
>   BOOLEAN
>   AcpiUtValidObjectType (
>       ACPI_OBJECT_TYPE        Type);
> @@ -1207,6 +1211,10 @@ const AH_DEVICE_ID *
>   AcpiAhMatchHardwareId (
>       char                    *Hid);
>
> +const char *
> +AcpiAhMatchUuid (
> +    UINT8                   *Data);
> +
>   /*
>    * utprint - printf/vprintf output functions
>    */
> @@ -1248,4 +1256,12 @@ AcpiUtFilePrintf (
>       ...);
>   #endif
>
> +/*
> + * utuuid -- UUID support functions
> + */
> +void
> +AcpiUtConvertStringToUuid (
> +    char                    *InString,
> +    UINT8                   *UuidBuffer);
> +
>   #endif /* _ACUTILS_H */
> diff --git a/src/acpica/source/include/platform/aclinux.h b/src/acpica/source/include/platform/aclinux.h
> index 1f1d7c1..d5c1501 100644
> --- a/src/acpica/source/include/platform/aclinux.h
> +++ b/src/acpica/source/include/platform/aclinux.h
> @@ -201,8 +201,6 @@
>   #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireObject
>   #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetThreadId
>   #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateLock
> -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsMapMemory
> -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsUnmapMemory
>
>   /*
>    * OSL interfaces used by debugger/disassembler
> @@ -236,10 +234,6 @@
>   #define __init
>   #endif
>
> -#ifndef __iomem
> -#define __iomem
> -#endif
> -
>   /* Host-dependent types and defines for user-space ACPICA */
>
>   #define ACPI_FLUSH_CPU_CACHE()
> diff --git a/src/acpica/source/include/platform/aclinuxex.h b/src/acpica/source/include/platform/aclinuxex.h
> index 67e42ab..e3d5d5b 100644
> --- a/src/acpica/source/include/platform/aclinuxex.h
> +++ b/src/acpica/source/include/platform/aclinuxex.h
> @@ -186,16 +186,6 @@ AcpiOsGetThreadId (
>           Lock ? AE_OK : AE_NO_MEMORY; \
>       })
>
> -void __iomem *
> -AcpiOsMapMemory (
> -    ACPI_PHYSICAL_ADDRESS   Where,
> -    ACPI_SIZE               Length);
> -
> -void
> -AcpiOsUnmapMemory (
> -    void __iomem            *LogicalAddress,
> -    ACPI_SIZE               Size);
> -
>   /*
>    * OSL interfaces added by Linux
>    */
> diff --git a/src/acpica/source/os_specific/service_layers/oslibcfs.c b/src/acpica/source/os_specific/service_layers/oslibcfs.c
> index 3343a0c..e1ca8be 100644
> --- a/src/acpica/source/os_specific/service_layers/oslibcfs.c
> +++ b/src/acpica/source/os_specific/service_layers/oslibcfs.c
> @@ -1,6 +1,6 @@
>   /******************************************************************************
>    *
> - * Module Name: oslibcfs - C library OSL for file IO
> + * Module Name: oslibcfs - C library OSL for file I/O
>    *
>    *****************************************************************************/
>
> @@ -141,8 +141,9 @@ AcpiOsOpenFile (
>       UINT8                   Modes)
>   {
>       ACPI_FILE               File;
> -    char                    ModesStr[4];
>       UINT32                  i = 0;
> +    char                    ModesStr[4];
> +
>
>       if (Modes & ACPI_FILE_READING)
>       {
> @@ -156,6 +157,7 @@ AcpiOsOpenFile (
>       {
>           ModesStr[i++] = 'b';
>       }
> +
>       ModesStr[i++] = '\0';
>
>       File = fopen (Path, ModesStr);
> @@ -172,11 +174,11 @@ AcpiOsOpenFile (
>    *
>    * FUNCTION:    AcpiOsCloseFile
>    *
> - * PARAMETERS:  File                - File descriptor
> + * PARAMETERS:  File                - An open file descriptor
>    *
>    * RETURN:      None.
>    *
> - * DESCRIPTION: Close a file.
> + * DESCRIPTION: Close a file opened via AcpiOsOpenFile.
>    *
>    ******************************************************************************/
>
> @@ -192,14 +194,14 @@ AcpiOsCloseFile (
>    *
>    * FUNCTION:    AcpiOsReadFile
>    *
> - * PARAMETERS:  File                - File descriptor
> + * PARAMETERS:  File                - An open file descriptor
>    *              Buffer              - Data buffer
>    *              Size                - Data block size
>    *              Count               - Number of data blocks
>    *
> - * RETURN:      Size of successfully read buffer.
> + * RETURN:      Number of bytes actually read.
>    *
> - * DESCRIPTION: Read a file.
> + * DESCRIPTION: Read from a file.
>    *
>    ******************************************************************************/
>
> @@ -212,6 +214,7 @@ AcpiOsReadFile (
>   {
>       int                     Length;
>
> +
>       Length = fread (Buffer, Size, Count, File);
>       if (Length < 0)
>       {
> @@ -226,14 +229,14 @@ AcpiOsReadFile (
>    *
>    * FUNCTION:    AcpiOsWriteFile
>    *
> - * PARAMETERS:  File                - File descriptor
> + * PARAMETERS:  File                - An open file descriptor
>    *              Buffer              - Data buffer
>    *              Size                - Data block size
>    *              Count               - Number of data blocks
>    *
> - * RETURN:      Size of successfully written buffer.
> + * RETURN:      Number of bytes actually written.
>    *
> - * DESCRIPTION: Write a file.
> + * DESCRIPTION: Write to a file.
>    *
>    ******************************************************************************/
>
> @@ -246,6 +249,7 @@ AcpiOsWriteFile (
>   {
>       int                     Length;
>
> +
>       Length = fwrite (Buffer, Size, Count, File);
>       if (Length < 0)
>       {
> @@ -260,9 +264,9 @@ AcpiOsWriteFile (
>    *
>    * FUNCTION:    AcpiOsGetFileOffset
>    *
> - * PARAMETERS:  File                - File descriptor
> + * PARAMETERS:  File                - An open file descriptor
>    *
> - * RETURN:      Size of current position.
> + * RETURN:      Current file pointer position.
>    *
>    * DESCRIPTION: Get current file offset.
>    *
> @@ -274,8 +278,8 @@ AcpiOsGetFileOffset (
>   {
>       long                    Offset;
>
> -    Offset = ftell (File);
>
> +    Offset = ftell (File);
>       return (Offset);
>   }
>
> @@ -284,8 +288,8 @@ AcpiOsGetFileOffset (
>    *
>    * FUNCTION:    AcpiOsSetFileOffset
>    *
> - * PARAMETERS:  File                - File descriptor
> - *              Offset              - File offset
> + * PARAMETERS:  File                - An open file descriptor
> + *              Offset              - New file offset
>    *              From                - From begin/end of file
>    *
>    * RETURN:      Status
> diff --git a/src/acpica/source/os_specific/service_layers/osunixxf.c b/src/acpica/source/os_specific/service_layers/osunixxf.c
> index c237ac2..6f0bdfe 100644
> --- a/src/acpica/source/os_specific/service_layers/osunixxf.c
> +++ b/src/acpica/source/os_specific/service_layers/osunixxf.c
> @@ -1231,7 +1231,7 @@ AcpiOsGetTimer (
>    * FUNCTION:    AcpiOsReadPciConfiguration
>    *
>    * PARAMETERS:  PciId               - Seg/Bus/Dev
> - *              Register            - Device Register
> + *              PciRegister         - Device Register
>    *              Value               - Buffer where value is placed
>    *              Width               - Number of bits
>    *
> @@ -1244,7 +1244,7 @@ AcpiOsGetTimer (
>   ACPI_STATUS
>   AcpiOsReadPciConfiguration (
>       ACPI_PCI_ID             *PciId,
> -    UINT32                  Register,
> +    UINT32                  PciRegister,
>       UINT64                  *Value,
>       UINT32                  Width)
>   {
> @@ -1259,7 +1259,7 @@ AcpiOsReadPciConfiguration (
>    * FUNCTION:    AcpiOsWritePciConfiguration
>    *
>    * PARAMETERS:  PciId               - Seg/Bus/Dev
> - *              Register            - Device Register
> + *              PciRegister         - Device Register
>    *              Value               - Value to be written
>    *              Width               - Number of bits
>    *
> @@ -1272,7 +1272,7 @@ AcpiOsReadPciConfiguration (
>   ACPI_STATUS
>   AcpiOsWritePciConfiguration (
>       ACPI_PCI_ID             *PciId,
> -    UINT32                  Register,
> +    UINT32                  PciRegister,
>       UINT64                  Value,
>       UINT32                  Width)
>   {
> diff --git a/src/acpica/source/tools/acpiexec/aehandlers.c b/src/acpica/source/tools/acpiexec/aehandlers.c
> index 06283f4..14b5e90 100644
> --- a/src/acpica/source/tools/acpiexec/aehandlers.c
> +++ b/src/acpica/source/tools/acpiexec/aehandlers.c
> @@ -1413,8 +1413,7 @@ AeRegionHandler (
>               case AML_FIELD_ATTRIB_RAW_BYTES:
>               case AML_FIELD_ATTRIB_RAW_PROCESS:
>
> -                /* (-2) for status/length */
> -                Length = MyContext->AccessLength - 2;
> +                Length = MyContext->AccessLength;
>                   break;
>
>               default:
> @@ -1448,8 +1447,7 @@ AeRegionHandler (
>               case AML_FIELD_ATTRIB_RAW_BYTES:
>               case AML_FIELD_ATTRIB_RAW_PROCESS:
>
> -                /* (-2) for status/length */
> -                Length = MyContext->AccessLength - 2;
> +                Length = MyContext->AccessLength;
>                   break;
>
>               default:
>

Acked-by: Ivan Hu <ivan.hu@canonical.com>
diff mbox

Patch

diff --git a/src/acpica/Makefile.am b/src/acpica/Makefile.am
index b2dd752..cbd38c6 100644
--- a/src/acpica/Makefile.am
+++ b/src/acpica/Makefile.am
@@ -216,6 +216,7 @@  libfwtsacpica_la_SOURCES =				\
 	source/components/utilities/uteval.c		\
 	source/components/utilities/utfileio.c		\
 	source/components/utilities/utglobal.c		\
+	source/components/utilities/uthex.c		\
 	source/components/utilities/utids.c		\
 	source/components/utilities/utinit.c		\
 	source/components/utilities/utlock.c		\
@@ -238,9 +239,11 @@  libfwtsacpica_la_SOURCES =				\
 	source/components/utilities/utxfinit.c		\
 	source/components/utilities/uterror.c		\
 	source/components/utilities/utbuffer.c 		\
+	source/components/utilities/utuuid.c		\
 	source/common/acgetline.c            		\
 	source/common/ahids.c				\
 	source/common/cmfsize.c            		\
+	source/common/ahuuids.c				\
 	source/tools/acpiexec/aehandlers.c
 
 libfwtsacpica_la_LIBADD = \
diff --git a/src/acpica/source/common/ahids.c b/src/acpica/source/common/ahids.c
index 3e12961..af6771b 100755
--- a/src/acpica/source/common/ahids.c
+++ b/src/acpica/source/common/ahids.c
@@ -246,7 +246,11 @@  const AH_DEVICE_ID  AslDeviceIds[] =
     {"PNP0C60",     "Display Sensor Device"},
     {"PNP0C70",     "Dock Sensor Device"},
     {"PNP0C80",     "Memory Device"},
-    {"PNP0D40",     "Standard Compliant SD Host Controller"},
+    {"PNP0D10",     "XHCI USB Controller with debug"},
+    {"PNP0D15",     "XHCI USB Controller without debug"},
+    {"PNP0D20",     "EHCI USB Controller without debug"},
+    {"PNP0D25",     "EHCI USB Controller with debug"},
+    {"PNP0D40",     "SDA Standard Compliant SD Host Controller"},
     {"PNP0D80",     "Windows-compatible System Power Management Controller"},
     {"PNP0F03",     "Microsoft PS/2-style Mouse"},
     {"SMO91D0",     "Sensor Hub"},
diff --git a/src/acpica/source/common/ahpredef.c b/src/acpica/source/common/ahpredef.c
index 525c7bb..7123b7f 100644
--- a/src/acpica/source/common/ahpredef.c
+++ b/src/acpica/source/common/ahpredef.c
@@ -169,6 +169,7 @@  const AH_PREDEFINED_NAME    AslPredefinedInfo[] =
     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"),
+    AH_PREDEF ("_CCA",    "Cache Coherency Attribute", "Returns a device's support level for cache coherency"),
     AH_PREDEF ("_CDM",    "Clock Domain", "Returns a logical processor's clock domain identifier"),
     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"),
@@ -193,6 +194,7 @@  const AH_PREDEFINED_NAME    AslPredefinedInfo[] =
     AH_PREDEF ("_DOS",    "Disable Output Switching", "Sets the display output switching mode"),
     AH_PREDEF ("_DPL",    "Device Selection Polarity", "Polarity of Device Selection signal, Resource Descriptor field"),
     AH_PREDEF ("_DRS",    "Drive Strength", "Drive Strength setting for GPIO connection, Resource Descriptor field"),
+    AH_PREDEF ("_DSD",    "Device-Specific Data", "Returns a list of device property information"),
     AH_PREDEF ("_DSM",    "Device-Specific Method", "Executes device-specific functions"),
     AH_PREDEF ("_DSS",    "Device Set State", "Sets the display device state"),
     AH_PREDEF ("_DSW",    "Device Sleep Wake", "Sets the sleep and wake transition states for a device"),
diff --git a/src/acpica/source/common/ahuuids.c b/src/acpica/source/common/ahuuids.c
new file mode 100644
index 0000000..1bf362c
--- /dev/null
+++ b/src/acpica/source/common/ahuuids.c
@@ -0,0 +1,201 @@ 
+/******************************************************************************
+ *
+ * Module Name: ahuuids - Table of known ACPI-related UUIDs
+ *
+ *****************************************************************************/
+
+/******************************************************************************
+ *
+ * 1. Copyright Notice
+ *
+ * Some or all of this work - Copyright (c) 1999 - 2014, Intel Corp.
+ * All rights reserved.
+ *
+ * 2. License
+ *
+ * 2.1. This is your license from Intel Corp. under its intellectual property
+ * rights. You may have additional license terms from the party that provided
+ * you this software, covering your right to use that party's intellectual
+ * property rights.
+ *
+ * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
+ * copy of the source code appearing in this file ("Covered Code") an
+ * irrevocable, perpetual, worldwide license under Intel's copyrights in the
+ * base code distributed originally by Intel ("Original Intel Code") to copy,
+ * make derivatives, distribute, use and display any portion of the Covered
+ * Code in any form, with the right to sublicense such rights; and
+ *
+ * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
+ * license (with the right to sublicense), under only those claims of Intel
+ * patents that are infringed by the Original Intel Code, to make, use, sell,
+ * offer to sell, and import the Covered Code and derivative works thereof
+ * solely to the minimum extent necessary to exercise the above copyright
+ * license, and in no event shall the patent license extend to any additions
+ * to or modifications of the Original Intel Code. No other license or right
+ * is granted directly or by implication, estoppel or otherwise;
+ *
+ * The above copyright and patent license is granted only if the following
+ * conditions are met:
+ *
+ * 3. Conditions
+ *
+ * 3.1. Redistribution of Source with Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification with rights to further distribute source must include
+ * the above Copyright Notice, the above License, this list of Conditions,
+ * and the following Disclaimer and Export Compliance provision. In addition,
+ * Licensee must cause all Covered Code to which Licensee contributes to
+ * contain a file documenting the changes Licensee made to create that Covered
+ * Code and the date of any change. Licensee must include in that file the
+ * documentation of any changes made by any predecessor Licensee. Licensee
+ * must include a prominent statement that the modification is derived,
+ * directly or indirectly, from Original Intel Code.
+ *
+ * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification without rights to further distribute source must
+ * include the following Disclaimer and Export Compliance provision in the
+ * documentation and/or other materials provided with distribution. In
+ * addition, Licensee may not authorize further sublicense of source of any
+ * portion of the Covered Code, and must include terms to the effect that the
+ * license from Licensee to its licensee is limited to the intellectual
+ * property embodied in the software Licensee provides to its licensee, and
+ * not to intellectual property embodied in modifications its licensee may
+ * make.
+ *
+ * 3.3. Redistribution of Executable. Redistribution in executable form of any
+ * substantial portion of the Covered Code or modification must reproduce the
+ * above Copyright Notice, and the following Disclaimer and Export Compliance
+ * provision in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3.4. Intel retains all right, title, and interest in and to the Original
+ * Intel Code.
+ *
+ * 3.5. Neither the name Intel nor any other trademark owned or controlled by
+ * Intel shall be used in advertising or otherwise to promote the sale, use or
+ * other dealings in products derived from or relating to the Covered Code
+ * without prior written authorization from Intel.
+ *
+ * 4. Disclaimer and Export Compliance
+ *
+ * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
+ * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
+ * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
+ * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
+ * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
+ * PARTICULAR PURPOSE.
+ *
+ * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
+ * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
+ * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
+ * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
+ * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
+ * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
+ * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
+ * LIMITED REMEDY.
+ *
+ * 4.3. Licensee shall not export, either directly or indirectly, any of this
+ * software or system incorporating such software without first obtaining any
+ * required license or other approval from the U. S. Department of Commerce or
+ * any other agency or department of the United States Government. In the
+ * event Licensee exports any such software from the United States or
+ * re-exports any such software from a foreign destination, Licensee shall
+ * ensure that the distribution and export/re-export of the software is in
+ * compliance with all laws, regulations, orders, or other restrictions of the
+ * U.S. Export Administration Regulations. Licensee agrees that neither it nor
+ * any of its subsidiaries will export/re-export any technical data, process,
+ * software, or service, directly or indirectly, to any country for which the
+ * United States government or any agency thereof requires an export license,
+ * other governmental approval, or letter of assurance, without first obtaining
+ * such license, approval or letter.
+ *
+ *****************************************************************************/
+
+#include "acpi.h"
+#include "accommon.h"
+
+#define _COMPONENT          ACPI_UTILITIES
+        ACPI_MODULE_NAME    ("ahuuids")
+
+/*
+ * Table of "known" (ACPI-related) UUIDs
+ */
+const AH_UUID  AcpiUuids[] =
+{
+    {"PCI Host Bridge Device",
+        "33db4d5b-1ff7-401c-9657-7441c03dd766"},
+
+    {"Platform-wide Capabilities",
+        "0811b06e-4a27-44f9-8d60-3cbbc22e7b48"},
+
+    {"Dynamic Enumeration",
+        "d8c1a3a6-be9b-4c9b-91bf-c3cb81fc5daf"},
+
+    {"GPIO Controller",
+        "4f248f40-d5e2-499f-834c-27758ea1cd3f"},
+
+    {"Battery Thermal Limit",
+        "4c2067e3-887d-475c-9720-4af1d3ed602e"},
+
+    {"Thermal Extensions",
+        "14d399cd-7a27-4b18-8fb4-7cb7b9f4e500"},
+
+    {"USB Controller",
+        "ce2ee385-00e6-48cb-9f05-2edb927c4899"},
+
+    {"HID I2C Device",
+        "3cdff6f7-4267-4555-ad05-b30a3d8938de"},
+
+    {"Power Button Device",
+        "dfbcf3c5-e7a5-44e6-9c1f-29c76f6e059c"},
+
+    {"Device Labeling Interface",
+        "e5c937d0-3553-4d7a-9117-ea4d19c3434d"},
+
+    {"SATA Controller",
+        "e4db149b-fcfe-425b-a6d8-92357d78fc7f"},
+
+    {"Physical Presence Interface",
+        "3dddfaa6-361b-4eb4-a424-8d10089d1653"},
+
+    {NULL, NULL}
+};
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiAhMatchUuid
+ *
+ * PARAMETERS:  Data                - Data buffer containing a UUID
+ *
+ * RETURN:      ASCII description string for the UUID if it is found.
+ *
+ * DESCRIPTION: Returns a description string for "known" UUIDs, which are
+ *              are UUIDs that are related to ACPI in some way.
+ *
+ ******************************************************************************/
+
+const char *
+AcpiAhMatchUuid (
+    UINT8                   *Data)
+{
+    const AH_UUID           *Info;
+    UINT8                   UuidBuffer[UUID_BUFFER_LENGTH];
+
+
+    /* Walk the table of known ACPI-related UUIDs */
+
+    for (Info = AcpiUuids; Info->Description; Info++)
+    {
+        AcpiUtConvertStringToUuid (Info->String, UuidBuffer);
+
+        if (!ACPI_MEMCMP (Data, UuidBuffer, UUID_BUFFER_LENGTH))
+        {
+            return (Info->Description);
+        }
+    }
+
+    return (NULL);
+}
diff --git a/src/acpica/source/common/dmextern.c b/src/acpica/source/common/dmextern.c
index efd72f6..30196df 100644
--- a/src/acpica/source/common/dmextern.c
+++ b/src/acpica/source/common/dmextern.c
@@ -478,18 +478,37 @@  AcpiDmGetExternalsFromFile (
     while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ExternalRefFile))
     {
         Token = strtok (StringBuffer, METHOD_SEPARATORS);   /* "External" */
-        if (!Token) continue;
-        if (strcmp (Token, "External")) continue;
+        if (!Token)
+        {
+            continue;
+        }
+        if (strcmp (Token, "External"))
+        {
+            continue;
+        }
 
         MethodName = strtok (NULL, METHOD_SEPARATORS);      /* Method namepath */
-        if (!MethodName) continue;
+        if (!MethodName)
+        {
+            continue;
+        }
 
         Token = strtok (NULL, METHOD_SEPARATORS);           /* "MethodObj" */
-        if (!Token) continue;
-        if (strcmp (Token, "MethodObj")) continue;
+        if (!Token)
+        {
+            continue;
+        }
+
+        if (strcmp (Token, "MethodObj"))
+        {
+            continue;
+        }
 
         Token = strtok (NULL, METHOD_SEPARATORS);           /* Arg count */
-        if (!Token) continue;
+        if (!Token)
+        {
+            continue;
+        }
 
         /* Convert arg count string to an integer */
 
diff --git a/src/acpica/source/common/dmtable.c b/src/acpica/source/common/dmtable.c
index e2abd7a..efb50b5 100644
--- a/src/acpica/source/common/dmtable.c
+++ b/src/acpica/source/common/dmtable.c
@@ -159,9 +159,21 @@  static const char           *AcpiDmDmarSubnames[] =
     "Reserved Memory Region",
     "Root Port ATS Capability",
     "Remapping Hardware Static Affinity",
+    "ACPI Namespace Device Declaration",
     "Unknown SubTable Type"         /* Reserved */
 };
 
+static const char           *AcpiDmDmarScope[] =
+{
+    "Reserved value",
+    "PCI Endpoint Device",
+    "PCI Bridge Device",
+    "IOAPIC Device",
+    "Message-capable HPET Device",
+    "Namespace Device",
+    "Unknown Scope Type"            /* Reserved */
+};
+
 static const char           *AcpiDmEinjActions[] =
 {
     "Begin Operation",
@@ -232,6 +244,13 @@  static const char           *AcpiDmErstInstructions[] =
     "Unknown Instruction"
 };
 
+static const char           *AcpiDmGtdtSubnames[] =
+{
+    "Generic Timer Block",
+    "Generic Watchdog Timer",
+    "Unknown SubTable Type"         /* Reserved */
+};
+
 static const char           *AcpiDmHestSubnames[] =
 {
     "IA-32 Machine Check Exception",
@@ -261,25 +280,28 @@  static const char           *AcpiDmHestNotifySubnames[] =
 
 static const char           *AcpiDmMadtSubnames[] =
 {
-    "Processor Local APIC",         /* ACPI_MADT_TYPE_LOCAL_APIC */
-    "I/O APIC",                     /* ACPI_MADT_TYPE_IO_APIC */
-    "Interrupt Source Override",    /* ACPI_MADT_TYPE_INTERRUPT_OVERRIDE */
-    "NMI Source",                   /* ACPI_MADT_TYPE_NMI_SOURCE */
-    "Local APIC NMI",               /* ACPI_MADT_TYPE_LOCAL_APIC_NMI */
-    "Local APIC Address Override",  /* ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE */
-    "I/O SAPIC",                    /* ACPI_MADT_TYPE_IO_SAPIC */
-    "Local SAPIC",                  /* ACPI_MADT_TYPE_LOCAL_SAPIC */
-    "Platform Interrupt Sources",   /* ACPI_MADT_TYPE_INTERRUPT_SOURCE */
-    "Processor Local x2APIC",       /* ACPI_MADT_TYPE_LOCAL_X2APIC */
-    "Local x2APIC NMI",             /* ACPI_MADT_TYPE_LOCAL_X2APIC_NMI */
-    "Generic Interrupt Controller", /* ACPI_MADT_GENERIC_INTERRUPT */
-    "Generic Interrupt Distributor",/* ACPI_MADT_GENERIC_DISTRIBUTOR */
-    "Unknown SubTable Type"         /* Reserved */
+    "Processor Local APIC",             /* ACPI_MADT_TYPE_LOCAL_APIC */
+    "I/O APIC",                         /* ACPI_MADT_TYPE_IO_APIC */
+    "Interrupt Source Override",        /* ACPI_MADT_TYPE_INTERRUPT_OVERRIDE */
+    "NMI Source",                       /* ACPI_MADT_TYPE_NMI_SOURCE */
+    "Local APIC NMI",                   /* ACPI_MADT_TYPE_LOCAL_APIC_NMI */
+    "Local APIC Address Override",      /* ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE */
+    "I/O SAPIC",                        /* ACPI_MADT_TYPE_IO_SAPIC */
+    "Local SAPIC",                      /* ACPI_MADT_TYPE_LOCAL_SAPIC */
+    "Platform Interrupt Sources",       /* ACPI_MADT_TYPE_INTERRUPT_SOURCE */
+    "Processor Local x2APIC",           /* ACPI_MADT_TYPE_LOCAL_X2APIC */
+    "Local x2APIC NMI",                 /* ACPI_MADT_TYPE_LOCAL_X2APIC_NMI */
+    "Generic Interrupt Controller",     /* ACPI_MADT_GENERIC_INTERRUPT */
+    "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 */
 };
 
 static const char           *AcpiDmPcctSubnames[] =
 {
     "Generic Communications Subspace",  /* ACPI_PCCT_TYPE_GENERIC_SUBSPACE */
+    "HW-Reduced Communications Subspace",
     "Unknown SubTable Type"             /* Reserved */
 };
 
@@ -378,7 +400,7 @@  ACPI_DMTABLE_DATA    AcpiDmTableData[] =
     {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, AcpiDmTableInfoGtdt,    NULL,           NULL,           TemplateGtdt,   "Generic Timer Description 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"},
@@ -777,6 +799,7 @@  AcpiDmDumpTable (
         case ACPI_DMT_SPACEID:
         case ACPI_DMT_ACCWIDTH:
         case ACPI_DMT_IVRS:
+        case ACPI_DMT_GTDT:
         case ACPI_DMT_MADT:
         case ACPI_DMT_PCCT:
         case ACPI_DMT_PMTT:
@@ -788,6 +811,7 @@  AcpiDmDumpTable (
         case ACPI_DMT_EINJINST:
         case ACPI_DMT_ERSTACT:
         case ACPI_DMT_ERSTINST:
+        case ACPI_DMT_DMAR_SCOPE:
 
             ByteLength = 1;
             break;
@@ -1119,6 +1143,19 @@  AcpiDmDumpTable (
             AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target), AcpiDmDmarSubnames[Temp16]);
             break;
 
+        case ACPI_DMT_DMAR_SCOPE:
+
+            /* DMAR device scope types */
+
+            Temp8 = *Target;
+            if (Temp8 > ACPI_DMAR_SCOPE_TYPE_RESERVED)
+            {
+                Temp8 = ACPI_DMAR_SCOPE_TYPE_RESERVED;
+            }
+
+            AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmDmarScope[Temp8]);
+            break;
+
         case ACPI_DMT_EINJACT:
 
             /* EINJ Action types */
@@ -1171,6 +1208,19 @@  AcpiDmDumpTable (
             AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmErstInstructions[Temp8]);
             break;
 
+        case ACPI_DMT_GTDT:
+
+            /* GTDT subtable types */
+
+            Temp8 = *Target;
+            if (Temp8 > ACPI_GTDT_TYPE_RESERVED)
+            {
+                Temp8 = ACPI_GTDT_TYPE_RESERVED;
+            }
+
+            AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmGtdtSubnames[Temp8]);
+            break;
+
         case ACPI_DMT_HEST:
 
             /* HEST subtable types */
diff --git a/src/acpica/source/common/dmtbdump.c b/src/acpica/source/common/dmtbdump.c
index 70e9d4e..b0ae905 100644
--- a/src/acpica/source/common/dmtbdump.c
+++ b/src/acpica/source/common/dmtbdump.c
@@ -963,18 +963,24 @@  AcpiDmDumpDmar (
             ScopeOffset = sizeof (ACPI_DMAR_RESERVED_MEMORY);
             break;
 
-        case ACPI_DMAR_TYPE_ATSR:
+        case ACPI_DMAR_TYPE_ROOT_ATS:
 
             InfoTable = AcpiDmTableInfoDmar2;
             ScopeOffset = sizeof (ACPI_DMAR_ATSR);
             break;
 
-        case ACPI_DMAR_HARDWARE_AFFINITY:
+        case ACPI_DMAR_TYPE_HARDWARE_AFFINITY:
 
             InfoTable = AcpiDmTableInfoDmar3;
             ScopeOffset = sizeof (ACPI_DMAR_RHSA);
             break;
 
+        case ACPI_DMAR_TYPE_NAMESPACE:
+
+            InfoTable = AcpiDmTableInfoDmar4;
+            ScopeOffset = sizeof (ACPI_DMAR_ANDD);
+            break;
+
         default:
 
             AcpiOsPrintf ("\n**** Unknown DMAR subtable type 0x%X\n\n", SubTable->Type);
@@ -988,7 +994,16 @@  AcpiDmDumpDmar (
             return;
         }
 
-        /* Dump the device scope entries (if any) */
+        /*
+         * Dump the optional device scope entries
+         */
+        if ((SubTable->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
+            (SubTable->Type == ACPI_DMAR_TYPE_NAMESPACE))
+        {
+            /* These types do not support device scopes */
+
+            goto NextSubtable;
+        }
 
         ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, SubTable, ScopeOffset);
         while (ScopeOffset < SubTable->Length)
@@ -1028,6 +1043,7 @@  AcpiDmDumpDmar (
                 ScopeTable, ScopeTable->Length);
         }
 
+NextSubtable:
         /* Point to next subtable */
 
         Offset += SubTable->Length;
@@ -1227,6 +1243,123 @@  NextSubTable:
 
 /*******************************************************************************
  *
+ * FUNCTION:    AcpiDmDumpGtdt
+ *
+ * PARAMETERS:  Table               - A GTDT table
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Format the contents of a GTDT. This table type consists
+ *              of an open-ended number of subtables.
+ *
+ ******************************************************************************/
+
+void
+AcpiDmDumpGtdt (
+    ACPI_TABLE_HEADER       *Table)
+{
+    ACPI_STATUS             Status;
+    ACPI_GTDT_HEADER        *SubTable;
+    UINT32                  Length = Table->Length;
+    UINT32                  Offset = sizeof (ACPI_TABLE_GTDT);
+    ACPI_DMTABLE_INFO       *InfoTable;
+    UINT32                  SubTableLength;
+    UINT32                  GtCount;
+    ACPI_GTDT_TIMER_ENTRY   *GtxTable;
+
+
+    /* Main table */
+
+    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoGtdt);
+    if (ACPI_FAILURE (Status))
+    {
+        return;
+    }
+
+    /* Subtables */
+
+    SubTable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Table, Offset);
+    while (Offset < Table->Length)
+    {
+        /* Common subtable header */
+
+        AcpiOsPrintf ("\n");
+        Status = AcpiDmDumpTable (Length, Offset, SubTable,
+                    SubTable->Length, AcpiDmTableInfoGtdtHdr);
+        if (ACPI_FAILURE (Status))
+        {
+            return;
+        }
+
+        GtCount = 0;
+        switch (SubTable->Type)
+        {
+        case ACPI_GTDT_TYPE_TIMER_BLOCK:
+
+            SubTableLength = sizeof (ACPI_GTDT_TIMER_BLOCK);
+            GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
+                        SubTable))->TimerCount;
+
+            InfoTable = AcpiDmTableInfoGtdt0;
+            break;
+
+        case ACPI_GTDT_TYPE_WATCHDOG:
+
+            SubTableLength = sizeof (ACPI_GTDT_WATCHDOG);
+
+            InfoTable = AcpiDmTableInfoGtdt1;
+            break;
+
+        default:
+
+            /* Cannot continue on unknown type - no length */
+
+            AcpiOsPrintf ("\n**** Unknown GTDT subtable type 0x%X\n", SubTable->Type);
+            return;
+        }
+
+        Status = AcpiDmDumpTable (Length, Offset, SubTable,
+                    SubTable->Length, InfoTable);
+        if (ACPI_FAILURE (Status))
+        {
+            return;
+        }
+
+        /* Point to end of current subtable (each subtable above is of fixed length) */
+
+        Offset += SubTableLength;
+
+        /* If there are any Gt Timer Blocks from above, dump them now */
+
+        if (GtCount)
+        {
+            GtxTable = ACPI_ADD_PTR (ACPI_GTDT_TIMER_ENTRY, SubTable, SubTableLength);
+            SubTableLength += GtCount * sizeof (ACPI_GTDT_TIMER_ENTRY);
+
+            while (GtCount)
+            {
+                AcpiOsPrintf ("\n");
+                Status = AcpiDmDumpTable (Length, Offset, GtxTable,
+                            sizeof (ACPI_GTDT_TIMER_ENTRY), AcpiDmTableInfoGtdt0a);
+                if (ACPI_FAILURE (Status))
+                {
+                    return;
+                }
+                Offset += sizeof (ACPI_GTDT_TIMER_ENTRY);
+                GtxTable++;
+                GtCount--;
+            }
+        }
+
+        /* Point to next subtable */
+
+        SubTable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, SubTable, SubTableLength);
+    }
+}
+
+
+/*******************************************************************************
+ *
  * FUNCTION:    AcpiDmDumpHest
  *
  * PARAMETERS:  Table               - A HEST table
@@ -1734,6 +1867,16 @@  AcpiDmDumpMadt (
             InfoTable = AcpiDmTableInfoMadt12;
             break;
 
+        case ACPI_MADT_TYPE_GENERIC_MSI_FRAME:
+
+            InfoTable = AcpiDmTableInfoMadt13;
+            break;
+
+        case ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR:
+
+            InfoTable = AcpiDmTableInfoMadt14;
+            break;
+
         default:
 
             AcpiOsPrintf ("\n**** Unknown MADT subtable type 0x%X\n\n", SubTable->Type);
@@ -2089,6 +2232,7 @@  AcpiDmDumpPcct (
 {
     ACPI_STATUS             Status;
     ACPI_PCCT_SUBSPACE      *SubTable;
+    ACPI_DMTABLE_INFO       *InfoTable;
     UINT32                  Length = Table->Length;
     UINT32                  Offset = sizeof (ACPI_TABLE_PCCT);
 
@@ -2116,10 +2260,20 @@  AcpiDmDumpPcct (
             return;
         }
 
-        /* ACPI 5.0: Only one type of PCCT subtable is supported */
-
-        if (SubTable->Header.Type != ACPI_PCCT_TYPE_GENERIC_SUBSPACE)
+        switch (SubTable->Header.Type)
         {
+        case ACPI_PCCT_TYPE_GENERIC_SUBSPACE:
+
+            InfoTable = AcpiDmTableInfoPcct0;
+            break;
+
+        case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE:
+
+            InfoTable = AcpiDmTableInfoPcct1;
+            break;
+
+        default:
+
             AcpiOsPrintf (
                 "\n**** Unexpected or unknown PCCT subtable type 0x%X\n\n",
                 SubTable->Header.Type);
@@ -2128,7 +2282,7 @@  AcpiDmDumpPcct (
 
         AcpiOsPrintf ("\n");
         Status = AcpiDmDumpTable (Length, Offset, SubTable,
-                    SubTable->Header.Length, AcpiDmTableInfoPcct0);
+                    SubTable->Header.Length, InfoTable);
         if (ACPI_FAILURE (Status))
         {
             return;
@@ -2282,8 +2436,7 @@  AcpiDmDumpPmtt (
             if (DomainCount)
             {
                 AcpiOsPrintf (
-                    "\n**** DomainCount exceeds subtable length\n\n",
-                    MemSubTable->Type);
+                    "\n**** DomainCount exceeds subtable length\n\n");
             }
 
             /* Walk the physical component (DIMM) subtables */
diff --git a/src/acpica/source/common/dmtbinfo.c b/src/acpica/source/common/dmtbinfo.c
index 7a9520d..2a3bed4 100644
--- a/src/acpica/source/common/dmtbinfo.c
+++ b/src/acpica/source/common/dmtbinfo.c
@@ -209,11 +209,16 @@ 
 #define ACPI_DMAR1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_DMAR_RESERVED_MEMORY,f)
 #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_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)
 #define ACPI_FPDT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_FPDT_BOOT,f)
 #define ACPI_FPDT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_FPDT_S3PT_PTR,f)
+#define ACPI_GTDT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_GTDT_TIMER_BLOCK,f)
+#define ACPI_GTDT0a_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_GTDT_TIMER_ENTRY,f)
+#define ACPI_GTDT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_GTDT_WATCHDOG,f)
+#define ACPI_GTDTH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_GTDT_HEADER,f)
 #define ACPI_HEST0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_HEST_IA_MACHINE_CHECK,f)
 #define ACPI_HEST1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_HEST_IA_CORRECTED,f)
 #define ACPI_HEST2_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_HEST_IA_NMI,f)
@@ -246,6 +251,8 @@ 
 #define ACPI_MADT10_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_X2APIC_NMI,f)
 #define ACPI_MADT11_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_INTERRUPT,f)
 #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_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)
@@ -256,6 +263,7 @@ 
 #define ACPI_MSCT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MSCT_PROXIMITY,f)
 #define ACPI_MTMR0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_MTMR_ENTRY,f)
 #define ACPI_PCCT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PCCT_SUBSPACE,f)
+#define ACPI_PCCT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PCCT_HW_REDUCED,f)
 #define ACPI_PMTT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PMTT_SOCKET,f)
 #define ACPI_PMTT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PMTT_CONTROLLER,f)
 #define ACPI_PMTT1A_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_PMTT_DOMAIN,f)
@@ -288,6 +296,8 @@ 
 #define ACPI_SRAT1_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_SRAT_MEM_AFFINITY,f,o)
 #define ACPI_SRAT2_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_SRAT_X2APIC_CPU_AFFINITY,f,o)
 #define ACPI_GTDT_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_GTDT,f,o)
+#define ACPI_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_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)
@@ -299,9 +309,11 @@ 
 #define ACPI_MADT9_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_X2APIC,f,o)
 #define ACPI_MADT10_FLAG_OFFSET(f,o)    ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_X2APIC_NMI,f,o)
 #define ACPI_MADT11_FLAG_OFFSET(f,o)    ACPI_FLAG_OFFSET (ACPI_MADT_GENERIC_INTERRUPT,f,o)
+#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_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)
 #define ACPI_WDDT_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_WDDT,f,o)
 #define ACPI_EINJ0_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_WHEA_HEADER,f,o)
@@ -512,17 +524,22 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoFadt2[] =
 {
     {ACPI_DMT_GAS,      ACPI_FADT_OFFSET (ResetRegister),           "Reset Register", 0},
     {ACPI_DMT_UINT8,    ACPI_FADT_OFFSET (ResetValue),              "Value to cause reset", 0},
-    {ACPI_DMT_UINT24,   ACPI_FADT_OFFSET (Reserved4[0]),            "Reserved", 0},
+    {ACPI_DMT_UINT16,   ACPI_FADT_OFFSET (ArmBootFlags),            "Reserved", 0},
+    {ACPI_DMT_UINT8,    ACPI_FADT_OFFSET (MinorRevision),           "Reserved", 0},
     ACPI_DMT_TERMINATOR
 };
 
-/* ACPI 2.0+ Extensions (FADT version 3 and 4) */
+/* ACPI 2.0+ Extensions (FADT version 3, 4, and 5) */
 
 ACPI_DMTABLE_INFO           AcpiDmTableInfoFadt3[] =
 {
     {ACPI_DMT_GAS,      ACPI_FADT_OFFSET (ResetRegister),           "Reset Register", 0},
     {ACPI_DMT_UINT8,    ACPI_FADT_OFFSET (ResetValue),              "Value to cause reset", 0},
-    {ACPI_DMT_UINT24,   ACPI_FADT_OFFSET (Reserved4[0]),            "Reserved", 0},
+    {ACPI_DMT_UINT16,   ACPI_FADT_OFFSET (ArmBootFlags),            "ARM Flags (decoded below)", DT_FLAG},
+    {ACPI_DMT_FLAG0,    ACPI_FADT_FLAG_OFFSET(ArmBootFlags,0),      "PSCI Compliant", 0},
+    {ACPI_DMT_FLAG1,    ACPI_FADT_FLAG_OFFSET(ArmBootFlags,0),      "Must use HVC for PSCI", 0},
+    ACPI_DMT_NEW_LINE,
+    {ACPI_DMT_UINT8,    ACPI_FADT_OFFSET (MinorRevision),           "FADT Minor Revision", 0},
     {ACPI_DMT_UINT64,   ACPI_FADT_OFFSET (XFacs),                   "FACS Address", 0},
     {ACPI_DMT_UINT64,   ACPI_FADT_OFFSET (XDsdt),                   "DSDT Address", 0},
     {ACPI_DMT_GAS,      ACPI_FADT_OFFSET (XPm1aEventBlock),         "PM1A Event Block", 0},
@@ -879,7 +896,7 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoDmarHdr[] =
 
 ACPI_DMTABLE_INFO           AcpiDmTableInfoDmarScope[] =
 {
-    {ACPI_DMT_UINT8,    ACPI_DMARS_OFFSET (EntryType),              "Device Scope Entry Type", 0},
+    {ACPI_DMT_DMAR_SCOPE, ACPI_DMARS_OFFSET (EntryType),            "Device Scope Type", 0},
     {ACPI_DMT_UINT8,    ACPI_DMARS_OFFSET (Length),                 "Entry Length", DT_LENGTH},
     {ACPI_DMT_UINT16,   ACPI_DMARS_OFFSET (Reserved),               "Reserved", 0},
     {ACPI_DMT_UINT8,    ACPI_DMARS_OFFSET (EnumerationId),          "Enumeration ID", 0},
@@ -931,6 +948,16 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoDmar3[] =
     ACPI_DMT_TERMINATOR
 };
 
+/* 4: ACPI Namespace Device Declaration Structure */
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoDmar4[] =
+{
+    {ACPI_DMT_UINT24,   ACPI_DMAR4_OFFSET (Reserved[0]),            "Reserved", 0},
+    {ACPI_DMT_UINT8,    ACPI_DMAR4_OFFSET (DeviceNumber),           "Device Number", 0},
+    {ACPI_DMT_STRING,   ACPI_DMAR4_OFFSET (DeviceName[0]),          "Device Name", 0},
+    ACPI_DMT_TERMINATOR
+};
+
 
 /*******************************************************************************
  *
@@ -1070,29 +1097,89 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoFpdt1[] =
 
 ACPI_DMTABLE_INFO           AcpiDmTableInfoGtdt[] =
 {
-    {ACPI_DMT_UINT64,   ACPI_GTDT_OFFSET (Address),                 "Timer Address", 0},
-    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (Flags),                   "Flags (decoded below)", DT_FLAG},
-    {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (Flags,0),            "Memory Present", 0},
+    {ACPI_DMT_UINT64,   ACPI_GTDT_OFFSET (CounterBlockAddresss),    "Counter Block Address", 0},
+    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (Reserved),                "Reserved", 0},
     ACPI_DMT_NEW_LINE,
-    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (SecurePl1Interrupt),      "Secure PL1 Interrupt", 0},
-    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (SecurePl1Flags),          "SPL1 Flags (decoded below)", DT_FLAG},
-    {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (SecurePl1Flags,0),   "Trigger Mode", 0},
-    {ACPI_DMT_FLAG1,    ACPI_GTDT_FLAG_OFFSET (SecurePl1Flags,0),   "Polarity", 0},
+    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (SecureEl1Interrupt),      "Secure EL1 Interrupt", 0},
+    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (SecureEl1Flags),          "EL1 Flags (decoded below)", DT_FLAG},
+    {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0),   "Trigger Mode", 0},
+    {ACPI_DMT_FLAG1,    ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0),   "Polarity", 0},
+    {ACPI_DMT_FLAG2,    ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0),   "Always On", 0},
     ACPI_DMT_NEW_LINE,
-    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (NonSecurePl1Interrupt),   "Non-Secure PL1 Interrupt", 0},
-    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (NonSecurePl1Flags),       "NSPL1 Flags (decoded below)", DT_FLAG},
-    {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (NonSecurePl1Flags,0),"Trigger Mode", 0},
-    {ACPI_DMT_FLAG1,    ACPI_GTDT_FLAG_OFFSET (NonSecurePl1Flags,0),"Polarity", 0},
+    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (NonSecureEl1Interrupt),   "Non-Secure EL1 Interrupt", 0},
+    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (NonSecureEl1Flags),       "NEL1 Flags (decoded below)", DT_FLAG},
+    {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Trigger Mode", 0},
+    {ACPI_DMT_FLAG1,    ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Polarity", 0},
+    {ACPI_DMT_FLAG2,    ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Always On", 0},
     ACPI_DMT_NEW_LINE,
     {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (VirtualTimerInterrupt),   "Virtual Timer Interrupt", 0},
     {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (VirtualTimerFlags),       "VT Flags (decoded below)", DT_FLAG},
     {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Trigger Mode", 0},
     {ACPI_DMT_FLAG1,    ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Polarity", 0},
+    {ACPI_DMT_FLAG2,    ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Always On", 0},
+    ACPI_DMT_NEW_LINE,
+    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (NonSecureEl2Interrupt),   "Non-Secure EL2 Interrupt", 0},
+    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (NonSecureEl2Flags),       "NEL2 Flags (decoded below)", DT_FLAG},
+    {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Trigger Mode", 0},
+    {ACPI_DMT_FLAG1,    ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Polarity", 0},
+    {ACPI_DMT_FLAG2,    ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Always On", 0},
+    {ACPI_DMT_UINT64,   ACPI_GTDT_OFFSET (CounterReadBlockAddress), "Counter Read Block Address", 0},
     ACPI_DMT_NEW_LINE,
-    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (NonSecurePl2Interrupt),   "Non-Secure PL2 Interrupt", 0},
-    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (NonSecurePl2Flags),       "NSPL2 Flags (decoded below)", DT_FLAG},
-    {ACPI_DMT_FLAG0,    ACPI_GTDT_FLAG_OFFSET (NonSecurePl2Flags,0),"Trigger Mode", 0},
-    {ACPI_DMT_FLAG1,    ACPI_GTDT_FLAG_OFFSET (NonSecurePl2Flags,0),"Polarity", 0},
+    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (PlatformTimerCount),      "Platform Timer Count", 0},
+    {ACPI_DMT_UINT32,   ACPI_GTDT_OFFSET (PlatformTimerOffset),     "Platform Timer Offset", 0},
+    ACPI_DMT_TERMINATOR
+};
+
+/* GTDT Subtable header (one per Subtable) */
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoGtdtHdr[] =
+{
+    {ACPI_DMT_GTDT,     ACPI_GTDTH_OFFSET (Type),                   "Subtable Type", 0},
+    {ACPI_DMT_UINT16,   ACPI_GTDTH_OFFSET (Length),                 "Length", DT_LENGTH},
+    ACPI_DMT_TERMINATOR
+};
+
+/* GTDT Subtables */
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoGtdt0[] =
+{
+    {ACPI_DMT_UINT8,    ACPI_GTDT0_OFFSET (Reserved),               "Reserved", 0},
+    {ACPI_DMT_UINT64,   ACPI_GTDT0_OFFSET (BlockAddress),           "Block Address", 0},
+    {ACPI_DMT_UINT32,   ACPI_GTDT0_OFFSET (TimerCount),             "Timer Count", 0},
+    {ACPI_DMT_UINT32,   ACPI_GTDT0_OFFSET (TimerOffset),            "Timer Offset", 0},
+    ACPI_DMT_TERMINATOR
+};
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoGtdt0a[] =
+{
+    {ACPI_DMT_UINT8 ,   ACPI_GTDT0a_OFFSET (FrameNumber),               "Frame Number", 0},
+    {ACPI_DMT_UINT24,   ACPI_GTDT0a_OFFSET (Reserved[0]),               "Reserved", 0},
+    {ACPI_DMT_UINT64,   ACPI_GTDT0a_OFFSET (BaseAddress),               "Base Address", 0},
+    {ACPI_DMT_UINT64,   ACPI_GTDT0a_OFFSET (El0BaseAddress),            "EL0 Base Address", 0},
+    {ACPI_DMT_UINT32,   ACPI_GTDT0a_OFFSET (TimerInterrupt),            "Timer Interrupt", 0},
+    {ACPI_DMT_UINT32,   ACPI_GTDT0a_OFFSET (TimerFlags),                "Timer Flags (decoded below)", 0},
+    {ACPI_DMT_FLAG0,    ACPI_GTDT0a_FLAG_OFFSET (TimerFlags,0),         "Trigger Mode", 0},
+    {ACPI_DMT_FLAG1,    ACPI_GTDT0a_FLAG_OFFSET (TimerFlags,0),         "Polarity", 0},
+    {ACPI_DMT_UINT32,   ACPI_GTDT0a_OFFSET (VirtualTimerInterrupt),     "Virtual Timer Interrupt", 0},
+    {ACPI_DMT_UINT32,   ACPI_GTDT0a_OFFSET (VirtualTimerFlags),         "Virtual Timer Flags (decoded below)", 0},
+    {ACPI_DMT_FLAG0,    ACPI_GTDT0a_FLAG_OFFSET (VirtualTimerFlags,0),  "Trigger Mode", 0},
+    {ACPI_DMT_FLAG1,    ACPI_GTDT0a_FLAG_OFFSET (VirtualTimerFlags,0),  "Polarity", 0},
+    {ACPI_DMT_UINT32,   ACPI_GTDT0a_OFFSET (CommonFlags),               "Common Flags (decoded below)", 0},
+    {ACPI_DMT_FLAG0,    ACPI_GTDT0a_FLAG_OFFSET (CommonFlags,0),        "Secure", 0},
+    {ACPI_DMT_FLAG1,    ACPI_GTDT0a_FLAG_OFFSET (CommonFlags,0),        "Always On", 0},
+    ACPI_DMT_TERMINATOR
+};
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoGtdt1[] =
+{
+    {ACPI_DMT_UINT8,    ACPI_GTDT1_OFFSET (Reserved),               "Reserved", 0},
+    {ACPI_DMT_UINT64,   ACPI_GTDT1_OFFSET (RefreshFrameAddress),    "Refresh Frame Address", 0},
+    {ACPI_DMT_UINT64,   ACPI_GTDT1_OFFSET (ControlFrameAddress),    "Control Frame Address", 0},
+    {ACPI_DMT_UINT32,   ACPI_GTDT1_OFFSET (TimerInterrupt),         "Timer Interrupt", 0},
+    {ACPI_DMT_UINT32,   ACPI_GTDT1_OFFSET (TimerFlags),             "Timer Flags (decoded below)", DT_FLAG},
+    {ACPI_DMT_FLAG0,    ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0),      "Trigger Mode", 0},
+    {ACPI_DMT_FLAG1,    ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0),      "Polarity", 0},
+    {ACPI_DMT_FLAG2,    ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0),      "Security", 0},
     ACPI_DMT_TERMINATOR
 };
 
@@ -1599,14 +1686,21 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoMadt10[] =
 ACPI_DMTABLE_INFO           AcpiDmTableInfoMadt11[] =
 {
     {ACPI_DMT_UINT16,   ACPI_MADT11_OFFSET (Reserved),              "Reserved", 0},
-    {ACPI_DMT_UINT32,   ACPI_MADT11_OFFSET (GicId),                 "Local GIC Hardware ID", 0},
+    {ACPI_DMT_UINT32,   ACPI_MADT11_OFFSET (CpuInterfaceNumber),    "CPU Interface Number", 0},
     {ACPI_DMT_UINT32,   ACPI_MADT11_OFFSET (Uid),                   "Processor UID", 0},
     {ACPI_DMT_UINT32,   ACPI_MADT11_OFFSET (Flags),                 "Flags (decoded below)", DT_FLAG},
     {ACPI_DMT_FLAG0,    ACPI_MADT11_FLAG_OFFSET (Flags,0),          "Processor Enabled", 0},
+    {ACPI_DMT_FLAG1,    ACPI_MADT11_FLAG_OFFSET (Flags,0),          "Performance Interrupt Trigger Mode", 0},
+    {ACPI_DMT_FLAG2,    ACPI_MADT11_FLAG_OFFSET (Flags,0),          "Virtual GIC Interrupt Trigger Mode", 0},
     {ACPI_DMT_UINT32,   ACPI_MADT11_OFFSET (ParkingVersion),        "Parking Protocol Version", 0},
     {ACPI_DMT_UINT32,   ACPI_MADT11_OFFSET (PerformanceInterrupt),  "Performance Interrupt", 0},
     {ACPI_DMT_UINT64,   ACPI_MADT11_OFFSET (ParkedAddress),         "Parked Address", 0},
     {ACPI_DMT_UINT64,   ACPI_MADT11_OFFSET (BaseAddress),           "Base Address", 0},
+    {ACPI_DMT_UINT64,   ACPI_MADT11_OFFSET (GicvBaseAddress),       "Virtual GIC Base Address", 0},
+    {ACPI_DMT_UINT64,   ACPI_MADT11_OFFSET (GichBaseAddress),       "Hypervisor GIC Base Address", 0},
+    {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_TERMINATOR
 };
 
@@ -1622,6 +1716,30 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoMadt12[] =
    ACPI_DMT_TERMINATOR
 };
 
+/* 13: Generic MSI Frame (ACPI 5.1) */
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoMadt13[] =
+{
+    {ACPI_DMT_UINT16,   ACPI_MADT13_OFFSET (Reserved),              "Reserved", 0},
+    {ACPI_DMT_UINT32,   ACPI_MADT13_OFFSET (MsiFrameId),            "MSI Frame ID", 0},
+    {ACPI_DMT_UINT64,   ACPI_MADT13_OFFSET (BaseAddress),           "Base Address", 0},
+    {ACPI_DMT_UINT32,   ACPI_MADT13_OFFSET (Flags),                 "Flags (decoded below)", DT_FLAG},
+    {ACPI_DMT_FLAG0,    ACPI_MADT13_FLAG_OFFSET (Flags,0),          "Select SPI", 0},
+    {ACPI_DMT_UINT16,   ACPI_MADT13_OFFSET (SpiCount),              "SPI Count", 0},
+    {ACPI_DMT_UINT16,   ACPI_MADT13_OFFSET (SpiBase),               "SPI Base", 0},
+   ACPI_DMT_TERMINATOR
+};
+
+/* 14: Generic Redistributor (ACPI 5.1) */
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoMadt14[] =
+{
+    {ACPI_DMT_UINT16,   ACPI_MADT14_OFFSET (Reserved),              "Reserved", 0},
+    {ACPI_DMT_UINT64,   ACPI_MADT14_OFFSET (BaseAddress),           "Base Address", 0},
+    {ACPI_DMT_UINT32,   ACPI_MADT14_OFFSET (Length),                "Length", 0},
+   ACPI_DMT_TERMINATOR
+};
+
 
 /*******************************************************************************
  *
@@ -1841,6 +1959,26 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoPcct0[] =
     ACPI_DMT_TERMINATOR
 };
 
+/* 1: HW-reduced Communications Subspace (ACPI 5.1) */
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoPcct1[] =
+{
+    {ACPI_DMT_UINT32,   ACPI_PCCT1_OFFSET (DoorbellInterrupt),      "Doorbell Interrupt", 0},
+    {ACPI_DMT_UINT8,    ACPI_PCCT1_OFFSET (Flags),                  "Flags (Decoded Below)", DT_FLAG},
+    {ACPI_DMT_FLAG0,    ACPI_PCCT1_FLAG_OFFSET (Flags,0),           "Polarity", 0},
+    {ACPI_DMT_FLAG1,    ACPI_PCCT1_FLAG_OFFSET (Flags,0),           "Mode", 0},
+    {ACPI_DMT_UINT8,    ACPI_PCCT1_OFFSET (Reserved),               "Reserved", 0},
+    {ACPI_DMT_UINT64,   ACPI_PCCT1_OFFSET (BaseAddress),            "Base Address", 0},
+    {ACPI_DMT_UINT64,   ACPI_PCCT1_OFFSET (Length),                 "Address Length", 0},
+    {ACPI_DMT_GAS,      ACPI_PCCT1_OFFSET (DoorbellRegister),       "Doorbell Register", 0},
+    {ACPI_DMT_UINT64,   ACPI_PCCT1_OFFSET (PreserveMask),           "Preserve Mask", 0},
+    {ACPI_DMT_UINT64,   ACPI_PCCT1_OFFSET (WriteMask),              "Write Mask", 0},
+    {ACPI_DMT_UINT32,   ACPI_PCCT1_OFFSET (Latency),                "Command Latency", 0},
+    {ACPI_DMT_UINT32,   ACPI_PCCT1_OFFSET (MaxAccessRate),          "Maximum Access Rate", 0},
+    {ACPI_DMT_UINT16,   ACPI_PCCT1_OFFSET (MinTurnaroundTime),      "Minimum Turnaround Time", 0},
+    ACPI_DMT_TERMINATOR
+};
+
 
 /*******************************************************************************
  *
diff --git a/src/acpica/source/compiler/Makefile.am b/src/acpica/source/compiler/Makefile.am
index 55eccb9..a1de14a 100644
--- a/src/acpica/source/compiler/Makefile.am
+++ b/src/acpica/source/compiler/Makefile.am
@@ -124,6 +124,7 @@  libfwtsiasl_la_SOURCES = 			\
 	../components/utilities/utdebug.c 	\
 	../components/utilities/utdelete.c 	\
 	../components/utilities/utglobal.c 	\
+	../components/utilities/uthex.c		\
 	../components/utilities/utinit.c 	\
 	../components/utilities/utlock.c 	\
 	../components/utilities/utobject.c 	\
@@ -140,6 +141,7 @@  libfwtsiasl_la_SOURCES = 			\
 	../components/utilities/utaddress.c 	\
 	../components/utilities/utownerid.c 	\
 	../components/utilities/utexcep.c 	\
+	../components/utilities/utuuid.c	\
 	../components/namespace/nsaccess.c 	\
 	../components/namespace/nsalloc.c 	\
 	../components/namespace/nsdump.c 	\
diff --git a/src/acpica/source/compiler/aslanalyze.c b/src/acpica/source/compiler/aslanalyze.c
index 16e28d3..8bfc9ac 100644
--- a/src/acpica/source/compiler/aslanalyze.c
+++ b/src/acpica/source/compiler/aslanalyze.c
@@ -641,3 +641,51 @@  ApCheckRegMethod (
 
     AslError (ASL_WARNING, ASL_MSG_NO_REGION, Op, NULL);
 }
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    ApFindNameInScope
+ *
+ * PARAMETERS:  Name                - Name to search for
+ *              Op                  - Current parse op
+ *
+ * RETURN:      TRUE if name found in the same scope as Op.
+ *
+ * DESCRIPTION: Determine if a name appears in the same scope as Op, as either
+ *              a Method() or a Name().
+ *
+ ******************************************************************************/
+
+BOOLEAN
+ApFindNameInScope (
+    char                    *Name,
+    ACPI_PARSE_OBJECT       *Op)
+{
+    ACPI_PARSE_OBJECT       *Next;
+    ACPI_PARSE_OBJECT       *Parent;
+
+
+    /* Get the start of the current scope */
+
+    Parent = Op->Asl.Parent;
+    Next = Parent->Asl.Child;
+
+    /* Search entire scope for a match to the name */
+
+    while (Next)
+    {
+        if ((Next->Asl.ParseOpcode == PARSEOP_METHOD) ||
+            (Next->Asl.ParseOpcode == PARSEOP_NAME))
+        {
+            if (ACPI_COMPARE_NAME (Name, Next->Asl.NameSeg))
+            {
+                return (TRUE);
+            }
+        }
+
+        Next = Next->Asl.Next;
+    }
+
+    return (FALSE);
+}
diff --git a/src/acpica/source/compiler/aslcompiler.h b/src/acpica/source/compiler/aslcompiler.h
index 6e59b0f..c4afef4 100644
--- a/src/acpica/source/compiler/aslcompiler.h
+++ b/src/acpica/source/compiler/aslcompiler.h
@@ -347,6 +347,11 @@  void
 ApCheckRegMethod (
     ACPI_PARSE_OBJECT       *Op);
 
+BOOLEAN
+ApFindNameInScope (
+    char                    *Name,
+    ACPI_PARSE_OBJECT       *Op);
+
 
 /*
  * aslerror - error handling/reporting
@@ -962,10 +967,6 @@  void
 UtDisplaySummary (
     UINT32                  FileId);
 
-UINT8
-UtHexCharToValue (
-    int                     HexChar);
-
 void
 UtConvertByteToHex (
     UINT8                   RawByte,
@@ -1027,11 +1028,6 @@  AuValidateUuid (
     char                    *InString);
 
 ACPI_STATUS
-AuConvertStringToUuid (
-    char                    *InString,
-    char                    *UuIdBuffer);
-
-ACPI_STATUS
 AuConvertUuidToString (
     char                    *UuIdBuffer,
     char                    *OutString);
diff --git a/src/acpica/source/compiler/aslcompiler.l b/src/acpica/source/compiler/aslcompiler.l
index b06aa65..bdcc8ed 100644
--- a/src/acpica/source/compiler/aslcompiler.l
+++ b/src/acpica/source/compiler/aslcompiler.l
@@ -182,10 +182,10 @@  NamePathTail                [.]{NameSeg}
 [ \t]                       { count (0); }
 
 
-"/*"                        { if (!AslDoComment ()) yyterminate (); }
-"//"                        { if (!AslDoCommentType2 ()) yyterminate (); }
+"/*"                        { if (!AslDoComment ()) {yyterminate ();} }
+"//"                        { if (!AslDoCommentType2 ()) {yyterminate ();} }
 
-"\""                        { if (AslDoStringLiteral ()) return (PARSEOP_STRING_LITERAL); else yyterminate (); }
+"\""                        { if (AslDoStringLiteral ()) {return (PARSEOP_STRING_LITERAL);} else {yyterminate ();} }
 ";"                         { count (0); return(';'); }
 
 
@@ -711,9 +711,9 @@  NamePathTail                [.]{NameSeg}
                                 AslCompilererror (MsgBuffer);}
 
 <<EOF>>                     { if (AslPopInputFileStack ())
-                                yyterminate();
+                                {yyterminate();}
                               else
-                                return (PARSEOP_INCLUDE_END);};
+                                {return (PARSEOP_INCLUDE_END);} };
 
 %%
 
diff --git a/src/acpica/source/compiler/asldefine.h b/src/acpica/source/compiler/asldefine.h
index 71f52db..b05bd7f 100644
--- a/src/acpica/source/compiler/asldefine.h
+++ b/src/acpica/source/compiler/asldefine.h
@@ -127,7 +127,7 @@ 
 #define ASL_INVOCATION_NAME         "iasl"
 #define ASL_CREATOR_ID              "INTL"
 
-#define ASL_COMPLIANCE              "Supports ACPI Specification Revision 5.0A"
+#define ASL_COMPLIANCE              "Supports ACPI Specification Revision 5.1"
 
 
 /* Configuration constants */
diff --git a/src/acpica/source/compiler/aslglobal.h b/src/acpica/source/compiler/aslglobal.h
index 4d56c05..53a500e 100644
--- a/src/acpica/source/compiler/aslglobal.h
+++ b/src/acpica/source/compiler/aslglobal.h
@@ -135,11 +135,6 @@ 
 
 #ifdef _DECLARE_GLOBALS
 UINT32                              Gbl_ExceptionCount[ASL_NUM_REPORT_LEVELS] = {0,0,0,0,0,0};
-char                                AslHexLookup[] =
-{
-    '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
-};
-
 
 /* Table below must match ASL_FILE_TYPES in asltypes.h */
 
@@ -164,7 +159,6 @@  ASL_FILE_INFO                       Gbl_Files [ASL_NUM_FILES] =
 
 #else
 extern UINT32                       Gbl_ExceptionCount[ASL_NUM_REPORT_LEVELS];
-extern char                         AslHexLookup[];
 extern ASL_FILE_INFO                Gbl_Files [ASL_NUM_FILES];
 #endif
 
diff --git a/src/acpica/source/compiler/aslmessages.c b/src/acpica/source/compiler/aslmessages.c
index 5b271d3..11b5d57 100644
--- a/src/acpica/source/compiler/aslmessages.c
+++ b/src/acpica/source/compiler/aslmessages.c
@@ -305,6 +305,7 @@  const char                      *AslCompilerMsgs [] =
 /*    ASL_MSG_WRITE */                      "Could not write file",
 /*    ASL_MSG_RANGE */                      "Constant out of range",
 /*    ASL_MSG_BUFFER_ALLOCATION */          "Could not allocate line buffer",
+/*    ASL_MSG_MISSING_DEPENDENCY */         "Missing dependency"
 };
 
 /* Table compiler */
diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h
index 150425c..5743075 100644
--- a/src/acpica/source/compiler/aslmessages.h
+++ b/src/acpica/source/compiler/aslmessages.h
@@ -307,6 +307,7 @@  typedef enum
     ASL_MSG_WRITE,
     ASL_MSG_RANGE,
     ASL_MSG_BUFFER_ALLOCATION,
+    ASL_MSG_MISSING_DEPENDENCY,
 
     /* These messages are used by the Data Table compiler only */
 
diff --git a/src/acpica/source/compiler/aslmethod.c b/src/acpica/source/compiler/aslmethod.c
index edf2fa4..58c1cc8 100644
--- a/src/acpica/source/compiler/aslmethod.c
+++ b/src/acpica/source/compiler/aslmethod.c
@@ -180,6 +180,17 @@  MtMethodAnalysisWalkBegin (
 
         WalkInfo->MethodStack = MethodInfo;
 
+        /* Special handling for _DSD, must have a _HID also */
+
+        if (!ACPI_STRCMP (METHOD_NAME__DSD, Op->Asl.NameSeg))
+        {
+            if (!ApFindNameInScope (METHOD_NAME__HID, Op))
+            {
+                AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op,
+                    "_DSD requires _HID in same scope");
+            }
+        }
+
         /* Get the name node */
 
         Next = Op->Asl.Child;
@@ -485,6 +496,15 @@  MtMethodAnalysisWalkBegin (
             }
         }
 
+        else if (!ACPI_STRCMP (METHOD_NAME__DSD, Op->Asl.NameSeg))
+        {
+            if (!ApFindNameInScope (METHOD_NAME__HID, Op))
+            {
+                AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op,
+                    "_DSD requires _HID in same scope");
+            }
+        }
+
         break;
 
     default:
diff --git a/src/acpica/source/compiler/aslopcodes.c b/src/acpica/source/compiler/aslopcodes.c
index 53971e0..bd8ea0e 100644
--- a/src/acpica/source/compiler/aslopcodes.c
+++ b/src/acpica/source/compiler/aslopcodes.c
@@ -695,10 +695,10 @@  OpcDoEisaId (
             (UINT32) ((UINT8) (InString[1] - 0x40)) << 21 |
             (UINT32) ((UINT8) (InString[2] - 0x40)) << 16 |
 
-            (UtHexCharToValue (InString[3])) << 12 |
-            (UtHexCharToValue (InString[4])) << 8  |
-            (UtHexCharToValue (InString[5])) << 4  |
-             UtHexCharToValue (InString[6]);
+            (AcpiUtAsciiCharToHex (InString[3])) << 12 |
+            (AcpiUtAsciiCharToHex (InString[4])) << 8  |
+            (AcpiUtAsciiCharToHex (InString[5])) << 4  |
+             AcpiUtAsciiCharToHex (InString[6]);
 
         /* Swap to little-endian to get final ID (see function header) */
 
@@ -738,7 +738,7 @@  OpcDoUuId (
     ACPI_PARSE_OBJECT       *Op)
 {
     char                    *InString;
-    char                    *Buffer;
+    UINT8                   *Buffer;
     ACPI_STATUS             Status = AE_OK;
     ACPI_PARSE_OBJECT       *NewOp;
 
@@ -753,7 +753,7 @@  OpcDoUuId (
     }
     else
     {
-        (void) AuConvertStringToUuid (InString, Buffer);
+        AcpiUtConvertStringToUuid (InString, Buffer);
     }
 
     /* Change Op to a Buffer */
diff --git a/src/acpica/source/compiler/aslprepkg.c b/src/acpica/source/compiler/aslprepkg.c
index 2de5559..8184a3d 100644
--- a/src/acpica/source/compiler/aslprepkg.c
+++ b/src/acpica/source/compiler/aslprepkg.c
@@ -361,6 +361,41 @@  ApCheckPackage (
             Package, 1, Count);
         break;
 
+    case ACPI_PTYPE2_UUID_PAIR:
+
+        /* The package contains a variable list of UUID Buffer/Package pairs */
+
+        /* The length of the package must be even */
+
+        if (Count & 1)
+        {
+            sprintf (MsgBuffer, "%4.4s: Package length, %d, must be even.",
+                Predefined->Info.Name, Count);
+
+            AslError (ASL_ERROR, ASL_MSG_RESERVED_PACKAGE_LENGTH,
+                ParentOp->Asl.Child, MsgBuffer);
+        }
+
+        /* Validate the alternating types */
+
+        for (i = 0; i < Count; ++i)
+        {
+            if (i & 1)
+            {
+                ApCheckObjectType (Predefined->Info.Name, Op,
+                    Package->RetInfo.ObjectType2, i);
+            }
+            else
+            {
+                ApCheckObjectType (Predefined->Info.Name, Op,
+                    Package->RetInfo.ObjectType1, i);
+            }
+
+            Op = Op->Asl.Next;
+        }
+
+        break;
+
     case ACPI_PTYPE2:
     case ACPI_PTYPE2_FIXED:
     case ACPI_PTYPE2_MIN:
diff --git a/src/acpica/source/compiler/aslutils.c b/src/acpica/source/compiler/aslutils.c
index f33c3bd..5a02470 100644
--- a/src/acpica/source/compiler/aslutils.c
+++ b/src/acpica/source/compiler/aslutils.c
@@ -315,37 +315,6 @@  UtEndEvent (
 
 /*******************************************************************************
  *
- * FUNCTION:    UtHexCharToValue
- *
- * PARAMETERS:  HexChar             - Hex character in Ascii
- *
- * RETURN:      The binary value of the hex character
- *
- * DESCRIPTION: Perform ascii-to-hex translation
- *
- ******************************************************************************/
-
-UINT8
-UtHexCharToValue (
-    int                     HexChar)
-{
-
-    if (HexChar <= 0x39)
-    {
-        return ((UINT8) (HexChar - 0x30));
-    }
-
-    if (HexChar <= 0x46)
-    {
-        return ((UINT8) (HexChar - 0x37));
-    }
-
-    return ((UINT8) (HexChar - 0x57));
-}
-
-
-/*******************************************************************************
- *
  * FUNCTION:    UtConvertByteToHex
  *
  * PARAMETERS:  RawByte             - Binary data
@@ -368,8 +337,8 @@  UtConvertByteToHex (
     Buffer[0] = '0';
     Buffer[1] = 'x';
 
-    Buffer[2] = (UINT8) AslHexLookup[(RawByte >> 4) & 0xF];
-    Buffer[3] = (UINT8) AslHexLookup[RawByte & 0xF];
+    Buffer[2] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 4);
+    Buffer[3] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 0);
 }
 
 
@@ -384,7 +353,7 @@  UtConvertByteToHex (
  * RETURN:      Ascii hex byte is stored in Buffer.
  *
  * DESCRIPTION: Perform hex-to-ascii translation. The return data is prefixed
- *              with "0x"
+ *              with '0', and a trailing 'h' is added.
  *
  ******************************************************************************/
 
@@ -395,8 +364,8 @@  UtConvertByteToAsmHex (
 {
 
     Buffer[0] = '0';
-    Buffer[1] = (UINT8) AslHexLookup[(RawByte >> 4) & 0xF];
-    Buffer[2] = (UINT8) AslHexLookup[RawByte & 0xF];
+    Buffer[1] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 4);
+    Buffer[2] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 0);
     Buffer[3] = 'h';
 }
 
diff --git a/src/acpica/source/compiler/asluuid.c b/src/acpica/source/compiler/asluuid.c
index ad76c2d..98a63a3 100644
--- a/src/acpica/source/compiler/asluuid.c
+++ b/src/acpica/source/compiler/asluuid.c
@@ -113,42 +113,13 @@ 
  *
  *****************************************************************************/
 
-
 #include "aslcompiler.h"
 
 #define _COMPONENT          ACPI_COMPILER
         ACPI_MODULE_NAME    ("asluuid")
 
 
-/*
- * UUID support functions.
- *
- * This table is used to convert an input UUID ascii string to a 16 byte
- * buffer and the reverse. The table maps a UUID buffer index 0-15 to
- * the index within the 36-byte UUID string where the associated 2-byte
- * hex value can be found.
- *
- * 36-byte UUID strings are of the form:
- *     aabbccdd-eeff-gghh-iijj-kkllmmnnoopp
- * Where aa-pp are one byte hex numbers, made up of two hex digits
- *
- * Note: This table is basically the inverse of the string-to-offset table
- * found in the ACPI spec in the description of the ToUUID macro.
- */
-static UINT8    Gbl_MapToUuidOffset[16] =
-{
-    6,4,2,0,11,9,16,14,19,21,24,26,28,30,32,34
-};
-
-#define UUID_BUFFER_LENGTH          16
-#define UUID_STRING_LENGTH          36
-
-/* Positions for required hyphens (dashes) in UUID strings */
-
-#define UUID_HYPHEN1_OFFSET         8
-#define UUID_HYPHEN2_OFFSET         13
-#define UUID_HYPHEN3_OFFSET         18
-#define UUID_HYPHEN4_OFFSET         23
+extern UINT8    AcpiGbl_MapToUuidOffset[UUID_BUFFER_LENGTH];
 
 
 /*******************************************************************************
@@ -209,42 +180,6 @@  AuValidateUuid (
 
 /*******************************************************************************
  *
- * FUNCTION:    AuConvertStringToUuid
- *
- * PARAMETERS:  InString            - 36-byte formatted UUID string
- *              UuidBuffer          - 16-byte UUID buffer
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Convert 36-byte formatted UUID string to 16-byte UUID buffer
- *
- ******************************************************************************/
-
-ACPI_STATUS
-AuConvertStringToUuid (
-    char                    *InString,
-    char                    *UuidBuffer)
-{
-    UINT32                  i;
-
-
-    if (!InString || !UuidBuffer)
-    {
-        return (AE_BAD_PARAMETER);
-    }
-
-    for (i = 0; i < UUID_BUFFER_LENGTH; i++)
-    {
-        UuidBuffer[i]  = (char) (UtHexCharToValue (InString[Gbl_MapToUuidOffset[i]]) << 4);
-        UuidBuffer[i] |= (char)  UtHexCharToValue (InString[Gbl_MapToUuidOffset[i] + 1]);
-    }
-
-    return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
  * FUNCTION:    AuConvertUuidToString
  *
  * PARAMETERS:  UuidBuffer          - 16-byte UUID buffer
@@ -272,8 +207,11 @@  AuConvertUuidToString (
 
     for (i = 0; i < UUID_BUFFER_LENGTH; i++)
     {
-        OutString[Gbl_MapToUuidOffset[i]] =     (UINT8) AslHexLookup[(UuidBuffer[i] >> 4) & 0xF];
-        OutString[Gbl_MapToUuidOffset[i] + 1] = (UINT8) AslHexLookup[UuidBuffer[i] & 0xF];
+        OutString[AcpiGbl_MapToUuidOffset[i]] =
+            AcpiUtHexToAsciiChar (UuidBuffer[i], 4);
+
+        OutString[AcpiGbl_MapToUuidOffset[i] + 1] =
+            AcpiUtHexToAsciiChar (UuidBuffer[i], 0);
     }
 
     /* Insert required hyphens (dashes) */
diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h
index 313650a..1fb1f12 100644
--- a/src/acpica/source/compiler/dtcompiler.h
+++ b/src/acpica/source/compiler/dtcompiler.h
@@ -492,6 +492,10 @@  DtCompileFpdt (
     void                    **PFieldList);
 
 ACPI_STATUS
+DtCompileGtdt (
+    void                    **PFieldList);
+
+ACPI_STATUS
 DtCompileHest (
     void                    **PFieldList);
 
diff --git a/src/acpica/source/compiler/dtfield.c b/src/acpica/source/compiler/dtfield.c
index 46d56f8..e03f891 100644
--- a/src/acpica/source/compiler/dtfield.c
+++ b/src/acpica/source/compiler/dtfield.c
@@ -331,7 +331,7 @@  DtCompileUuid (
     }
     else
     {
-        Status = AuConvertStringToUuid (InString, (char *) Buffer);
+        AcpiUtConvertStringToUuid (InString, Buffer);
     }
 
     return (Status);
diff --git a/src/acpica/source/compiler/dttable.c b/src/acpica/source/compiler/dttable.c
index 5e310d6..db95850 100644
--- a/src/acpica/source/compiler/dttable.c
+++ b/src/acpica/source/compiler/dttable.c
@@ -808,16 +808,21 @@  DtCompileDmar (
             InfoTable = AcpiDmTableInfoDmar1;
             break;
 
-        case ACPI_DMAR_TYPE_ATSR:
+        case ACPI_DMAR_TYPE_ROOT_ATS:
 
             InfoTable = AcpiDmTableInfoDmar2;
             break;
 
-        case ACPI_DMAR_HARDWARE_AFFINITY:
+        case ACPI_DMAR_TYPE_HARDWARE_AFFINITY:
 
             InfoTable = AcpiDmTableInfoDmar3;
             break;
 
+        case ACPI_DMAR_TYPE_NAMESPACE:
+
+            InfoTable = AcpiDmTableInfoDmar4;
+            break;
+
         default:
 
             DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "DMAR");
@@ -834,10 +839,20 @@  DtCompileDmar (
 
         ParentTable = DtPeekSubtable ();
         DtInsertSubtable (ParentTable, Subtable);
-        DtPushSubtable (Subtable);
 
-        /* Optional Device Scope subtables */
+        /*
+         * Optional Device Scope subtables
+         */
+        if ((DmarHeader->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
+            (DmarHeader->Type == ACPI_DMAR_TYPE_NAMESPACE))
+        {
+            /* These types do not support device scopes */
 
+            DtPopSubtable ();
+            continue;
+        }
+
+        DtPushSubtable (Subtable);
         DeviceScopeLength = DmarHeader->Length - Subtable->Length -
             ParentTable->Length;
         while (DeviceScopeLength)
@@ -1010,6 +1025,125 @@  DtCompileFadt (
     return (AE_OK);
 }
 
+/******************************************************************************
+ *
+ * FUNCTION:    DtCompileGtdt
+ *
+ * PARAMETERS:  List                - Current field list pointer
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Compile GTDT.
+ *
+ *****************************************************************************/
+
+ACPI_STATUS
+DtCompileGtdt (
+    void                    **List)
+{
+    ACPI_STATUS             Status;
+    DT_SUBTABLE             *Subtable;
+    DT_SUBTABLE             *ParentTable;
+    DT_FIELD                **PFieldList = (DT_FIELD **) List;
+    DT_FIELD                *SubtableStart;
+    ACPI_SUBTABLE_HEADER    *GtdtHeader;
+    ACPI_DMTABLE_INFO       *InfoTable;
+    UINT32                  GtCount;
+
+
+    Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdt,
+                &Subtable, TRUE);
+    if (ACPI_FAILURE (Status))
+    {
+        return (Status);
+    }
+
+    ParentTable = DtPeekSubtable ();
+    DtInsertSubtable (ParentTable, Subtable);
+
+    while (*PFieldList)
+    {
+        SubtableStart = *PFieldList;
+        Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdtHdr,
+                    &Subtable, TRUE);
+        if (ACPI_FAILURE (Status))
+        {
+            return (Status);
+        }
+
+        ParentTable = DtPeekSubtable ();
+        DtInsertSubtable (ParentTable, Subtable);
+        DtPushSubtable (Subtable);
+
+        GtdtHeader = ACPI_CAST_PTR (ACPI_SUBTABLE_HEADER, Subtable->Buffer);
+
+        switch (GtdtHeader->Type)
+        {
+        case ACPI_GTDT_TYPE_TIMER_BLOCK:
+
+            InfoTable = AcpiDmTableInfoGtdt0;
+            break;
+
+        case ACPI_GTDT_TYPE_WATCHDOG:
+
+            InfoTable = AcpiDmTableInfoGtdt1;
+            break;
+
+        default:
+
+            DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "GTDT");
+            return (AE_ERROR);
+        }
+
+        Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE);
+        if (ACPI_FAILURE (Status))
+        {
+            return (Status);
+        }
+
+        ParentTable = DtPeekSubtable ();
+        DtInsertSubtable (ParentTable, Subtable);
+
+        /*
+         * Additional GT block subtable data
+         */
+
+        switch (GtdtHeader->Type)
+        {
+        case ACPI_GTDT_TYPE_TIMER_BLOCK:
+
+            DtPushSubtable (Subtable);
+            ParentTable = DtPeekSubtable ();
+
+            GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
+                Subtable->Buffer - sizeof(ACPI_GTDT_HEADER)))->TimerCount;
+            while (GtCount)
+            {
+                Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdt0a,
+                            &Subtable, TRUE);
+                if (ACPI_FAILURE (Status))
+                {
+                    return (Status);
+                }
+
+
+                DtInsertSubtable (ParentTable, Subtable);
+                GtCount--;
+            }
+            DtPopSubtable ();
+            break;
+
+        default:
+
+            break;
+        }
+
+        DtPopSubtable ();
+    }
+
+    return (AE_OK);
+}
+
 
 /******************************************************************************
  *
@@ -1573,6 +1707,16 @@  DtCompileMadt (
             InfoTable = AcpiDmTableInfoMadt12;
             break;
 
+        case ACPI_MADT_TYPE_GENERIC_MSI_FRAME:
+
+            InfoTable = AcpiDmTableInfoMadt13;
+            break;
+
+        case ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR:
+
+            InfoTable = AcpiDmTableInfoMadt14;
+            break;
+
         default:
 
             DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "MADT");
@@ -1864,6 +2008,11 @@  DtCompilePcct (
             InfoTable = AcpiDmTableInfoPcct0;
             break;
 
+        case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE:
+
+            InfoTable = AcpiDmTableInfoPcct1;
+            break;
+
         default:
 
             DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "PCCT");
diff --git a/src/acpica/source/compiler/dttemplate.h b/src/acpica/source/compiler/dttemplate.h
index 681d3e5..eefae69 100644
--- a/src/acpica/source/compiler/dttemplate.h
+++ b/src/acpica/source/compiler/dttemplate.h
@@ -467,7 +467,7 @@  const unsigned char TemplateFadt[] =
     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000068    "........" */
     0x00,0x00,0x00,0x00,0x01,0x08,0x00,0x01,  /* 00000070    "........" */
     0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000078    "........" */
-    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000080    "........" */
+    0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,  /* 00000080    "........" */
     0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000088    "........" */
     0x00,0x00,0x00,0x00,0x01,0x20,0x00,0x02,  /* 00000090    "..... .." */
     0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000098    "........" */
@@ -506,16 +506,34 @@  const unsigned char TemplateFpdt[] =
 
 const unsigned char TemplateGtdt[] =
 {
-    0x47,0x54,0x44,0x54,0x50,0x00,0x00,0x00,  /* 00000000    "GTDTP..." */
-    0x01,0xF1,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" */
-    0x23,0x06,0x11,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "#.. ...." */
-    0x00,0x00,0x00,0x00,0x01,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    "........" */
+    0x47,0x54,0x44,0x54,0xe0,0x00,0x00,0x00,  /* 00000000    "GTDT...." */
+    0x02,0xb0,0x4c,0x49,0x4e,0x41,0x52,0x4f,  /* 00000008    "..LINARO" */
+    0x52,0x54,0x53,0x4d,0x56,0x45,0x56,0x38,  /* 00000010    "RTSMVEV8" */
+    0x01,0x00,0x00,0x00,0x49,0x4e,0x54,0x4c,  /* 00000018    "....INTL" */
+    0x24,0x04,0x14,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "$.. ...." */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000028    "........" */
+    0x1d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000030    "........" */
+    0x1e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000038    "........" */
+    0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000040    "........" */
+    0x1a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000048    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000050    "........" */
+    0x02,0x00,0x00,0x00,0x60,0x00,0x00,0x00,  /* 00000058    "....`..." */
+    0x00,0x64,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000060    ".d......" */
+    0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,  /* 00000068    "........" */
+    0x14,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,0x00,0x00,0x00,  /* 00000088    "........" */
+    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000090    "........" */
+    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000098    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000a0    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000a8    "........" */
+    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 000000b0    "........" */
+    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 000000b8    "........" */
+    0x00,0x00,0x00,0x00,0x01,0x1c,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,0x01,0x00,0x00,0x00,  /* 000000d8    "........" */
 };
 
 const unsigned char TemplateHest[] =
@@ -647,41 +665,48 @@  const unsigned char TemplateLpit[] =
     0x00,0x00,0x00,0x00                       /* 000000B0    "...."     */
 };
 
-/* MADT with ACPI 5.0 subtables */
+/* MADT with ACPI 5.1 subtables */
 
 const unsigned char TemplateMadt[] =
 {
-    0x41,0x50,0x49,0x43,0xF6,0x00,0x00,0x00,  /* 00000000    "APIC...." */
-    0x01,0xB0,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" */
-    0x23,0x06,0x11,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "#.. ...." */
+    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    "$.. ...." */
     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,0x28,  /* 000000B0    ".......(" */
-    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,0x0C,0x18,  /* 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             /* 000000F0    "......"   */
+    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,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,  /* 00000120    "........" */
+    0x00,0x00                                 /* 00000128    "..      " */
 };
 
 const unsigned char TemplateMcfg[] =
@@ -775,27 +800,27 @@  const unsigned char TemplateMtmr[] =
 const unsigned char TemplatePcct[] =
 {
     0x50,0x43,0x43,0x54,0xAC,0x00,0x00,0x00,  /* 00000000    "PCCT...." */
-    0x01,0x97,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
-    0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45,  /* 00000010    "TEMPLATE" */
+    0x01,0xCF,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" */
-    0x15,0x11,0x13,0x20,0x01,0x00,0x00,0x00,  /* 00000020    "... ...." */
+    0x27,0x06,0x14,0x20,0x01,0x00,0x00,0x00,  /* 00000020    "'.. ...." */
     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000028    "........" */
     0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000030    ".>......" */
-    0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,  /* 00000038    "........" */
-    0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,  /* 00000040    """""""""" */
-    0x01,0x32,0x00,0x03,0x33,0x33,0x33,0x33,  /* 00000048    ".2..3333" */
-    0x33,0x33,0x33,0x33,0x44,0x44,0x44,0x44,  /* 00000050    "3333DDDD" */
-    0x44,0x44,0x44,0x44,0x55,0x55,0x55,0x55,  /* 00000058    "DDDDUUUU" */
-    0x55,0x55,0x55,0x55,0x66,0x66,0x66,0x66,  /* 00000060    "UUUUffff" */
-    0x77,0x77,0x77,0x77,0x88,0x88,0x00,0x3E,  /* 00000068    "wwww...>" */
-    0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,  /* 00000070    "........" */
-    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEE,0xEE,  /* 00000078    "........" */
-    0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0x01,0x32,  /* 00000080    ".......2" */
-    0x00,0x03,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,  /* 00000088    "........" */
-    0xDD,0xDD,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,  /* 00000090    "........" */
-    0xCC,0xCC,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,  /* 00000098    "........" */
-    0xBB,0xBB,0xAA,0xAA,0xAA,0xAA,0x99,0x99,  /* 000000A0    "........" */
-    0x99,0x99,0x88,0x88                       /* 000000A8    "...."     */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000038    "........" */
+    0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000040    "........" */
+    0x01,0x32,0x00,0x03,0x00,0x00,0x00,0x00,  /* 00000048    ".2......" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000050    "........" */
+    0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,  /* 00000058    "........" */
+    0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,  /* 00000060    "........" */
+    0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x3E,  /* 00000068    ".......>" */
+    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000070    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,  /* 00000078    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x32,  /* 00000080    ".......2" */
+    0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000088    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000090    "........" */
+    0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,  /* 00000098    "........" */
+    0xFF,0xFF,0x01,0x00,0x00,0x00,0x01,0x00,  /* 000000A0    "........" */
+    0x00,0x00,0x01,0x00                       /* 000000A8    "...."     */
 };
 
 const unsigned char TemplatePmtt[] =
diff --git a/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c
index d3cedf1..51d50c7 100644
--- a/src/acpica/source/compiler/dtutils.c
+++ b/src/acpica/source/compiler/dtutils.c
@@ -573,6 +573,7 @@  DtGetFieldLength (
     case ACPI_DMT_SPACEID:
     case ACPI_DMT_ACCWIDTH:
     case ACPI_DMT_IVRS:
+    case ACPI_DMT_GTDT:
     case ACPI_DMT_MADT:
     case ACPI_DMT_PCCT:
     case ACPI_DMT_PMTT:
@@ -584,6 +585,7 @@  DtGetFieldLength (
     case ACPI_DMT_EINJINST:
     case ACPI_DMT_ERSTACT:
     case ACPI_DMT_ERSTINST:
+    case ACPI_DMT_DMAR_SCOPE:
 
         ByteLength = 1;
         break;
diff --git a/src/acpica/source/components/disassembler/dmbuffer.c b/src/acpica/source/components/disassembler/dmbuffer.c
index 70d28e3..a43497c 100644
--- a/src/acpica/source/components/disassembler/dmbuffer.c
+++ b/src/acpica/source/components/disassembler/dmbuffer.c
@@ -113,9 +113,9 @@ 
  *
  *****************************************************************************/
 
-
 #include "acpi.h"
 #include "accommon.h"
+#include "acutils.h"
 #include "acdisasm.h"
 #include "acparser.h"
 #include "amlcode.h"
@@ -130,6 +130,10 @@ 
 /* Local prototypes */
 
 static void
+AcpiDmUuid (
+    ACPI_PARSE_OBJECT       *Op);
+
+static void
 AcpiDmUnicode (
     ACPI_PARSE_OBJECT       *Op);
 
@@ -143,6 +147,7 @@  AcpiDmPldBuffer (
     UINT8                   *ByteData,
     UINT32                  ByteCount);
 
+
 #define ACPI_BUFFER_BYTES_PER_LINE      8
 
 
@@ -288,6 +293,11 @@  AcpiDmByteList (
         AcpiOsPrintf ("\n");
         break;
 
+    case ACPI_DASM_UUID:
+
+        AcpiDmUuid (Op);
+        break;
+
     case ACPI_DASM_UNICODE:
 
         AcpiDmUnicode (Op);
@@ -313,6 +323,137 @@  AcpiDmByteList (
 
 /*******************************************************************************
  *
+ * FUNCTION:    AcpiDmIsUuidBuffer
+ *
+ * PARAMETERS:  Op              - Buffer Object to be examined
+ *
+ * RETURN:      TRUE if buffer contains a UUID
+ *
+ * DESCRIPTION: Determine if a buffer Op contains a UUID
+ *
+ * To help determine whether the buffer is a UUID versus a raw data buffer,
+ * there a are a couple bytes we can look at:
+ *
+ *    xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
+ *
+ * The variant covered by the UUID specification is indicated by the two most
+ * significant bits of N being 1 0 (i.e., the hexadecimal N will always be
+ * 8, 9, A, or B).
+ *
+ * The variant covered by the UUID specification has five versions. For this
+ * variant, the four bits of M indicates the UUID version (i.e., the
+ * hexadecimal M will be either 1, 2, 3, 4, or 5).
+ *
+ ******************************************************************************/
+
+BOOLEAN
+AcpiDmIsUuidBuffer (
+    ACPI_PARSE_OBJECT       *Op)
+{
+    UINT8                   *ByteData;
+    UINT32                  ByteCount;
+    ACPI_PARSE_OBJECT       *SizeOp;
+    ACPI_PARSE_OBJECT       *NextOp;
+
+
+    /* Buffer size is the buffer argument */
+
+    SizeOp = Op->Common.Value.Arg;
+
+    /* Next, the initializer byte list to examine */
+
+    NextOp = SizeOp->Common.Next;
+    if (!NextOp)
+    {
+        return (FALSE);
+    }
+
+    /* Extract the byte list info */
+
+    ByteData = NextOp->Named.Data;
+    ByteCount = (UINT32) NextOp->Common.Value.Integer;
+
+    /* Byte count must be exactly 16 */
+
+    if (ByteCount != UUID_BUFFER_LENGTH)
+    {
+        return (FALSE);
+    }
+
+    /* Check for valid "M" and "N" values (see function header above) */
+
+    if (((ByteData[7] & 0xF0) == 0x00) || /* M={1,2,3,4,5} */
+        ((ByteData[7] & 0xF0) > 0x50)  ||
+        ((ByteData[8] & 0xF0) < 0x80)  || /* N={8,9,A,B} */
+        ((ByteData[8] & 0xF0) > 0xB0))
+    {
+        return (FALSE);
+    }
+
+    /* Ignore the Size argument in the disassembly of this buffer op */
+
+    SizeOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
+    return (TRUE);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiDmUuid
+ *
+ * PARAMETERS:  Op              - Byte List op containing a UUID
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Dump a buffer containing a UUID as a standard ASCII string.
+ *
+ * Output Format:
+ * In its canonical form, the UUID is represented by a string containing 32
+ * lowercase hexadecimal digits, displayed in 5 groups separated by hyphens.
+ * The complete form is 8-4-4-4-12 for a total of 36 characters (32
+ * alphanumeric characters representing hex digits and 4 hyphens). In bytes,
+ * 4-2-2-2-6. Example:
+ *
+ *    ToUUID ("107ededd-d381-4fd7-8da9-08e9a6c79644")
+ *
+ ******************************************************************************/
+
+static void
+AcpiDmUuid (
+    ACPI_PARSE_OBJECT       *Op)
+{
+    UINT8                   *Data;
+    const char              *Description;
+
+
+    Data = ACPI_CAST_PTR (UINT8, Op->Named.Data);
+
+    /* Emit the 36-byte UUID string in the proper format/order */
+
+    AcpiOsPrintf (
+        "\"%2.2x%2.2x%2.2x%2.2x-"
+        "%2.2x%2.2x-"
+        "%2.2x%2.2x-"
+        "%2.2x%2.2x-"
+        "%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x\")",
+        Data[3], Data[2], Data[1], Data[0],
+        Data[5], Data[4],
+        Data[7], Data[6],
+        Data[8], Data[9],
+        Data[10], Data[11], Data[12], Data[13], Data[14], Data[15]);
+
+    /* Dump the UUID description string if available */
+
+    Description = AcpiAhMatchUuid (Data);
+    if (Description)
+    {
+        AcpiOsPrintf (" /* %s */", Description);
+    }
+}
+
+
+/*******************************************************************************
+ *
  * FUNCTION:    AcpiDmIsUnicodeBuffer
  *
  * PARAMETERS:  Op              - Buffer Object to be examined
diff --git a/src/acpica/source/components/disassembler/dmopcode.c b/src/acpica/source/components/disassembler/dmopcode.c
index db30c00..d15e215 100644
--- a/src/acpica/source/components/disassembler/dmopcode.c
+++ b/src/acpica/source/components/disassembler/dmopcode.c
@@ -899,7 +899,12 @@  AcpiDmDisassembleOneOp (
             }
         }
 
-        if (AcpiDmIsUnicodeBuffer (Op))
+        if (AcpiDmIsUuidBuffer (Op))
+        {
+            Op->Common.DisasmOpcode = ACPI_DASM_UUID;
+            AcpiOsPrintf ("ToUUID (");
+        }
+        else if (AcpiDmIsUnicodeBuffer (Op))
         {
             Op->Common.DisasmOpcode = ACPI_DASM_UNICODE;
             AcpiOsPrintf ("Unicode (");
diff --git a/src/acpica/source/components/disassembler/dmwalk.c b/src/acpica/source/components/disassembler/dmwalk.c
index 8c877ae..1f63e08 100644
--- a/src/acpica/source/components/disassembler/dmwalk.c
+++ b/src/acpica/source/components/disassembler/dmwalk.c
@@ -357,7 +357,8 @@  AcpiDmBlockType (
 
     case AML_BUFFER_OP:
 
-        if (Op->Common.DisasmOpcode == ACPI_DASM_UNICODE)
+        if ((Op->Common.DisasmOpcode == ACPI_DASM_UNICODE) ||
+            (Op->Common.DisasmOpcode == ACPI_DASM_UUID))
         {
             return (BLOCK_NONE);
         }
diff --git a/src/acpica/source/components/events/evgpe.c b/src/acpica/source/components/events/evgpe.c
index bb955ac..ea1a3a6 100644
--- a/src/acpica/source/components/events/evgpe.c
+++ b/src/acpica/source/components/events/evgpe.c
@@ -833,22 +833,6 @@  AcpiEvGpeDispatch (
     }
 
     /*
-     * If edge-triggered, clear the GPE status bit now. Note that
-     * level-triggered events are cleared after the GPE is serviced.
-     */
-    if ((GpeEventInfo->Flags & ACPI_GPE_XRUPT_TYPE_MASK) ==
-            ACPI_GPE_EDGE_TRIGGERED)
-    {
-        Status = AcpiHwClearGpe (GpeEventInfo);
-        if (ACPI_FAILURE (Status))
-        {
-            ACPI_EXCEPTION ((AE_INFO, Status,
-                "Unable to clear GPE %02X", GpeNumber));
-            return_UINT32 (ACPI_INTERRUPT_NOT_HANDLED);
-        }
-    }
-
-    /*
      * Always disable the GPE so that it does not keep firing before
      * any asynchronous activity completes (either from the execution
      * of a GPE method or an asynchronous GPE handler.)
@@ -866,6 +850,24 @@  AcpiEvGpeDispatch (
     }
 
     /*
+     * If edge-triggered, clear the GPE status bit now. Note that
+     * level-triggered events are cleared after the GPE is serviced.
+     */
+    if ((GpeEventInfo->Flags & ACPI_GPE_XRUPT_TYPE_MASK) ==
+            ACPI_GPE_EDGE_TRIGGERED)
+    {
+        Status = AcpiHwClearGpe (GpeEventInfo);
+        if (ACPI_FAILURE (Status))
+        {
+            ACPI_EXCEPTION ((AE_INFO, Status,
+                "Unable to clear GPE %02X", GpeNumber));
+            (void) AcpiHwLowSetGpe (GpeEventInfo,
+                    ACPI_GPE_CONDITIONAL_ENABLE);
+            return_UINT32 (ACPI_INTERRUPT_NOT_HANDLED);
+        }
+    }
+
+    /*
      * Dispatch the GPE to either an installed handler or the control
      * method associated with this GPE (_Lxx or _Exx). If a handler
      * exists, we invoke it and do not attempt to run the method.
diff --git a/src/acpica/source/components/events/evxfgpe.c b/src/acpica/source/components/events/evxfgpe.c
index e180bd3..b116322 100644
--- a/src/acpica/source/components/events/evxfgpe.c
+++ b/src/acpica/source/components/events/evxfgpe.c
@@ -213,12 +213,23 @@  AcpiEnableGpe (
 
     Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock);
 
-    /* Ensure that we have a valid GPE number */
-
+    /*
+     * Ensure that we have a valid GPE number and that there is some way
+     * of handling the GPE (handler or a GPE method). In other words, we
+     * won't allow a valid GPE to be enabled if there is no way to handle it.
+     */
     GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber);
     if (GpeEventInfo)
     {
-        Status = AcpiEvAddGpeReference (GpeEventInfo);
+        if ((GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK) !=
+            ACPI_GPE_DISPATCH_NONE)
+        {
+            Status = AcpiEvAddGpeReference (GpeEventInfo);
+        }
+        else
+        {
+            Status = AE_NO_HANDLER;
+        }
     }
 
     AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags);
@@ -348,6 +359,60 @@  ACPI_EXPORT_SYMBOL (AcpiSetGpe)
 
 /*******************************************************************************
  *
+ * FUNCTION:    AcpiMarkGpeForWake
+ *
+ * PARAMETERS:  GpeDevice           - Parent GPE Device. NULL for GPE0/GPE1
+ *              GpeNumber           - GPE level within the GPE block
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Mark a GPE as having the ability to wake the system. Simply
+ *              sets the ACPI_GPE_CAN_WAKE flag.
+ *
+ * Some potential callers of AcpiSetupGpeForWake may know in advance that
+ * there won't be any notify handlers installed for device wake notifications
+ * from the given GPE (one example is a button GPE in Linux). For these cases,
+ * AcpiMarkGpeForWake should be used instead of AcpiSetupGpeForWake.
+ * This will set the ACPI_GPE_CAN_WAKE flag for the GPE without trying to
+ * setup implicit wake notification for it (since there's no handler method).
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiMarkGpeForWake (
+    ACPI_HANDLE             GpeDevice,
+    UINT32                  GpeNumber)
+{
+    ACPI_GPE_EVENT_INFO     *GpeEventInfo;
+    ACPI_STATUS             Status = AE_BAD_PARAMETER;
+    ACPI_CPU_FLAGS          Flags;
+
+
+    ACPI_FUNCTION_TRACE (AcpiMarkGpeForWake);
+
+
+    Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock);
+
+    /* Ensure that we have a valid GPE number */
+
+    GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber);
+    if (GpeEventInfo)
+    {
+        /* Mark the GPE as a possible wake event */
+
+        GpeEventInfo->Flags |= ACPI_GPE_CAN_WAKE;
+        Status = AE_OK;
+    }
+
+    AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags);
+    return_ACPI_STATUS (Status);
+}
+
+ACPI_EXPORT_SYMBOL (AcpiMarkGpeForWake)
+
+
+/*******************************************************************************
+ *
  * FUNCTION:    AcpiSetupGpeForWake
  *
  * PARAMETERS:  WakeDevice          - Device associated with the GPE (via _PRW)
diff --git a/src/acpica/source/components/executer/exdebug.c b/src/acpica/source/components/executer/exdebug.c
index e374e13..b7d47fd 100644
--- a/src/acpica/source/components/executer/exdebug.c
+++ b/src/acpica/source/components/executer/exdebug.c
@@ -154,6 +154,7 @@  AcpiExDoDebugObject (
     UINT32                  Index)
 {
     UINT32                  i;
+    UINT32                  Timer;
 
 
     ACPI_FUNCTION_TRACE_PTR (ExDoDebugObject, SourceDesc);
@@ -168,12 +169,20 @@  AcpiExDoDebugObject (
     }
 
     /*
+     * We will emit the current timer value (in microseconds) with each
+     * debug output. Only need the lower 26 bits. This allows for 67
+     * million microseconds or 67 seconds before rollover.
+     */
+    Timer = (UINT32) (AcpiOsGetTimer () / 10); /* (100 nanoseconds to microseconds) */
+    Timer &= 0x03FFFFFF;
+
+    /*
      * Print line header as long as we are not in the middle of an
      * object display
      */
     if (!((Level > 0) && Index == 0))
     {
-        AcpiOsPrintf ("[ACPI Debug] %*s", Level, " ");
+        AcpiOsPrintf ("[ACPI Debug %.8u] %*s", Timer, Level, " ");
     }
 
     /* Display the index for package output only */
diff --git a/src/acpica/source/components/executer/exdump.c b/src/acpica/source/components/executer/exdump.c
index 7f66714..68a0054 100644
--- a/src/acpica/source/components/executer/exdump.c
+++ b/src/acpica/source/components/executer/exdump.c
@@ -580,7 +580,7 @@  AcpiExDumpObject (
                 }
             }
 
-            AcpiOsPrintf ("\n", Next);
+            AcpiOsPrintf ("\n");
             break;
 
         case ACPI_EXD_HDLR_LIST:
@@ -614,7 +614,7 @@  AcpiExDumpObject (
                 }
             }
 
-            AcpiOsPrintf ("\n", Next);
+            AcpiOsPrintf ("\n");
             break;
 
         case ACPI_EXD_RGN_LIST:
@@ -648,7 +648,7 @@  AcpiExDumpObject (
                 }
             }
 
-            AcpiOsPrintf ("\n", Next);
+            AcpiOsPrintf ("\n");
             break;
 
         case ACPI_EXD_NODE:
diff --git a/src/acpica/source/components/executer/exfield.c b/src/acpica/source/components/executer/exfield.c
index e8ddec8..55934de 100644
--- a/src/acpica/source/components/executer/exfield.c
+++ b/src/acpica/source/components/executer/exfield.c
@@ -275,14 +275,13 @@  AcpiExReadDataFromField (
             Length = AcpiExGetSerialAccessLength (AccessorType,
                 ObjDesc->Field.AccessLength);
 
-	    /*
-             * Add additional 2 bytes for modeled GenericSerialBus data buffer:
-             * typedef struct {
-             *     BYTEStatus; // Byte 0 of the data buffer
-             *     BYTELength; // Byte 1 of the data buffer
-             *     BYTE[x-1]Data; // Bytes 2-x of the arbitrary length data buffer,
-             * }
-	     */
+            /*
+             * Add additional 2 bytes for the GenericSerialBus data buffer:
+             *
+             *     Status;      (Byte 0 of the data buffer)
+             *     Length;      (Byte 1 of the data buffer)
+             *     Data[x-1];   (Bytes 2-x of the arbitrary length data buffer)
+             */
             Length += 2;
             Function = ACPI_READ | (AccessorType << 16);
         }
@@ -469,14 +468,13 @@  AcpiExWriteDataToField (
             Length = AcpiExGetSerialAccessLength (AccessorType,
                 ObjDesc->Field.AccessLength);
 
-	    /*
-             * Add additional 2 bytes for modeled GenericSerialBus data buffer:
-             * typedef struct {
-             *     BYTEStatus; // Byte 0 of the data buffer
-             *     BYTELength; // Byte 1 of the data buffer
-             *     BYTE[x-1]Data; // Bytes 2-x of the arbitrary length data buffer,
-             * }
-	     */
+            /*
+             * Add additional 2 bytes for the GenericSerialBus data buffer:
+             *
+             *     Status;      (Byte 0 of the data buffer)
+             *     Length;      (Byte 1 of the data buffer)
+             *     Data[x-1];   (Bytes 2-x of the arbitrary length data buffer)
+             */
             Length += 2;
             Function = ACPI_WRITE | (AccessorType << 16);
         }
diff --git a/src/acpica/source/components/namespace/nsobject.c b/src/acpica/source/components/namespace/nsobject.c
index 060157b..74470f0 100644
--- a/src/acpica/source/components/namespace/nsobject.c
+++ b/src/acpica/source/components/namespace/nsobject.c
@@ -335,17 +335,16 @@  AcpiNsDetachObject (
         {
             Node->Object = Node->Object->Common.NextObject;
         }
-    }
 
-    /*
-     * Detach the object from any data objects (which are still held by
-     * the namespace node)
-     */
-
-    if (ObjDesc->Common.NextObject &&
-       ((ObjDesc->Common.NextObject)->Common.Type == ACPI_TYPE_LOCAL_DATA))
-    {
-       ObjDesc->Common.NextObject = NULL;
+        /*
+         * Detach the object from any data objects (which are still held by
+         * the namespace node)
+         */
+        if (ObjDesc->Common.NextObject &&
+           ((ObjDesc->Common.NextObject)->Common.Type == ACPI_TYPE_LOCAL_DATA))
+        {
+           ObjDesc->Common.NextObject = NULL;
+        }
     }
 
     /* Reset the node type to untyped */
diff --git a/src/acpica/source/components/utilities/utdecode.c b/src/acpica/source/components/utilities/utdecode.c
index 8566819..61826fe 100644
--- a/src/acpica/source/components/utilities/utdecode.c
+++ b/src/acpica/source/components/utilities/utdecode.c
@@ -165,38 +165,6 @@  const UINT8                     AcpiGbl_NsProperties[ACPI_NUM_NS_TYPES] =
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiUtHexToAsciiChar
- *
- * PARAMETERS:  Integer             - Contains the hex digit
- *              Position            - bit position of the digit within the
- *                                    integer (multiple of 4)
- *
- * RETURN:      The converted Ascii character
- *
- * DESCRIPTION: Convert a hex digit to an Ascii character
- *
- ******************************************************************************/
-
-/* Hex to ASCII conversion table */
-
-static const char           AcpiGbl_HexToAscii[] =
-{
-    '0','1','2','3','4','5','6','7',
-    '8','9','A','B','C','D','E','F'
-};
-
-char
-AcpiUtHexToAsciiChar (
-    UINT64                  Integer,
-    UINT32                  Position)
-{
-
-    return (AcpiGbl_HexToAscii[(Integer >> Position) & 0xF]);
-}
-
-
-/*******************************************************************************
- *
  * FUNCTION:    AcpiUtGetRegionName
  *
  * PARAMETERS:  Space ID            - ID for the region
@@ -613,7 +581,8 @@  static const char           *AcpiGbl_GenericNotify[ACPI_NOTIFY_MAX + 1] =
     /* 09 */ "Device PLD Check",
     /* 0A */ "Reserved",
     /* 0B */ "System Locality Update",
-    /* 0C */ "Shutdown Request"
+    /* 0C */ "Shutdown Request",
+    /* 0D */ "System Resource Affinity Update"
 };
 
 static const char           *AcpiGbl_DeviceNotify[4] =
@@ -647,7 +616,7 @@  AcpiUtGetNotifyName (
     ACPI_OBJECT_TYPE        Type)
 {
 
-    /* 00 - 0C are common to all object types */
+    /* 00 - 0D are common to all object types */
 
     if (NotifyValue <= ACPI_NOTIFY_MAX)
     {
diff --git a/src/acpica/source/components/utilities/utfileio.c b/src/acpica/source/components/utilities/utfileio.c
index 78807f2..9501e22 100644
--- a/src/acpica/source/components/utilities/utfileio.c
+++ b/src/acpica/source/components/utilities/utfileio.c
@@ -304,8 +304,7 @@  AcpiUtReadTable (
             Status = FlCheckForAscii (fp, NULL, FALSE);
             if (ACPI_SUCCESS (Status))
             {
-                AcpiOsPrintf ("File appears to be ASCII only, must be binary\n",
-                    TableHeader.Length, FileSize);
+                AcpiOsPrintf ("File appears to be ASCII only, must be binary\n");
             }
 #endif
             return (AE_BAD_HEADER);
diff --git a/src/acpica/source/components/utilities/uthex.c b/src/acpica/source/components/utilities/uthex.c
new file mode 100644
index 0000000..ba2b259
--- /dev/null
+++ b/src/acpica/source/components/utilities/uthex.c
@@ -0,0 +1,185 @@ 
+/******************************************************************************
+ *
+ * Module Name: uthex -- Hex/ASCII support functions
+ *
+ *****************************************************************************/
+
+/******************************************************************************
+ *
+ * 1. Copyright Notice
+ *
+ * Some or all of this work - Copyright (c) 1999 - 2014, Intel Corp.
+ * All rights reserved.
+ *
+ * 2. License
+ *
+ * 2.1. This is your license from Intel Corp. under its intellectual property
+ * rights. You may have additional license terms from the party that provided
+ * you this software, covering your right to use that party's intellectual
+ * property rights.
+ *
+ * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
+ * copy of the source code appearing in this file ("Covered Code") an
+ * irrevocable, perpetual, worldwide license under Intel's copyrights in the
+ * base code distributed originally by Intel ("Original Intel Code") to copy,
+ * make derivatives, distribute, use and display any portion of the Covered
+ * Code in any form, with the right to sublicense such rights; and
+ *
+ * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
+ * license (with the right to sublicense), under only those claims of Intel
+ * patents that are infringed by the Original Intel Code, to make, use, sell,
+ * offer to sell, and import the Covered Code and derivative works thereof
+ * solely to the minimum extent necessary to exercise the above copyright
+ * license, and in no event shall the patent license extend to any additions
+ * to or modifications of the Original Intel Code. No other license or right
+ * is granted directly or by implication, estoppel or otherwise;
+ *
+ * The above copyright and patent license is granted only if the following
+ * conditions are met:
+ *
+ * 3. Conditions
+ *
+ * 3.1. Redistribution of Source with Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification with rights to further distribute source must include
+ * the above Copyright Notice, the above License, this list of Conditions,
+ * and the following Disclaimer and Export Compliance provision. In addition,
+ * Licensee must cause all Covered Code to which Licensee contributes to
+ * contain a file documenting the changes Licensee made to create that Covered
+ * Code and the date of any change. Licensee must include in that file the
+ * documentation of any changes made by any predecessor Licensee. Licensee
+ * must include a prominent statement that the modification is derived,
+ * directly or indirectly, from Original Intel Code.
+ *
+ * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification without rights to further distribute source must
+ * include the following Disclaimer and Export Compliance provision in the
+ * documentation and/or other materials provided with distribution. In
+ * addition, Licensee may not authorize further sublicense of source of any
+ * portion of the Covered Code, and must include terms to the effect that the
+ * license from Licensee to its licensee is limited to the intellectual
+ * property embodied in the software Licensee provides to its licensee, and
+ * not to intellectual property embodied in modifications its licensee may
+ * make.
+ *
+ * 3.3. Redistribution of Executable. Redistribution in executable form of any
+ * substantial portion of the Covered Code or modification must reproduce the
+ * above Copyright Notice, and the following Disclaimer and Export Compliance
+ * provision in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3.4. Intel retains all right, title, and interest in and to the Original
+ * Intel Code.
+ *
+ * 3.5. Neither the name Intel nor any other trademark owned or controlled by
+ * Intel shall be used in advertising or otherwise to promote the sale, use or
+ * other dealings in products derived from or relating to the Covered Code
+ * without prior written authorization from Intel.
+ *
+ * 4. Disclaimer and Export Compliance
+ *
+ * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
+ * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
+ * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
+ * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
+ * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
+ * PARTICULAR PURPOSE.
+ *
+ * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
+ * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
+ * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
+ * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
+ * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
+ * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
+ * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
+ * LIMITED REMEDY.
+ *
+ * 4.3. Licensee shall not export, either directly or indirectly, any of this
+ * software or system incorporating such software without first obtaining any
+ * required license or other approval from the U. S. Department of Commerce or
+ * any other agency or department of the United States Government. In the
+ * event Licensee exports any such software from the United States or
+ * re-exports any such software from a foreign destination, Licensee shall
+ * ensure that the distribution and export/re-export of the software is in
+ * compliance with all laws, regulations, orders, or other restrictions of the
+ * U.S. Export Administration Regulations. Licensee agrees that neither it nor
+ * any of its subsidiaries will export/re-export any technical data, process,
+ * software, or service, directly or indirectly, to any country for which the
+ * United States government or any agency thereof requires an export license,
+ * other governmental approval, or letter of assurance, without first obtaining
+ * such license, approval or letter.
+ *
+ *****************************************************************************/
+
+#define __UTHEX_C__
+
+#include "acpi.h"
+#include "accommon.h"
+
+#define _COMPONENT          ACPI_COMPILER
+        ACPI_MODULE_NAME    ("uthex")
+
+
+/* Hex to ASCII conversion table */
+
+static char                 AcpiGbl_HexToAscii[] =
+{
+    '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
+};
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiUtHexToAsciiChar
+ *
+ * PARAMETERS:  Integer             - Contains the hex digit
+ *              Position            - bit position of the digit within the
+ *                                    integer (multiple of 4)
+ *
+ * RETURN:      The converted Ascii character
+ *
+ * DESCRIPTION: Convert a hex digit to an Ascii character
+ *
+ ******************************************************************************/
+
+char
+AcpiUtHexToAsciiChar (
+    UINT64                  Integer,
+    UINT32                  Position)
+{
+
+    return (AcpiGbl_HexToAscii[(Integer >> Position) & 0xF]);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiUtHexCharToValue
+ *
+ * PARAMETERS:  AsciiChar             - Hex character in Ascii
+ *
+ * RETURN:      The binary value of the ascii/hex character
+ *
+ * DESCRIPTION: Perform ascii-to-hex translation
+ *
+ ******************************************************************************/
+
+UINT8
+AcpiUtAsciiCharToHex (
+    int                     HexChar)
+{
+
+    if (HexChar <= 0x39)
+    {
+        return ((UINT8) (HexChar - 0x30));
+    }
+
+    if (HexChar <= 0x46)
+    {
+        return ((UINT8) (HexChar - 0x37));
+    }
+
+    return ((UINT8) (HexChar - 0x57));
+}
diff --git a/src/acpica/source/components/utilities/utprint.c b/src/acpica/source/components/utilities/utprint.c
index d1bcccf..543bad8 100644
--- a/src/acpica/source/components/utilities/utprint.c
+++ b/src/acpica/source/components/utilities/utprint.c
@@ -160,6 +160,12 @@  AcpiUtPutNumber (
     BOOLEAN                 Upper);
 
 
+/* Module globals */
+
+static const char           AcpiGbl_LowerHexDigits[] = "0123456789abcdef";
+static const char           AcpiGbl_UpperHexDigits[] = "0123456789ABCDEF";
+
+
 /*******************************************************************************
  *
  * FUNCTION:    AcpiUtBoundStringLength
@@ -167,7 +173,7 @@  AcpiUtPutNumber (
  * PARAMETERS:  String              - String with boundary
  *              Count               - Boundary of the string
  *
- * RETURN:      Length of the string.
+ * RETURN:      Length of the string. Less than or equal to Count.
  *
  * DESCRIPTION: Calculate the length of a string with boundary.
  *
@@ -217,8 +223,8 @@  AcpiUtBoundStringOutput (
     {
         *String = c;
     }
-    ++String;
 
+    ++String;
     return (String);
 }
 
@@ -246,15 +252,13 @@  AcpiUtPutNumber (
     UINT8                   Base,
     BOOLEAN                 Upper)
 {
-    const char              LowerDigits[] = "0123456789abcdef";
-    const char              UpperDigits[] = "0123456789ABCDEF";
     const char              *Digits;
     UINT64                  DigitIndex;
     char                    *Pos;
 
 
     Pos = String;
-    Digits = Upper ? UpperDigits : LowerDigits;
+    Digits = Upper ? AcpiGbl_UpperHexDigits : AcpiGbl_LowerHexDigits;
 
     if (Number == 0)
     {
@@ -268,8 +272,8 @@  AcpiUtPutNumber (
             *(Pos++) = Digits[DigitIndex];
         }
     }
-    /* *(Pos++) = '0'; */
 
+    /* *(Pos++) = '0'; */
     return (Pos);
 }
 
@@ -300,8 +304,8 @@  AcpiUtScanNumber (
         Number *= 10;
         Number += *(String++) - '0';
     }
-    *NumberPtr = Number;
 
+    *NumberPtr = Number;
     return (String);
 }
 
@@ -336,8 +340,8 @@  AcpiUtPrintNumber (
     {
         *(Pos2++) = *(--Pos1);
     }
-    *Pos2 = 0;
 
+    *Pos2 = 0;
     return (String);
 }
 
@@ -370,6 +374,7 @@  AcpiUtFormatNumber (
     INT32                   Precision,
     UINT8                   Type)
 {
+    char                    *Pos;
     char                    Sign;
     char                    Zero;
     BOOLEAN                 NeedPrefix;
@@ -378,12 +383,13 @@  AcpiUtFormatNumber (
     char                    ReversedString[66];
 
 
-    /* Perform sanity checks */
+    /* Parameter validation */
 
     if (Base < 2 || Base > 16)
     {
-        return NULL;
+        return (NULL);
     }
+
     if (Type & ACPI_FORMAT_LEFT)
     {
         Type &= ~ACPI_FORMAT_ZERO;
@@ -426,9 +432,8 @@  AcpiUtFormatNumber (
 
     /* Generate full string in reverse order */
 
-    i = ACPI_PTR_DIFF (
-            AcpiUtPutNumber (ReversedString, Number, Base, Upper),
-	    ReversedString);
+    Pos = AcpiUtPutNumber (ReversedString, Number, Base, Upper);
+    i = ACPI_PTR_DIFF (Pos, ReversedString);
 
     /* Printing 100 using %2d gives "100", not "00" */
 
@@ -436,6 +441,7 @@  AcpiUtFormatNumber (
     {
         Precision = i;
     }
+
     Width -= Precision;
 
     /* Output the string */
@@ -458,7 +464,7 @@  AcpiUtFormatNumber (
         {
             String = AcpiUtBoundStringOutput (String, End,
                         Upper ? 'X' : 'x');
-	}
+        }
     }
     if (!(Type & ACPI_FORMAT_LEFT))
     {
@@ -467,6 +473,7 @@  AcpiUtFormatNumber (
             String = AcpiUtBoundStringOutput (String, End, Zero);
         }
     }
+
     while (i <= --Precision)
     {
         String = AcpiUtBoundStringOutput (String, End, '0');
@@ -494,7 +501,7 @@  AcpiUtFormatNumber (
  *              Format              - Standard printf format
  *              Args                - Argument list
  *
- * RETURN:      Size of successfully output bytes
+ * RETURN:      Number of bytes actually written.
  *
  * DESCRIPTION: Formatted output to a string using argument list pointer.
  *
@@ -525,7 +532,7 @@  AcpiUtVsnprintf (
     Pos = String;
     End = String + Size;
 
-    for (; *Format ; ++Format)
+    for (; *Format; ++Format)
     {
         if (*Format != '%')
         {
@@ -566,6 +573,7 @@  AcpiUtVsnprintf (
 
         /* Process width */
 
+        Width = -1;
         if (ACPI_IS_DIGIT (*Format))
         {
             Format = AcpiUtScanNumber (Format, &Number);
@@ -574,7 +582,7 @@  AcpiUtVsnprintf (
         else if (*Format == '*')
         {
             ++Format;
-            Width = va_arg(Args, int);
+            Width = va_arg (Args, int);
             if (Width < 0)
             {
                 Width = -Width;
@@ -584,6 +592,7 @@  AcpiUtVsnprintf (
 
         /* Process precision */
 
+        Precision = -1;
         if (*Format == '.')
         {
             ++Format;
@@ -595,7 +604,7 @@  AcpiUtVsnprintf (
             else if (*Format == '*')
             {
                 ++Format;
-                Precision = va_arg(Args, int);
+                Precision = va_arg (Args, int);
             }
             if (Precision < 0)
             {
@@ -605,10 +614,12 @@  AcpiUtVsnprintf (
 
         /* Process qualifier */
 
+        Qualifier = -1;
         if (*Format == 'h' || *Format == 'l' || *Format == 'L')
         {
             Qualifier = *Format;
             ++Format;
+
             if (Qualifier == 'l' && *Format == 'l')
             {
                 Qualifier = 'L';
@@ -632,8 +643,10 @@  AcpiUtVsnprintf (
                     Pos = AcpiUtBoundStringOutput (Pos, End, ' ');
                 }
             }
+
             c = (char) va_arg (Args, int);
             Pos = AcpiUtBoundStringOutput (Pos, End, c);
+
             while (--Width > 0)
             {
                 Pos = AcpiUtBoundStringOutput (Pos, End, ' ');
@@ -696,10 +709,10 @@  AcpiUtVsnprintf (
                 Width = 2 * sizeof (void *);
                 Type |= ACPI_FORMAT_ZERO;
             }
+
             p = va_arg (Args, void *);
             Pos = AcpiUtFormatNumber (Pos, End,
-                    ACPI_TO_INTEGER (p),
-                    16, Width, Precision, Type);
+                    ACPI_TO_INTEGER (p), 16, Width, Precision, Type);
             continue;
 
         default:
@@ -748,7 +761,8 @@  AcpiUtVsnprintf (
                 Number = (signed int) Number;
             }
         }
-        Pos = AcpiUtFormatNumber(Pos, End, Number, Base,
+
+        Pos = AcpiUtFormatNumber (Pos, End, Number, Base,
                 Width, Precision, Type);
     }
 
@@ -776,7 +790,7 @@  AcpiUtVsnprintf (
  *              Size                - Boundary of the string
  *              Format, ...         - Standard printf format
  *
- * RETURN:      Size of successfully output bytes
+ * RETURN:      Number of bytes actually written.
  *
  * DESCRIPTION: Formatted output to a string.
  *
@@ -810,7 +824,7 @@  AcpiUtSnprintf (
  *              Format              - Standard printf format
  *              Args                - Argument list
  *
- * RETURN:      Size of successfully output bytes
+ * RETURN:      Number of bytes actually written.
  *
  * DESCRIPTION: Formatted output to a file using argument list pointer.
  *
@@ -827,8 +841,9 @@  AcpiUtFileVprintf (
 
 
     Flags = AcpiOsAcquireLock (AcpiGbl_PrintLock);
-    Length = AcpiUtVsnprintf(AcpiGbl_PrintBuffer,
+    Length = AcpiUtVsnprintf (AcpiGbl_PrintBuffer,
                 sizeof (AcpiGbl_PrintBuffer), Format, Args);
+
     (void) AcpiOsWriteFile (File, AcpiGbl_PrintBuffer, Length, 1);
     AcpiOsReleaseLock (AcpiGbl_PrintLock, Flags);
 
@@ -843,7 +858,7 @@  AcpiUtFileVprintf (
  * PARAMETERS:  File                - File descriptor
  *              Format, ...         - Standard printf format
  *
- * RETURN:      Size of successfully output bytes
+ * RETURN:      Number of bytes actually written.
  *
  * DESCRIPTION: Formatted output to a file.
  *
diff --git a/src/acpica/source/components/utilities/utuuid.c b/src/acpica/source/components/utilities/utuuid.c
new file mode 100644
index 0000000..f5c2e40
--- /dev/null
+++ b/src/acpica/source/components/utilities/utuuid.c
@@ -0,0 +1,175 @@ 
+/******************************************************************************
+ *
+ * Module Name: utuuid -- UUID support functions
+ *
+ *****************************************************************************/
+
+/******************************************************************************
+ *
+ * 1. Copyright Notice
+ *
+ * Some or all of this work - Copyright (c) 1999 - 2014, Intel Corp.
+ * All rights reserved.
+ *
+ * 2. License
+ *
+ * 2.1. This is your license from Intel Corp. under its intellectual property
+ * rights. You may have additional license terms from the party that provided
+ * you this software, covering your right to use that party's intellectual
+ * property rights.
+ *
+ * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
+ * copy of the source code appearing in this file ("Covered Code") an
+ * irrevocable, perpetual, worldwide license under Intel's copyrights in the
+ * base code distributed originally by Intel ("Original Intel Code") to copy,
+ * make derivatives, distribute, use and display any portion of the Covered
+ * Code in any form, with the right to sublicense such rights; and
+ *
+ * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
+ * license (with the right to sublicense), under only those claims of Intel
+ * patents that are infringed by the Original Intel Code, to make, use, sell,
+ * offer to sell, and import the Covered Code and derivative works thereof
+ * solely to the minimum extent necessary to exercise the above copyright
+ * license, and in no event shall the patent license extend to any additions
+ * to or modifications of the Original Intel Code. No other license or right
+ * is granted directly or by implication, estoppel or otherwise;
+ *
+ * The above copyright and patent license is granted only if the following
+ * conditions are met:
+ *
+ * 3. Conditions
+ *
+ * 3.1. Redistribution of Source with Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification with rights to further distribute source must include
+ * the above Copyright Notice, the above License, this list of Conditions,
+ * and the following Disclaimer and Export Compliance provision. In addition,
+ * Licensee must cause all Covered Code to which Licensee contributes to
+ * contain a file documenting the changes Licensee made to create that Covered
+ * Code and the date of any change. Licensee must include in that file the
+ * documentation of any changes made by any predecessor Licensee. Licensee
+ * must include a prominent statement that the modification is derived,
+ * directly or indirectly, from Original Intel Code.
+ *
+ * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification without rights to further distribute source must
+ * include the following Disclaimer and Export Compliance provision in the
+ * documentation and/or other materials provided with distribution. In
+ * addition, Licensee may not authorize further sublicense of source of any
+ * portion of the Covered Code, and must include terms to the effect that the
+ * license from Licensee to its licensee is limited to the intellectual
+ * property embodied in the software Licensee provides to its licensee, and
+ * not to intellectual property embodied in modifications its licensee may
+ * make.
+ *
+ * 3.3. Redistribution of Executable. Redistribution in executable form of any
+ * substantial portion of the Covered Code or modification must reproduce the
+ * above Copyright Notice, and the following Disclaimer and Export Compliance
+ * provision in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3.4. Intel retains all right, title, and interest in and to the Original
+ * Intel Code.
+ *
+ * 3.5. Neither the name Intel nor any other trademark owned or controlled by
+ * Intel shall be used in advertising or otherwise to promote the sale, use or
+ * other dealings in products derived from or relating to the Covered Code
+ * without prior written authorization from Intel.
+ *
+ * 4. Disclaimer and Export Compliance
+ *
+ * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
+ * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
+ * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
+ * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
+ * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
+ * PARTICULAR PURPOSE.
+ *
+ * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
+ * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
+ * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
+ * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
+ * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
+ * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
+ * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
+ * LIMITED REMEDY.
+ *
+ * 4.3. Licensee shall not export, either directly or indirectly, any of this
+ * software or system incorporating such software without first obtaining any
+ * required license or other approval from the U. S. Department of Commerce or
+ * any other agency or department of the United States Government. In the
+ * event Licensee exports any such software from the United States or
+ * re-exports any such software from a foreign destination, Licensee shall
+ * ensure that the distribution and export/re-export of the software is in
+ * compliance with all laws, regulations, orders, or other restrictions of the
+ * U.S. Export Administration Regulations. Licensee agrees that neither it nor
+ * any of its subsidiaries will export/re-export any technical data, process,
+ * software, or service, directly or indirectly, to any country for which the
+ * United States government or any agency thereof requires an export license,
+ * other governmental approval, or letter of assurance, without first obtaining
+ * such license, approval or letter.
+ *
+ *****************************************************************************/
+
+#define __UTUUID_C__
+
+#include "acpi.h"
+#include "accommon.h"
+
+#define _COMPONENT          ACPI_COMPILER
+        ACPI_MODULE_NAME    ("utuuid")
+
+
+/*
+ * UUID support functions.
+ *
+ * This table is used to convert an input UUID ascii string to a 16 byte
+ * buffer and the reverse. The table maps a UUID buffer index 0-15 to
+ * the index within the 36-byte UUID string where the associated 2-byte
+ * hex value can be found.
+ *
+ * 36-byte UUID strings are of the form:
+ *     aabbccdd-eeff-gghh-iijj-kkllmmnnoopp
+ * Where aa-pp are one byte hex numbers, made up of two hex digits
+ *
+ * Note: This table is basically the inverse of the string-to-offset table
+ * found in the ACPI spec in the description of the ToUUID macro.
+ */
+const UINT8    AcpiGbl_MapToUuidOffset[UUID_BUFFER_LENGTH] =
+{
+    6,4,2,0,11,9,16,14,19,21,24,26,28,30,32,34
+};
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiUtConvertStringToUuid
+ *
+ * PARAMETERS:  InString            - 36-byte formatted UUID string
+ *              UuidBuffer          - Where the 16-byte UUID buffer is returned
+ *
+ * RETURN:      None. Output data is returned in the UuidBuffer
+ *
+ * DESCRIPTION: Convert a 36-byte formatted UUID string to 16-byte UUID buffer
+ *
+ ******************************************************************************/
+
+void
+AcpiUtConvertStringToUuid (
+    char                    *InString,
+    UINT8                   *UuidBuffer)
+{
+    UINT32                  i;
+
+
+    for (i = 0; i < UUID_BUFFER_LENGTH; i++)
+    {
+        UuidBuffer[i] =
+            (AcpiUtAsciiCharToHex (InString[AcpiGbl_MapToUuidOffset[i]]) << 4);
+
+        UuidBuffer[i] |=
+            AcpiUtAsciiCharToHex (InString[AcpiGbl_MapToUuidOffset[i] + 1]);
+    }
+}
diff --git a/src/acpica/source/include/acconfig.h b/src/acpica/source/include/acconfig.h
index 6b34484..3c7a3bd 100644
--- a/src/acpica/source/include/acconfig.h
+++ b/src/acpica/source/include/acconfig.h
@@ -295,6 +295,25 @@ 
 
 /******************************************************************************
  *
+ * Miscellaneous constants
+ *
+ *****************************************************************************/
+
+/* UUID constants */
+
+#define UUID_BUFFER_LENGTH          16 /* Length of UUID in memory */
+#define UUID_STRING_LENGTH          36 /* Total length of a UUID string */
+
+/* Positions for required hyphens (dashes) in UUID strings */
+
+#define UUID_HYPHEN1_OFFSET         8
+#define UUID_HYPHEN2_OFFSET         13
+#define UUID_HYPHEN3_OFFSET         18
+#define UUID_HYPHEN4_OFFSET         23
+
+
+/******************************************************************************
+ *
  * ACPI AML Debugger
  *
  *****************************************************************************/
diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h
index 049a95c..21e26e6 100644
--- a/src/acpica/source/include/acdisasm.h
+++ b/src/acpica/source/include/acdisasm.h
@@ -209,11 +209,13 @@  typedef enum
 
     ACPI_DMT_ASF,
     ACPI_DMT_DMAR,
+    ACPI_DMT_DMAR_SCOPE,
     ACPI_DMT_EINJACT,
     ACPI_DMT_EINJINST,
     ACPI_DMT_ERSTACT,
     ACPI_DMT_ERSTINST,
     ACPI_DMT_FADTPM,
+    ACPI_DMT_GTDT,
     ACPI_DMT_HEST,
     ACPI_DMT_HESTNTFY,
     ACPI_DMT_HESTNTYP,
@@ -327,6 +329,7 @@  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDmar0[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDmar1[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDmar2[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDmar3[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDmar4[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoDrtm[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoEcdt[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoEinj[];
@@ -344,6 +347,10 @@  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoFpdt0[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoFpdt1[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoGas[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoGtdt[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoGtdtHdr[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoGtdt0[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoGtdt0a[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoGtdt1[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoHeader[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoHest[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoHest0[];
@@ -381,6 +388,8 @@  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt9[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt10[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt11[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt12[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt13[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt14[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadtHdr[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMcfg[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMcfg0[];
@@ -404,6 +413,7 @@  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPmttHdr[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPcct[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPcctHdr[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPcct0[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPcct1[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoRsdp1[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoRsdp2[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoS3pt[];
@@ -517,6 +527,10 @@  AcpiDmDumpFpdt (
     ACPI_TABLE_HEADER       *Table);
 
 void
+AcpiDmDumpGtdt (
+    ACPI_TABLE_HEADER       *Table);
+
+void
 AcpiDmDumpHest (
     ACPI_TABLE_HEADER       *Table);
 
@@ -727,6 +741,10 @@  AcpiDmDecompressEisaId (
     UINT32                  EncodedId);
 
 BOOLEAN
+AcpiDmIsUuidBuffer (
+    ACPI_PARSE_OBJECT       *Op);
+
+BOOLEAN
 AcpiDmIsUnicodeBuffer (
     ACPI_PARSE_OBJECT       *Op);
 
diff --git a/src/acpica/source/include/aclocal.h b/src/acpica/source/include/aclocal.h
index 12925a8..1ea772e 100644
--- a/src/acpica/source/include/aclocal.h
+++ b/src/acpica/source/include/aclocal.h
@@ -950,12 +950,13 @@  typedef union acpi_parse_value
 #define ACPI_DASM_STRING                0x02        /* Buffer is a ASCII string */
 #define ACPI_DASM_UNICODE               0x03        /* Buffer is a Unicode string */
 #define ACPI_DASM_PLD_METHOD            0x04        /* Buffer is a _PLD method bit-packed buffer */
-#define ACPI_DASM_EISAID                0x05        /* Integer is an EISAID */
-#define ACPI_DASM_MATCHOP               0x06        /* Parent opcode is a Match() operator */
-#define ACPI_DASM_LNOT_PREFIX           0x07        /* Start of a LNotEqual (etc.) pair of opcodes */
-#define ACPI_DASM_LNOT_SUFFIX           0x08        /* End  of a LNotEqual (etc.) pair of opcodes */
-#define ACPI_DASM_HID_STRING            0x09        /* String is a _HID or _CID */
-#define ACPI_DASM_IGNORE                0x0A        /* Not used at this time */
+#define ACPI_DASM_UUID                  0x05        /* Buffer is a UUID/GUID */
+#define ACPI_DASM_EISAID                0x06        /* Integer is an EISAID */
+#define ACPI_DASM_MATCHOP               0x07        /* Parent opcode is a Match() operator */
+#define ACPI_DASM_LNOT_PREFIX           0x08        /* Start of a LNotEqual (etc.) pair of opcodes */
+#define ACPI_DASM_LNOT_SUFFIX           0x09        /* End  of a LNotEqual (etc.) pair of opcodes */
+#define ACPI_DASM_HID_STRING            0x0A        /* String is a _HID or _CID */
+#define ACPI_DASM_IGNORE                0x0B        /* Not used at this time */
 
 /*
  * Generic operation (for example:  If, While, Store)
@@ -1430,4 +1431,11 @@  typedef struct ah_device_id
 
 } AH_DEVICE_ID;
 
+typedef struct ah_uuid
+{
+    char            *Description;
+    char            *String;
+
+} AH_UUID;
+
 #endif /* __ACLOCAL_H__ */
diff --git a/src/acpica/source/include/acnames.h b/src/acpica/source/include/acnames.h
index bde34f5..6ccf47f 100644
--- a/src/acpica/source/include/acnames.h
+++ b/src/acpica/source/include/acnames.h
@@ -127,6 +127,7 @@ 
 #define METHOD_NAME__HID        "_HID"
 #define METHOD_NAME__INI        "_INI"
 #define METHOD_NAME__PLD        "_PLD"
+#define METHOD_NAME__DSD        "_DSD"
 #define METHOD_NAME__PRS        "_PRS"
 #define METHOD_NAME__PRT        "_PRT"
 #define METHOD_NAME__PRW        "_PRW"
diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
index ef85424..cafc37b 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                 0x20140627
+#define ACPI_CA_VERSION                 0x20140724
 
 #include "acconfig.h"
 #include "actypes.h"
@@ -923,6 +923,12 @@  AcpiFinishGpe (
 
 ACPI_HW_DEPENDENT_RETURN_STATUS (
 ACPI_STATUS
+AcpiMarkGpeForWake (
+    ACPI_HANDLE             GpeDevice,
+    UINT32                  GpeNumber))
+
+ACPI_HW_DEPENDENT_RETURN_STATUS (
+ACPI_STATUS
 AcpiSetupGpeForWake (
     ACPI_HANDLE             ParentDevice,
     ACPI_HANDLE             GpeDevice,
diff --git a/src/acpica/source/include/acpredef.h b/src/acpica/source/include/acpredef.h
index 1d42f1d..1c1776a 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_UUID_PAIR: Each subpackage is preceded by a UUID Buffer. The UUID
+ *      defines the format of the package. Zero-length parent package is
+ *      allowed.
+ *      (Used for _DSD)
+ *
  *****************************************************************************/
 
 enum AcpiReturnPackageTypes
@@ -191,7 +196,8 @@  enum AcpiReturnPackageTypes
     ACPI_PTYPE2_FIXED       = 7,
     ACPI_PTYPE2_MIN         = 8,
     ACPI_PTYPE2_REV_FIXED   = 9,
-    ACPI_PTYPE2_FIX_VAR     = 10
+    ACPI_PTYPE2_FIX_VAR     = 10,
+    ACPI_PTYPE2_UUID_PAIR   = 11
 };
 
 
@@ -438,6 +444,9 @@  const ACPI_PREDEFINED_INFO          AcpiGbl_PredefinedMethods[] =
     {{"_CBA",   METHOD_0ARGS,
                 METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, /* See PCI firmware spec 3.0 */
 
+    {{"_CCA",   METHOD_0ARGS,
+                METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, /* ACPI 5.1 */
+
     {{"_CDM",   METHOD_0ARGS,
                 METHOD_RETURNS (ACPI_RTYPE_INTEGER)}},
 
@@ -506,6 +515,10 @@  const ACPI_PREDEFINED_INFO          AcpiGbl_PredefinedMethods[] =
     {{"_DOS",   METHOD_1ARGS (ACPI_TYPE_INTEGER),
                 METHOD_NO_RETURN_VALUE}},
 
+    {{"_DSD",   METHOD_0ARGS,
+                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),
+
     {{"_DSM",   METHOD_4ARGS (ACPI_TYPE_BUFFER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_PACKAGE),
                 METHOD_RETURNS (ACPI_RTYPE_ALL)}}, /* Must return a value, but it can be of any type */
 
diff --git a/src/acpica/source/include/actbl.h b/src/acpica/source/include/actbl.h
index 9a6625c..ea9fc58 100644
--- a/src/acpica/source/include/actbl.h
+++ b/src/acpica/source/include/actbl.h
@@ -368,7 +368,8 @@  typedef struct acpi_table_fadt
     UINT32                  Flags;              /* Miscellaneous flag bits (see below for individual flags) */
     ACPI_GENERIC_ADDRESS    ResetRegister;      /* 64-bit address of the Reset register */
     UINT8                   ResetValue;         /* Value to write to the ResetRegister port to reset the system */
-    UINT8                   Reserved4[3];       /* Reserved, must be zero */
+    UINT16                  ArmBootFlags;       /* ARM-Specific Boot Flags (see below for individual flags) (ACPI 5.1) */
+    UINT8                   MinorRevision;      /* FADT Minor Revision (ACPI 5.1) */
     UINT64                  XFacs;              /* 64-bit physical address of FACS */
     UINT64                  XDsdt;              /* 64-bit physical address of DSDT */
     ACPI_GENERIC_ADDRESS    XPm1aEventBlock;    /* 64-bit Extended Power Mgt 1a Event Reg Blk address */
@@ -385,7 +386,7 @@  typedef struct acpi_table_fadt
 } ACPI_TABLE_FADT;
 
 
-/* Masks for FADT Boot Architecture Flags (BootFlags) [Vx]=Introduced in this FADT revision */
+/* Masks for FADT IA-PC Boot Architecture Flags (boot_flags) [Vx]=Introduced in this FADT revision */
 
 #define ACPI_FADT_LEGACY_DEVICES    (1)         /* 00: [V2] System has LPC or ISA bus devices */
 #define ACPI_FADT_8042              (1<<1)      /* 01: [V3] System has an 8042 controller on port 60/64 */
@@ -394,6 +395,11 @@  typedef struct acpi_table_fadt
 #define ACPI_FADT_NO_ASPM           (1<<4)      /* 04: [V4] PCIe ASPM control must not be enabled */
 #define ACPI_FADT_NO_CMOS_RTC       (1<<5)      /* 05: [V5] No CMOS real-time clock present */
 
+/* Masks for FADT ARM Boot Architecture Flags (arm_boot_flags) ACPI 5.1 */
+
+#define ACPI_FADT_PSCI_COMPLIANT    (1)         /* 00: [V5+] PSCI 0.2+ is implemented */
+#define ACPI_FADT_PSCI_USE_HVC      (1<<1)      /* 01: [V5+] HVC must be used instead of SMC as the PSCI conduit */
+
 /* Masks for FADT flags */
 
 #define ACPI_FADT_WBINVD            (1)         /* 00: [V1] The WBINVD instruction works properly */
@@ -507,7 +513,7 @@  typedef struct acpi_table_desc
  *     FADT V5  size: 0x10C
  */
 #define ACPI_FADT_V1_SIZE       (UINT32) (ACPI_FADT_OFFSET (Flags) + 4)
-#define ACPI_FADT_V2_SIZE       (UINT32) (ACPI_FADT_OFFSET (Reserved4[0]) + 3)
+#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))
 
diff --git a/src/acpica/source/include/actbl1.h b/src/acpica/source/include/actbl1.h
index e0905ee..d28faa3 100644
--- a/src/acpica/source/include/actbl1.h
+++ b/src/acpica/source/include/actbl1.h
@@ -834,20 +834,22 @@  typedef struct acpi_table_madt
 
 enum AcpiMadtType
 {
-    ACPI_MADT_TYPE_LOCAL_APIC           = 0,
-    ACPI_MADT_TYPE_IO_APIC              = 1,
-    ACPI_MADT_TYPE_INTERRUPT_OVERRIDE   = 2,
-    ACPI_MADT_TYPE_NMI_SOURCE           = 3,
-    ACPI_MADT_TYPE_LOCAL_APIC_NMI       = 4,
-    ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE  = 5,
-    ACPI_MADT_TYPE_IO_SAPIC             = 6,
-    ACPI_MADT_TYPE_LOCAL_SAPIC          = 7,
-    ACPI_MADT_TYPE_INTERRUPT_SOURCE     = 8,
-    ACPI_MADT_TYPE_LOCAL_X2APIC         = 9,
-    ACPI_MADT_TYPE_LOCAL_X2APIC_NMI     = 10,
-    ACPI_MADT_TYPE_GENERIC_INTERRUPT    = 11,
-    ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR  = 12,
-    ACPI_MADT_TYPE_RESERVED             = 13    /* 13 and greater are reserved */
+    ACPI_MADT_TYPE_LOCAL_APIC               = 0,
+    ACPI_MADT_TYPE_IO_APIC                  = 1,
+    ACPI_MADT_TYPE_INTERRUPT_OVERRIDE       = 2,
+    ACPI_MADT_TYPE_NMI_SOURCE               = 3,
+    ACPI_MADT_TYPE_LOCAL_APIC_NMI           = 4,
+    ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE      = 5,
+    ACPI_MADT_TYPE_IO_SAPIC                 = 6,
+    ACPI_MADT_TYPE_LOCAL_SAPIC              = 7,
+    ACPI_MADT_TYPE_INTERRUPT_SOURCE         = 8,
+    ACPI_MADT_TYPE_LOCAL_X2APIC             = 9,
+    ACPI_MADT_TYPE_LOCAL_X2APIC_NMI         = 10,
+    ACPI_MADT_TYPE_GENERIC_INTERRUPT        = 11,
+    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 */
 };
 
 
@@ -1008,16 +1010,27 @@  typedef struct acpi_madt_generic_interrupt
 {
     ACPI_SUBTABLE_HEADER    Header;
     UINT16                  Reserved;           /* Reserved - must be zero */
-    UINT32                  GicId;
+    UINT32                  CpuInterfaceNumber;
     UINT32                  Uid;
     UINT32                  Flags;
     UINT32                  ParkingVersion;
     UINT32                  PerformanceInterrupt;
     UINT64                  ParkedAddress;
     UINT64                  BaseAddress;
+    UINT64                  GicvBaseAddress;
+    UINT64                  GichBaseAddress;
+    UINT32                  VgicInterrupt;
+    UINT64                  GicrBaseAddress;
+    UINT64                  ArmMpidr;
 
 } ACPI_MADT_GENERIC_INTERRUPT;
 
+/* Masks for Flags field above */
+
+/* ACPI_MADT_ENABLED                    (1)      Processor is usable if set */
+#define ACPI_MADT_PERFORMANCE_IRQ_MODE  (1<<1)  /* 01: Performance Interrupt Mode */
+#define ACPI_MADT_VGIC_IRQ_MODE         (1<<2)  /* 02: VGIC Maintenance Interrupt mode */
+
 
 /* 12: Generic Distributor (ACPI 5.0) */
 
@@ -1033,11 +1046,42 @@  typedef struct acpi_madt_generic_distributor
 } ACPI_MADT_GENERIC_DISTRIBUTOR;
 
 
+/* 13: Generic MSI Frame (ACPI 5.1) */
+
+typedef struct acpi_madt_generic_msi_frame
+{
+    ACPI_SUBTABLE_HEADER    Header;
+    UINT16                  Reserved;           /* Reserved - must be zero */
+    UINT32                  MsiFrameId;
+    UINT64                  BaseAddress;
+    UINT32                  Flags;
+    UINT16                  SpiCount;
+    UINT16                  SpiBase;
+
+} ACPI_MADT_GENERIC_MSI_FRAME;
+
+/* Masks for Flags field above */
+
+#define ACPI_MADT_OVERRIDE_SPI_VALUES   (1)
+
+
+/* 14: Generic Redistributor (ACPI 5.1) */
+
+typedef struct acpi_madt_generic_redistributor
+{
+    ACPI_SUBTABLE_HEADER    Header;
+    UINT16                  Reserved;           /* reserved - must be zero */
+    UINT64                  BaseAddress;
+    UINT32                  Length;
+
+} ACPI_MADT_GENERIC_REDISTRIBUTOR;
+
+
 /*
  * Common flags fields for MADT subtables
  */
 
-/* MADT Local APIC flags (LapicFlags) and GIC flags */
+/* MADT Local APIC flags */
 
 #define ACPI_MADT_ENABLED           (1)         /* 00: Processor is usable if set */
 
diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h
index 7a64788..7d62862 100644
--- a/src/acpica/source/include/actbl2.h
+++ b/src/acpica/source/include/actbl2.h
@@ -522,7 +522,7 @@  typedef struct acpi_table_dbgp
  *        Version 1
  *
  * Conforms to "Intel Virtualization Technology for Directed I/O",
- * Version 1.2, Sept. 2008
+ * Version 2.2, Sept. 2013
  *
  ******************************************************************************/
 
@@ -555,9 +555,10 @@  enum AcpiDmarType
 {
     ACPI_DMAR_TYPE_HARDWARE_UNIT        = 0,
     ACPI_DMAR_TYPE_RESERVED_MEMORY      = 1,
-    ACPI_DMAR_TYPE_ATSR                 = 2,
-    ACPI_DMAR_HARDWARE_AFFINITY         = 3,
-    ACPI_DMAR_TYPE_RESERVED             = 4     /* 4 and greater are reserved */
+    ACPI_DMAR_TYPE_ROOT_ATS             = 2,
+    ACPI_DMAR_TYPE_HARDWARE_AFFINITY    = 3,
+    ACPI_DMAR_TYPE_NAMESPACE            = 4,
+    ACPI_DMAR_TYPE_RESERVED             = 5     /* 5 and greater are reserved */
 };
 
 
@@ -573,7 +574,7 @@  typedef struct acpi_dmar_device_scope
 
 } ACPI_DMAR_DEVICE_SCOPE;
 
-/* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE */
+/* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE - device types */
 
 enum AcpiDmarScopeType
 {
@@ -582,7 +583,8 @@  enum AcpiDmarScopeType
     ACPI_DMAR_SCOPE_TYPE_BRIDGE         = 2,
     ACPI_DMAR_SCOPE_TYPE_IOAPIC         = 3,
     ACPI_DMAR_SCOPE_TYPE_HPET           = 4,
-    ACPI_DMAR_SCOPE_TYPE_RESERVED       = 5     /* 5 and greater are reserved */
+    ACPI_DMAR_SCOPE_TYPE_NAMESPACE      = 5,
+    ACPI_DMAR_SCOPE_TYPE_RESERVED       = 6     /* 6 and greater are reserved */
 };
 
 typedef struct acpi_dmar_pci_path
@@ -659,6 +661,18 @@  typedef struct acpi_dmar_rhsa
 } ACPI_DMAR_RHSA;
 
 
+/* 4: ACPI Namespace Device Declaration Structure */
+
+typedef struct acpi_dmar_andd
+{
+    ACPI_DMAR_HEADER        Header;
+    UINT8                   Reserved[3];
+    UINT8                   DeviceNumber;
+    char                    DeviceName[1];
+
+} ACPI_DMAR_ANDD;
+
+
 /*******************************************************************************
  *
  * HPET - High Precision Event Timer table
diff --git a/src/acpica/source/include/actbl3.h b/src/acpica/source/include/actbl3.h
index efec7e8..b30e80f 100644
--- a/src/acpica/source/include/actbl3.h
+++ b/src/acpica/source/include/actbl3.h
@@ -352,35 +352,111 @@  typedef struct acpi_s3pt_suspend
 
 /*******************************************************************************
  *
- * GTDT - Generic Timer Description Table (ACPI 5.0)
- *        Version 1
+ * GTDT - Generic Timer Description Table (ACPI 5.1)
+ *        Version 2
  *
  ******************************************************************************/
 
 typedef struct acpi_table_gtdt
 {
     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
-    UINT64                  Address;
-    UINT32                  Flags;
-    UINT32                  SecurePl1Interrupt;
-    UINT32                  SecurePl1Flags;
-    UINT32                  NonSecurePl1Interrupt;
-    UINT32                  NonSecurePl1Flags;
+    UINT64                  CounterBlockAddresss;
+    UINT32                  Reserved;
+    UINT32                  SecureEl1Interrupt;
+    UINT32                  SecureEl1Flags;
+    UINT32                  NonSecureEl1Interrupt;
+    UINT32                  NonSecureEl1Flags;
     UINT32                  VirtualTimerInterrupt;
     UINT32                  VirtualTimerFlags;
-    UINT32                  NonSecurePl2Interrupt;
-    UINT32                  NonSecurePl2Flags;
+    UINT32                  NonSecureEl2Interrupt;
+    UINT32                  NonSecureEl2Flags;
+    UINT64                  CounterReadBlockAddress;
+    UINT32                  PlatformTimerCount;
+    UINT32                  PlatformTimerOffset;
 
 } ACPI_TABLE_GTDT;
 
-/* Values for Flags field above */
+/* Flag Definitions: Timer Block Physical Timers and Virtual timers */
+
+#define ACPI_GTDT_INTERRUPT_MODE        (1)
+#define ACPI_GTDT_INTERRUPT_POLARITY    (1<<1)
+#define ACPI_GTDT_ALWAYS_ON             (1<<2)
+
+
+/* Common GTDT subtable header */
+
+typedef struct acpi_gtdt_header
+{
+    UINT8                   Type;
+    UINT16                  Length;
+
+} ACPI_GTDT_HEADER;
+
+/* Values for GTDT subtable type above */
+
+enum AcpiGtdtType
+{
+    ACPI_GTDT_TYPE_TIMER_BLOCK      = 0,
+    ACPI_GTDT_TYPE_WATCHDOG         = 1,
+    ACPI_GTDT_TYPE_RESERVED         = 2    /* 2 and greater are reserved */
+};
+
+
+/* GTDT Subtables, correspond to Type in acpi_gtdt_header */
+
+/* 0: Generic Timer Block */
+
+typedef struct acpi_gtdt_timer_block
+{
+    ACPI_GTDT_HEADER        Header;
+    UINT8                   Reserved;
+    UINT64                  BlockAddress;
+    UINT32                  TimerCount;
+    UINT32                  TimerOffset;
+
+} ACPI_GTDT_TIMER_BLOCK;
+
+/* Timer Sub-Structure, one per timer */
+
+typedef struct acpi_gtdt_timer_entry
+{
+    UINT8                   FrameNumber;
+    UINT8                   Reserved[3];
+    UINT64                  BaseAddress;
+    UINT64                  El0BaseAddress;
+    UINT32                  TimerInterrupt;
+    UINT32                  TimerFlags;
+    UINT32                  VirtualTimerInterrupt;
+    UINT32                  VirtualTimerFlags;
+    UINT32                  CommonFlags;
+
+} ACPI_GTDT_TIMER_ENTRY;
+
+
+/* Flag Definitions: CommonFlags above */
+
+#define ACPI_GTDT_GT_IS_SECURE_TIMER    (1)
+#define ACPI_GTDT_GT_ALWAYS_ON          (1<<1)
+
 
-#define ACPI_GTDT_MAPPED_BLOCK_PRESENT      1
+/* 1: SBSA Generic Watchdog Structure */
 
-/* Values for all "TimerFlags" fields above */
+typedef struct acpi_gtdt_watchdog
+{
+    ACPI_GTDT_HEADER        Header;
+    UINT8                   Reserved;
+    UINT64                  RefreshFrameAddress;
+    UINT64                  ControlFrameAddress;
+    UINT32                  TimerInterrupt;
+    UINT32                  TimerFlags;
+
+} ACPI_GTDT_WATCHDOG;
 
-#define ACPI_GTDT_INTERRUPT_MODE            1
-#define ACPI_GTDT_INTERRUPT_POLARITY        2
+/* Flag Definitions: TimerFlags above */
+
+#define ACPI_GTDT_WATCHDOG_IRQ_MODE         (1)
+#define ACPI_GTDT_WATCHDOG_IRQ_POLARITY     (1<<1)
+#define ACPI_GTDT_WATCHDOG_SECURE           (1<<2)
 
 
 /*******************************************************************************
@@ -525,7 +601,8 @@  typedef struct acpi_table_pcct
 enum AcpiPcctType
 {
     ACPI_PCCT_TYPE_GENERIC_SUBSPACE     = 0,
-    ACPI_PCCT_TYPE_RESERVED             = 1     /* 1 and greater are reserved */
+    ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE  = 1,
+    ACPI_PCCT_TYPE_RESERVED             = 2     /* 2 and greater are reserved */
 };
 
 /*
@@ -550,6 +627,31 @@  typedef struct acpi_pcct_subspace
 } ACPI_PCCT_SUBSPACE;
 
 
+/* 1: HW-reduced Communications Subspace (ACPI 5.1) */
+
+typedef struct acpi_pcct_hw_reduced
+{
+    ACPI_SUBTABLE_HEADER    Header;
+    UINT32                  DoorbellInterrupt;
+    UINT8                   Flags;
+    UINT8                   Reserved;
+    UINT64                  BaseAddress;
+    UINT64                  Length;
+    ACPI_GENERIC_ADDRESS    DoorbellRegister;
+    UINT64                  PreserveMask;
+    UINT64                  WriteMask;
+    UINT32                  Latency;
+    UINT32                  MaxAccessRate;
+    UINT16                  MinTurnaroundTime;
+
+} ACPI_PCCT_HW_REDUCED;
+
+/* Values for doorbell flags above */
+
+#define ACPI_PCCT_INTERRUPT_POLARITY    (1)
+#define ACPI_PCCT_INTERRUPT_MODE        (1<<1)
+
+
 /*
  * PCC memory structures (not part of the ACPI table)
  */
diff --git a/src/acpica/source/include/actypes.h b/src/acpica/source/include/actypes.h
index 6ffb2ce..b6371ae 100644
--- a/src/acpica/source/include/actypes.h
+++ b/src/acpica/source/include/actypes.h
@@ -596,7 +596,7 @@  typedef UINT64                          ACPI_INTEGER;
 
 #define ACPI_TO_POINTER(i)              ACPI_ADD_PTR (void, (void *) NULL,(ACPI_SIZE) i)
 #define ACPI_TO_INTEGER(p)              ACPI_PTR_DIFF (p, (void *) NULL)
-#define ACPI_OFFSET(d, f)               (ACPI_SIZE) ACPI_PTR_DIFF (&(((d *)0)->f), (void *) NULL)
+#define ACPI_OFFSET(d, f)               ACPI_PTR_DIFF (&(((d *) 0)->f), (void *) NULL)
 #define ACPI_PHYSADDR_TO_PTR(i)         ACPI_TO_POINTER(i)
 #define ACPI_PTR_TO_PHYSADDR(i)         ACPI_TO_INTEGER(i)
 
@@ -690,8 +690,9 @@  typedef UINT64                          ACPI_INTEGER;
 #define ACPI_NOTIFY_RESERVED            (UINT8) 0x0A
 #define ACPI_NOTIFY_LOCALITY_UPDATE     (UINT8) 0x0B
 #define ACPI_NOTIFY_SHUTDOWN_REQUEST    (UINT8) 0x0C
+#define ACPI_NOTIFY_AFFINITY_UPDATE     (UINT8) 0x0D
 
-#define ACPI_NOTIFY_MAX                 0x0C
+#define ACPI_NOTIFY_MAX                 0x0D
 
 /*
  * Types associated with ACPI names and objects. The first group of
diff --git a/src/acpica/source/include/acutils.h b/src/acpica/source/include/acutils.h
index bac5fd8..2aea248 100644
--- a/src/acpica/source/include/acutils.h
+++ b/src/acpica/source/include/acutils.h
@@ -297,6 +297,10 @@  AcpiUtHexToAsciiChar (
     UINT64                  Integer,
     UINT32                  Position);
 
+UINT8
+AcpiUtAsciiCharToHex (
+    int                     HexChar);
+
 BOOLEAN
 AcpiUtValidObjectType (
     ACPI_OBJECT_TYPE        Type);
@@ -1207,6 +1211,10 @@  const AH_DEVICE_ID *
 AcpiAhMatchHardwareId (
     char                    *Hid);
 
+const char *
+AcpiAhMatchUuid (
+    UINT8                   *Data);
+
 /*
  * utprint - printf/vprintf output functions
  */
@@ -1248,4 +1256,12 @@  AcpiUtFilePrintf (
     ...);
 #endif
 
+/*
+ * utuuid -- UUID support functions
+ */
+void
+AcpiUtConvertStringToUuid (
+    char                    *InString,
+    UINT8                   *UuidBuffer);
+
 #endif /* _ACUTILS_H */
diff --git a/src/acpica/source/include/platform/aclinux.h b/src/acpica/source/include/platform/aclinux.h
index 1f1d7c1..d5c1501 100644
--- a/src/acpica/source/include/platform/aclinux.h
+++ b/src/acpica/source/include/platform/aclinux.h
@@ -201,8 +201,6 @@ 
 #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireObject
 #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetThreadId
 #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateLock
-#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsMapMemory
-#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsUnmapMemory
 
 /*
  * OSL interfaces used by debugger/disassembler
@@ -236,10 +234,6 @@ 
 #define __init
 #endif
 
-#ifndef __iomem
-#define __iomem
-#endif
-
 /* Host-dependent types and defines for user-space ACPICA */
 
 #define ACPI_FLUSH_CPU_CACHE()
diff --git a/src/acpica/source/include/platform/aclinuxex.h b/src/acpica/source/include/platform/aclinuxex.h
index 67e42ab..e3d5d5b 100644
--- a/src/acpica/source/include/platform/aclinuxex.h
+++ b/src/acpica/source/include/platform/aclinuxex.h
@@ -186,16 +186,6 @@  AcpiOsGetThreadId (
         Lock ? AE_OK : AE_NO_MEMORY; \
     })
 
-void __iomem *
-AcpiOsMapMemory (
-    ACPI_PHYSICAL_ADDRESS   Where,
-    ACPI_SIZE               Length);
-
-void
-AcpiOsUnmapMemory (
-    void __iomem            *LogicalAddress,
-    ACPI_SIZE               Size);
-
 /*
  * OSL interfaces added by Linux
  */
diff --git a/src/acpica/source/os_specific/service_layers/oslibcfs.c b/src/acpica/source/os_specific/service_layers/oslibcfs.c
index 3343a0c..e1ca8be 100644
--- a/src/acpica/source/os_specific/service_layers/oslibcfs.c
+++ b/src/acpica/source/os_specific/service_layers/oslibcfs.c
@@ -1,6 +1,6 @@ 
 /******************************************************************************
  *
- * Module Name: oslibcfs - C library OSL for file IO
+ * Module Name: oslibcfs - C library OSL for file I/O
  *
  *****************************************************************************/
 
@@ -141,8 +141,9 @@  AcpiOsOpenFile (
     UINT8                   Modes)
 {
     ACPI_FILE               File;
-    char                    ModesStr[4];
     UINT32                  i = 0;
+    char                    ModesStr[4];
+
 
     if (Modes & ACPI_FILE_READING)
     {
@@ -156,6 +157,7 @@  AcpiOsOpenFile (
     {
         ModesStr[i++] = 'b';
     }
+
     ModesStr[i++] = '\0';
 
     File = fopen (Path, ModesStr);
@@ -172,11 +174,11 @@  AcpiOsOpenFile (
  *
  * FUNCTION:    AcpiOsCloseFile
  *
- * PARAMETERS:  File                - File descriptor
+ * PARAMETERS:  File                - An open file descriptor
  *
  * RETURN:      None.
  *
- * DESCRIPTION: Close a file.
+ * DESCRIPTION: Close a file opened via AcpiOsOpenFile.
  *
  ******************************************************************************/
 
@@ -192,14 +194,14 @@  AcpiOsCloseFile (
  *
  * FUNCTION:    AcpiOsReadFile
  *
- * PARAMETERS:  File                - File descriptor
+ * PARAMETERS:  File                - An open file descriptor
  *              Buffer              - Data buffer
  *              Size                - Data block size
  *              Count               - Number of data blocks
  *
- * RETURN:      Size of successfully read buffer.
+ * RETURN:      Number of bytes actually read.
  *
- * DESCRIPTION: Read a file.
+ * DESCRIPTION: Read from a file.
  *
  ******************************************************************************/
 
@@ -212,6 +214,7 @@  AcpiOsReadFile (
 {
     int                     Length;
 
+
     Length = fread (Buffer, Size, Count, File);
     if (Length < 0)
     {
@@ -226,14 +229,14 @@  AcpiOsReadFile (
  *
  * FUNCTION:    AcpiOsWriteFile
  *
- * PARAMETERS:  File                - File descriptor
+ * PARAMETERS:  File                - An open file descriptor
  *              Buffer              - Data buffer
  *              Size                - Data block size
  *              Count               - Number of data blocks
  *
- * RETURN:      Size of successfully written buffer.
+ * RETURN:      Number of bytes actually written.
  *
- * DESCRIPTION: Write a file.
+ * DESCRIPTION: Write to a file.
  *
  ******************************************************************************/
 
@@ -246,6 +249,7 @@  AcpiOsWriteFile (
 {
     int                     Length;
 
+
     Length = fwrite (Buffer, Size, Count, File);
     if (Length < 0)
     {
@@ -260,9 +264,9 @@  AcpiOsWriteFile (
  *
  * FUNCTION:    AcpiOsGetFileOffset
  *
- * PARAMETERS:  File                - File descriptor
+ * PARAMETERS:  File                - An open file descriptor
  *
- * RETURN:      Size of current position.
+ * RETURN:      Current file pointer position.
  *
  * DESCRIPTION: Get current file offset.
  *
@@ -274,8 +278,8 @@  AcpiOsGetFileOffset (
 {
     long                    Offset;
 
-    Offset = ftell (File);
 
+    Offset = ftell (File);
     return (Offset);
 }
 
@@ -284,8 +288,8 @@  AcpiOsGetFileOffset (
  *
  * FUNCTION:    AcpiOsSetFileOffset
  *
- * PARAMETERS:  File                - File descriptor
- *              Offset              - File offset
+ * PARAMETERS:  File                - An open file descriptor
+ *              Offset              - New file offset
  *              From                - From begin/end of file
  *
  * RETURN:      Status
diff --git a/src/acpica/source/os_specific/service_layers/osunixxf.c b/src/acpica/source/os_specific/service_layers/osunixxf.c
index c237ac2..6f0bdfe 100644
--- a/src/acpica/source/os_specific/service_layers/osunixxf.c
+++ b/src/acpica/source/os_specific/service_layers/osunixxf.c
@@ -1231,7 +1231,7 @@  AcpiOsGetTimer (
  * FUNCTION:    AcpiOsReadPciConfiguration
  *
  * PARAMETERS:  PciId               - Seg/Bus/Dev
- *              Register            - Device Register
+ *              PciRegister         - Device Register
  *              Value               - Buffer where value is placed
  *              Width               - Number of bits
  *
@@ -1244,7 +1244,7 @@  AcpiOsGetTimer (
 ACPI_STATUS
 AcpiOsReadPciConfiguration (
     ACPI_PCI_ID             *PciId,
-    UINT32                  Register,
+    UINT32                  PciRegister,
     UINT64                  *Value,
     UINT32                  Width)
 {
@@ -1259,7 +1259,7 @@  AcpiOsReadPciConfiguration (
  * FUNCTION:    AcpiOsWritePciConfiguration
  *
  * PARAMETERS:  PciId               - Seg/Bus/Dev
- *              Register            - Device Register
+ *              PciRegister         - Device Register
  *              Value               - Value to be written
  *              Width               - Number of bits
  *
@@ -1272,7 +1272,7 @@  AcpiOsReadPciConfiguration (
 ACPI_STATUS
 AcpiOsWritePciConfiguration (
     ACPI_PCI_ID             *PciId,
-    UINT32                  Register,
+    UINT32                  PciRegister,
     UINT64                  Value,
     UINT32                  Width)
 {
diff --git a/src/acpica/source/tools/acpiexec/aehandlers.c b/src/acpica/source/tools/acpiexec/aehandlers.c
index 06283f4..14b5e90 100644
--- a/src/acpica/source/tools/acpiexec/aehandlers.c
+++ b/src/acpica/source/tools/acpiexec/aehandlers.c
@@ -1413,8 +1413,7 @@  AeRegionHandler (
             case AML_FIELD_ATTRIB_RAW_BYTES:
             case AML_FIELD_ATTRIB_RAW_PROCESS:
 
-                /* (-2) for status/length */
-                Length = MyContext->AccessLength - 2;
+                Length = MyContext->AccessLength;
                 break;
 
             default:
@@ -1448,8 +1447,7 @@  AeRegionHandler (
             case AML_FIELD_ATTRIB_RAW_BYTES:
             case AML_FIELD_ATTRIB_RAW_PROCESS:
 
-                /* (-2) for status/length */
-                Length = MyContext->AccessLength - 2;
+                Length = MyContext->AccessLength;
                 break;
 
             default: