ACK: [PATCH] ACPICA: Update to version 20171110

ivanhu ivan.hu at canonical.com
Wed Nov 15 09:43:33 UTC 2017



On 11/11/2017 02:11 AM, Colin King wrote:
> From: Colin Ian King <colin.king at canonical.com>
> 
> Changes in this release of ACPICA are detailed at the following
> link on the ACPICA developer mailing list:
> 
> https://lists.acpica.org/pipermail/devel/2017-November/001573.html
> 
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
>   src/acpica/Makefile.am                             |   1 +
>   src/acpica/source/common/dmtable.c                 |   1 +
>   src/acpica/source/common/dmtbdump.c                |   5 +
>   src/acpica/source/common/dmtbinfo.c                |  15 +
>   src/acpica/source/compiler/asldefine.h             |   2 +-
>   src/acpica/source/compiler/dttable2.c              |   7 +-
>   src/acpica/source/compiler/dttemplate.h            |  69 ++--
>   src/acpica/source/components/debugger/dbexec.c     | 124 +++++-
>   src/acpica/source/components/debugger/dbinput.c    | 205 +++++----
>   src/acpica/source/components/dispatcher/dsfield.c  |  27 +-
>   src/acpica/source/components/dispatcher/dsobject.c |   3 +-
>   src/acpica/source/components/dispatcher/dsutils.c  |   3 +-
>   src/acpica/source/components/dispatcher/dswload.c  |   4 +-
>   src/acpica/source/components/dispatcher/dswload2.c |  12 +-
>   src/acpica/source/components/events/evregion.c     |  11 +
>   src/acpica/source/components/namespace/nsconvert.c |   3 +-
>   src/acpica/source/components/namespace/nsnames.c   | 172 ++++++++
>   src/acpica/source/components/parser/psargs.c       |   2 +-
>   src/acpica/source/components/utilities/utdecode.c  |  11 +-
>   src/acpica/source/components/utilities/uterror.c   |  78 +++-
>   src/acpica/source/components/utilities/utmutex.c   |   7 +-
>   .../source/components/utilities/utstrsuppt.c       |  34 +-
>   src/acpica/source/components/utilities/uttrack.c   |   2 +-
>   src/acpica/source/components/utilities/utxferror.c |   8 +-
>   src/acpica/source/include/acdebug.h                |   6 +
>   src/acpica/source/include/acdisasm.h               |   1 +
>   src/acpica/source/include/aclocal.h                |  13 +-
>   src/acpica/source/include/acmacros.h               |   2 +-
>   src/acpica/source/include/acnamesp.h               |   5 +
>   src/acpica/source/include/acpixf.h                 |   2 +-
>   src/acpica/source/include/actbl1.h                 |  89 +++-
>   src/acpica/source/include/actbl2.h                 |   1 +
>   src/acpica/source/include/acutils.h                |  14 +-
>   src/acpica/source/tools/acpiexec/aecommon.h        |  79 +++-
>   src/acpica/source/tools/acpiexec/aeinstall.c       | 457 +++++++++++++++++++++
>   src/acpica/source/tools/acpiexec/aeregion.c        | 278 +------------
>   36 files changed, 1267 insertions(+), 486 deletions(-)
>   create mode 100644 src/acpica/source/tools/acpiexec/aeinstall.c
> 
> diff --git a/src/acpica/Makefile.am b/src/acpica/Makefile.am
> index 64755b41..a66ae057 100644
> --- a/src/acpica/Makefile.am
> +++ b/src/acpica/Makefile.am
> @@ -277,6 +277,7 @@ libfwtsacpica_la_SOURCES =				\
>   	source/tools/acpiexec/aehandlers.c		\
>   	source/tools/acpiexec/aeexception.c		\
>   	source/tools/acpiexec/aeregion.c		\
> +	source/tools/acpiexec/aeinstall.c		\
>   	source/os_specific/service_layers/osgendbg.c
>   
>   libfwtsacpica_la_LIBADD = \
> diff --git a/src/acpica/source/common/dmtable.c b/src/acpica/source/common/dmtable.c
> index 07d27faf..60951732 100644
> --- a/src/acpica/source/common/dmtable.c
> +++ b/src/acpica/source/common/dmtable.c
> @@ -356,6 +356,7 @@ static const char           *AcpiDmNfitSubnames[] =
>       "NVDIMM Control Region",            /* ACPI_NFIT_TYPE_CONTROL_REGION */
>       "NVDIMM Block Data Window Region",  /* ACPI_NFIT_TYPE_DATA_REGION */
>       "Flush Hint Address",               /* ACPI_NFIT_TYPE_FLUSH_ADDRESS */
> +    "Platform Capabilities",            /* ACPI_NFIT_TYPE_CAPABILITIES */
>       "Unknown Subtable Type"             /* Reserved */
>   };
>   
> diff --git a/src/acpica/source/common/dmtbdump.c b/src/acpica/source/common/dmtbdump.c
> index 0f0697e3..1ef91c2d 100644
> --- a/src/acpica/source/common/dmtbdump.c
> +++ b/src/acpica/source/common/dmtbdump.c
> @@ -3061,6 +3061,11 @@ AcpiDmDumpNfit (
>               FieldOffset = sizeof (ACPI_NFIT_FLUSH_ADDRESS) - sizeof (UINT64);
>               break;
>   
> +        case ACPI_NFIT_TYPE_CAPABILITIES:    /* ACPI 6.0A */
> +
> +            InfoTable = AcpiDmTableInfoNfit7;
> +            break;
> +
>           default:
>               AcpiOsPrintf ("\n**** Unknown NFIT subtable type 0x%X\n",
>                   Subtable->Type);
> diff --git a/src/acpica/source/common/dmtbinfo.c b/src/acpica/source/common/dmtbinfo.c
> index ad546e8a..bccb986f 100644
> --- a/src/acpica/source/common/dmtbinfo.c
> +++ b/src/acpica/source/common/dmtbinfo.c
> @@ -336,6 +336,7 @@
>   #define ACPI_NFIT4_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_NFIT_CONTROL_REGION,f)
>   #define ACPI_NFIT5_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_NFIT_DATA_REGION,f)
>   #define ACPI_NFIT6_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_NFIT_FLUSH_ADDRESS,f)
> +#define ACPI_NFIT7_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_NFIT_CAPABILITIES,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_PCCT2_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PCCT_HW_REDUCED_TYPE2,f)
> @@ -419,6 +420,7 @@
>   #define ACPI_NFIT0_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_NFIT_SYSTEM_ADDRESS,f,o)
>   #define ACPI_NFIT1_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_NFIT_MEMORY_MAP,f,o)
>   #define ACPI_NFIT4_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_NFIT_CONTROL_REGION,f,o)
> +#define ACPI_NFIT7_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_NFIT_CAPABILITIES,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_PCCT2_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_PCCT_HW_REDUCED_TYPE2,f,o)
> @@ -1861,6 +1863,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoIort4[] =
>       {ACPI_DMT_UINT8,    ACPI_IORT4_OFFSET (Pxm),                    "Proximity Domain", 0},
>       {ACPI_DMT_UINT8,    ACPI_IORT4_OFFSET (Reserved1),              "Reserved", 0},
>       {ACPI_DMT_UINT16,   ACPI_IORT4_OFFSET (Reserved2),              "Reserved", 0},
> +    {ACPI_DMT_UINT32,   ACPI_IORT4_OFFSET (IdMappingIndex),         "Device ID Mapping Index", 0},
>       ACPI_DMT_TERMINATOR
>   };
>   
> @@ -2564,6 +2567,18 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoNfit6a[] =
>       ACPI_DMT_TERMINATOR
>   };
>   
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoNfit7[] =
> +{
> +    {ACPI_DMT_UINT8,    ACPI_NFIT7_OFFSET (HighestCapability),      "Highest Capability", 0},
> +    {ACPI_DMT_UINT24,   ACPI_NFIT7_OFFSET (Reserved[0]),            "Reserved", 0},
> +    {ACPI_DMT_UINT32,   ACPI_NFIT7_OFFSET (Capabilities),           "Capabilities (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_NFIT7_FLAG_OFFSET (Capabilities,0),    "Cache Flush to NVDIMM", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_NFIT7_FLAG_OFFSET (Capabilities,0),    "Memory Flush to MVDIMM", 0},
> +    {ACPI_DMT_FLAG2,    ACPI_NFIT7_FLAG_OFFSET (Capabilities,0),    "Memory Mirroring", 0},
> +    {ACPI_DMT_UINT32,   ACPI_NFIT7_OFFSET (Reserved2),              "Reserved", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
>   
>   /*******************************************************************************
>    *
> diff --git a/src/acpica/source/compiler/asldefine.h b/src/acpica/source/compiler/asldefine.h
> index a7d1a289..bcdc8c24 100644
> --- a/src/acpica/source/compiler/asldefine.h
> +++ b/src/acpica/source/compiler/asldefine.h
> @@ -162,7 +162,7 @@
>   #define ASL_CREATOR_ID              "INTL"
>   #define ASL_DEFINE                  "__IASL__"
>   #define ASL_PREFIX                  "iASL: "
> -#define ASL_COMPLIANCE              "Supports ACPI Specification Revision 6.2"
> +#define ASL_COMPLIANCE              "Supports ACPI Specification Revision 6.2A"
>   
>   
>   /* Configuration constants */
> diff --git a/src/acpica/source/compiler/dttable2.c b/src/acpica/source/compiler/dttable2.c
> index 172354cd..db79bac7 100644
> --- a/src/acpica/source/compiler/dttable2.c
> +++ b/src/acpica/source/compiler/dttable2.c
> @@ -697,6 +697,11 @@ DtCompileNfit (
>               InfoTable = AcpiDmTableInfoNfit6;
>               break;
>   
> +        case ACPI_NFIT_TYPE_CAPABILITIES:
> +
> +            InfoTable = AcpiDmTableInfoNfit7;
> +            break;
> +
>           default:
>   
>               DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "NFIT");
> @@ -740,7 +745,6 @@ DtCompileNfit (
>               }
>   
>               Interleave->LineCount = Count;
> -            DtPopSubtable ();
>               break;
>   
>           case ACPI_NFIT_TYPE_SMBIOS:
> @@ -786,7 +790,6 @@ DtCompileNfit (
>               }
>   
>               Hint->HintCount = (UINT16) Count;
> -            DtPopSubtable ();
>               break;
>   
>           default:
> diff --git a/src/acpica/source/compiler/dttemplate.h b/src/acpica/source/compiler/dttemplate.h
> index 38750f79..4c77afc1 100644
> --- a/src/acpica/source/compiler/dttemplate.h
> +++ b/src/acpica/source/compiler/dttemplate.h
> @@ -696,53 +696,56 @@ const unsigned char TemplateHpet[] =
>   
>   const unsigned char TemplateIort[] =
>   {
> -    0x49,0x4F,0x52,0x54,0x74,0x01,0x00,0x00,  /* 00000000    "IORTt..." */
> -    0x00,0xD2,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
> -    0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45,  /* 00000010    "TEMPLATE" */
> +    0x49,0x4F,0x52,0x54,0x90,0x01,0x00,0x00,  /* 00000000    "IORT...." */
> +    0x00,0x5F,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "._INTEL " */
> +    0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65,  /* 00000010    "Template" */
>       0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> -    0x19,0x01,0x17,0x20,0x05,0x00,0x00,0x00,  /* 00000020    "... ...." */
> +    0x31,0x08,0x17,0x20,0x05,0x00,0x00,0x00,  /* 00000020    "1.. ...." */
>       0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000028    "4......." */
>       0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,  /* 00000030    "........" */
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000038    "........" */
>       0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000040    "........" */
> -    0x00,0x00,0x00,0x00,0x01,0x44,0x00,0x00,  /* 00000048    ".....D.." */
> +    0x00,0x00,0x00,0x00,0x01,0x58,0x00,0x00,  /* 00000048    ".....X.." */
>       0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000050    "........" */
> -    0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000058    "0......." */
> +    0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000058    "D......." */
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000060    "........" */
>       0x00,0x5C,0x5F,0x53,0x42,0x2E,0x50,0x43,  /* 00000068    ".\_SB.PC" */
>       0x49,0x30,0x2E,0x44,0x45,0x56,0x30,0x00,  /* 00000070    "I0.DEV0." */
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000078    "........" */
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000080    "........" */
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000088    "........" */
> -    0x02,0x34,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000090    ".4......" */
> -    0x01,0x00,0x00,0x00,0x20,0x00,0x00,0x00,  /* 00000098    ".... ..." */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000A0    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000A8    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000B0    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000090    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000098    "........" */
> +    0x00,0x00,0x00,0x00,0x02,0x34,0x00,0x00,  /* 000000A0    ".....4.." */
> +    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 000000A8    "........" */
> +    0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000B0    " ......." */
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000B8    "........" */
> -    0x00,0x00,0x00,0x00,0x03,0x60,0x00,0x00,  /* 000000C0    ".....`.." */
> -    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 000000C8    "........" */
> -    0x4C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000D0    "L......." */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000D8    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000E0    "........" */
> -    0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,  /* 000000E8    "....<..." */
> -    0x00,0x00,0x00,0x00,0x4C,0x00,0x00,0x00,  /* 000000F0    "....L..." */
> -    0x00,0x00,0x00,0x00,0x4C,0x00,0x00,0x00,  /* 000000F8    "....L..." */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000100    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000108    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000110    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000C0    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000C8    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000D0    "........" */
> +    0x03,0x60,0x00,0x01,0x00,0x00,0x00,0x00,  /* 000000D8    ".`......" */
> +    0x01,0x00,0x00,0x00,0x4C,0x00,0x00,0x00,  /* 000000E0    "....L..." */
> +    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    "........" */
> +    0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000100    "<......." */
> +    0x4C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000108    "L......." */
> +    0x4C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000110    "L......." */
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000118    "........" */
> -    0x00,0x00,0x00,0x00,0x04,0x50,0x00,0x00,  /* 00000120    ".....P.." */
> -    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000128    "........" */
> -    0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000130    "<......." */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000138    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000140    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000120    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000128    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000130    "........" */
> +    0x04,0x58,0x00,0x01,0x00,0x00,0x00,0x00,  /* 00000138    ".X......" */
> +    0x01,0x00,0x00,0x00,0x44,0x00,0x00,0x00,  /* 00000140    "....D..." */
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000148    "........" */
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000150    "........" */
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000158    "........" */
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000160    "........" */
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000168    "........" */
> -    0x00,0x00,0x00,0x00                       /* 00000170    "...."     */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000170    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000178    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000180    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00   /* 00000188    "........" */
>   };
>   
>   const unsigned char TemplateIvrs[] =
> @@ -939,11 +942,11 @@ const unsigned char TemplateMsct[] =
>   
>   const unsigned char TemplateNfit[] =
>   {
> -    0x4E,0x46,0x49,0x54,0x70,0x01,0x00,0x00,  /* 00000000    "NFITp..." */
> -    0x01,0x53,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    ".SINTEL " */
> +    0x4E,0x46,0x49,0x54,0x80,0x01,0x00,0x00,  /* 00000000    "NFIT...." */
> +    0x01,0x07,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
>       0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65,  /* 00000010    "Template" */
>       0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> -    0x10,0x04,0x15,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "... ...." */
> +    0x29,0x09,0x17,0x20,0x00,0x00,0x00,0x00,  /* 00000020    ").. ...." */
>       0x00,0x00,0x38,0x00,0x01,0x00,0x00,0x00,  /* 00000028    "..8....." */
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000030    "........" */
>       0x30,0x05,0xAF,0x91,0x86,0x5D,0x0E,0x47,  /* 00000038    "0....].G" */
> @@ -984,7 +987,9 @@ const unsigned char TemplateNfit[] =
>       0x06,0x00,0x20,0x00,0x01,0x00,0x00,0x00,  /* 00000150    ".. ....." */
>       0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000158    "........" */
>       0x00,0x00,0x00,0x18,0x04,0x00,0x00,0x00,  /* 00000160    "........" */
> -    0x00,0x00,0x00,0x18,0x06,0x00,0x00,0x00   /* 00000168    "........" */
> +    0x00,0x00,0x00,0x18,0x06,0x00,0x00,0x00,  /* 00000168    "........" */
> +    0x07,0x00,0x10,0x00,0x00,0x00,0x00,0x00,  /* 00000170    "........" */
> +    0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00   /* 00000178    "........" */
>   };
>   
>   const unsigned char TemplateMtmr[] =
> diff --git a/src/acpica/source/components/debugger/dbexec.c b/src/acpica/source/components/debugger/dbexec.c
> index 0a00be81..76f4d9f1 100644
> --- a/src/acpica/source/components/debugger/dbexec.c
> +++ b/src/acpica/source/components/debugger/dbexec.c
> @@ -187,6 +187,10 @@ AcpiDbExecutionWalk (
>       void                    *Context,
>       void                    **ReturnValue);
>   
> +static void ACPI_SYSTEM_XFACE
> +AcpiDbSingleExecutionThread (
> +    void                    *Context);
> +
>   
>   /*******************************************************************************
>    *
> @@ -366,7 +370,7 @@ AcpiDbExecuteSetup (
>       ACPI_FUNCTION_NAME (DbExecuteSetup);
>   
>   
> -    /* Catenate the current scope to the supplied name */
> +    /* Concatenate the current scope to the supplied name */
>   
>       Info->Pathname[0] = 0;
>       if ((Info->Name[0] != '\\') &&
> @@ -789,6 +793,124 @@ AcpiDbMethodThread (
>   }
>   
>   
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiDbSingleExecutionThread
> + *
> + * PARAMETERS:  Context                 - Method info struct
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Create one thread and execute a method
> + *
> + ******************************************************************************/
> +
> +static void ACPI_SYSTEM_XFACE
> +AcpiDbSingleExecutionThread (
> +    void                    *Context)
> +{
> +    ACPI_DB_METHOD_INFO     *Info = Context;
> +    ACPI_STATUS             Status;
> +    ACPI_BUFFER             ReturnObj;
> +
> +
> +    AcpiOsPrintf ("\n");
> +
> +    Status = AcpiDbExecuteMethod (Info, &ReturnObj);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        AcpiOsPrintf ("%s During evaluation of %s\n",
> +            AcpiFormatException (Status), Info->Pathname);
> +        return;
> +    }
> +
> +    /* Display a return object, if any */
> +
> +    if (ReturnObj.Length)
> +    {
> +        AcpiOsPrintf ("Evaluation of %s returned object %p, "
> +            "external buffer length %X\n",
> +            AcpiGbl_DbMethodInfo.Pathname, ReturnObj.Pointer,
> +            (UINT32) ReturnObj.Length);
> +
> +        AcpiDbDumpExternalObject (ReturnObj.Pointer, 1);
> +    }
> +
> +    AcpiOsPrintf ("\nBackground thread completed\n%c ",
> +        ACPI_DEBUGGER_COMMAND_PROMPT);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiDbCreateExecutionThread
> + *
> + * PARAMETERS:  MethodNameArg           - Control method to execute
> + *              Arguments               - Array of arguments to the method
> + *              Types                   - Corresponding array of object types
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Create a single thread to evaluate a namespace object. Handles
> + *              arguments passed on command line for control methods.
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDbCreateExecutionThread (
> +    char                    *MethodNameArg,
> +    char                    **Arguments,
> +    ACPI_OBJECT_TYPE        *Types)
> +{
> +    ACPI_STATUS             Status;
> +    UINT32                  i;
> +
> +
> +    memset (&AcpiGbl_DbMethodInfo, 0, sizeof (ACPI_DB_METHOD_INFO));
> +    AcpiGbl_DbMethodInfo.Name = MethodNameArg;
> +    AcpiGbl_DbMethodInfo.InitArgs = 1;
> +    AcpiGbl_DbMethodInfo.Args = AcpiGbl_DbMethodInfo.Arguments;
> +    AcpiGbl_DbMethodInfo.Types = AcpiGbl_DbMethodInfo.ArgTypes;
> +
> +    /* Setup method arguments, up to 7 (0-6) */
> +
> +    for (i = 0; (i < ACPI_METHOD_NUM_ARGS) && *Arguments; i++)
> +    {
> +        AcpiGbl_DbMethodInfo.Arguments[i] = *Arguments;
> +        Arguments++;
> +
> +        AcpiGbl_DbMethodInfo.ArgTypes[i] = *Types;
> +        Types++;
> +    }
> +
> +    Status = AcpiDbExecuteSetup (&AcpiGbl_DbMethodInfo);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return;
> +    }
> +
> +    /* Get the NS node, determines existence also */
> +
> +    Status = AcpiGetHandle (NULL, AcpiGbl_DbMethodInfo.Pathname,
> +        &AcpiGbl_DbMethodInfo.Method);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        AcpiOsPrintf ("%s Could not get handle for %s\n",
> +            AcpiFormatException (Status), AcpiGbl_DbMethodInfo.Pathname);
> +        return;
> +    }
> +
> +    Status = AcpiOsExecute (OSL_DEBUGGER_EXEC_THREAD,
> +        AcpiDbSingleExecutionThread, &AcpiGbl_DbMethodInfo);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return;
> +    }
> +
> +    AcpiOsPrintf ("\nBackground thread started\n");
> +}
> +
> +
>   /*******************************************************************************
>    *
>    * FUNCTION:    AcpiDbCreateExecutionThreads
> diff --git a/src/acpica/source/components/debugger/dbinput.c b/src/acpica/source/components/debugger/dbinput.c
> index d3755f4f..ae044bf5 100644
> --- a/src/acpica/source/components/debugger/dbinput.c
> +++ b/src/acpica/source/components/debugger/dbinput.c
> @@ -258,6 +258,7 @@ enum AcpiExDebuggerCommands
>       CMD_UNLOAD,
>   
>       CMD_TERMINATE,
> +    CMD_BACKGROUND,
>       CMD_THREADS,
>   
>       CMD_TEST,
> @@ -336,6 +337,7 @@ static const ACPI_DB_COMMAND_INFO   AcpiGbl_DbCommands[] =
>       {"UNLOAD",       1},
>   
>       {"TERMINATE",    0},
> +    {"BACKGROUND",   1},
>       {"THREADS",      3},
>   
>       {"TEST",         1},
> @@ -346,102 +348,113 @@ static const ACPI_DB_COMMAND_INFO   AcpiGbl_DbCommands[] =
>   /*
>    * Help for all debugger commands. First argument is the number of lines
>    * of help to output for the command.
> + *
> + * Note: Some commands are not supported by the kernel-level version of
> + * the debugger.
>    */
>   static const ACPI_DB_COMMAND_HELP   AcpiGbl_DbCommandHelp[] =
>   {
> -    {0, "\nGeneral-Purpose Commands:",         "\n"},
> -    {1, "  Allocations",                       "Display list of current memory allocations\n"},
> -    {2, "  Dump <Address>|<Namepath>",         "\n"},
> -    {0, "       [Byte|Word|Dword|Qword]",      "Display ACPI objects or memory\n"},
> -    {1, "  Handlers",                          "Info about global handlers\n"},
> -    {1, "  Help [Command]",                    "This help screen or individual command\n"},
> -    {1, "  History",                           "Display command history buffer\n"},
> -    {1, "  Level <DebugLevel>] [console]",     "Get/Set debug level for file or console\n"},
> -    {1, "  Locks",                             "Current status of internal mutexes\n"},
> -    {1, "  Osi [Install|Remove <name>]",       "Display or modify global _OSI list\n"},
> -    {1, "  Quit or Exit",                      "Exit this command\n"},
> -    {8, "  Stats <SubCommand>",                "Display namespace and memory statistics\n"},
> -    {1, "     Allocations",                    "Display list of current memory allocations\n"},
> -    {1, "     Memory",                         "Dump internal memory lists\n"},
> -    {1, "     Misc",                           "Namespace search and mutex stats\n"},
> -    {1, "     Objects",                        "Summary of namespace objects\n"},
> -    {1, "     Sizes",                          "Sizes for each of the internal objects\n"},
> -    {1, "     Stack",                          "Display CPU stack usage\n"},
> -    {1, "     Tables",                         "Info about current ACPI table(s)\n"},
> -    {1, "  Tables",                            "Display info about loaded ACPI tables\n"},
> -    {1, "  ! <CommandNumber>",                 "Execute command from history buffer\n"},
> -    {1, "  !!",                                "Execute last command again\n"},
> -
> -    {0, "\nNamespace Access Commands:",        "\n"},
> -    {1, "  Businfo",                           "Display system bus info\n"},
> -    {1, "  Disassemble <Method>",              "Disassemble a control method\n"},
> -    {1, "  Find <AcpiName> (? is wildcard)",   "Find ACPI name(s) with wildcards\n"},
> -    {1, "  Integrity",                         "Validate namespace integrity\n"},
> -    {1, "  Methods",                           "Display list of loaded control methods\n"},
> -    {1, "  Namespace [Object] [Depth]",        "Display loaded namespace tree/subtree\n"},
> -    {1, "  Notify <Object> <Value>",           "Send a notification on Object\n"},
> -    {1, "  Objects [ObjectType]",              "Display summary of all objects or just given type\n"},
> -    {1, "  Owner <OwnerId> [Depth]",           "Display loaded namespace by object owner\n"},
> -    {1, "  Paths",                             "Display full pathnames of namespace objects\n"},
> -    {1, "  Predefined",                        "Check all predefined names\n"},
> -    {1, "  Prefix [<Namepath>]",               "Set or Get current execution prefix\n"},
> -    {1, "  References <Addr>",                 "Find all references to object at addr\n"},
> -    {1, "  Resources [DeviceName]",            "Display Device resources (no arg = all devices)\n"},
> -    {1, "  Set N <NamedObject> <Value>",       "Set value for named integer\n"},
> -    {1, "  Template <Object>",                 "Format/dump a Buffer/ResourceTemplate\n"},
> -    {1, "  Type <Object>",                     "Display object type\n"},
> -
> -    {0, "\nControl Method Execution Commands:","\n"},
> -    {1, "  Arguments (or Args)",               "Display method arguments\n"},
> -    {1, "  Breakpoint <AmlOffset>",            "Set an AML execution breakpoint\n"},
> -    {1, "  Call",                              "Run to next control method invocation\n"},
> -    {1, "  Debug <Namepath> [Arguments]",      "Single Step a control method\n"},
> -    {6, "  Evaluate",                          "Synonym for Execute\n"},
> -    {5, "  Execute <Namepath> [Arguments]",    "Execute control method\n"},
> -    {1, "     Hex Integer",                    "Integer method argument\n"},
> -    {1, "     \"Ascii String\"",               "String method argument\n"},
> -    {1, "     (Hex Byte List)",                "Buffer method argument\n"},
> -    {1, "     [Package Element List]",         "Package method argument\n"},
> -    {5, "  Execute predefined",                "Execute all predefined (public) methods\n"},
> -    {1, "  Go",                                "Allow method to run to completion\n"},
> -    {1, "  Information",                       "Display info about the current method\n"},
> -    {1, "  Into",                              "Step into (not over) a method call\n"},
> -    {1, "  List [# of Aml Opcodes]",           "Display method ASL statements\n"},
> -    {1, "  Locals",                            "Display method local variables\n"},
> -    {1, "  Results",                           "Display method result stack\n"},
> -    {1, "  Set <A|L> <#> <Value>",             "Set method data (Arguments/Locals)\n"},
> -    {1, "  Stop",                              "Terminate control method\n"},
> -    {5, "  Trace <State> [<Namepath>] [Once]", "Trace control method execution\n"},
> -    {1, "     Enable",                         "Enable all messages\n"},
> -    {1, "     Disable",                        "Disable tracing\n"},
> -    {1, "     Method",                         "Enable method execution messages\n"},
> -    {1, "     Opcode",                         "Enable opcode execution messages\n"},
> -    {1, "  Tree",                              "Display control method calling tree\n"},
> -    {1, "  <Enter>",                           "Single step next AML opcode (over calls)\n"},
> +    {0, "\nNamespace Access:",                  "\n"},
> +    {1, "  Businfo",                            "Display system bus info\n"},
> +    {1, "  Disassemble <Method>",               "Disassemble a control method\n"},
> +    {1, "  Find <AcpiName> (? is wildcard)",    "Find ACPI name(s) with wildcards\n"},
> +    {1, "  Integrity",                          "Validate namespace integrity\n"},
> +    {1, "  Methods",                            "Display list of loaded control methods\n"},
> +    {1, "  Namespace [Object] [Depth]",         "Display loaded namespace tree/subtree\n"},
> +    {1, "  Notify <Object> <Value>",            "Send a notification on Object\n"},
> +    {1, "  Objects [ObjectType]",               "Display summary of all objects or just given type\n"},
> +    {1, "  Owner <OwnerId> [Depth]",            "Display loaded namespace by object owner\n"},
> +    {1, "  Paths",                              "Display full pathnames of namespace objects\n"},
> +    {1, "  Predefined",                         "Check all predefined names\n"},
> +    {1, "  Prefix [<Namepath>]",                "Set or Get current execution prefix\n"},
> +    {1, "  References <Addr>",                  "Find all references to object at addr\n"},
> +    {1, "  Resources [DeviceName]",             "Display Device resources (no arg = all devices)\n"},
> +    {1, "  Set N <NamedObject> <Value>",        "Set value for named integer\n"},
> +    {1, "  Template <Object>",                  "Format/dump a Buffer/ResourceTemplate\n"},
> +    {1, "  Type <Object>",                      "Display object type\n"},
> +
> +    {0, "\nControl Method Execution:",          "\n"},
> +    {1, "  Evaluate <Namepath> [Arguments]",    "Evaluate object or control method\n"},
> +    {1, "  Execute <Namepath> [Arguments]",     "Synonym for Evaluate\n"},
> +#ifdef ACPI_APPLICATION
> +    {1, "  Background <Namepath> [Arguments]",  "Evaluate object/method in a separate thread\n"},
> +    {1, "  Thread <Threads><Loops><NamePath>",  "Spawn threads to execute method(s)\n"},
> +#endif
> +    {1, "  Debug <Namepath> [Arguments]",       "Single-Step a control method\n"},
> +    {7, "  [Arguments] formats:",               "Control method argument formats\n"},
> +    {1, "     Hex Integer",                     "Integer\n"},
> +    {1, "     \"Ascii String\"",                "String\n"},
> +    {1, "     (Hex Byte List)",                 "Buffer\n"},
> +    {1, "         (01 42 7A BF)",               "Buffer example (4 bytes)\n"},
> +    {1, "     [Package Element List]",          "Package\n"},
> +    {1, "         [0x01 0x1234 \"string\"]",    "Package example (3 elements)\n"},
> +
> +    {0, "\nMiscellaneous:",                     "\n"},
> +    {1, "  Allocations",                        "Display list of current memory allocations\n"},
> +    {2, "  Dump <Address>|<Namepath>",          "\n"},
> +    {0, "       [Byte|Word|Dword|Qword]",       "Display ACPI objects or memory\n"},
> +    {1, "  Handlers",                           "Info about global handlers\n"},
> +    {1, "  Help [Command]",                     "This help screen or individual command\n"},
> +    {1, "  History",                            "Display command history buffer\n"},
> +    {1, "  Level <DebugLevel>] [console]",      "Get/Set debug level for file or console\n"},
> +    {1, "  Locks",                              "Current status of internal mutexes\n"},
> +    {1, "  Osi [Install|Remove <name>]",        "Display or modify global _OSI list\n"},
> +    {1, "  Quit or Exit",                       "Exit this command\n"},
> +    {8, "  Stats <SubCommand>",                 "Display namespace and memory statistics\n"},
> +    {1, "     Allocations",                     "Display list of current memory allocations\n"},
> +    {1, "     Memory",                          "Dump internal memory lists\n"},
> +    {1, "     Misc",                            "Namespace search and mutex stats\n"},
> +    {1, "     Objects",                         "Summary of namespace objects\n"},
> +    {1, "     Sizes",                           "Sizes for each of the internal objects\n"},
> +    {1, "     Stack",                           "Display CPU stack usage\n"},
> +    {1, "     Tables",                          "Info about current ACPI table(s)\n"},
> +    {1, "  Tables",                             "Display info about loaded ACPI tables\n"},
> +#ifdef ACPI_APPLICATION
> +    {1, "  Terminate",                          "Delete namespace and all internal objects\n"},
> +#endif
> +    {1, "  ! <CommandNumber>",                  "Execute command from history buffer\n"},
> +    {1, "  !!",                                 "Execute last command again\n"},
> +
> +    {0, "\nMethod and Namespace Debugging:",    "\n"},
> +    {5, "  Trace <State> [<Namepath>] [Once]",  "Trace control method execution\n"},
> +    {1, "     Enable",                          "Enable all messages\n"},
> +    {1, "     Disable",                         "Disable tracing\n"},
> +    {1, "     Method",                          "Enable method execution messages\n"},
> +    {1, "     Opcode",                          "Enable opcode execution messages\n"},
> +    {3, "  Test <TestName>",                    "Invoke a debug test\n"},
> +    {1, "     Objects",                         "Read/write/compare all namespace data objects\n"},
> +    {1, "     Predefined",                      "Validate all ACPI predefined names (_STA, etc.)\n"},
> +    {1, "  Execute predefined",                 "Execute all predefined (public) methods\n"},
> +
> +    {0, "\nControl Method Single-Step Execution:","\n"},
> +    {1, "  Arguments (or Args)",                "Display method arguments\n"},
> +    {1, "  Breakpoint <AmlOffset>",             "Set an AML execution breakpoint\n"},
> +    {1, "  Call",                               "Run to next control method invocation\n"},
> +    {1, "  Go",                                 "Allow method to run to completion\n"},
> +    {1, "  Information",                        "Display info about the current method\n"},
> +    {1, "  Into",                               "Step into (not over) a method call\n"},
> +    {1, "  List [# of Aml Opcodes]",            "Display method ASL statements\n"},
> +    {1, "  Locals",                             "Display method local variables\n"},
> +    {1, "  Results",                            "Display method result stack\n"},
> +    {1, "  Set <A|L> <#> <Value>",              "Set method data (Arguments/Locals)\n"},
> +    {1, "  Stop",                               "Terminate control method\n"},
> +    {1, "  Tree",                               "Display control method calling tree\n"},
> +    {1, "  <Enter>",                            "Single step next AML opcode (over calls)\n"},
>   
>   #ifdef ACPI_APPLICATION
> -    {0, "\nHardware Simulation Commands:",         "\n"},
> -    {1, "  EnableAcpi",                        "Enable ACPI (hardware) mode\n"},
> -    {1, "  Event <F|G> <Value>",               "Generate AcpiEvent (Fixed/GPE)\n"},
> -    {1, "  Gpe <GpeNum> [GpeBlockDevice]",     "Simulate a GPE\n"},
> -    {1, "  Gpes",                              "Display info on all GPE devices\n"},
> -    {1, "  Sci",                               "Generate an SCI\n"},
> -    {1, "  Sleep [SleepState]",                "Simulate sleep/wake sequence(s) (0-5)\n"},
> -
> -    {0, "\nFile I/O Commands:",                "\n"},
> -    {1, "  Close",                             "Close debug output file\n"},
> -    {1, "  Load <Input Filename>",             "Load ACPI table from a file\n"},
> -    {1, "  Open <Output Filename>",            "Open a file for debug output\n"},
> -    {1, "  Unload <Namepath>",                 "Unload an ACPI table via namespace object\n"},
> -
> -    {0, "\nUser Space Commands:",              "\n"},
> -    {1, "  Terminate",                         "Delete namespace and all internal objects\n"},
> -    {1, "  Thread <Threads><Loops><NamePath>", "Spawn threads to execute method(s)\n"},
> -
> -    {0, "\nDebug Test Commands:",              "\n"},
> -    {3, "  Test <TestName>",                   "Invoke a debug test\n"},
> -    {1, "     Objects",                        "Read/write/compare all namespace data objects\n"},
> -    {1, "     Predefined",                     "Execute all ACPI predefined names (_STA, etc.)\n"},
> +    {0, "\nFile Operations:",                   "\n"},
> +    {1, "  Close",                              "Close debug output file\n"},
> +    {1, "  Load <Input Filename>",              "Load ACPI table from a file\n"},
> +    {1, "  Open <Output Filename>",             "Open a file for debug output\n"},
> +    {1, "  Unload <Namepath>",                  "Unload an ACPI table via namespace object\n"},
> +
> +    {0, "\nHardware Simulation:",               "\n"},
> +    {1, "  EnableAcpi",                         "Enable ACPI (hardware) mode\n"},
> +    {1, "  Event <F|G> <Value>",                "Generate AcpiEvent (Fixed/GPE)\n"},
> +    {1, "  Gpe <GpeNum> [GpeBlockDevice]",      "Simulate a GPE\n"},
> +    {1, "  Gpes",                               "Display info on all GPE devices\n"},
> +    {1, "  Sci",                                "Generate an SCI\n"},
> +    {1, "  Sleep [SleepState]",                 "Simulate sleep/wake sequence(s) (0-5)\n"},
>   #endif
>       {0, NULL, NULL}
>   };
> @@ -571,11 +584,15 @@ AcpiDbDisplayHelp (
>       {
>           /* No argument to help, display help for all commands */
>   
> +        AcpiOsPrintf ("\nSummary of AML Debugger Commands\n\n");
> +
>           while (Next->Invocation)
>           {
>               AcpiOsPrintf ("%-38s%s", Next->Invocation, Next->Description);
>               Next++;
>           }
> +        AcpiOsPrintf ("\n");
> +
>       }
>       else
>       {
> @@ -1258,6 +1275,12 @@ AcpiDbCommandDispatch (
>           /*  AcpiInitialize (NULL);  */
>           break;
>   
> +    case CMD_BACKGROUND:
> +
> +        AcpiDbCreateExecutionThread (AcpiGbl_DbArgs[1], &AcpiGbl_DbArgs[2],
> +            &AcpiGbl_DbArgTypes[2]);
> +        break;
> +
>       case CMD_THREADS:
>   
>           AcpiDbCreateExecutionThreads (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2],
> diff --git a/src/acpica/source/components/dispatcher/dsfield.c b/src/acpica/source/components/dispatcher/dsfield.c
> index fe9d0605..08ae5caf 100644
> --- a/src/acpica/source/components/dispatcher/dsfield.c
> +++ b/src/acpica/source/components/dispatcher/dsfield.c
> @@ -340,7 +340,8 @@ AcpiDsCreateBufferField (
>               ACPI_IMODE_LOAD_PASS1, Flags, WalkState, &Node);
>           if (ACPI_FAILURE (Status))
>           {
> -            ACPI_ERROR_NAMESPACE (Arg->Common.Value.String, Status);
> +            ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo,
> +                Arg->Common.Value.String, Status);
>               return_ACPI_STATUS (Status);
>           }
>       }
> @@ -524,7 +525,8 @@ AcpiDsGetFieldNames (
>                       WalkState, &Info->ConnectionNode);
>                   if (ACPI_FAILURE (Status))
>                   {
> -                    ACPI_ERROR_NAMESPACE (Child->Common.Value.Name, Status);
> +                    ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo,
> +                        Child->Common.Value.Name, Status);
>                       return_ACPI_STATUS (Status);
>                   }
>               }
> @@ -540,7 +542,8 @@ AcpiDsGetFieldNames (
>                   WalkState, &Info->FieldNode);
>               if (ACPI_FAILURE (Status))
>               {
> -                ACPI_ERROR_NAMESPACE ((char *) &Arg->Named.Name, Status);
> +                ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo,
> +                    (char *) &Arg->Named.Name, Status);
>                   return_ACPI_STATUS (Status);
>               }
>               else
> @@ -639,7 +642,8 @@ AcpiDsCreateField (
>   #endif
>           if (ACPI_FAILURE (Status))
>           {
> -            ACPI_ERROR_NAMESPACE (Arg->Common.Value.Name, Status);
> +            ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo,
> +                Arg->Common.Value.Name, Status);
>               return_ACPI_STATUS (Status);
>           }
>       }
> @@ -769,7 +773,8 @@ AcpiDsInitFieldObjects (
>                   Flags, WalkState, &Node);
>               if (ACPI_FAILURE (Status))
>               {
> -                ACPI_ERROR_NAMESPACE ((char *) &Arg->Named.Name, Status);
> +                ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo,
> +                    (char *) &Arg->Named.Name, Status);
>                   if (Status != AE_ALREADY_EXISTS)
>                   {
>                       return_ACPI_STATUS (Status);
> @@ -834,7 +839,8 @@ AcpiDsCreateBankField (
>   #endif
>           if (ACPI_FAILURE (Status))
>           {
> -            ACPI_ERROR_NAMESPACE (Arg->Common.Value.Name, Status);
> +            ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo,
> +                Arg->Common.Value.Name, Status);
>               return_ACPI_STATUS (Status);
>           }
>       }
> @@ -847,7 +853,8 @@ AcpiDsCreateBankField (
>           ACPI_NS_SEARCH_PARENT, WalkState, &Info.RegisterNode);
>       if (ACPI_FAILURE (Status))
>       {
> -        ACPI_ERROR_NAMESPACE (Arg->Common.Value.String, Status);
> +        ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo,
> +            Arg->Common.Value.String, Status);
>           return_ACPI_STATUS (Status);
>       }
>   
> @@ -920,7 +927,8 @@ AcpiDsCreateIndexField (
>           ACPI_NS_SEARCH_PARENT, WalkState, &Info.RegisterNode);
>       if (ACPI_FAILURE (Status))
>       {
> -        ACPI_ERROR_NAMESPACE (Arg->Common.Value.String, Status);
> +        ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo,
> +            Arg->Common.Value.String, Status);
>           return_ACPI_STATUS (Status);
>       }
>   
> @@ -932,7 +940,8 @@ AcpiDsCreateIndexField (
>           ACPI_NS_SEARCH_PARENT, WalkState, &Info.DataRegisterNode);
>       if (ACPI_FAILURE (Status))
>       {
> -        ACPI_ERROR_NAMESPACE (Arg->Common.Value.String, Status);
> +        ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo,
> +            Arg->Common.Value.String, Status);
>           return_ACPI_STATUS (Status);
>       }
>   
> diff --git a/src/acpica/source/components/dispatcher/dsobject.c b/src/acpica/source/components/dispatcher/dsobject.c
> index 4cbd8f78..81dba555 100644
> --- a/src/acpica/source/components/dispatcher/dsobject.c
> +++ b/src/acpica/source/components/dispatcher/dsobject.c
> @@ -223,7 +223,8 @@ AcpiDsBuildInternalObject (
>                           ACPI_NAMESPACE_NODE, &(Op->Common.Node)));
>                   if (ACPI_FAILURE (Status))
>                   {
> -                    ACPI_ERROR_NAMESPACE (Op->Common.Value.String, Status);
> +                    ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo,
> +                        Op->Common.Value.String, Status);
>                       return_ACPI_STATUS (Status);
>                   }
>               }
> diff --git a/src/acpica/source/components/dispatcher/dsutils.c b/src/acpica/source/components/dispatcher/dsutils.c
> index 4688e16e..710c0b3c 100644
> --- a/src/acpica/source/components/dispatcher/dsutils.c
> +++ b/src/acpica/source/components/dispatcher/dsutils.c
> @@ -732,7 +732,8 @@ AcpiDsCreateOperand (
>   
>               if (ACPI_FAILURE (Status))
>               {
> -                ACPI_ERROR_NAMESPACE (NameString, Status);
> +                ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo,
> +                    NameString, Status);
>               }
>           }
>   
> diff --git a/src/acpica/source/components/dispatcher/dswload.c b/src/acpica/source/components/dispatcher/dswload.c
> index 8793c0ed..1ee7dd64 100644
> --- a/src/acpica/source/components/dispatcher/dswload.c
> +++ b/src/acpica/source/components/dispatcher/dswload.c
> @@ -325,7 +325,7 @@ AcpiDsLoad1BeginOp (
>   #endif
>           if (ACPI_FAILURE (Status))
>           {
> -            ACPI_ERROR_NAMESPACE (Path, Status);
> +            ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, Path, Status);
>               return_ACPI_STATUS (Status);
>           }
>   
> @@ -495,7 +495,7 @@ AcpiDsLoad1BeginOp (
>   
>               if (ACPI_FAILURE (Status))
>               {
> -                ACPI_ERROR_NAMESPACE (Path, Status);
> +                ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, Path, Status);
>                   return_ACPI_STATUS (Status);
>               }
>           }
> diff --git a/src/acpica/source/components/dispatcher/dswload2.c b/src/acpica/source/components/dispatcher/dswload2.c
> index 184f6aa3..36885b97 100644
> --- a/src/acpica/source/components/dispatcher/dswload2.c
> +++ b/src/acpica/source/components/dispatcher/dswload2.c
> @@ -304,10 +304,12 @@ AcpiDsLoad2BeginOp (
>                   }
>                   else
>                   {
> -                    ACPI_ERROR_NAMESPACE (BufferPtr, Status);
> +                    ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo,
> +                        BufferPtr, Status);
>                   }
>   #else
> -                ACPI_ERROR_NAMESPACE (BufferPtr, Status);
> +                ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo,
> +                    BufferPtr, Status);
>   #endif
>                   return_ACPI_STATUS (Status);
>               }
> @@ -462,7 +464,8 @@ AcpiDsLoad2BeginOp (
>   
>       if (ACPI_FAILURE (Status))
>       {
> -        ACPI_ERROR_NAMESPACE (BufferPtr, Status);
> +        ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo,
> +            BufferPtr, Status);
>           return_ACPI_STATUS (Status);
>       }
>   
> @@ -844,7 +847,8 @@ AcpiDsLoad2EndOp (
>           }
>           else
>           {
> -            ACPI_ERROR_NAMESPACE (Arg->Common.Value.String, Status);
> +            ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo,
> +                Arg->Common.Value.String, Status);
>           }
>           break;
>   
> diff --git a/src/acpica/source/components/events/evregion.c b/src/acpica/source/components/events/evregion.c
> index 454b26e9..88edc2d6 100644
> --- a/src/acpica/source/components/events/evregion.c
> +++ b/src/acpica/source/components/events/evregion.c
> @@ -423,6 +423,17 @@ AcpiEvAddressSpaceDispatch (
>       {
>           ACPI_EXCEPTION ((AE_INFO, Status, "Returned by Handler for [%s]",
>               AcpiUtGetRegionName (RegionObj->Region.SpaceId)));
> +
> +        /*
> +         * Special case for an EC timeout. These are seen so frequently
> +         * that an additional error message is helpful
> +         */
> +        if ((RegionObj->Region.SpaceId == ACPI_ADR_SPACE_EC) &&
> +            (Status == AE_TIME))
> +        {
> +            ACPI_ERROR ((AE_INFO,
> +                "Timeout from EC hardware or EC device driver"));
> +        }
>       }
>   
>       if (!(HandlerDesc->AddressSpace.HandlerFlags &
> diff --git a/src/acpica/source/components/namespace/nsconvert.c b/src/acpica/source/components/namespace/nsconvert.c
> index bb825895..9245beed 100644
> --- a/src/acpica/source/components/namespace/nsconvert.c
> +++ b/src/acpica/source/components/namespace/nsconvert.c
> @@ -644,7 +644,8 @@ AcpiNsConvertToReference (
>       {
>           /* Check if we are resolving a named reference within a package */
>   
> -        ACPI_ERROR_NAMESPACE (OriginalObject->String.Pointer, Status);
> +        ACPI_ERROR_NAMESPACE (&ScopeInfo,
> +            OriginalObject->String.Pointer, Status);
>           goto ErrorExit;
>       }
>   
> diff --git a/src/acpica/source/components/namespace/nsnames.c b/src/acpica/source/components/namespace/nsnames.c
> index fb74c44c..bfe27007 100644
> --- a/src/acpica/source/components/namespace/nsnames.c
> +++ b/src/acpica/source/components/namespace/nsnames.c
> @@ -158,6 +158,12 @@
>   #define _COMPONENT          ACPI_NAMESPACE
>           ACPI_MODULE_NAME    ("nsnames")
>   
> +/* Local Prototypes */
> +
> +static void
> +AcpiNsNormalizePathname (
> +    char                    *OriginalPath);
> +
>   
>   /*******************************************************************************
>    *
> @@ -507,3 +513,169 @@ AcpiNsGetNormalizedPathname (
>   
>       return_PTR (NameBuffer);
>   }
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiNsBuildPrefixedPathname
> + *
> + * PARAMETERS:  PrefixScope         - Scope/Path that prefixes the internal path
> + *              InternalPath        - Name or path of the namespace node
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Construct a fully qualified pathname from a concatenation of:
> + *              1) Path associated with the PrefixScope namespace node
> + *              2) External path representation of the Internal path
> + *
> + ******************************************************************************/
> +
> +char *
> +AcpiNsBuildPrefixedPathname (
> +    ACPI_GENERIC_STATE      *PrefixScope,
> +    const char              *InternalPath)
> +{
> +    ACPI_STATUS             Status;
> +    char                    *FullPath = NULL;
> +    char                    *ExternalPath = NULL;
> +    char                    *PrefixPath = NULL;
> +    UINT32                  PrefixPathLength = 0;
> +
> +
> +    /* If there is a prefix, get the pathname to it */
> +
> +    if (PrefixScope && PrefixScope->Scope.Node)
> +    {
> +        PrefixPath = AcpiNsGetNormalizedPathname (PrefixScope->Scope.Node, TRUE);
> +        if (PrefixPath)
> +        {
> +            PrefixPathLength = strlen (PrefixPath);
> +        }
> +    }
> +
> +    Status = AcpiNsExternalizeName (ACPI_UINT32_MAX, InternalPath,
> +        NULL, &ExternalPath);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        goto Cleanup;
> +    }
> +
> +    /* Merge the prefix path and the path. 2 is for one dot and trailing null */
> +
> +    FullPath = ACPI_ALLOCATE_ZEROED (
> +        PrefixPathLength + strlen (ExternalPath) + 2);
> +    if (!FullPath)
> +    {
> +        goto Cleanup;
> +    }
> +
> +    /* Don't merge if the External path is already fully qualified */
> +
> +    if (PrefixPath &&
> +        (*ExternalPath != '\\') &&
> +        (*ExternalPath != '^'))
> +    {
> +        strcat (FullPath, PrefixPath);
> +        if (PrefixPath[1])
> +        {
> +            strcat (FullPath, ".");
> +        }
> +    }
> +
> +    AcpiNsNormalizePathname (ExternalPath);
> +    strcat (FullPath, ExternalPath);
> +
> +Cleanup:
> +    if (PrefixPath)
> +    {
> +        ACPI_FREE (PrefixPath);
> +    }
> +    if (ExternalPath)
> +    {
> +        ACPI_FREE (ExternalPath);
> +    }
> +
> +    return (FullPath);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiNsNormalizePathname
> + *
> + * PARAMETERS:  OriginalPath        - Path to be normalized, in External format
> + *
> + * RETURN:      The original path is processed in-place
> + *
> + * DESCRIPTION: Remove trailing underscores from each element of a path.
> + *
> + *              For example:  \A___.B___.C___ becomes \A.B.C
> + *
> + ******************************************************************************/
> +
> +static void
> +AcpiNsNormalizePathname (
> +    char                    *OriginalPath)
> +{
> +    char                    *InputPath = OriginalPath;
> +    char                    *NewPathBuffer;
> +    char                    *NewPath;
> +    UINT32                  i;
> +
> +
> +    /* Allocate a temp buffer in which to construct the new path */
> +
> +    NewPathBuffer = ACPI_ALLOCATE_ZEROED (strlen (InputPath) + 1);
> +    NewPath = NewPathBuffer;
> +    if (!NewPathBuffer)
> +    {
> +        return;
> +    }
> +
> +    /* Special characters may appear at the beginning of the path */
> +
> +    if (*InputPath == '\\')
> +    {
> +        *NewPath = *InputPath;
> +        NewPath++;
> +        InputPath++;
> +    }
> +
> +    while (*InputPath == '^')
> +    {
> +        *NewPath = *InputPath;
> +        NewPath++;
> +        InputPath++;
> +    }
> +
> +    /* Remainder of the path */
> +
> +    while (*InputPath)
> +    {
> +        /* Do one nameseg at a time */
> +
> +        for (i = 0; (i < ACPI_NAME_SIZE) && *InputPath; i++)
> +        {
> +            if ((i == 0) || (*InputPath != '_')) /* First char is allowed to be underscore */
> +            {
> +                *NewPath = *InputPath;
> +                NewPath++;
> +            }
> +
> +            InputPath++;
> +        }
> +
> +        /* Dot means that there are more namesegs to come */
> +
> +        if (*InputPath == '.')
> +        {
> +            *NewPath = *InputPath;
> +            NewPath++;
> +            InputPath++;
> +        }
> +    }
> +
> +    *NewPath = 0;
> +    strcpy (OriginalPath, NewPathBuffer);
> +    ACPI_FREE (NewPathBuffer);
> +}
> diff --git a/src/acpica/source/components/parser/psargs.c b/src/acpica/source/components/parser/psargs.c
> index baa60f26..bc3f5ce4 100644
> --- a/src/acpica/source/components/parser/psargs.c
> +++ b/src/acpica/source/components/parser/psargs.c
> @@ -500,7 +500,7 @@ AcpiPsGetNextNamepath (
>   
>       if (ACPI_FAILURE (Status))
>       {
> -        ACPI_ERROR_NAMESPACE (Path, Status);
> +        ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, Path, Status);
>   
>           if ((WalkState->ParseFlags & ACPI_PARSE_MODE_MASK) ==
>               ACPI_PARSE_EXECUTE)
> diff --git a/src/acpica/source/components/utilities/utdecode.c b/src/acpica/source/components/utilities/utdecode.c
> index 7cb171bc..5c42badf 100644
> --- a/src/acpica/source/components/utilities/utdecode.c
> +++ b/src/acpica/source/components/utilities/utdecode.c
> @@ -558,11 +558,6 @@ AcpiUtGetReferenceName (
>   }
>   
>   
> -#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
> -/*
> - * Strings and procedures used for debug only
> - */
> -
>   /*******************************************************************************
>    *
>    * FUNCTION:    AcpiUtGetMutexName
> @@ -601,6 +596,12 @@ AcpiUtGetMutexName (
>   }
>   
>   
> +#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
> +
> +/*
> + * Strings and procedures used for debug only
> + */
> +
>   /*******************************************************************************
>    *
>    * FUNCTION:    AcpiUtGetNotifyName
> diff --git a/src/acpica/source/components/utilities/uterror.c b/src/acpica/source/components/utilities/uterror.c
> index a429a7f4..28ad2e32 100644
> --- a/src/acpica/source/components/utilities/uterror.c
> +++ b/src/acpica/source/components/utilities/uterror.c
> @@ -311,6 +311,82 @@ AcpiUtPredefinedBiosError (
>   }
>   
>   
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiUtPrefixedNamespaceError
> + *
> + * PARAMETERS:  ModuleName          - Caller's module name (for error output)
> + *              LineNumber          - Caller's line number (for error output)
> + *              PrefixScope         - Scope/Path that prefixes the internal path
> + *              InternalPath        - Name or path of the namespace node
> + *              LookupStatus        - Exception code from NS lookup
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Print error message with the full pathname constructed this way:
> + *
> + *                  PrefixScopeNodeFullPath.ExternalizedInternalPath
> + *
> + * NOTE:        10/2017: Treat the major NsLookup errors as firmware errors
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiUtPrefixedNamespaceError (
> +    const char              *ModuleName,
> +    UINT32                  LineNumber,
> +    ACPI_GENERIC_STATE      *PrefixScope,
> +    const char              *InternalPath,
> +    ACPI_STATUS             LookupStatus)
> +{
> +    char                    *FullPath;
> +    const char              *Message;
> +
> +
> +    /*
> +     * Main cases:
> +     * 1) Object creation, object must not already exist
> +     * 2) Object lookup, object must exist
> +     */
> +    switch (LookupStatus)
> +    {
> +    case AE_ALREADY_EXISTS:
> +
> +        AcpiOsPrintf (ACPI_MSG_BIOS_ERROR);
> +        Message = "Failure creating";
> +        break;
> +
> +    case AE_NOT_FOUND:
> +
> +        AcpiOsPrintf (ACPI_MSG_BIOS_ERROR);
> +        Message = "Failure looking up";
> +        break;
> +
> +    default:
> +
> +        AcpiOsPrintf (ACPI_MSG_ERROR);
> +        Message = "Failure looking up";
> +        break;
> +    }
> +
> +    /* Concatenate the prefix path and the internal path */
> +
> +    FullPath = AcpiNsBuildPrefixedPathname (PrefixScope, InternalPath);
> +
> +    AcpiOsPrintf ("%s [%s], %s", Message,
> +        FullPath ? FullPath : "Could not get pathname",
> +        AcpiFormatException (LookupStatus));
> +
> +    if (FullPath)
> +    {
> +        ACPI_FREE (FullPath);
> +    }
> +
> +    ACPI_MSG_SUFFIX;
> +}
> +
> +
> +#ifdef __OBSOLETE_FUNCTION
>   /*******************************************************************************
>    *
>    * FUNCTION:    AcpiUtNamespaceError
> @@ -378,7 +454,7 @@ AcpiUtNamespaceError (
>       ACPI_MSG_SUFFIX;
>       ACPI_MSG_REDIRECT_END;
>   }
> -
> +#endif
>   
>   /*******************************************************************************
>    *
> diff --git a/src/acpica/source/components/utilities/utmutex.c b/src/acpica/source/components/utilities/utmutex.c
> index 7297929c..503dc508 100644
> --- a/src/acpica/source/components/utilities/utmutex.c
> +++ b/src/acpica/source/components/utilities/utmutex.c
> @@ -432,8 +432,8 @@ AcpiUtAcquireMutex (
>       else
>       {
>           ACPI_EXCEPTION ((AE_INFO, Status,
> -            "Thread %u could not acquire Mutex [0x%X]",
> -            (UINT32) ThisThreadId, MutexId));
> +            "Thread %u could not acquire Mutex [%s] (0x%X)",
> +            (UINT32) ThisThreadId, AcpiUtGetMutexName (MutexId), MutexId));
>       }
>   
>       return (Status);
> @@ -473,7 +473,8 @@ AcpiUtReleaseMutex (
>       if (AcpiGbl_MutexInfo[MutexId].ThreadId == ACPI_MUTEX_NOT_ACQUIRED)
>       {
>           ACPI_ERROR ((AE_INFO,
> -            "Mutex [0x%X] is not acquired, cannot release", MutexId));
> +            "Mutex [%s] (0x%X) is not acquired, cannot release",
> +            AcpiUtGetMutexName (MutexId), MutexId));
>   
>           return (AE_NOT_ACQUIRED);
>       }
> diff --git a/src/acpica/source/components/utilities/utstrsuppt.c b/src/acpica/source/components/utilities/utstrsuppt.c
> index 9197a57a..bdb2f4fa 100644
> --- a/src/acpica/source/components/utilities/utstrsuppt.c
> +++ b/src/acpica/source/components/utilities/utstrsuppt.c
> @@ -167,13 +167,13 @@ AcpiUtInsertDigit (
>   static ACPI_STATUS
>   AcpiUtStrtoulMultiply64 (
>       UINT64                  Multiplicand,
> -    UINT64                  Multiplier,
> +    UINT32                  Base,
>       UINT64                  *OutProduct);
>   
>   static ACPI_STATUS
>   AcpiUtStrtoulAdd64 (
>       UINT64                  Addend1,
> -    UINT64                  Addend2,
> +    UINT32                  Digit,
>       UINT64                  *OutSum);
>   
>   
> @@ -518,7 +518,7 @@ AcpiUtInsertDigit (
>    * FUNCTION:    AcpiUtStrtoulMultiply64
>    *
>    * PARAMETERS:  Multiplicand            - Current accumulated converted integer
> - *              Multiplier              - Base/Radix
> + *              Base                    - Base/Radix
>    *              OutProduct              - Where the product is returned
>    *
>    * RETURN:      Status and 64-bit product
> @@ -532,28 +532,36 @@ AcpiUtInsertDigit (
>   static ACPI_STATUS
>   AcpiUtStrtoulMultiply64 (
>       UINT64                  Multiplicand,
> -    UINT64                  Multiplier,
> +    UINT32                  Base,
>       UINT64                  *OutProduct)
>   {
>       UINT64                  Product;
> +    UINT64                  Quotient;
>   
>   
>       /* Exit if either operand is zero */
>   
>       *OutProduct = 0;
> -    if (!Multiplicand || !Multiplier)
> +    if (!Multiplicand || !Base)
>       {
>           return (AE_OK);
>       }
>   
> -    /* Check for 64-bit overflow before the actual multiplication */
> -
> -    if (Multiplicand > (ACPI_UINT64_MAX / Multiplier))
> +    /*
> +     * Check for 64-bit overflow before the actual multiplication.
> +     *
> +     * Notes: 64-bit division is often not supported on 32-bit platforms
> +     * (it requires a library function), Therefore ACPICA has a local
> +     * 64-bit divide function. Also, Multiplier is currently only used
> +     * as the radix (8/10/16), to the 64/32 divide will always work.
> +     */
> +    AcpiUtShortDivide (ACPI_UINT64_MAX, Base, &Quotient, NULL);
> +    if (Multiplicand > Quotient)
>       {
>           return (AE_NUMERIC_OVERFLOW);
>       }
>   
> -    Product = Multiplicand * Multiplier;
> +    Product = Multiplicand * Base;
>   
>       /* Check for 32-bit overflow if necessary */
>   
> @@ -572,7 +580,7 @@ AcpiUtStrtoulMultiply64 (
>    * FUNCTION:    AcpiUtStrtoulAdd64
>    *
>    * PARAMETERS:  Addend1                 - Current accumulated converted integer
> - *              Addend2                 - New hex value/char
> + *              Digit                   - New hex value/char
>    *              OutSum                  - Where sum is returned (Accumulator)
>    *
>    * RETURN:      Status and 64-bit sum
> @@ -586,7 +594,7 @@ AcpiUtStrtoulMultiply64 (
>   static ACPI_STATUS
>   AcpiUtStrtoulAdd64 (
>       UINT64                  Addend1,
> -    UINT64                  Addend2,
> +    UINT32                  Digit,
>       UINT64                  *OutSum)
>   {
>       UINT64                  Sum;
> @@ -594,12 +602,12 @@ AcpiUtStrtoulAdd64 (
>   
>       /* Check for 64-bit overflow before the actual addition */
>   
> -    if ((Addend1 > 0) && (Addend2 > (ACPI_UINT64_MAX - Addend1)))
> +    if ((Addend1 > 0) && (Digit > (ACPI_UINT64_MAX - Addend1)))
>       {
>           return (AE_NUMERIC_OVERFLOW);
>       }
>   
> -    Sum = Addend1 + Addend2;
> +    Sum = Addend1 + Digit;
>   
>       /* Check for 32-bit overflow if necessary */
>   
> diff --git a/src/acpica/source/components/utilities/uttrack.c b/src/acpica/source/components/utilities/uttrack.c
> index a88a4a3d..e74ff066 100644
> --- a/src/acpica/source/components/utilities/uttrack.c
> +++ b/src/acpica/source/components/utilities/uttrack.c
> @@ -891,7 +891,7 @@ Exit:
>       }
>       else
>       {
> -        ACPI_ERROR ((AE_INFO, "%u(0x%X) Outstanding allocations",
> +        ACPI_ERROR ((AE_INFO, "%u (0x%X) Outstanding cache allocations",
>               NumOutstanding, NumOutstanding));
>       }
>   
> diff --git a/src/acpica/source/components/utilities/utxferror.c b/src/acpica/source/components/utilities/utxferror.c
> index a81352b9..95cb4509 100644
> --- a/src/acpica/source/components/utilities/utxferror.c
> +++ b/src/acpica/source/components/utilities/utxferror.c
> @@ -214,8 +214,8 @@ ACPI_EXPORT_SYMBOL (AcpiError)
>    *
>    * RETURN:      None
>    *
> - * DESCRIPTION: Print "ACPI Exception" message with module/line/version info
> - *              and decoded ACPI_STATUS.
> + * DESCRIPTION: Print an "ACPI Error" message with module/line/version
> + *              info as well as decoded ACPI_STATUS.
>    *
>    ******************************************************************************/
>   
> @@ -236,12 +236,12 @@ AcpiException (
>   
>       if (ACPI_SUCCESS (Status))
>       {
> -        AcpiOsPrintf (ACPI_MSG_EXCEPTION);
> +        AcpiOsPrintf (ACPI_MSG_ERROR);
>   
>       }
>       else
>       {
> -        AcpiOsPrintf (ACPI_MSG_EXCEPTION "%s, ",
> +        AcpiOsPrintf (ACPI_MSG_ERROR "%s, ",
>               AcpiFormatException (Status));
>       }
>   
> diff --git a/src/acpica/source/include/acdebug.h b/src/acpica/source/include/acdebug.h
> index a1bc5426..f12c75d7 100644
> --- a/src/acpica/source/include/acdebug.h
> +++ b/src/acpica/source/include/acdebug.h
> @@ -451,6 +451,12 @@ AcpiDbExecute (
>       ACPI_OBJECT_TYPE        *Types,
>       UINT32                  Flags);
>   
> +void
> +AcpiDbCreateExecutionThread (
> +    char                    *MethodNameArg,
> +    char                    **Arguments,
> +    ACPI_OBJECT_TYPE        *Types);
> +
>   void
>   AcpiDbCreateExecutionThreads (
>       char                    *NumThreadsArg,
> diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h
> index 0c465602..d8ed7168 100644
> --- a/src/acpica/source/include/acdisasm.h
> +++ b/src/acpica/source/include/acdisasm.h
> @@ -504,6 +504,7 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNfit4[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNfit5[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNfit6[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNfit6a[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoNfit7[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPdtt[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPmtt[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPmtt0[];
> diff --git a/src/acpica/source/include/aclocal.h b/src/acpica/source/include/aclocal.h
> index 7a20fe6f..5ad31902 100644
> --- a/src/acpica/source/include/aclocal.h
> +++ b/src/acpica/source/include/aclocal.h
> @@ -1532,16 +1532,17 @@ typedef struct acpi_db_method_info
>       ACPI_OBJECT_TYPE                *Types;
>   
>       /*
> -     * Arguments to be passed to method for the command
> -     * Threads -
> -     *   the Number of threads, ID of current thread and
> -     *   Index of current thread inside all them created.
> +     * Arguments to be passed to method for the commands Threads and
> +     * Background. Note, ACPI specifies a maximum of 7 arguments (0 - 6).
> +     *
> +     * For the Threads command, the Number of threads, ID of current
> +     * thread and Index of current thread inside all them created.
>        */
>       char                            InitArgs;
>   #ifdef ACPI_DEBUGGER
> -    ACPI_OBJECT_TYPE                ArgTypes[4];
> +    ACPI_OBJECT_TYPE                ArgTypes[ACPI_METHOD_NUM_ARGS];
>   #endif
> -    char                            *Arguments[4];
> +    char                            *Arguments[ACPI_METHOD_NUM_ARGS];
>       char                            NumThreadsStr[11];
>       char                            IdOfThreadStr[11];
>       char                            IndexOfThreadStr[11];
> diff --git a/src/acpica/source/include/acmacros.h b/src/acpica/source/include/acmacros.h
> index 9d7ed06d..feb45937 100644
> --- a/src/acpica/source/include/acmacros.h
> +++ b/src/acpica/source/include/acmacros.h
> @@ -567,7 +567,7 @@
>    * the plist contains a set of parens to allow variable-length lists.
>    * These macros are used for both the debug and non-debug versions of the code.
>    */
> -#define ACPI_ERROR_NAMESPACE(s, e)          AcpiUtNamespaceError (AE_INFO, s, e);
> +#define ACPI_ERROR_NAMESPACE(s, p, e)       AcpiUtPrefixedNamespaceError (AE_INFO, s, p, e);
>   #define ACPI_ERROR_METHOD(s, n, p, e)       AcpiUtMethodError (AE_INFO, s, n, p, e);
>   #define ACPI_WARN_PREDEFINED(plist)         AcpiUtPredefinedWarning plist
>   #define ACPI_INFO_PREDEFINED(plist)         AcpiUtPredefinedInfo plist
> diff --git a/src/acpica/source/include/acnamesp.h b/src/acpica/source/include/acnamesp.h
> index 990309eb..43402719 100644
> --- a/src/acpica/source/include/acnamesp.h
> +++ b/src/acpica/source/include/acnamesp.h
> @@ -488,6 +488,11 @@ AcpiNsGetNormalizedPathname (
>       ACPI_NAMESPACE_NODE     *Node,
>       BOOLEAN                 NoTrailing);
>   
> +char *
> +AcpiNsBuildPrefixedPathname (
> +    ACPI_GENERIC_STATE      *PrefixScope,
> +    const char              *InternalPath);
> +
>   char *
>   AcpiNsNameOfCurrentScope (
>       ACPI_WALK_STATE         *WalkState);
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index bd5fde17..3af2a137 100644
> --- a/src/acpica/source/include/acpixf.h
> +++ b/src/acpica/source/include/acpixf.h
> @@ -154,7 +154,7 @@
>   
>   /* Current ACPICA subsystem version in YYYYMMDD format */
>   
> -#define ACPI_CA_VERSION                 0x20170929
> +#define ACPI_CA_VERSION                 0x20171110
>   
>   #include "acconfig.h"
>   #include "actypes.h"
> diff --git a/src/acpica/source/include/actbl1.h b/src/acpica/source/include/actbl1.h
> index 7eed2c55..6d0f5c85 100644
> --- a/src/acpica/source/include/actbl1.h
> +++ b/src/acpica/source/include/actbl1.h
> @@ -1449,7 +1449,8 @@ enum AcpiNfitType
>       ACPI_NFIT_TYPE_CONTROL_REGION       = 4,
>       ACPI_NFIT_TYPE_DATA_REGION          = 5,
>       ACPI_NFIT_TYPE_FLUSH_ADDRESS        = 6,
> -    ACPI_NFIT_TYPE_RESERVED             = 7     /* 7 and greater are reserved */
> +    ACPI_NFIT_TYPE_CAPABILITIES         = 7,
> +    ACPI_NFIT_TYPE_RESERVED             = 8     /* 8 and greater are reserved */
>   };
>   
>   /*
> @@ -1463,7 +1464,7 @@ typedef struct acpi_nfit_system_address
>       ACPI_NFIT_HEADER        Header;
>       UINT16                  RangeIndex;
>       UINT16                  Flags;
> -    UINT32                  Reserved;           /* Reseved, must be zero */
> +    UINT32                  Reserved;           /* Reserved, must be zero */
>       UINT32                  ProximityDomain;
>       UINT8                   RangeGuid[16];
>       UINT64                  Address;
> @@ -1602,6 +1603,75 @@ typedef struct acpi_nfit_flush_address
>   } ACPI_NFIT_FLUSH_ADDRESS;
>   
>   
> +/* 7: Platform Capabilities Structure */
> +
> +typedef struct acpi_nfit_capabilities
> +{
> +    ACPI_NFIT_HEADER        Header;
> +    UINT8                   HighestCapability;
> +    UINT8                   Reserved[3];       /* Reserved, must be zero */
> +    UINT32                  Capabilities;
> +    UINT32                  Reserved2;
> +
> +} ACPI_NFIT_CAPABILITIES;
> +
> +/* Capabilities Flags */
> +
> +#define ACPI_NFIT_CAPABILITY_CACHE_FLUSH       (1)     /* 00: Cache Flush to NVDIMM capable */
> +#define ACPI_NFIT_CAPABILITY_MEM_FLUSH         (1<<1)  /* 01: Memory Flush to NVDIMM capable */
> +#define ACPI_NFIT_CAPABILITY_MEM_MIRRORING     (1<<2)  /* 02: Memory Mirroring capable */
> +
> +
> +/*
> + * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM
> + */
> +typedef struct nfit_device_handle
> +{
> +    UINT32                  Handle;
> +
> +} NFIT_DEVICE_HANDLE;
> +
> +/* Device handle construction and extraction macros */
> +
> +#define ACPI_NFIT_DIMM_NUMBER_MASK              0x0000000F
> +#define ACPI_NFIT_CHANNEL_NUMBER_MASK           0x000000F0
> +#define ACPI_NFIT_MEMORY_ID_MASK                0x00000F00
> +#define ACPI_NFIT_SOCKET_ID_MASK                0x0000F000
> +#define ACPI_NFIT_NODE_ID_MASK                  0x0FFF0000
> +
> +#define ACPI_NFIT_DIMM_NUMBER_OFFSET            0
> +#define ACPI_NFIT_CHANNEL_NUMBER_OFFSET         4
> +#define ACPI_NFIT_MEMORY_ID_OFFSET              8
> +#define ACPI_NFIT_SOCKET_ID_OFFSET              12
> +#define ACPI_NFIT_NODE_ID_OFFSET                16
> +
> +/* Macro to construct a NFIT/NVDIMM device handle */
> +
> +#define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \
> +    ((dimm)                                         | \
> +    ((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET)  | \
> +    ((memory)  << ACPI_NFIT_MEMORY_ID_OFFSET)       | \
> +    ((socket)  << ACPI_NFIT_SOCKET_ID_OFFSET)       | \
> +    ((node)    << ACPI_NFIT_NODE_ID_OFFSET))
> +
> +/* Macros to extract individual fields from a NFIT/NVDIMM device handle */
> +
> +#define ACPI_NFIT_GET_DIMM_NUMBER(handle) \
> +    ((handle) & ACPI_NFIT_DIMM_NUMBER_MASK)
> +
> +#define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \
> +    (((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET)
> +
> +#define ACPI_NFIT_GET_MEMORY_ID(handle) \
> +    (((handle) & ACPI_NFIT_MEMORY_ID_MASK)      >> ACPI_NFIT_MEMORY_ID_OFFSET)
> +
> +#define ACPI_NFIT_GET_SOCKET_ID(handle) \
> +    (((handle) & ACPI_NFIT_SOCKET_ID_MASK)      >> ACPI_NFIT_SOCKET_ID_OFFSET)
> +
> +#define ACPI_NFIT_GET_NODE_ID(handle) \
> +    (((handle) & ACPI_NFIT_NODE_ID_MASK)        >> ACPI_NFIT_NODE_ID_OFFSET)
> +
> +
>   /*******************************************************************************
>    *
>    * PDTT - Platform Debug Trigger Table (ACPI 6.2)
> @@ -1634,7 +1704,7 @@ typedef struct acpi_pdtt_channel
>   /* Flags for above */
>   
>   #define ACPI_PDTT_RUNTIME_TRIGGER           (1)
> -#define ACPI_PPTT_WAIT_COMPLETION           (1<<1)
> +#define ACPI_PDTT_WAIT_COMPLETION           (1<<1)
>   
>   
>   /*******************************************************************************
> @@ -1712,6 +1782,19 @@ typedef struct acpi_pptt_cache
>   #define ACPI_PPTT_MASK_CACHE_TYPE           (0x0C)  /* Cache type */
>   #define ACPI_PPTT_MASK_WRITE_POLICY         (0x10)  /* Write policy */
>   
> +/* Attributes describing cache */
> +#define ACPI_PPTT_CACHE_READ_ALLOCATE       (0x0)   /* Cache line is allocated on read */
> +#define ACPI_PPTT_CACHE_WRITE_ALLOCATE      (0x01)  /* Cache line is allocated on write */
> +#define ACPI_PPTT_CACHE_RW_ALLOCATE         (0x02)  /* Cache line is allocated on read and write */
> +#define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT     (0x03)  /* Alternate representation of above */
> +
> +#define ACPI_PPTT_CACHE_TYPE_DATA           (0x0)   /* Data cache */
> +#define ACPI_PPTT_CACHE_TYPE_INSTR          (1<<2)  /* Instruction cache */
> +#define ACPI_PPTT_CACHE_TYPE_UNIFIED        (2<<2)  /* Unified I & D cache */
> +#define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT    (3<<2)  /* Alternate representation of above */
> +
> +#define ACPI_PPTT_CACHE_POLICY_WB           (0x0)   /* Cache is write back */
> +#define ACPI_PPTT_CACHE_POLICY_WT           (1<<4)  /* Cache is write through */
>   
>   /* 2: ID Structure */
>   
> diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h
> index 02a897b0..cdf7ac06 100644
> --- a/src/acpica/source/include/actbl2.h
> +++ b/src/acpica/source/include/actbl2.h
> @@ -1048,6 +1048,7 @@ typedef struct acpi_iort_smmu_v3
>       UINT8                   Pxm;
>       UINT8                   Reserved1;
>       UINT16                  Reserved2;
> +    UINT32                  IdMappingIndex;
>   
>   } ACPI_IORT_SMMU_V3;
>   
> diff --git a/src/acpica/source/include/acutils.h b/src/acpica/source/include/acutils.h
> index a3f0150b..ff9f72db 100644
> --- a/src/acpica/source/include/acutils.h
> +++ b/src/acpica/source/include/acutils.h
> @@ -227,9 +227,6 @@ extern const char                       *AcpiGbl_PtypDecode[];
>   #ifndef ACPI_MSG_ERROR
>   #define ACPI_MSG_ERROR          "ACPI Error: "
>   #endif
> -#ifndef ACPI_MSG_EXCEPTION
> -#define ACPI_MSG_EXCEPTION      "ACPI Exception: "
> -#endif
>   #ifndef ACPI_MSG_WARNING
>   #define ACPI_MSG_WARNING        "ACPI Warning: "
>   #endif
> @@ -238,10 +235,10 @@ extern const char                       *AcpiGbl_PtypDecode[];
>   #endif
>   
>   #ifndef ACPI_MSG_BIOS_ERROR
> -#define ACPI_MSG_BIOS_ERROR     "ACPI BIOS Error (bug): "
> +#define ACPI_MSG_BIOS_ERROR     "Firmware Error (ACPI): "
>   #endif
>   #ifndef ACPI_MSG_BIOS_WARNING
> -#define ACPI_MSG_BIOS_WARNING   "ACPI BIOS Warning (bug): "
> +#define ACPI_MSG_BIOS_WARNING   "Firmware Warning (ACPI): "
>   #endif
>   
>   /*
> @@ -394,12 +391,12 @@ ACPI_STATUS
>   AcpiUtInitGlobals (
>       void);
>   
> -#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
> -
>   const char *
>   AcpiUtGetMutexName (
>       UINT32                  MutexId);
>   
> +#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
> +
>   const char *
>   AcpiUtGetNotifyName (
>       UINT32                  NotifyValue,
> @@ -1215,9 +1212,10 @@ AcpiUtPredefinedBiosError (
>       ...);
>   
>   void
> -AcpiUtNamespaceError (
> +AcpiUtPrefixedNamespaceError (
>       const char              *ModuleName,
>       UINT32                  LineNumber,
> +    ACPI_GENERIC_STATE      *PrefixScope,
>       const char              *InternalName,
>       ACPI_STATUS             LookupStatus);
>   
> diff --git a/src/acpica/source/tools/acpiexec/aecommon.h b/src/acpica/source/tools/acpiexec/aecommon.h
> index 00bf09b4..968efd7a 100644
> --- a/src/acpica/source/tools/acpiexec/aecommon.h
> +++ b/src/acpica/source/tools/acpiexec/aecommon.h
> @@ -199,6 +199,10 @@ extern BOOLEAN              AcpiGbl_LoadTestTables;
>   extern FILE                 *AcpiGbl_NamespaceInitFile;
>   extern ACPI_CONNECTION_INFO AeMyContext;
>   
> +extern UINT8                Ssdt2Code[];
> +extern UINT8                Ssdt3Code[];
> +extern UINT8                Ssdt4Code[];
> +
>   
>   #define TEST_OUTPUT_LEVEL(lvl)          if ((lvl) & OutputLevel)
>   
> @@ -264,18 +268,14 @@ ACPI_STATUS
>   AeDisplayAllMethods (
>       UINT32                  DisplayCount);
>   
> -ACPI_STATUS
> -AeInstallEarlyHandlers (
> -    void);
> -
> -ACPI_STATUS
> -AeInstallLateHandlers (
> -    void);
> +/* aetests */
>   
>   void
>   AeMiscellaneousTests (
>       void);
>   
> +/* aeregion */
> +
>   ACPI_STATUS
>   AeRegionHandler (
>       UINT32                  Function,
> @@ -285,6 +285,30 @@ AeRegionHandler (
>       void                    *HandlerContext,
>       void                    *RegionContext);
>   
> +/* aeinstall */
> +
> +ACPI_STATUS
> +AeInstallDeviceHandlers (
> +    void);
> +
> +void
> +AeInstallRegionHandlers (
> +    void);
> +
> +void
> +AeOverrideRegionHandlers (
> +    void);
> +
> +/* aehandlers */
> +
> +ACPI_STATUS
> +AeInstallEarlyHandlers (
> +    void);
> +
> +ACPI_STATUS
> +AeInstallLateHandlers (
> +    void);
> +
>   UINT32
>   AeGpeHandler (
>       ACPI_HANDLE             GpeDevice,
> @@ -298,29 +322,50 @@ AeGlobalEventHandler (
>       UINT32                  EventNumber,
>       void                    *Context);
>   
> -/* aeregion */
> +/* aeinitfile */
>   
> -ACPI_STATUS
> -AeInstallDeviceHandlers (
> +int
> +AeOpenInitializationFile (
> +    char                    *Filename);
> +
> +void
> +AeDoObjectOverrides (
>       void);
>   
> +ACPI_STATUS
> +AeSetupConfiguration (
> +    void                    *RegionAddr);
> +
> +/* aeexec */
> +
>   void
> -AeInstallRegionHandlers (
> +AeTestBufferArgument (
>       void);
>   
>   void
> -AeOverrideRegionHandlers (
> +AeTestPackageArgument (
>       void);
>   
> +ACPI_STATUS
> +AeGetDevices (
> +    ACPI_HANDLE             ObjHandle,
> +    UINT32                  NestingLevel,
> +    void                    *Context,
> +    void                    **ReturnValue);
>   
> -/* aeinitfile */
> +ACPI_STATUS
> +ExecuteOSI (
> +    char                    *OsiString,
> +    UINT64                  ExpectedResult);
>   
> -int
> -AeOpenInitializationFile (
> -    char                    *Filename);
> +void
> +AeGenericRegisters (
> +    void);
>   
> +#if (!ACPI_REDUCED_HARDWARE)
>   void
> -AeDoObjectOverrides (
> +AfInstallGpeBlock (
>       void);
> +#endif /* !ACPI_REDUCED_HARDWARE */
>   
>   #endif /* _AECOMMON */
> diff --git a/src/acpica/source/tools/acpiexec/aeinstall.c b/src/acpica/source/tools/acpiexec/aeinstall.c
> new file mode 100644
> index 00000000..02ff9288
> --- /dev/null
> +++ b/src/acpica/source/tools/acpiexec/aeinstall.c
> @@ -0,0 +1,457 @@
> +/******************************************************************************
> + *
> + * Module Name: aeinstall - Installation of operation region handlers
> + *
> + *****************************************************************************/
> +
> +/******************************************************************************
> + *
> + * 1. Copyright Notice
> + *
> + * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp.
> + * All rights reserved.
> + *
> + * 2. License
> + *
> + * 2.1. This is your license from Intel Corp. under its intellectual property
> + * rights. You may have additional license terms from the party that provided
> + * you this software, covering your right to use that party's intellectual
> + * property rights.
> + *
> + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
> + * copy of the source code appearing in this file ("Covered Code") an
> + * irrevocable, perpetual, worldwide license under Intel's copyrights in the
> + * base code distributed originally by Intel ("Original Intel Code") to copy,
> + * make derivatives, distribute, use and display any portion of the Covered
> + * Code in any form, with the right to sublicense such rights; and
> + *
> + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
> + * license (with the right to sublicense), under only those claims of Intel
> + * patents that are infringed by the Original Intel Code, to make, use, sell,
> + * offer to sell, and import the Covered Code and derivative works thereof
> + * solely to the minimum extent necessary to exercise the above copyright
> + * license, and in no event shall the patent license extend to any additions
> + * to or modifications of the Original Intel Code. No other license or right
> + * is granted directly or by implication, estoppel or otherwise;
> + *
> + * The above copyright and patent license is granted only if the following
> + * conditions are met:
> + *
> + * 3. Conditions
> + *
> + * 3.1. Redistribution of Source with Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification with rights to further distribute source must include
> + * the above Copyright Notice, the above License, this list of Conditions,
> + * and the following Disclaimer and Export Compliance provision. In addition,
> + * Licensee must cause all Covered Code to which Licensee contributes to
> + * contain a file documenting the changes Licensee made to create that Covered
> + * Code and the date of any change. Licensee must include in that file the
> + * documentation of any changes made by any predecessor Licensee. Licensee
> + * must include a prominent statement that the modification is derived,
> + * directly or indirectly, from Original Intel Code.
> + *
> + * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification without rights to further distribute source must
> + * include the following Disclaimer and Export Compliance provision in the
> + * documentation and/or other materials provided with distribution. In
> + * addition, Licensee may not authorize further sublicense of source of any
> + * portion of the Covered Code, and must include terms to the effect that the
> + * license from Licensee to its licensee is limited to the intellectual
> + * property embodied in the software Licensee provides to its licensee, and
> + * not to intellectual property embodied in modifications its licensee may
> + * make.
> + *
> + * 3.3. Redistribution of Executable. Redistribution in executable form of any
> + * substantial portion of the Covered Code or modification must reproduce the
> + * above Copyright Notice, and the following Disclaimer and Export Compliance
> + * provision in the documentation and/or other materials provided with the
> + * distribution.
> + *
> + * 3.4. Intel retains all right, title, and interest in and to the Original
> + * Intel Code.
> + *
> + * 3.5. Neither the name Intel nor any other trademark owned or controlled by
> + * Intel shall be used in advertising or otherwise to promote the sale, use or
> + * other dealings in products derived from or relating to the Covered Code
> + * without prior written authorization from Intel.
> + *
> + * 4. Disclaimer and Export Compliance
> + *
> + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
> + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
> + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
> + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
> + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
> + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
> + * PARTICULAR PURPOSE.
> + *
> + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
> + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
> + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
> + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
> + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
> + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
> + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
> + * LIMITED REMEDY.
> + *
> + * 4.3. Licensee shall not export, either directly or indirectly, any of this
> + * software or system incorporating such software without first obtaining any
> + * required license or other approval from the U. S. Department of Commerce or
> + * any other agency or department of the United States Government. In the
> + * event Licensee exports any such software from the United States or
> + * re-exports any such software from a foreign destination, Licensee shall
> + * ensure that the distribution and export/re-export of the software is in
> + * compliance with all laws, regulations, orders, or other restrictions of the
> + * U.S. Export Administration Regulations. Licensee agrees that neither it nor
> + * any of its subsidiaries will export/re-export any technical data, process,
> + * software, or service, directly or indirectly, to any country for which the
> + * United States government or any agency thereof requires an export license,
> + * other governmental approval, or letter of assurance, without first obtaining
> + * such license, approval or letter.
> + *
> + *****************************************************************************
> + *
> + * Alternatively, you may choose to be licensed under the terms of the
> + * following license:
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + *    notice, this list of conditions, and the following disclaimer,
> + *    without modification.
> + * 2. Redistributions in binary form must reproduce at minimum a disclaimer
> + *    substantially similar to the "NO WARRANTY" disclaimer below
> + *    ("Disclaimer") and any redistribution must be conditioned upon
> + *    including a substantially similar Disclaimer requirement for further
> + *    binary redistribution.
> + * 3. Neither the names of the above-listed copyright holders nor the names
> + *    of any contributors may be used to endorse or promote products derived
> + *    from this software without specific prior written permission.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
> + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
> + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
> + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
> + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
> + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> + *
> + * Alternatively, you may choose to be licensed under the terms of the
> + * GNU General Public License ("GPL") version 2 as published by the Free
> + * Software Foundation.
> + *
> + *****************************************************************************/
> +
> +#include "aecommon.h"
> +
> +#define _COMPONENT          ACPI_TOOLS
> +        ACPI_MODULE_NAME    ("aeinstall")
> +
> +
> +static ACPI_STATUS
> +AeRegionInit (
> +    ACPI_HANDLE             RegionHandle,
> +    UINT32                  Function,
> +    void                    *HandlerContext,
> +    void                    **RegionContext);
> +
> +static ACPI_STATUS
> +AeInstallEcHandler (
> +    ACPI_HANDLE             ObjHandle,
> +    UINT32                  Level,
> +    void                    *Context,
> +    void                    **ReturnValue);
> +
> +static ACPI_STATUS
> +AeInstallPciHandler (
> +    ACPI_HANDLE             ObjHandle,
> +    UINT32                  Level,
> +    void                    *Context,
> +    void                    **ReturnValue);
> +
> +
> +BOOLEAN                     AcpiGbl_DisplayRegionAccess = FALSE;
> +ACPI_CONNECTION_INFO        AeMyContext;
> +
> +
> +/*
> + * We will override some of the default region handlers, especially
> + * the SystemMemory handler, which must be implemented locally.
> + * These handlers are installed "early" - before any _REG methods
> + * are executed - since they are special in the sense that the ACPI spec
> + * declares that they must "always be available". Cannot override the
> + * DataTable region handler either -- needed for test execution.
> + *
> + * NOTE: The local region handler will simulate access to these address
> + * spaces by creating a memory buffer behind each operation region.
> + */
> +static ACPI_ADR_SPACE_TYPE  DefaultSpaceIdList[] =
> +{
> +    ACPI_ADR_SPACE_SYSTEM_MEMORY,
> +    ACPI_ADR_SPACE_SYSTEM_IO,
> +    ACPI_ADR_SPACE_PCI_CONFIG,
> +    ACPI_ADR_SPACE_EC
> +};
> +
> +/*
> + * We will install handlers for some of the various address space IDs.
> + * Test one user-defined address space (used by aslts).
> + */
> +#define ACPI_ADR_SPACE_USER_DEFINED1        0x80
> +#define ACPI_ADR_SPACE_USER_DEFINED2        0xE4
> +
> +static ACPI_ADR_SPACE_TYPE  SpaceIdList[] =
> +{
> +    ACPI_ADR_SPACE_SMBUS,
> +    ACPI_ADR_SPACE_CMOS,
> +    ACPI_ADR_SPACE_PCI_BAR_TARGET,
> +    ACPI_ADR_SPACE_IPMI,
> +    ACPI_ADR_SPACE_GPIO,
> +    ACPI_ADR_SPACE_GSBUS,
> +    ACPI_ADR_SPACE_FIXED_HARDWARE,
> +    ACPI_ADR_SPACE_USER_DEFINED1,
> +    ACPI_ADR_SPACE_USER_DEFINED2
> +};
> +
> +
> +/******************************************************************************
> + *
> + * FUNCTION:    AeRegionInit
> + *
> + * PARAMETERS:  Region init handler
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Opregion init function.
> + *
> + *****************************************************************************/
> +
> +static ACPI_STATUS
> +AeRegionInit (
> +    ACPI_HANDLE                 RegionHandle,
> +    UINT32                      Function,
> +    void                        *HandlerContext,
> +    void                        **RegionContext)
> +{
> +
> +    if (Function == ACPI_REGION_DEACTIVATE)
> +    {
> +        *RegionContext = NULL;
> +    }
> +    else
> +    {
> +        *RegionContext = RegionHandle;
> +    }
> +
> +    return (AE_OK);
> +}
> +
> +
> +/******************************************************************************
> + *
> + * FUNCTION:    AeOverrideRegionHandlers
> + *
> + * PARAMETERS:  None
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Override the default region handlers for memory, i/o, and
> + *              pci_config. Also install a handler for EC. This is part of
> + *              the "install early handlers" functionality.
> + *
> + *****************************************************************************/
> +
> +void
> +AeOverrideRegionHandlers (
> +    void)
> +{
> +    UINT32                  i;
> +    ACPI_STATUS             Status;
> +
> +    /*
> +     * Install handlers that will override the default handlers for some of
> +     * the space IDs.
> +     */
> +    for (i = 0; i < ACPI_ARRAY_LENGTH (DefaultSpaceIdList); i++)
> +    {
> +        /* Install handler at the root object */
> +
> +        Status = AcpiInstallAddressSpaceHandler (ACPI_ROOT_OBJECT,
> +            DefaultSpaceIdList[i], AeRegionHandler, AeRegionInit,
> +            &AeMyContext);
> +
> +        if (ACPI_FAILURE (Status))
> +        {
> +            ACPI_EXCEPTION ((AE_INFO, Status,
> +                "Could not install an OpRegion handler for %s space(%u)",
> +                AcpiUtGetRegionName ((UINT8) DefaultSpaceIdList[i]),
> +                DefaultSpaceIdList[i]));
> +        }
> +    }
> +}
> +
> +
> +/******************************************************************************
> + *
> + * FUNCTION:    AeInstallRegionHandlers
> + *
> + * PARAMETERS:  None
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Install handlers for the address spaces other than
> + *              SystemMemory, SystemIO, and PCI_CONFIG.
> + *
> + *****************************************************************************/
> +
> +void
> +AeInstallRegionHandlers (
> +    void)
> +{
> +    UINT32                  i;
> +    ACPI_STATUS             Status;
> +
> +
> +    /*
> +     * Install handlers for some of the "device driver" address spaces
> +     * such as SMBus, etc.
> +     */
> +    for (i = 0; i < ACPI_ARRAY_LENGTH (SpaceIdList); i++)
> +    {
> +        /* Install handler at the root object */
> +
> +        Status = AcpiInstallAddressSpaceHandler (ACPI_ROOT_OBJECT,
> +            SpaceIdList[i], AeRegionHandler, AeRegionInit,
> +            &AeMyContext);
> +
> +        if (ACPI_FAILURE (Status))
> +        {
> +            ACPI_EXCEPTION ((AE_INFO, Status,
> +                "Could not install an OpRegion handler for %s space(%u)",
> +                AcpiUtGetRegionName((UINT8) SpaceIdList[i]), SpaceIdList[i]));
> +            return;
> +        }
> +    }
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AeInstallDeviceHandlers
> + *
> + * PARAMETERS:  None
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Install handlers for all EC and PCI devices in the namespace
> + *
> + ******************************************************************************/
> +
> +ACPI_STATUS
> +AeInstallDeviceHandlers (
> +    void)
> +{
> +
> +    /* Find all Embedded Controller devices */
> +
> +    AcpiGetDevices ("PNP0C09", AeInstallEcHandler, NULL, NULL);
> +
> +    /* Install a PCI handler */
> +
> +    AcpiGetDevices ("PNP0A08", AeInstallPciHandler, NULL, NULL);
> +    return (AE_OK);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AeInstallEcHandler
> + *
> + * PARAMETERS:  ACPI_WALK_NAMESPACE callback
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Walk entire namespace, install a handler for every EC
> + *              device found.
> + *
> + ******************************************************************************/
> +
> +static ACPI_STATUS
> +AeInstallEcHandler (
> +    ACPI_HANDLE             ObjHandle,
> +    UINT32                  Level,
> +    void                    *Context,
> +    void                    **ReturnValue)
> +{
> +    ACPI_STATUS             Status;
> +
> +
> +    /* Install the handler for this EC device */
> +
> +    Status = AcpiInstallAddressSpaceHandler (ObjHandle,
> +        ACPI_ADR_SPACE_EC, AeRegionHandler, AeRegionInit, &AeMyContext);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        ACPI_EXCEPTION ((AE_INFO, Status,
> +            "Could not install an OpRegion handler for EC device (%p)",
> +            ObjHandle));
> +    }
> +
> +    return (Status);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AeInstallPciHandler
> + *
> + * PARAMETERS:  ACPI_WALK_NAMESPACE callback
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Walk entire namespace, install a handler for every PCI
> + *              device found.
> + *
> + ******************************************************************************/
> +
> +static ACPI_STATUS
> +AeInstallPciHandler (
> +    ACPI_HANDLE             ObjHandle,
> +    UINT32                  Level,
> +    void                    *Context,
> +    void                    **ReturnValue)
> +{
> +    ACPI_STATUS             Status;
> +
> +
> +    /* Install memory and I/O handlers for the PCI device */
> +
> +    Status = AcpiInstallAddressSpaceHandler (ObjHandle,
> +        ACPI_ADR_SPACE_SYSTEM_IO, AeRegionHandler, AeRegionInit,
> +        &AeMyContext);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        ACPI_EXCEPTION ((AE_INFO, Status,
> +            "Could not install an OpRegion handler for PCI device (%p)",
> +            ObjHandle));
> +    }
> +
> +    Status = AcpiInstallAddressSpaceHandler (ObjHandle,
> +        ACPI_ADR_SPACE_SYSTEM_MEMORY, AeRegionHandler, AeRegionInit,
> +        &AeMyContext);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        ACPI_EXCEPTION ((AE_INFO, Status,
> +            "Could not install an OpRegion handler for PCI device (%p)",
> +            ObjHandle));
> +    }
> +
> +    return (AE_CTRL_TERMINATE);
> +}
> diff --git a/src/acpica/source/tools/acpiexec/aeregion.c b/src/acpica/source/tools/acpiexec/aeregion.c
> index 4076c06b..69c3999f 100644
> --- a/src/acpica/source/tools/acpiexec/aeregion.c
> +++ b/src/acpica/source/tools/acpiexec/aeregion.c
> @@ -1,6 +1,6 @@
>   /******************************************************************************
>    *
> - * Module Name: aeregion - Operation region support for acpiexec
> + * Module Name: aeregion - Handler for operation regions
>    *
>    *****************************************************************************/
>   
> @@ -155,283 +155,7 @@
>           ACPI_MODULE_NAME    ("aeregion")
>   
>   
> -/* Local prototypes */
> -
> -static ACPI_STATUS
> -AeRegionInit (
> -    ACPI_HANDLE             RegionHandle,
> -    UINT32                  Function,
> -    void                    *HandlerContext,
> -    void                    **RegionContext);
> -
> -static ACPI_STATUS
> -AeInstallEcHandler (
> -    ACPI_HANDLE             ObjHandle,
> -    UINT32                  Level,
> -    void                    *Context,
> -    void                    **ReturnValue);
> -
> -static ACPI_STATUS
> -AeInstallPciHandler (
> -    ACPI_HANDLE             ObjHandle,
> -    UINT32                  Level,
> -    void                    *Context,
> -    void                    **ReturnValue);
> -
> -
>   static AE_DEBUG_REGIONS     AeRegions;
> -BOOLEAN                     AcpiGbl_DisplayRegionAccess = FALSE;
> -ACPI_CONNECTION_INFO        AeMyContext;
> -
> -
> -/*
> - * We will override some of the default region handlers, especially
> - * the SystemMemory handler, which must be implemented locally.
> - * These handlers are installed "early" - before any _REG methods
> - * are executed - since they are special in the sense that the ACPI spec
> - * declares that they must "always be available". Cannot override the
> - * DataTable region handler either -- needed for test execution.
> - *
> - * NOTE: The local region handler will simulate access to these address
> - * spaces by creating a memory buffer behind each operation region.
> - */
> -static ACPI_ADR_SPACE_TYPE  DefaultSpaceIdList[] =
> -{
> -    ACPI_ADR_SPACE_SYSTEM_MEMORY,
> -    ACPI_ADR_SPACE_SYSTEM_IO,
> -    ACPI_ADR_SPACE_PCI_CONFIG,
> -    ACPI_ADR_SPACE_EC
> -};
> -
> -/*
> - * We will install handlers for some of the various address space IDs.
> - * Test one user-defined address space (used by aslts).
> - */
> -#define ACPI_ADR_SPACE_USER_DEFINED1        0x80
> -#define ACPI_ADR_SPACE_USER_DEFINED2        0xE4
> -
> -static ACPI_ADR_SPACE_TYPE  SpaceIdList[] =
> -{
> -    ACPI_ADR_SPACE_SMBUS,
> -    ACPI_ADR_SPACE_CMOS,
> -    ACPI_ADR_SPACE_PCI_BAR_TARGET,
> -    ACPI_ADR_SPACE_IPMI,
> -    ACPI_ADR_SPACE_GPIO,
> -    ACPI_ADR_SPACE_GSBUS,
> -    ACPI_ADR_SPACE_FIXED_HARDWARE,
> -    ACPI_ADR_SPACE_USER_DEFINED1,
> -    ACPI_ADR_SPACE_USER_DEFINED2
> -};
> -
> -
> -/******************************************************************************
> - *
> - * FUNCTION:    AeRegionInit
> - *
> - * PARAMETERS:  Region init handler
> - *
> - * RETURN:      Status
> - *
> - * DESCRIPTION: Opregion init function.
> - *
> - *****************************************************************************/
> -
> -static ACPI_STATUS
> -AeRegionInit (
> -    ACPI_HANDLE                 RegionHandle,
> -    UINT32                      Function,
> -    void                        *HandlerContext,
> -    void                        **RegionContext)
> -{
> -
> -    if (Function == ACPI_REGION_DEACTIVATE)
> -    {
> -        *RegionContext = NULL;
> -    }
> -    else
> -    {
> -        *RegionContext = RegionHandle;
> -    }
> -
> -    return (AE_OK);
> -}
> -
> -
> -/******************************************************************************
> - *
> - * FUNCTION:    AeOverrideRegionHandlers
> - *
> - * PARAMETERS:  None
> - *
> - * RETURN:      None
> - *
> - * DESCRIPTION: Override the default region handlers for memory, i/o, and
> - *              pci_config. Also install a handler for EC. This is part of
> - *              the "install early handlers" functionality.
> - *
> - *****************************************************************************/
> -
> -void
> -AeOverrideRegionHandlers (
> -    void)
> -{
> -    UINT32                  i;
> -    ACPI_STATUS             Status;
> -
> -    /*
> -     * Install handlers that will override the default handlers for some of
> -     * the space IDs.
> -     */
> -    for (i = 0; i < ACPI_ARRAY_LENGTH (DefaultSpaceIdList); i++)
> -    {
> -        /* Install handler at the root object */
> -
> -        Status = AcpiInstallAddressSpaceHandler (ACPI_ROOT_OBJECT,
> -            DefaultSpaceIdList[i], AeRegionHandler,
> -            AeRegionInit, &AeMyContext);
> -
> -        if (ACPI_FAILURE (Status))
> -        {
> -            ACPI_EXCEPTION ((AE_INFO, Status,
> -                "Could not install an OpRegion handler for %s space(%u)",
> -                AcpiUtGetRegionName ((UINT8) DefaultSpaceIdList[i]),
> -                DefaultSpaceIdList[i]));
> -        }
> -    }
> -}
> -
> -
> -/******************************************************************************
> - *
> - * FUNCTION:    AeInstallRegionHandlers
> - *
> - * PARAMETERS:  None
> - *
> - * RETURN:      None
> - *
> - * DESCRIPTION: Install handlers for the address spaces other than memory,
> - *              i/o, and pci_config.
> - *
> - *****************************************************************************/
> -
> -void
> -AeInstallRegionHandlers (
> -    void)
> -{
> -    UINT32                  i;
> -    ACPI_STATUS             Status;
> -
> -    /*
> -     * Install handlers for some of the "device driver" address spaces
> -     * such as SMBus, etc.
> -     */
> -    for (i = 0; i < ACPI_ARRAY_LENGTH (SpaceIdList); i++)
> -    {
> -        /* Install handler at the root object */
> -
> -        Status = AcpiInstallAddressSpaceHandler (ACPI_ROOT_OBJECT,
> -            SpaceIdList[i], AeRegionHandler,
> -            AeRegionInit, &AeMyContext);
> -
> -        if (ACPI_FAILURE (Status))
> -        {
> -            ACPI_EXCEPTION ((AE_INFO, Status,
> -                "Could not install an OpRegion handler for %s space(%u)",
> -                AcpiUtGetRegionName((UINT8) SpaceIdList[i]), SpaceIdList[i]));
> -            return;
> -        }
> -    }
> -}
> -
> -
> -/*******************************************************************************
> - *
> - * FUNCTION:    AeInstallDeviceHandlers,
> - *              AeInstallEcHandler,
> - *              AeInstallPciHandler
> - *
> - * PARAMETERS:  ACPI_WALK_NAMESPACE callback
> - *
> - * RETURN:      Status
> - *
> - * DESCRIPTION: Walk entire namespace, install a handler for every EC
> - *              and PCI device found.
> - *
> - ******************************************************************************/
> -
> -static ACPI_STATUS
> -AeInstallEcHandler (
> -    ACPI_HANDLE             ObjHandle,
> -    UINT32                  Level,
> -    void                    *Context,
> -    void                    **ReturnValue)
> -{
> -    ACPI_STATUS             Status;
> -
> -
> -    /* Install the handler for this EC device */
> -
> -    Status = AcpiInstallAddressSpaceHandler (ObjHandle, ACPI_ADR_SPACE_EC,
> -        AeRegionHandler, AeRegionInit, &AeMyContext);
> -    if (ACPI_FAILURE (Status))
> -    {
> -        ACPI_EXCEPTION ((AE_INFO, Status,
> -            "Could not install an OpRegion handler for EC device (%p)",
> -            ObjHandle));
> -    }
> -
> -    return (Status);
> -}
> -
> -
> -static ACPI_STATUS
> -AeInstallPciHandler (
> -    ACPI_HANDLE             ObjHandle,
> -    UINT32                  Level,
> -    void                    *Context,
> -    void                    **ReturnValue)
> -{
> -    ACPI_STATUS             Status;
> -
> -
> -    /* Install memory and I/O handlers for the PCI device */
> -
> -    Status = AcpiInstallAddressSpaceHandler (ObjHandle, ACPI_ADR_SPACE_SYSTEM_IO,
> -        AeRegionHandler, AeRegionInit, &AeMyContext);
> -    if (ACPI_FAILURE (Status))
> -    {
> -        ACPI_EXCEPTION ((AE_INFO, Status,
> -            "Could not install an OpRegion handler for PCI device (%p)",
> -            ObjHandle));
> -    }
> -
> -    Status = AcpiInstallAddressSpaceHandler (ObjHandle, ACPI_ADR_SPACE_SYSTEM_MEMORY,
> -        AeRegionHandler, AeRegionInit, &AeMyContext);
> -    if (ACPI_FAILURE (Status))
> -    {
> -        ACPI_EXCEPTION ((AE_INFO, Status,
> -            "Could not install an OpRegion handler for PCI device (%p)",
> -            ObjHandle));
> -    }
> -
> -    return (AE_CTRL_TERMINATE);
> -}
> -
> -
> -ACPI_STATUS
> -AeInstallDeviceHandlers (
> -    void)
> -{
> -
> -    /* Find all Embedded Controller devices */
> -
> -    AcpiGetDevices ("PNP0C09", AeInstallEcHandler, NULL, NULL);
> -
> -    /* Install a PCI handler */
> -
> -    AcpiGetDevices ("PNP0A08", AeInstallPciHandler, NULL, NULL);
> -    return (AE_OK);
> -}
>   
>   
>   /******************************************************************************
> 


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



More information about the fwts-devel mailing list