diff mbox series

ACPICA: Update to version 20200326

Message ID 20200326230249.65759-1-colin.king@canonical.com
State Accepted
Headers show
Series ACPICA: Update to version 20200326 | expand

Commit Message

Colin Ian King March 26, 2020, 11:02 p.m. UTC
From: Colin Ian King <colin.king@canonical.com>

Changes in this release of ACPICA are detailed at the following
link on the ACPICA developer mailing list:

https://lists.acpica.org/hyperkitty/list/devel@acpica.org/thread/BDLNZMTZ5R32EY7UQPXFY6CBKH5OKBSJ

Signed-off-by: Colin Ian King <colin.king@canonical.com>
---
 src/acpica/source/common/ahtable.c            |   2 +-
 src/acpica/source/common/dmtable.c            |   3 +-
 src/acpica/source/common/dmtbdump2.c          |  25 +-
 src/acpica/source/common/dmtbinfo2.c          |  16 +-
 src/acpica/source/common/dmtbinfo3.c          |   2 +-
 src/acpica/source/compiler/aslcompile.c       |   1 +
 src/acpica/source/compiler/aslcompiler.h      |   8 +-
 src/acpica/source/compiler/aslcompiler.l      |  20 +-
 src/acpica/source/compiler/asldefine.h        |   1 +
 src/acpica/source/compiler/aslerror.c         | 125 +++++++++-
 src/acpica/source/compiler/aslglobal.h        |   1 +
 src/acpica/source/compiler/aslload.c          |  88 +++++--
 src/acpica/source/compiler/asloptions.c       |   2 +-
 src/acpica/source/compiler/asltypes.h         |  31 ++-
 src/acpica/source/compiler/dtcompiler.h       |   1 -
 src/acpica/source/compiler/dtcompilerparser.l |   1 -
 src/acpica/source/compiler/dtcompilerparser.y |   1 -
 src/acpica/source/compiler/dtparser.l         |   2 +-
 src/acpica/source/compiler/dttable1.c         |  10 +-
 src/acpica/source/compiler/dtutils.c          |   3 +-
 src/acpica/source/compiler/prparser.l         |   2 +-
 .../source/components/debugger/dbinput.c      |  19 +-
 .../source/components/debugger/dbxface.c      |   1 +
 .../source/components/dispatcher/dswexec.c    |  32 ++-
 .../source/components/dispatcher/dswload.c    |   2 -
 .../source/components/dispatcher/dswload2.c   |  37 +++
 .../source/components/hardware/hwsleep.c      |   4 +-
 .../source/components/namespace/nsnames.c     |   8 +-
 .../source/components/utilities/utdecode.c    |   2 +-
 .../source/components/utilities/utdelete.c    |   9 +-
 src/acpica/source/include/acdisasm.h          |   1 +
 src/acpica/source/include/acnamesp.h          |   4 +
 src/acpica/source/include/acpixf.h            |   2 +-
 src/acpica/source/include/actbinfo.h          |   3 +-
 src/acpica/source/include/actbl2.h            |  24 +-
 src/acpica/source/include/actbl3.h            |   6 +-
 src/acpica/source/include/acuuid.h            |   2 +-
 src/acpica/source/tools/acpiexec/aecommon.h   |  20 +-
 src/acpica/source/tools/acpiexec/aeinitfile.c | 220 +++++++++++-------
 39 files changed, 568 insertions(+), 173 deletions(-)

Comments

Alex Hung March 26, 2020, 11:38 p.m. UTC | #1
On 2020-03-26 5:02 p.m., Colin King wrote:
> From: Colin Ian King <colin.king@canonical.com>
> 
> Changes in this release of ACPICA are detailed at the following
> link on the ACPICA developer mailing list:
> 
> https://lists.acpica.org/hyperkitty/list/devel@acpica.org/thread/BDLNZMTZ5R32EY7UQPXFY6CBKH5OKBSJ
> 
> Signed-off-by: Colin Ian King <colin.king@canonical.com>
> ---
>  src/acpica/source/common/ahtable.c            |   2 +-
>  src/acpica/source/common/dmtable.c            |   3 +-
>  src/acpica/source/common/dmtbdump2.c          |  25 +-
>  src/acpica/source/common/dmtbinfo2.c          |  16 +-
>  src/acpica/source/common/dmtbinfo3.c          |   2 +-
>  src/acpica/source/compiler/aslcompile.c       |   1 +
>  src/acpica/source/compiler/aslcompiler.h      |   8 +-
>  src/acpica/source/compiler/aslcompiler.l      |  20 +-
>  src/acpica/source/compiler/asldefine.h        |   1 +
>  src/acpica/source/compiler/aslerror.c         | 125 +++++++++-
>  src/acpica/source/compiler/aslglobal.h        |   1 +
>  src/acpica/source/compiler/aslload.c          |  88 +++++--
>  src/acpica/source/compiler/asloptions.c       |   2 +-
>  src/acpica/source/compiler/asltypes.h         |  31 ++-
>  src/acpica/source/compiler/dtcompiler.h       |   1 -
>  src/acpica/source/compiler/dtcompilerparser.l |   1 -
>  src/acpica/source/compiler/dtcompilerparser.y |   1 -
>  src/acpica/source/compiler/dtparser.l         |   2 +-
>  src/acpica/source/compiler/dttable1.c         |  10 +-
>  src/acpica/source/compiler/dtutils.c          |   3 +-
>  src/acpica/source/compiler/prparser.l         |   2 +-
>  .../source/components/debugger/dbinput.c      |  19 +-
>  .../source/components/debugger/dbxface.c      |   1 +
>  .../source/components/dispatcher/dswexec.c    |  32 ++-
>  .../source/components/dispatcher/dswload.c    |   2 -
>  .../source/components/dispatcher/dswload2.c   |  37 +++
>  .../source/components/hardware/hwsleep.c      |   4 +-
>  .../source/components/namespace/nsnames.c     |   8 +-
>  .../source/components/utilities/utdecode.c    |   2 +-
>  .../source/components/utilities/utdelete.c    |   9 +-
>  src/acpica/source/include/acdisasm.h          |   1 +
>  src/acpica/source/include/acnamesp.h          |   4 +
>  src/acpica/source/include/acpixf.h            |   2 +-
>  src/acpica/source/include/actbinfo.h          |   3 +-
>  src/acpica/source/include/actbl2.h            |  24 +-
>  src/acpica/source/include/actbl3.h            |   6 +-
>  src/acpica/source/include/acuuid.h            |   2 +-
>  src/acpica/source/tools/acpiexec/aecommon.h   |  20 +-
>  src/acpica/source/tools/acpiexec/aeinitfile.c | 220 +++++++++++-------
>  39 files changed, 568 insertions(+), 173 deletions(-)

Acked-by: Alex Hung <alex.hung@canonical.com>
Ivan Hu March 27, 2020, 2:17 a.m. UTC | #2
On 3/27/20 7:02 AM, Colin King wrote:
> From: Colin Ian King <colin.king@canonical.com>
> 
> Changes in this release of ACPICA are detailed at the following
> link on the ACPICA developer mailing list:
> 
> https://lists.acpica.org/hyperkitty/list/devel@acpica.org/thread/BDLNZMTZ5R32EY7UQPXFY6CBKH5OKBSJ
> 
> Signed-off-by: Colin Ian King <colin.king@canonical.com>
> ---
>  src/acpica/source/common/ahtable.c            |   2 +-
>  src/acpica/source/common/dmtable.c            |   3 +-
>  src/acpica/source/common/dmtbdump2.c          |  25 +-
>  src/acpica/source/common/dmtbinfo2.c          |  16 +-
>  src/acpica/source/common/dmtbinfo3.c          |   2 +-
>  src/acpica/source/compiler/aslcompile.c       |   1 +
>  src/acpica/source/compiler/aslcompiler.h      |   8 +-
>  src/acpica/source/compiler/aslcompiler.l      |  20 +-
>  src/acpica/source/compiler/asldefine.h        |   1 +
>  src/acpica/source/compiler/aslerror.c         | 125 +++++++++-
>  src/acpica/source/compiler/aslglobal.h        |   1 +
>  src/acpica/source/compiler/aslload.c          |  88 +++++--
>  src/acpica/source/compiler/asloptions.c       |   2 +-
>  src/acpica/source/compiler/asltypes.h         |  31 ++-
>  src/acpica/source/compiler/dtcompiler.h       |   1 -
>  src/acpica/source/compiler/dtcompilerparser.l |   1 -
>  src/acpica/source/compiler/dtcompilerparser.y |   1 -
>  src/acpica/source/compiler/dtparser.l         |   2 +-
>  src/acpica/source/compiler/dttable1.c         |  10 +-
>  src/acpica/source/compiler/dtutils.c          |   3 +-
>  src/acpica/source/compiler/prparser.l         |   2 +-
>  .../source/components/debugger/dbinput.c      |  19 +-
>  .../source/components/debugger/dbxface.c      |   1 +
>  .../source/components/dispatcher/dswexec.c    |  32 ++-
>  .../source/components/dispatcher/dswload.c    |   2 -
>  .../source/components/dispatcher/dswload2.c   |  37 +++
>  .../source/components/hardware/hwsleep.c      |   4 +-
>  .../source/components/namespace/nsnames.c     |   8 +-
>  .../source/components/utilities/utdecode.c    |   2 +-
>  .../source/components/utilities/utdelete.c    |   9 +-
>  src/acpica/source/include/acdisasm.h          |   1 +
>  src/acpica/source/include/acnamesp.h          |   4 +
>  src/acpica/source/include/acpixf.h            |   2 +-
>  src/acpica/source/include/actbinfo.h          |   3 +-
>  src/acpica/source/include/actbl2.h            |  24 +-
>  src/acpica/source/include/actbl3.h            |   6 +-
>  src/acpica/source/include/acuuid.h            |   2 +-
>  src/acpica/source/tools/acpiexec/aecommon.h   |  20 +-
>  src/acpica/source/tools/acpiexec/aeinitfile.c | 220 +++++++++++-------
>  39 files changed, 568 insertions(+), 173 deletions(-)
> 
> diff --git a/src/acpica/source/common/ahtable.c b/src/acpica/source/common/ahtable.c
> index 25fd525e..32d5dedb 100644
> --- a/src/acpica/source/common/ahtable.c
> +++ b/src/acpica/source/common/ahtable.c
> @@ -258,7 +258,7 @@ const AH_TABLE      AcpiGbl_SupportedTables[] =
>      {ACPI_SIG_WDDT, "Watchdog Description Table"},
>      {ACPI_SIG_WDRT, "Watchdog Resource Table"},
>      {ACPI_SIG_WPBT, "Windows Platform Binary Table"},
> -    {ACPI_SIG_WSMT, "Windows SMM Security Migrations Table"},
> +    {ACPI_SIG_WSMT, "Windows SMM Security Mitigations Table"},
>      {ACPI_SIG_XENV, "Xen Environment table"},
>      {ACPI_SIG_XSDT, "Extended System Description Table"},
>      {NULL,          NULL}
> diff --git a/src/acpica/source/common/dmtable.c b/src/acpica/source/common/dmtable.c
> index 02220d26..5896b2f2 100644
> --- a/src/acpica/source/common/dmtable.c
> +++ b/src/acpica/source/common/dmtable.c
> @@ -1676,7 +1676,8 @@ AcpiDmDumpTable (
>              Temp8 = *Target;
>              switch (Temp8)
>              {
> -            case ACPI_IVRS_TYPE_HARDWARE:
> +            case ACPI_IVRS_TYPE_HARDWARE1:
> +            case ACPI_IVRS_TYPE_HARDWARE2:
>  
>                  Name = AcpiDmIvrsSubnames[0];
>                  break;
> diff --git a/src/acpica/source/common/dmtbdump2.c b/src/acpica/source/common/dmtbdump2.c
> index 95eea6d9..688a2cf9 100644
> --- a/src/acpica/source/common/dmtbdump2.c
> +++ b/src/acpica/source/common/dmtbdump2.c
> @@ -475,11 +475,16 @@ AcpiDmDumpIvrs (
>  
>          switch (Subtable->Type)
>          {
> -        case ACPI_IVRS_TYPE_HARDWARE:
> +        case ACPI_IVRS_TYPE_HARDWARE1:
>  
>              InfoTable = AcpiDmTableInfoIvrs0;
>              break;
>  
> +        case ACPI_IVRS_TYPE_HARDWARE2:
> +
> +            InfoTable = AcpiDmTableInfoIvrs01;
> +            break;
> +
>          case ACPI_IVRS_TYPE_MEMORY1:
>          case ACPI_IVRS_TYPE_MEMORY2:
>          case ACPI_IVRS_TYPE_MEMORY3:
> @@ -514,11 +519,21 @@ AcpiDmDumpIvrs (
>  
>          /* The hardware subtable can contain multiple device entries */
>  
> -        if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE)
> +        if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE1 ||
> +            Subtable->Type == ACPI_IVRS_TYPE_HARDWARE2)
>          {
> -            EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE);
> -            DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable,
> -                sizeof (ACPI_IVRS_HARDWARE));
> +            if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE1)
> +            {
> +                EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE1);
> +                DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable,
> +                    sizeof (ACPI_IVRS_HARDWARE1));
> +            }
> +            else if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE2)
> +            {
> +                EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE2);
> +                DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable,
> +                    sizeof (ACPI_IVRS_HARDWARE2));
> +            }
>  
>              while (EntryOffset < (Offset + Subtable->Length))
>              {
> diff --git a/src/acpica/source/common/dmtbinfo2.c b/src/acpica/source/common/dmtbinfo2.c
> index 79802830..c000a921 100644
> --- a/src/acpica/source/common/dmtbinfo2.c
> +++ b/src/acpica/source/common/dmtbinfo2.c
> @@ -403,7 +403,21 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs0[] =
>      {ACPI_DMT_UINT64,   ACPI_IVRS0_OFFSET (BaseAddress),            "Base Address", 0},
>      {ACPI_DMT_UINT16,   ACPI_IVRS0_OFFSET (PciSegmentGroup),        "PCI Segment Group", 0},
>      {ACPI_DMT_UINT16,   ACPI_IVRS0_OFFSET (Info),                   "Virtualization Info", 0},
> -    {ACPI_DMT_UINT32,   ACPI_IVRS0_OFFSET (Reserved),               "Reserved", 0},
> +    {ACPI_DMT_UINT32,   ACPI_IVRS0_OFFSET (FeatureReporting),       "Feature Reporting", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 0x10: I/O Virtualization Hardware Definition (IVHD) Block */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs01[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_IVRS01_OFFSET (CapabilityOffset),       "Capability Offset", 0},
> +    {ACPI_DMT_UINT64,   ACPI_IVRS01_OFFSET (BaseAddress),            "Base Address", 0},
> +    {ACPI_DMT_UINT16,   ACPI_IVRS01_OFFSET (PciSegmentGroup),        "PCI Segment Group", 0},
> +    {ACPI_DMT_UINT16,   ACPI_IVRS01_OFFSET (Info),                   "Virtualization Info", 0},
> +    {ACPI_DMT_UINT32,   ACPI_IVRS01_OFFSET (Attributes),             "Attributes", 0},
> +    {ACPI_DMT_UINT64,   ACPI_IVRS01_OFFSET (EfrRegisterImage),       "EFR Image", 0},
> +    {ACPI_DMT_UINT64,   ACPI_IVRS01_OFFSET (Reserved),               "Reserved", 0},
>      ACPI_DMT_TERMINATOR
>  };
>  
> diff --git a/src/acpica/source/common/dmtbinfo3.c b/src/acpica/source/common/dmtbinfo3.c
> index 07a26c2b..f4092c24 100644
> --- a/src/acpica/source/common/dmtbinfo3.c
> +++ b/src/acpica/source/common/dmtbinfo3.c
> @@ -691,7 +691,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoWpbt0[] =
>  
>  /*******************************************************************************
>   *
> - * WSMT - Windows SMM Security Migrations Table
> + * WSMT - Windows SMM Security Mitigations Table
>   *
>   ******************************************************************************/
>  
> diff --git a/src/acpica/source/compiler/aslcompile.c b/src/acpica/source/compiler/aslcompile.c
> index 9481b6bb..787a5444 100644
> --- a/src/acpica/source/compiler/aslcompile.c
> +++ b/src/acpica/source/compiler/aslcompile.c
> @@ -283,6 +283,7 @@ CmDoCompile (
>  
>      LsDumpParseTree ();
>  
> +    UtEndEvent (Event);
>      UtEndEvent (FullCompile);
>      return (AE_OK);
>  
> diff --git a/src/acpica/source/compiler/aslcompiler.h b/src/acpica/source/compiler/aslcompiler.h
> index 9bebc380..82d777d8 100644
> --- a/src/acpica/source/compiler/aslcompiler.h
> +++ b/src/acpica/source/compiler/aslcompiler.h
> @@ -488,7 +488,7 @@ AslCheckExpectedExceptions (
>      void);
>  
>  ACPI_STATUS
> -AslExpectException (
> +AslLogExpectedException (
>      char                    *MessageIdString);
>  
>  ACPI_STATUS
> @@ -501,9 +501,15 @@ AslDisableException (
>  
>  BOOLEAN
>  AslIsExceptionIgnored (
> +    char                    *Filename,
> +    UINT32                  LineNumber,
>      UINT8                   Level,
>      UINT16                  MessageId);
>  
> +void
> +AslLogExpectedExceptionByLine (
> +    char                    *MessageIdString);
> +
>  void
>  AslCoreSubsystemError (
>      ACPI_PARSE_OBJECT       *Op,
> diff --git a/src/acpica/source/compiler/aslcompiler.l b/src/acpica/source/compiler/aslcompiler.l
> index 797f9899..4c3fbde3 100644
> --- a/src/acpica/source/compiler/aslcompiler.l
> +++ b/src/acpica/source/compiler/aslcompiler.l
> @@ -156,7 +156,6 @@
>  
>  #include <stdlib.h>
>  #include <string.h>
> -YYSTYPE AslCompilerlval;
>  
>  /*
>   * Generation:  Use the following command line:
> @@ -195,6 +194,7 @@ count (int type);
>  
>  LeadNameChar                [A-Za-z_]
>  DigitChar                   [0-9]
> +ErrorCode                   [(][ ]*[1-9][0-9][0-9][0-9][ ]*[)]
>  OctalChar                   [0-7]
>  HexDigitChar                [A-Fa-f0-9]
>  RootChar                    [\\]
> @@ -692,7 +692,7 @@ NamePathTail                [.]{NameSeg}
>  "IPMI"                      { count (0); return (PARSEOP_REGIONSPACE_IPMI); }
>  "GeneralPurposeIo"          { count (0); return (PARSEOP_REGIONSPACE_GPIO); }       /* ACPI 5.0 */
>  "GenericSerialBus"          { count (0); return (PARSEOP_REGIONSPACE_GSBUS); }      /* ACPI 5.0 */
> -"PlatformCommChannel"       { count (0); return (PARSEOP_REGIONSPACE_PCC); }        /* ACPI 5.0 */
> +"PCC"                       { count (0); return (PARSEOP_REGIONSPACE_PCC); }        /* ACPI 5.0 */
>  "FFixedHW"                  { count (0); return (PARSEOP_REGIONSPACE_FFIXEDHW); }
>  
>      /* ResourceTypeKeyword: Resource Usage - Resource Descriptors */
> @@ -810,6 +810,22 @@ NamePathTail                [.]{NameSeg}
>  "__LINE__"                  { count (0); return (PARSEOP___LINE__); }
>  "__PATH__"                  { count (0); return (PARSEOP___PATH__); }
>  "__METHOD__"                { count (0); return (PARSEOP___METHOD__); }
> +"__EXPECT__"{ErrorCode}     { char *s;
> +                                int index = 0;
> +                                count (0);
> +                                while (!isdigit (AslCompilertext[index]))
> +                                {
> +                                    index++;
> +                                }
> +
> +                                /*
> +                                 * The eror code is contained inside the
> +                                 * {ErrorCode} pattern. Extract it and log it
> +                                 * as the expected error code.
> +                                 */
> +                                s = UtLocalCacheCalloc (ASL_ERROR_CODE_LENGTH + 1);
> +                                memcpy (s, AslCompilertext + index, ASL_ERROR_CODE_LENGTH);
> +                                AslLogExpectedExceptionByLine (s); }
>  
>  {NameSeg}                   { char *s;
>                                  count (0);
> diff --git a/src/acpica/source/compiler/asldefine.h b/src/acpica/source/compiler/asldefine.h
> index 12a4cdd5..2627a58a 100644
> --- a/src/acpica/source/compiler/asldefine.h
> +++ b/src/acpica/source/compiler/asldefine.h
> @@ -227,6 +227,7 @@
>  #define ASL_NO_ABORT                        FALSE
>  #define ASL_EOF                             ACPI_UINT32_MAX
>  #define ASL_IGNORE_LINE                     (ACPI_UINT32_MAX -1)
> +#define ASL_ERROR_CODE_LENGTH               4
>  
>  
>  /* Listings */
> diff --git a/src/acpica/source/compiler/aslerror.c b/src/acpica/source/compiler/aslerror.c
> index 1931fffc..8fae779d 100644
> --- a/src/acpica/source/compiler/aslerror.c
> +++ b/src/acpica/source/compiler/aslerror.c
> @@ -162,6 +162,8 @@ AeAddToErrorLog (
>  
>  static BOOLEAN
>  AslIsExceptionExpected (
> +    char                    *Filename,
> +    UINT32                  LineNumber,
>      UINT8                   Level,
>      UINT16                  MessageId);
>  
> @@ -170,7 +172,8 @@ AslIsExceptionDisabled (
>      UINT8                   Level,
>      UINT16                  MessageId);
>  
> -static void AslInitEnode (
> +static void
> +AslInitEnode (
>      ASL_ERROR_MSG           **Enode,
>      UINT8                   Level,
>      UINT16                  MessageId,
> @@ -956,7 +959,7 @@ AslCommonError (
>  {
>      /* Check if user wants to ignore this exception */
>  
> -    if (AslIsExceptionIgnored (Level, MessageId))
> +    if (AslIsExceptionIgnored (Filename, LogicalLineNumber, Level, MessageId))
>      {
>          return;
>      }
> @@ -1087,6 +1090,8 @@ GetModifiedLevel (
>  
>  BOOLEAN
>  AslIsExceptionIgnored (
> +    char                    *Filename,
> +    UINT32                  LineNumber,
>      UINT8                   Level,
>      UINT16                  MessageId)
>  {
> @@ -1096,7 +1101,8 @@ AslIsExceptionIgnored (
>      /* Note: this allows exception to be disabled and expected */
>  
>      ExceptionIgnored = AslIsExceptionDisabled (Level, MessageId);
> -    ExceptionIgnored |= AslIsExceptionExpected (Level, MessageId);
> +    ExceptionIgnored |=
> +        AslIsExceptionExpected (Filename, LineNumber, Level, MessageId);
>  
>      return (AslGbl_AllExceptionsDisabled || ExceptionIgnored);
>  }
> @@ -1104,7 +1110,7 @@ AslIsExceptionIgnored (
>  
>  /*******************************************************************************
>   *
> - * FUNCTION:    AslCheckExpectException
> + * FUNCTION:    AslCheckExpectedException
>   *
>   * PARAMETERS:  none
>   *
> @@ -1120,6 +1126,8 @@ AslCheckExpectedExceptions (
>      void)
>  {
>      UINT8                   i;
> +    ASL_EXPECTED_MSG_NODE   *Current = AslGbl_ExpectedErrorCodeList;
> +    ASL_LOCATION_NODE       *LocationNode;
>  
>  
>      for (i = 0; i < AslGbl_ExpectedMessagesIndex; ++i)
> @@ -1130,12 +1138,32 @@ AslCheckExpectedExceptions (
>                  AslGbl_ExpectedMessages[i].MessageIdStr);
>          }
>      }
> +
> +    while (Current)
> +    {
> +        LocationNode = Current->LocationList;
> +
> +        while (LocationNode)
> +        {
> +            if (!LocationNode->MessageReceived)
> +            {
> +                AslCommonError (ASL_ERROR, ASL_MSG_EXCEPTION_NOT_RECEIVED,
> +                    LocationNode->LineNumber, LocationNode->LineNumber,
> +                    LocationNode->LogicalByteOffset, LocationNode->Column,
> +                    LocationNode->Filename, Current->MessageIdStr);
> +            }
> +
> +            LocationNode = LocationNode->Next;
> +        }
> +
> +        Current = Current->Next;
> +    }
>  }
>  
>  
>  /*******************************************************************************
>   *
> - * FUNCTION:    AslExpectException
> + * FUNCTION:    AslLogExpectedException
>   *
>   * PARAMETERS:  MessageIdString     - ID of excepted exception during compile
>   *
> @@ -1148,7 +1176,7 @@ AslCheckExpectedExceptions (
>   ******************************************************************************/
>  
>  ACPI_STATUS
> -AslExpectException (
> +AslLogExpectedException (
>      char                    *MessageIdString)
>  {
>      UINT32                  MessageId;
> @@ -1182,6 +1210,61 @@ AslExpectException (
>  }
>  
>  
> +/*******************************************************************************
> + *
> + * FUNCTION:    AslLogExpectedExceptionByLine
> + *
> + * PARAMETERS:  MessageIdString     - ID of excepted exception during compile
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Enter a message ID into the global expected messages table
> + *              based on file and line number. If these messages are not raised
> + *              during the compilation, throw an error.
> + *
> + ******************************************************************************/
> +
> +void
> +AslLogExpectedExceptionByLine (
> +    char                    *MessageIdString)
> +{
> +    ASL_LOCATION_NODE       *NewErrorLocationNode;
> +    ASL_EXPECTED_MSG_NODE   *Current = AslGbl_ExpectedErrorCodeList;
> +    UINT32                  MessageId;
> +
> +
> +    NewErrorLocationNode = UtLocalCalloc (sizeof (ASL_LOCATION_NODE));
> +
> +    NewErrorLocationNode->LineNumber = AslGbl_CurrentLineNumber;
> +    NewErrorLocationNode->Filename = AslGbl_Files[ASL_FILE_INPUT].Filename;
> +    NewErrorLocationNode->LogicalByteOffset = AslGbl_CurrentLineOffset;
> +    NewErrorLocationNode->Column = AslGbl_CurrentColumn;
> +
> +    MessageId = (UINT32) strtoul (MessageIdString, NULL, 0);
> +
> +    /* search the existing list for a matching message ID */
> +
> +    while (Current && Current->MessageId != MessageId )
> +    {
> +        Current = Current->Next;
> +    }
> +    if (!Current)
> +    {
> +        /* ID was not found, create a new node for this message ID */
> +
> +        Current = UtLocalCalloc (sizeof (ASL_EXPECTED_MSG_NODE));
> +
> +        Current->Next = AslGbl_ExpectedErrorCodeList;
> +        Current->MessageIdStr = MessageIdString;
> +        Current->MessageId = MessageId;
> +        AslGbl_ExpectedErrorCodeList = Current;
> +    }
> +
> +    NewErrorLocationNode->Next = Current->LocationList;
> +    Current->LocationList = NewErrorLocationNode;
> +}
> +
> +
>  /*******************************************************************************
>   *
>   * FUNCTION:    AslDisableException
> @@ -1272,6 +1355,7 @@ AslElevateException (
>      return (AE_OK);
>  }
>  
> +
>  /*******************************************************************************
>   *
>   * FUNCTION:    AslIsExceptionDisabled
> @@ -1288,9 +1372,13 @@ AslElevateException (
>  
>  static BOOLEAN
>  AslIsExceptionExpected (
> +    char                    *Filename,
> +    UINT32                  LineNumber,
>      UINT8                   Level,
>      UINT16                  MessageId)
>  {
> +    ASL_EXPECTED_MSG_NODE   *Current = AslGbl_ExpectedErrorCodeList;
> +    ASL_LOCATION_NODE       *CurrentErrorLocation;
>      UINT32                  EncodedMessageId;
>      UINT32                  i;
>  
> @@ -1308,6 +1396,28 @@ AslIsExceptionExpected (
>          }
>      }
>  
> +    while (Current && Current->MessageId != EncodedMessageId)
> +    {
> +        Current = Current->Next;
> +    }
> +    if (!Current)
> +    {
> +        return (FALSE);
> +    }
> +
> +    CurrentErrorLocation = Current->LocationList;
> +
> +    while (CurrentErrorLocation)
> +    {
> +        if (!strcmp (CurrentErrorLocation->Filename, Filename) &&
> +            CurrentErrorLocation->LineNumber == LineNumber)
> +        {
> +            return (CurrentErrorLocation->MessageReceived = TRUE);
> +        }
> +
> +        CurrentErrorLocation = CurrentErrorLocation->Next;
> +    }
> +
>      return (FALSE);
>  }
>  
> @@ -1410,7 +1520,8 @@ AslDualParseOpError (
>  
>      /* Check if user wants to ignore this exception */
>  
> -    if (AslIsExceptionIgnored (Level, MainMsgId) || !MainOp)
> +    if (!MainOp || AslIsExceptionIgnored (MainOp->Asl.Filename,
> +        MainOp->Asl.LogicalLineNumber, Level, MainMsgId))
>      {
>          return;
>      }
> diff --git a/src/acpica/source/compiler/aslglobal.h b/src/acpica/source/compiler/aslglobal.h
> index 1a66dea9..231ed876 100644
> --- a/src/acpica/source/compiler/aslglobal.h
> +++ b/src/acpica/source/compiler/aslglobal.h
> @@ -420,6 +420,7 @@ ASL_EXTERN char                     ASL_INIT_GLOBAL (*AslGbl_TableSignature, "NO
>  ASL_EXTERN char                     ASL_INIT_GLOBAL (*AslGbl_TableId, "NO_ID");
>  ASL_EXTERN ASL_FILE_INFO            ASL_INIT_GLOBAL (*AslGbl_Files, NULL);
>  ASL_EXTERN ASL_GLOBAL_FILE_NODE     ASL_INIT_GLOBAL (*AslGbl_FilesList, NULL);
> +ASL_EXTERN ASL_EXPECTED_MSG_NODE    ASL_INIT_GLOBAL (*AslGbl_ExpectedErrorCodeList, NULL);
>  
>  /* Specific to the -q option */
>  
> diff --git a/src/acpica/source/compiler/aslload.c b/src/acpica/source/compiler/aslload.c
> index 0d26c641..bd2fc977 100644
> --- a/src/acpica/source/compiler/aslload.c
> +++ b/src/acpica/source/compiler/aslload.c
> @@ -1018,6 +1018,74 @@ FinishNode:
>  }
>  
>  
> +/*******************************************************************************
> + *
> + * FUNCTION:    LdAnalyzeExternals
> + *
> + * PARAMETERS:  Type1
> + *              Type2
> + *
> + * RETURN:      BOOLEAN
> + *
> + * DESCRIPTION: Match Type1 and Type2 with the assumption that one might be
> + *              using external types and another might be using local types.
> + *              This should be used to compare the types found in external
> + *              declarations with types found in other external declarations or
> + *              named object declaration. This should not be used to match two
> + *              object type declarations.
> + *
> + ******************************************************************************/
> +
> +static BOOLEAN
> +LdTypesMatchExternType (
> +    ACPI_OBJECT_TYPE        Type1,
> +    ACPI_OBJECT_TYPE        Type2)
> +{
> +    BOOLEAN                 Type1IsLocal = Type1 > ACPI_TYPE_EXTERNAL_MAX;
> +    BOOLEAN                 Type2IsLocal = Type2 > ACPI_TYPE_EXTERNAL_MAX;
> +    ACPI_OBJECT_TYPE        ExternalType;
> +    ACPI_OBJECT_TYPE        LocalType;
> +
> +
> +    /*
> +     * The inputs could represent types that are local to ACPICA or types that
> +     * are known externally. Some local types, such as the OperationRegion
> +     * field units, are defined with more granularity than ACPICA local types.
> +     *
> +     * Therefore, map the local types to the external types before matching.
> +     */
> +    if (Type1IsLocal && !Type2IsLocal)
> +    {
> +        LocalType = Type1;
> +        ExternalType = Type2;
> +    }
> +    else if (!Type1IsLocal && Type2IsLocal)
> +    {
> +        LocalType = Type2;
> +        ExternalType = Type1;
> +    }
> +    else
> +    {
> +        return (Type1 == Type2);
> +    }
> +
> +    switch (LocalType)
> +    {
> +        case ACPI_TYPE_LOCAL_REGION_FIELD:
> +        case ACPI_TYPE_LOCAL_BANK_FIELD:
> +        case ACPI_TYPE_LOCAL_INDEX_FIELD:
> +
> +            LocalType = ACPI_TYPE_FIELD_UNIT;
> +            break;
> +
> +        default:
> +            break;
> +    }
> +
> +    return (LocalType == ExternalType);
> +}
> +
> +
>  /*******************************************************************************
>   *
>   * FUNCTION:    LdAnalyzeExternals
> @@ -1072,12 +1140,12 @@ LdAnalyzeExternals (
>  
>      if ((ActualOpType != ACPI_TYPE_ANY) &&
>          (ActualExternalOpType != ACPI_TYPE_ANY) &&
> -        (ActualExternalOpType != ActualOpType))
> +        !LdTypesMatchExternType (ActualExternalOpType, ActualOpType))
>      {
>          if (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL &&
>              Node->Op->Asl.ParseOpcode == PARSEOP_EXTERNAL)
>          {
> -            AslDualParseOpError (ASL_ERROR,
> +            AslDualParseOpError (ASL_WARNING,
>                  ASL_MSG_DUPLICATE_EXTERN_MISMATCH, Op, NULL,
>                  ASL_MSG_DUPLICATE_EXTERN_FOUND_HERE, Node->Op, NULL);
>          }
> @@ -1094,7 +1162,7 @@ LdAnalyzeExternals (
>                  ExternalOp = Node->Op;
>                  ActualOp = Op;
>              }
> -            AslDualParseOpError (ASL_ERROR,
> +            AslDualParseOpError (ASL_WARNING,
>                  ASL_MSG_DECLARATION_TYPE_MISMATCH, ExternalOp, NULL,
>                  ASL_MSG_TYPE_MISMATCH_FOUND_HERE, ActualOp, NULL);
>          }
> @@ -1139,18 +1207,8 @@ LdAnalyzeExternals (
>      {
>          /* Allow update of externals of unknown type. */
>  
> -        if (AcpiNsOpensScope (ExternalOpType))
> -        {
> -            Node->Type = (UINT8) ExternalOpType;
> -            Status = AE_OK;
> -        }
> -        else
> -        {
> -            sprintf (AslGbl_MsgBuffer, "%s [%s]", Op->Asl.ExternalName,
> -                AcpiUtGetTypeName (Node->Type));
> -            AslError (ASL_ERROR, ASL_MSG_SCOPE_TYPE, Op, AslGbl_MsgBuffer);
> -            Status = AE_ERROR;
> -        }
> +        Node->Type = (UINT8) ExternalOpType;
> +        Status = AE_OK;
>      }
>  
>      return (Status);
> diff --git a/src/acpica/source/compiler/asloptions.c b/src/acpica/source/compiler/asloptions.c
> index e3b3f8e7..4bf9465b 100644
> --- a/src/acpica/source/compiler/asloptions.c
> +++ b/src/acpica/source/compiler/asloptions.c
> @@ -948,7 +948,7 @@ AslDoOptions (
>                  return (-1);
>              }
>  
> -            Status = AslExpectException (AcpiGbl_Optarg);
> +            Status = AslLogExpectedException (AcpiGbl_Optarg);
>              if (ACPI_FAILURE (Status))
>              {
>                  return (-1);
> diff --git a/src/acpica/source/compiler/asltypes.h b/src/acpica/source/compiler/asltypes.h
> index cd54dbc0..33c547e4 100644
> --- a/src/acpica/source/compiler/asltypes.h
> +++ b/src/acpica/source/compiler/asltypes.h
> @@ -381,12 +381,37 @@ typedef struct asl_error_msg
>  
>  typedef struct asl_expected_message
>  {
> -    UINT32                       MessageId;
> -    char                         *MessageIdStr;
> -    BOOLEAN                      MessageReceived;
> +    UINT32                      MessageId;
> +    char                        *MessageIdStr;
> +    BOOLEAN                     MessageReceived;
>  
>  } ASL_EXPECTED_MESSAGE;
>  
> +/*
> + * An entry in the line-based expected messages list
> + *
> + * TBD: might be possible to merge this with ASL_EXPECTED_MESSAGE
> + */
> +typedef struct asl_expected_msg_node
> +{
> +    struct asl_expected_msg_node    *Next;
> +    UINT32                          MessageId;
> +    char                            *MessageIdStr;
> +    struct asl_location_node        *LocationList;
> +
> +} ASL_EXPECTED_MSG_NODE;
> +
> +typedef struct asl_location_node
> +{
> +    struct asl_location_node    *Next;
> +    char                        *Filename;
> +    UINT32                      LineNumber;
> +    UINT32                      Column;
> +    UINT32                      LogicalByteOffset;
> +    BOOLEAN                     MessageReceived;
> +
> +} ASL_LOCATION_NODE;
> +
>  
>  /* An entry in the listing file stack (for include files) */
>  
> diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h
> index 9d9008a8..18de92ff 100644
> --- a/src/acpica/source/compiler/dtcompiler.h
> +++ b/src/acpica/source/compiler/dtcompiler.h
> @@ -461,7 +461,6 @@ DtCreateTableUnit (
>  
>  /* dtparser - lex/yacc files */
>  
> -UINT64                      DtCompilerParserResult; /* Expression return value */
>  int
>  DtCompilerParserparse (
>      void);
> diff --git a/src/acpica/source/compiler/dtcompilerparser.l b/src/acpica/source/compiler/dtcompilerparser.l
> index 28dcf6af..ecc07c48 100644
> --- a/src/acpica/source/compiler/dtcompilerparser.l
> +++ b/src/acpica/source/compiler/dtcompilerparser.l
> @@ -153,7 +153,6 @@
>  #include "aslcompiler.h"
>  #include "dtcompilerparser.y.h"
>  
> -YYSTYPE DtCompilerlval;
>  
>  #define _COMPONENT          ACPI_COMPILER
>          ACPI_MODULE_NAME    ("dtcompilerscanner")
> diff --git a/src/acpica/source/compiler/dtcompilerparser.y b/src/acpica/source/compiler/dtcompilerparser.y
> index 43eba4e9..e97e2a90 100644
> --- a/src/acpica/source/compiler/dtcompilerparser.y
> +++ b/src/acpica/source/compiler/dtcompilerparser.y
> @@ -170,7 +170,6 @@ extern char                 *DtCompilerParsertext;
>  extern DT_FIELD             *AslGbl_CurrentField;
>  
>  extern int                  DtLabelByteOffset;
> -extern UINT64               DtCompilerParserResult; /* Expression return value */
>  extern UINT64               DtCompilerParserlineno; /* Current line number */
>  
>  extern UINT32               DtTokenFirstLine;
> diff --git a/src/acpica/source/compiler/dtparser.l b/src/acpica/source/compiler/dtparser.l
> index ff7df507..631921df 100644
> --- a/src/acpica/source/compiler/dtparser.l
> +++ b/src/acpica/source/compiler/dtparser.l
> @@ -208,7 +208,7 @@ NewLine         [\n]
>  /*
>   * Local support functions
>   */
> -YY_BUFFER_STATE         LexBuffer;
> +static YY_BUFFER_STATE         LexBuffer;
>  
>  /******************************************************************************
>   *
> diff --git a/src/acpica/source/compiler/dttable1.c b/src/acpica/source/compiler/dttable1.c
> index c7256b77..33df4dc2 100644
> --- a/src/acpica/source/compiler/dttable1.c
> +++ b/src/acpica/source/compiler/dttable1.c
> @@ -1967,11 +1967,16 @@ DtCompileIvrs (
>  
>          switch (IvrsHeader->Type)
>          {
> -        case ACPI_IVRS_TYPE_HARDWARE:
> +        case ACPI_IVRS_TYPE_HARDWARE1:
>  
>              InfoTable = AcpiDmTableInfoIvrs0;
>              break;
>  
> +        case ACPI_IVRS_TYPE_HARDWARE2:
> +
> +            InfoTable = AcpiDmTableInfoIvrs01;
> +            break;
> +
>          case ACPI_IVRS_TYPE_MEMORY1:
>          case ACPI_IVRS_TYPE_MEMORY2:
>          case ACPI_IVRS_TYPE_MEMORY3:
> @@ -1994,7 +1999,8 @@ DtCompileIvrs (
>          ParentTable = DtPeekSubtable ();
>          DtInsertSubtable (ParentTable, Subtable);
>  
> -        if (IvrsHeader->Type == ACPI_IVRS_TYPE_HARDWARE)
> +        if (IvrsHeader->Type == ACPI_IVRS_TYPE_HARDWARE1 ||
> +            IvrsHeader->Type == ACPI_IVRS_TYPE_HARDWARE2)
>          {
>              while (*PFieldList &&
>                  !strcmp ((*PFieldList)->Name, "Entry Type"))
> diff --git a/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c
> index 067d0ece..bb07894e 100644
> --- a/src/acpica/source/compiler/dtutils.c
> +++ b/src/acpica/source/compiler/dtutils.c
> @@ -189,7 +189,8 @@ DtError (
>  
>      /* Check if user wants to ignore this exception */
>  
> -    if (AslIsExceptionIgnored (Level, MessageId))
> +    if (AslIsExceptionIgnored (AslGbl_Files[ASL_FILE_INPUT].Filename,
> +        FieldObject->Line, Level, MessageId))
>      {
>          return;
>      }
> diff --git a/src/acpica/source/compiler/prparser.l b/src/acpica/source/compiler/prparser.l
> index 65595fa8..8752d3fc 100644
> --- a/src/acpica/source/compiler/prparser.l
> +++ b/src/acpica/source/compiler/prparser.l
> @@ -224,7 +224,7 @@ Identifier      [a-zA-Z][0-9a-zA-Z]*
>  /*
>   * Local support functions
>   */
> -YY_BUFFER_STATE         LexBuffer;
> +static YY_BUFFER_STATE         LexBuffer;
>  
>  
>  /******************************************************************************
> diff --git a/src/acpica/source/components/debugger/dbinput.c b/src/acpica/source/components/debugger/dbinput.c
> index 0bfe9947..378e3db1 100644
> --- a/src/acpica/source/components/debugger/dbinput.c
> +++ b/src/acpica/source/components/debugger/dbinput.c
> @@ -637,19 +637,16 @@ AcpiDbGetNextToken (
>          return (NULL);
>      }
>  
> -    /* Remove any spaces at the beginning */
> +    /* Remove any spaces at the beginning, ignore blank lines */
>  
> -    if (*String == ' ')
> +    while (*String && isspace (*String))
>      {
> -        while (*String && (*String == ' '))
> -        {
> -            String++;
> -        }
> +        String++;
> +    }
>  
> -        if (!(*String))
> -        {
> -            return (NULL);
> -        }
> +    if (!(*String))
> +    {
> +        return (NULL);
>      }
>  
>      switch (*String)
> @@ -754,7 +751,7 @@ AcpiDbGetNextToken (
>  
>          /* Find end of token */
>  
> -        while (*String && (*String != ' '))
> +        while (*String && !isspace (*String))
>          {
>              String++;
>          }
> diff --git a/src/acpica/source/components/debugger/dbxface.c b/src/acpica/source/components/debugger/dbxface.c
> index e7d354d8..f84db8c9 100644
> --- a/src/acpica/source/components/debugger/dbxface.c
> +++ b/src/acpica/source/components/debugger/dbxface.c
> @@ -594,6 +594,7 @@ AcpiInitializeDebugger (
>      AcpiGbl_DbOutputFlags       = ACPI_DB_CONSOLE_OUTPUT;
>  
>      AcpiGbl_DbOpt_NoIniMethods  = FALSE;
> +    AcpiGbl_DbOpt_NoRegionSupport = FALSE;
>  
>      AcpiGbl_DbBuffer = AcpiOsAllocate (ACPI_DEBUG_BUFFER_SIZE);
>      if (!AcpiGbl_DbBuffer)
> diff --git a/src/acpica/source/components/dispatcher/dswexec.c b/src/acpica/source/components/dispatcher/dswexec.c
> index f2925ecf..3fa7b95b 100644
> --- a/src/acpica/source/components/dispatcher/dswexec.c
> +++ b/src/acpica/source/components/dispatcher/dswexec.c
> @@ -158,7 +158,9 @@
>  #include "acinterp.h"
>  #include "acnamesp.h"
>  #include "acdebug.h"
> -
> +#ifdef ACPI_EXEC_APP
> +#include "aecommon.h"
> +#endif
>  
>  #define _COMPONENT          ACPI_DISPATCHER
>          ACPI_MODULE_NAME    ("dswexec")
> @@ -504,7 +506,10 @@ AcpiDsExecEndOp (
>      UINT32                  OpClass;
>      ACPI_PARSE_OBJECT       *NextOp;
>      ACPI_PARSE_OBJECT       *FirstArg;
> -
> +#ifdef ACPI_EXEC_APP
> +    char                    *Namepath;
> +    ACPI_OPERAND_OBJECT     *ObjDesc;
> +#endif
>  
>      ACPI_FUNCTION_TRACE_PTR (DsExecEndOp, WalkState);
>  
> @@ -717,6 +722,29 @@ AcpiDsExecEndOp (
>              }
>  
>              Status = AcpiDsEvalBufferFieldOperands (WalkState, Op);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                break;
> +            }
> +
> +#ifdef ACPI_EXEC_APP
> +            /*
> +             * AcpiExec support for namespace initialization file (initialize
> +             * BufferFields in this code.)
> +             */
> +            Namepath = AcpiNsGetExternalPathname (Op->Common.Node);
> +            Status = AeLookupInitFileEntry (Namepath, &ObjDesc);
> +            if (ACPI_SUCCESS (Status))
> +            {
> +                Status = AcpiExWriteDataToField (ObjDesc, Op->Common.Node->Object, NULL);
> +                if ACPI_FAILURE (Status)
> +                {
> +                    ACPI_EXCEPTION ((AE_INFO, Status, "While writing to buffer field"));
> +                }
> +            }
> +            ACPI_FREE (Namepath);
> +            Status = AE_OK;
> +#endif
>              break;
>  
>  
> diff --git a/src/acpica/source/components/dispatcher/dswload.c b/src/acpica/source/components/dispatcher/dswload.c
> index d37bd5d4..62a4fdca 100644
> --- a/src/acpica/source/components/dispatcher/dswload.c
> +++ b/src/acpica/source/components/dispatcher/dswload.c
> @@ -156,7 +156,6 @@
>  #include "acdispat.h"
>  #include "acinterp.h"
>  #include "acnamesp.h"
> -
>  #ifdef ACPI_ASL_COMPILER
>  #include "acdisasm.h"
>  #endif
> @@ -555,7 +554,6 @@ AcpiDsLoad1EndOp (
>      ACPI_PARSE_OBJECT       *Op;
>      ACPI_OBJECT_TYPE        ObjectType;
>      ACPI_STATUS             Status = AE_OK;
> -
>  #ifdef ACPI_ASL_COMPILER
>      UINT8                   ParamCount;
>  #endif
> diff --git a/src/acpica/source/components/dispatcher/dswload2.c b/src/acpica/source/components/dispatcher/dswload2.c
> index ff2135ce..0ab715cd 100644
> --- a/src/acpica/source/components/dispatcher/dswload2.c
> +++ b/src/acpica/source/components/dispatcher/dswload2.c
> @@ -157,6 +157,9 @@
>  #include "acinterp.h"
>  #include "acnamesp.h"
>  #include "acevents.h"
> +#ifdef ACPI_EXEC_APP
> +#include "aecommon.h"
> +#endif
>  
>  #define _COMPONENT          ACPI_DISPATCHER
>          ACPI_MODULE_NAME    ("dswload2")
> @@ -531,6 +534,10 @@ AcpiDsLoad2EndOp (
>      ACPI_NAMESPACE_NODE     *NewNode;
>      UINT32                  i;
>      UINT8                   RegionSpace;
> +#ifdef ACPI_EXEC_APP
> +    ACPI_OPERAND_OBJECT     *ObjDesc;
> +    char                    *Namepath;
> +#endif
>  
>  
>      ACPI_FUNCTION_TRACE (DsLoad2EndOp);
> @@ -627,6 +634,11 @@ AcpiDsLoad2EndOp (
>           * be evaluated later during the execution phase
>           */
>          Status = AcpiDsCreateBufferField (Op, WalkState);
> +        if ACPI_FAILURE (Status)
> +        {
> +            ACPI_EXCEPTION ((AE_INFO, Status, "CreateBufferField failure"));
> +            goto Cleanup;
> +        }
>          break;
>  
>       case AML_TYPE_NAMED_FIELD:
> @@ -766,6 +778,31 @@ AcpiDsLoad2EndOp (
>          case AML_NAME_OP:
>  
>              Status = AcpiDsCreateNode (WalkState, Node, Op);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                goto Cleanup;
> +            }
> +
> +#ifdef ACPI_EXEC_APP
> +            /*
> +             * AcpiExec support for namespace initialization file (initialize
> +             * Name opcodes in this code.)
> +             */
> +            Namepath = AcpiNsGetExternalPathname (Node);
> +            Status = AeLookupInitFileEntry (Namepath, &ObjDesc);
> +            if (ACPI_SUCCESS (Status))
> +            {
> +                /* Detach any existing object, attach new object */
> +
> +                if (Node->Object)
> +                {
> +                    AcpiNsDetachObject (Node);
> +                }
> +                AcpiNsAttachObject (Node, ObjDesc, ObjDesc->Common.Type);
> +            }
> +            ACPI_FREE (Namepath);
> +            Status = AE_OK;
> +#endif
>              break;
>  
>          case AML_METHOD_OP:
> diff --git a/src/acpica/source/components/hardware/hwsleep.c b/src/acpica/source/components/hardware/hwsleep.c
> index 016f62be..d503f1cf 100644
> --- a/src/acpica/source/components/hardware/hwsleep.c
> +++ b/src/acpica/source/components/hardware/hwsleep.c
> @@ -466,11 +466,11 @@ AcpiHwLegacyWake (
>  
>      /* Enable sleep button */
>  
> -	(void) AcpiWriteBitRegister (
> +    (void) AcpiWriteBitRegister (
>              AcpiGbl_FixedEventInfo[ACPI_EVENT_SLEEP_BUTTON].EnableRegisterId,
>              ACPI_ENABLE_EVENT);
>  
> -	(void) AcpiWriteBitRegister (
> +    (void) AcpiWriteBitRegister (
>              AcpiGbl_FixedEventInfo[ACPI_EVENT_SLEEP_BUTTON].StatusRegisterId,
>              ACPI_CLEAR_STATUS);
>  
> diff --git a/src/acpica/source/components/namespace/nsnames.c b/src/acpica/source/components/namespace/nsnames.c
> index a9509195..a27a87f0 100644
> --- a/src/acpica/source/components/namespace/nsnames.c
> +++ b/src/acpica/source/components/namespace/nsnames.c
> @@ -158,12 +158,6 @@
>  #define _COMPONENT          ACPI_NAMESPACE
>          ACPI_MODULE_NAME    ("nsnames")
>  
> -/* Local Prototypes */
> -
> -static void
> -AcpiNsNormalizePathname (
> -    char                    *OriginalPath);
> -
>  
>  /*******************************************************************************
>   *
> @@ -616,7 +610,7 @@ Cleanup:
>   *
>   ******************************************************************************/
>  
> -static void
> +void
>  AcpiNsNormalizePathname (
>      char                    *OriginalPath)
>  {
> diff --git a/src/acpica/source/components/utilities/utdecode.c b/src/acpica/source/components/utilities/utdecode.c
> index aec32969..01b1823e 100644
> --- a/src/acpica/source/components/utilities/utdecode.c
> +++ b/src/acpica/source/components/utilities/utdecode.c
> @@ -224,7 +224,7 @@ const char        *AcpiGbl_RegionTypes[ACPI_NUM_PREDEFINED_REGIONS] =
>      "IPMI",              /* 0x07 */
>      "GeneralPurposeIo",  /* 0x08 */
>      "GenericSerialBus",  /* 0x09 */
> -    "PlatformCommChannel"/* 0x0A */
> +    "PCC"                /* 0x0A */
>  };
>  
>  
> diff --git a/src/acpica/source/components/utilities/utdelete.c b/src/acpica/source/components/utilities/utdelete.c
> index 2f60917b..502ff413 100644
> --- a/src/acpica/source/components/utilities/utdelete.c
> +++ b/src/acpica/source/components/utilities/utdelete.c
> @@ -626,13 +626,13 @@ AcpiUtUpdateRefCount (
>   *
>   * FUNCTION:    AcpiUtUpdateObjectReference
>   *
> - * PARAMETERS:  Object              - Increment ref count for this object
> - *                                    and all sub-objects
> + * PARAMETERS:  Object              - Increment or decrement the ref count for
> + *                                    this object and all sub-objects
>   *              Action              - Either REF_INCREMENT or REF_DECREMENT
>   *
>   * RETURN:      Status
>   *
> - * DESCRIPTION: Increment the object reference count
> + * DESCRIPTION: Increment or decrement the object reference count
>   *
>   * Object references are incremented when:
>   * 1) An object is attached to a Node (namespace object)
> @@ -671,7 +671,7 @@ AcpiUtUpdateObjectReference (
>          }
>  
>          /*
> -         * All sub-objects must have their reference count incremented
> +         * All sub-objects must have their reference count updated
>           * also. Different object types have different subobjects.
>           */
>          switch (Object->Common.Type)
> @@ -740,6 +740,7 @@ AcpiUtUpdateObjectReference (
>                      break;
>                  }
>              }
> +
>              NextObject = NULL;
>              break;
>  
> diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h
> index 960af4b0..d0ffe390 100644
> --- a/src/acpica/source/include/acdisasm.h
> +++ b/src/acpica/source/include/acdisasm.h
> @@ -457,6 +457,7 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIortMap[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIortPad[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs0[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs01[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs1[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs4[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs8a[];
> diff --git a/src/acpica/source/include/acnamesp.h b/src/acpica/source/include/acnamesp.h
> index 3dd605a0..48b36593 100644
> --- a/src/acpica/source/include/acnamesp.h
> +++ b/src/acpica/source/include/acnamesp.h
> @@ -487,6 +487,10 @@ AcpiNsBuildNormalizedPath (
>      UINT32                  PathSize,
>      BOOLEAN                 NoTrailing);
>  
> +void
> +AcpiNsNormalizePathname (
> +    char                    *OriginalPath);
> +
>  char *
>  AcpiNsGetNormalizedPathname (
>      ACPI_NAMESPACE_NODE     *Node,
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index a39d180e..eeb63cd5 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                 0x20200214
> +#define ACPI_CA_VERSION                 0x20200326
>  
>  #include "acconfig.h"
>  #include "actypes.h"
> diff --git a/src/acpica/source/include/actbinfo.h b/src/acpica/source/include/actbinfo.h
> index 74da8bac..59c38a29 100644
> --- a/src/acpica/source/include/actbinfo.h
> +++ b/src/acpica/source/include/actbinfo.h
> @@ -264,7 +264,8 @@
>  #define ACPI_IORTH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_IORT_NODE,f)
>  #define ACPI_IORTM_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_IORT_ID_MAPPING,f)
>  #define ACPI_IVRSH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_IVRS_HEADER,f)
> -#define ACPI_IVRS0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_IVRS_HARDWARE,f)
> +#define ACPI_IVRS0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_IVRS_HARDWARE1,f)
> +#define ACPI_IVRS01_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_IVRS_HARDWARE2,f)
>  #define ACPI_IVRS1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_IVRS_MEMORY,f)
>  #define ACPI_IVRSD_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_IVRS_DE_HEADER,f)
>  #define ACPI_IVRS8A_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_IVRS_DEVICE8A,f)
> diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h
> index fe17576b..2f1dd299 100644
> --- a/src/acpica/source/include/actbl2.h
> +++ b/src/acpica/source/include/actbl2.h
> @@ -187,6 +187,7 @@
>  #define ACPI_SIG_SBST           "SBST"      /* Smart Battery Specification Table */
>  #define ACPI_SIG_SDEI           "SDEI"      /* Software Delegated Exception Interface Table */
>  #define ACPI_SIG_SDEV           "SDEV"      /* Secure Devices table */
> +#define ACPI_SIG_NHLT           "NHLT"      /* Non-HDAudio Link Table */
>  
>  
>  /*
> @@ -457,7 +458,8 @@ typedef struct acpi_ivrs_header
>  
>  enum AcpiIvrsType
>  {
> -    ACPI_IVRS_TYPE_HARDWARE         = 0x10,
> +    ACPI_IVRS_TYPE_HARDWARE1        = 0x10,
> +    ACPI_IVRS_TYPE_HARDWARE2        = 0x11,
>      ACPI_IVRS_TYPE_MEMORY1          = 0x20,
>      ACPI_IVRS_TYPE_MEMORY2          = 0x21,
>      ACPI_IVRS_TYPE_MEMORY3          = 0x22
> @@ -485,16 +487,30 @@ enum AcpiIvrsType
>  
>  /* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */
>  
> -typedef struct acpi_ivrs_hardware
> +typedef struct acpi_ivrs_hardware_10
>  {
>      ACPI_IVRS_HEADER        Header;
>      UINT16                  CapabilityOffset;   /* Offset for IOMMU control fields */
>      UINT64                  BaseAddress;        /* IOMMU control registers */
>      UINT16                  PciSegmentGroup;
>      UINT16                  Info;               /* MSI number and unit ID */
> -    UINT32                  Reserved;
> +    UINT32                  FeatureReporting;
> +
> +} ACPI_IVRS_HARDWARE1;
> +
> +/* 0x11: I/O Virtualization Hardware Definition Block (IVHD) */
>  
> -} ACPI_IVRS_HARDWARE;
> +typedef struct acpi_ivrs_hardware_11
> +{
> +    ACPI_IVRS_HEADER        Header;
> +    UINT16                  CapabilityOffset;   /* Offset for IOMMU control fields */
> +    UINT64                  BaseAddress;        /* IOMMU control registers */
> +    UINT16                  PciSegmentGroup;
> +    UINT16                  Info;               /* MSI number and unit ID */
> +    UINT32                  Attributes;
> +    UINT64                  EfrRegisterImage;
> +    UINT64                  Reserved;
> +} ACPI_IVRS_HARDWARE2;
>  
>  /* Masks for Info field above */
>  
> diff --git a/src/acpica/source/include/actbl3.h b/src/acpica/source/include/actbl3.h
> index cfae7c42..74d4648a 100644
> --- a/src/acpica/source/include/actbl3.h
> +++ b/src/acpica/source/include/actbl3.h
> @@ -183,7 +183,7 @@
>  #define ACPI_SIG_WDDT           "WDDT"      /* Watchdog Timer Description Table */
>  #define ACPI_SIG_WDRT           "WDRT"      /* Watchdog Resource Table */
>  #define ACPI_SIG_WPBT           "WPBT"      /* Windows Platform Binary Table */
> -#define ACPI_SIG_WSMT           "WSMT"      /* Windows SMM Security Migrations Table */
> +#define ACPI_SIG_WSMT           "WSMT"      /* Windows SMM Security Mitigations Table */
>  #define ACPI_SIG_XENV           "XENV"      /* Xen Environment table */
>  #define ACPI_SIG_XXXX           "XXXX"      /* Intermediate AML header for ASL/ASL+ converter */
>  
> @@ -904,10 +904,10 @@ typedef struct acpi_table_wpbt
>  
>  /*******************************************************************************
>   *
> - * WSMT - Windows SMM Security Migrations Table
> + * WSMT - Windows SMM Security Mitigations Table
>   *        Version 1
>   *
> - * Conforms to "Windows SMM Security Migrations Table",
> + * Conforms to "Windows SMM Security Mitigations Table",
>   * Version 1.0, April 18, 2016
>   *
>   ******************************************************************************/
> diff --git a/src/acpica/source/include/acuuid.h b/src/acpica/source/include/acuuid.h
> index bcbf6b1d..b856219c 100644
> --- a/src/acpica/source/include/acuuid.h
> +++ b/src/acpica/source/include/acuuid.h
> @@ -200,4 +200,4 @@
>  #define UUID_DEVICE_PROPERTIES          "daffd814-6eba-4d8c-8a91-bc9bbf4aa301"
>  
>  
> -#endif /* __AUUID_H__ */
> +#endif /* __ACUUID_H__ */
> diff --git a/src/acpica/source/tools/acpiexec/aecommon.h b/src/acpica/source/tools/acpiexec/aecommon.h
> index d9ade0b6..9dbb3fac 100644
> --- a/src/acpica/source/tools/acpiexec/aecommon.h
> +++ b/src/acpica/source/tools/acpiexec/aecommon.h
> @@ -195,7 +195,9 @@ typedef struct ae_debug_regions
>  typedef struct init_file_entry
>  {
>      char                    *Name;
> +    char                    *Value;
>      ACPI_OPERAND_OBJECT     *ObjDesc;
> +    BOOLEAN                 IsUsed;
>  
>  } INIT_FILE_ENTRY;
>  
> @@ -346,19 +348,23 @@ int
>  AeOpenInitializationFile (
>      char                    *Filename);
>  
> -void
> +ACPI_STATUS
>  AeProcessInitFile (
>      void);
>  
> -ACPI_STATUS
> -AeSetupConfiguration (
> -    void                    *RegionAddr);
> -
>  ACPI_STATUS
>  AeLookupInitFileEntry (
>      char                    *Pathname,
>      ACPI_OPERAND_OBJECT     **ObjDesc);
>  
> +void
> +AeDisplayUnusedInitFileItems (
> +    void);
> +
> +void
> +AeDeleteInitFileList (
> +    void);
> +
>  /* aeexec */
>  
>  void
> @@ -376,6 +382,10 @@ AeGetDevices (
>      void                    *Context,
>      void                    **ReturnValue);
>  
> +ACPI_STATUS
> +AeSetupConfiguration (
> +    void                    *RegionAddr);
> +
>  ACPI_STATUS
>  ExecuteOSI (
>      char                    *OsiString,
> diff --git a/src/acpica/source/tools/acpiexec/aeinitfile.c b/src/acpica/source/tools/acpiexec/aeinitfile.c
> index 0813c873..ce758ed1 100644
> --- a/src/acpica/source/tools/acpiexec/aeinitfile.c
> +++ b/src/acpica/source/tools/acpiexec/aeinitfile.c
> @@ -151,24 +151,17 @@
>  
>  #include "aecommon.h"
>  #include "acdispat.h"
> +#include "acnamesp.h"
> +
>  
>  #define _COMPONENT          ACPI_TOOLS
>          ACPI_MODULE_NAME    ("aeinitfile")
>  
>  
> -/* Local prototypes */
> -
> -static void
> -AeEnterInitFileEntry (
> -    INIT_FILE_ENTRY         InitEntry,
> -    ACPI_WALK_STATE         *WalkState);
> -
> -
>  #define AE_FILE_BUFFER_SIZE     512
>  
>  static char                 LineBuffer[AE_FILE_BUFFER_SIZE];
>  static char                 NameBuffer[AE_FILE_BUFFER_SIZE];
> -static char                 ValueBuffer[AE_FILE_BUFFER_SIZE];
>  static FILE                 *InitFile;
>  
>  
> @@ -211,23 +204,23 @@ AeOpenInitializationFile (
>   * RETURN:      None
>   *
>   * DESCRIPTION: Read the initialization file and perform all namespace
> - *              initializations. AcpiGbl_InitEntries will be used for region
> - *              field initialization.
> + *              initializations. AcpiGbl_InitEntries will be used for all
> + *              object initialization.
>   *
>   * NOTE:        The format of the file is multiple lines, each of format:
> - *                  <ACPI-pathname> <Integer Value>
> + *                  <ACPI-pathname> <New Value>
>   *
>   *****************************************************************************/
>  
> -void
> -AeProcessInitFile(
> +ACPI_STATUS
> +AeProcessInitFile (
>      void)
>  {
>      ACPI_WALK_STATE         *WalkState;
>      UINT64                  idx;
> -    ACPI_STATUS             Status;
> +    ACPI_STATUS             Status = AE_OK;
>      char                    *Token;
> -    char                    *ObjectBuffer;
> +    char                    *ValueBuffer;
>      char                    *TempNameBuffer;
>      ACPI_OBJECT_TYPE        Type;
>      ACPI_OBJECT             TempObject;
> @@ -235,13 +228,14 @@ AeProcessInitFile(
>  
>      if (!InitFile)
>      {
> -        return;
> +        return (AE_OK);
>      }
>  
>      /* Create needed objects to be reused for each init entry */
>  
>      WalkState = AcpiDsCreateWalkState (0, NULL, NULL, NULL);
>      NameBuffer[0] = '\\';
> +    NameBuffer[1] = 0;
>  
>      while (fgets (LineBuffer, AE_FILE_BUFFER_SIZE, InitFile) != NULL)
>      {
> @@ -249,12 +243,20 @@ AeProcessInitFile(
>      }
>      rewind (InitFile);
>  
> +    /*
> +     * Allocate and populate the Gbl_InitEntries array
> +     */
>      AcpiGbl_InitEntries =
> -        AcpiOsAllocate (sizeof (INIT_FILE_ENTRY) * AcpiGbl_InitFileLineCount);
> +        AcpiOsAllocateZeroed (sizeof (INIT_FILE_ENTRY) * AcpiGbl_InitFileLineCount);
>      for (idx = 0; fgets (LineBuffer, AE_FILE_BUFFER_SIZE, InitFile); ++idx)
>      {
> -
>          TempNameBuffer = AcpiDbGetNextToken (LineBuffer, &Token, &Type);
> +        if (!TempNameBuffer)
> +        {
> +            AcpiGbl_InitEntries[idx].Name = NULL;
> +            continue;
> +        }
> +
>          if (LineBuffer[0] == '\\')
>          {
>              strcpy (NameBuffer, TempNameBuffer);
> @@ -266,48 +268,67 @@ AeProcessInitFile(
>              strcpy (NameBuffer + 1, TempNameBuffer);
>          }
>  
> +        AcpiNsNormalizePathname (NameBuffer);
>          AcpiGbl_InitEntries[idx].Name =
>              AcpiOsAllocateZeroed (strnlen (NameBuffer, AE_FILE_BUFFER_SIZE) + 1);
> -
>          strcpy (AcpiGbl_InitEntries[idx].Name, NameBuffer);
>  
> -        ObjectBuffer = AcpiDbGetNextToken (Token, &Token, &Type);
> +        ValueBuffer = AcpiDbGetNextToken (Token, &Token, &Type);
> +        if (!ValueBuffer)
> +        {
> +            AcpiGbl_InitEntries[idx].Value = NULL;
> +            continue;
> +        }
> +
> +        AcpiGbl_InitEntries[idx].Value =
> +            AcpiOsAllocateZeroed (strnlen (ValueBuffer, AE_FILE_BUFFER_SIZE) + 1);
> +        strcpy (AcpiGbl_InitEntries[idx].Value, ValueBuffer);
>  
>          if (Type == ACPI_TYPE_FIELD_UNIT)
>          {
> -            Status = AcpiDbConvertToObject (ACPI_TYPE_BUFFER, ObjectBuffer,
> +            Status = AcpiDbConvertToObject (ACPI_TYPE_BUFFER, ValueBuffer,
>                  &TempObject);
>          }
>          else
>          {
> -            Status = AcpiDbConvertToObject (Type, ObjectBuffer, &TempObject);
> +            Status = AcpiDbConvertToObject (Type, ValueBuffer, &TempObject);
> +        }
> +
> +        if (ACPI_FAILURE (Status))
> +        {
> +            AcpiOsPrintf ("%s[%s]: %s\n", NameBuffer, AcpiUtGetTypeName (Type),
> +                AcpiFormatException (Status));
> +            goto CleanupAndExit;
>          }
>  
>          Status = AcpiUtCopyEobjectToIobject (&TempObject,
>              &AcpiGbl_InitEntries[idx].ObjDesc);
>  
> -        if (Type == ACPI_TYPE_BUFFER || Type == ACPI_TYPE_FIELD_UNIT)
> +        /* Cleanup the external object created by DbConvertToObject above */
> +
> +        if (ACPI_SUCCESS (Status))
>          {
> -            ACPI_FREE (TempObject.Buffer.Pointer);
> +            if (Type == ACPI_TYPE_BUFFER || Type == ACPI_TYPE_FIELD_UNIT)
> +            {
> +                ACPI_FREE (TempObject.Buffer.Pointer);
> +            }
> +            else if (Type == ACPI_TYPE_PACKAGE)
> +            {
> +                AcpiDbDeleteObjects (1, &TempObject);
> +            }
>          }
> -
> -        if (ACPI_FAILURE (Status))
> +        else
>          {
> -            AcpiOsPrintf ("%s %s\n", ValueBuffer,
> +            AcpiOsPrintf ("%s[%s]: %s\n", NameBuffer, AcpiUtGetTypeName (Type),
>                  AcpiFormatException (Status));
>              goto CleanupAndExit;
>          }
>  
>          /*
> -         * Special case for field units. Field units are dependent on the
> -         * parent region. This parent region has yet to be created so defer the
> -         * initialization until the dispatcher. For all other types, initialize
> -         * the namespace node with the value found in the init file.
> +         * Initialize the namespace node with the value found in the init file.
>           */
> -        if (Type != ACPI_TYPE_FIELD_UNIT)
> -        {
> -            AeEnterInitFileEntry (AcpiGbl_InitEntries[idx], WalkState);
> -        }
> +        AcpiOsPrintf ("Namespace object init from file: %16s, Value \"%s\", Type %s\n",
> +            AcpiGbl_InitEntries[idx].Name, AcpiGbl_InitEntries[idx].Value, AcpiUtGetTypeName (Type));
>      }
>  
>      /* Cleanup */
> @@ -315,97 +336,130 @@ AeProcessInitFile(
>  CleanupAndExit:
>      fclose (InitFile);
>      AcpiDsDeleteWalkState (WalkState);
> +    return (Status);
>  }
>  
>  
>  /******************************************************************************
>   *
> - * FUNCTION:    AeInitFileEntry
> - *
> - * PARAMETERS:  InitEntry           - Entry of the init file
> - *              WalkState           - Used for the Store operation
> + * FUNCTION:    AeLookupInitFileEntry
>   *
> - * RETURN:      None
> + * PARAMETERS:  Pathname            - AML namepath in external format
> + *              ObjDesc             - Where the object is returned if it exists
>   *
> - * DESCRIPTION: Perform initialization of a single namespace object
> + * RETURN:      Status. AE_OK if a match was found
>   *
> - *              Note: namespace of objects are limited to integers and region
> - *              fields units of 8 bytes at this time.
> + * DESCRIPTION: Search the init file for a particular name and its value.
>   *
>   *****************************************************************************/
>  
> -static void
> -AeEnterInitFileEntry (
> -    INIT_FILE_ENTRY         InitEntry,
> -    ACPI_WALK_STATE         *WalkState)
> +ACPI_STATUS
> +AeLookupInitFileEntry (
> +    char                    *Pathname,
> +    ACPI_OPERAND_OBJECT     **ObjDesc)
>  {
> -    char                    *Pathname = InitEntry.Name;
> -    ACPI_OPERAND_OBJECT     *ObjDesc = InitEntry.ObjDesc;
> -    ACPI_NAMESPACE_NODE     *NewNode;
> -    ACPI_STATUS             Status;
> +    UINT32                  i;
>  
> +    ACPI_FUNCTION_TRACE (AeLookupInitFileEntry);
>  
> -    Status = AcpiNsLookup (NULL, Pathname, ObjDesc->Common.Type,
> -        ACPI_IMODE_LOAD_PASS2, ACPI_NS_ERROR_IF_FOUND | ACPI_NS_NO_UPSEARCH |
> -        ACPI_NS_EARLY_INIT, NULL, &NewNode);
> -    if (ACPI_FAILURE (Status))
> +    ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Lookup: %s\n", Pathname));
> +
> +    if (!AcpiGbl_InitEntries)
>      {
> -        ACPI_EXCEPTION ((AE_INFO, Status,
> -            "While creating name from namespace initialization file: %s",
> -            Pathname));
> -        return;
> +        return (AE_NOT_FOUND);
>      }
>  
> -    /* Store pointer to value descriptor in the Node */
> +    AcpiNsNormalizePathname (Pathname);
>  
> -    Status = AcpiNsAttachObject (NewNode, ObjDesc,
> -         ObjDesc->Common.Type);
> -    if (ACPI_FAILURE (Status))
> +    for (i = 0; i < AcpiGbl_InitFileLineCount; ++i)
>      {
> -        ACPI_EXCEPTION ((AE_INFO, Status,
> -            "While attaching object to node from namespace initialization file: %s",
> -            Pathname));
> -        return;
> +        if (AcpiGbl_InitEntries[i].Name &&
> +            !strcmp (AcpiGbl_InitEntries[i].Name, Pathname))
> +        {
> +            *ObjDesc = AcpiGbl_InitEntries[i].ObjDesc;
> +            AcpiGbl_InitEntries[i].IsUsed = TRUE;
> +            ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Found match: %s, %p\n", Pathname, *ObjDesc));
> +            return_ACPI_STATUS (AE_OK);
> +        }
>      }
>  
> -    /* Remove local reference to the object */
> +    ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "No match found: %s\n", Pathname));
> +    return_ACPI_STATUS (AE_NOT_FOUND);
> +}
> +
> +
> +/******************************************************************************
> + *
> + * FUNCTION:    AeDisplayUnusedInitFileItems
> + *
> + * PARAMETERS:  None
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Display all init file items that have not been referenced
> + *              (i.e., items that have not been found in the namespace).
> + *
> + *****************************************************************************/
> +
> +void
> +AeDisplayUnusedInitFileItems (
> +    void)
> +{
> +    UINT32                  i;
> +
> +
> +    if (!AcpiGbl_InitEntries)
> +    {
> +        return;
> +    }
>  
> -    AcpiUtRemoveReference (ObjDesc);
> +    for (i = 0; i < AcpiGbl_InitFileLineCount; ++i)
> +    {
> +        if (AcpiGbl_InitEntries[i].Name &&
> +            !AcpiGbl_InitEntries[i].IsUsed)
> +        {
> +            AcpiOsPrintf ("Init file entry not found in namespace "
> +                "(or is a non-data type): %s\n",
> +                AcpiGbl_InitEntries[i].Name);
> +        }
> +    }
>  }
>  
>  
>  /******************************************************************************
>   *
> - * FUNCTION:    AeLookupInitFileEntry
> + * FUNCTION:    AeDeleteInitFileList
>   *
> - * PARAMETERS:  Pathname            - AML namepath in external format
> - *              ValueString         - value of the namepath if it exitst
> + * PARAMETERS:  None
>   *
>   * RETURN:      None
>   *
> - * DESCRIPTION: Search the init file for a particular name and its value.
> + * DESCRIPTION: Delete the global namespace initialization file data
>   *
>   *****************************************************************************/
>  
> -ACPI_STATUS
> -AeLookupInitFileEntry (
> -    char                    *Pathname,
> -    ACPI_OPERAND_OBJECT     **ObjDesc)
> +void
> +AeDeleteInitFileList (
> +    void)
>  {
>      UINT32                  i;
>  
> +
>      if (!AcpiGbl_InitEntries)
>      {
> -        return AE_NOT_FOUND;
> +        return;
>      }
>  
>      for (i = 0; i < AcpiGbl_InitFileLineCount; ++i)
>      {
> -        if (!strcmp(AcpiGbl_InitEntries[i].Name, Pathname))
> +
> +        if ((AcpiGbl_InitEntries[i].ObjDesc) && (AcpiGbl_InitEntries[i].Value))
>          {
> -            *ObjDesc = AcpiGbl_InitEntries[i].ObjDesc;
> -            return AE_OK;
> +            /* Remove one reference on the object (and all subobjects) */
> +
> +            AcpiUtRemoveReference (AcpiGbl_InitEntries[i].ObjDesc);
>          }
>      }
> -    return AE_NOT_FOUND;
> +
> +    AcpiOsFree (AcpiGbl_InitEntries);
>  }
> 

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

Patch

diff --git a/src/acpica/source/common/ahtable.c b/src/acpica/source/common/ahtable.c
index 25fd525e..32d5dedb 100644
--- a/src/acpica/source/common/ahtable.c
+++ b/src/acpica/source/common/ahtable.c
@@ -258,7 +258,7 @@  const AH_TABLE      AcpiGbl_SupportedTables[] =
     {ACPI_SIG_WDDT, "Watchdog Description Table"},
     {ACPI_SIG_WDRT, "Watchdog Resource Table"},
     {ACPI_SIG_WPBT, "Windows Platform Binary Table"},
-    {ACPI_SIG_WSMT, "Windows SMM Security Migrations Table"},
+    {ACPI_SIG_WSMT, "Windows SMM Security Mitigations Table"},
     {ACPI_SIG_XENV, "Xen Environment table"},
     {ACPI_SIG_XSDT, "Extended System Description Table"},
     {NULL,          NULL}
diff --git a/src/acpica/source/common/dmtable.c b/src/acpica/source/common/dmtable.c
index 02220d26..5896b2f2 100644
--- a/src/acpica/source/common/dmtable.c
+++ b/src/acpica/source/common/dmtable.c
@@ -1676,7 +1676,8 @@  AcpiDmDumpTable (
             Temp8 = *Target;
             switch (Temp8)
             {
-            case ACPI_IVRS_TYPE_HARDWARE:
+            case ACPI_IVRS_TYPE_HARDWARE1:
+            case ACPI_IVRS_TYPE_HARDWARE2:
 
                 Name = AcpiDmIvrsSubnames[0];
                 break;
diff --git a/src/acpica/source/common/dmtbdump2.c b/src/acpica/source/common/dmtbdump2.c
index 95eea6d9..688a2cf9 100644
--- a/src/acpica/source/common/dmtbdump2.c
+++ b/src/acpica/source/common/dmtbdump2.c
@@ -475,11 +475,16 @@  AcpiDmDumpIvrs (
 
         switch (Subtable->Type)
         {
-        case ACPI_IVRS_TYPE_HARDWARE:
+        case ACPI_IVRS_TYPE_HARDWARE1:
 
             InfoTable = AcpiDmTableInfoIvrs0;
             break;
 
+        case ACPI_IVRS_TYPE_HARDWARE2:
+
+            InfoTable = AcpiDmTableInfoIvrs01;
+            break;
+
         case ACPI_IVRS_TYPE_MEMORY1:
         case ACPI_IVRS_TYPE_MEMORY2:
         case ACPI_IVRS_TYPE_MEMORY3:
@@ -514,11 +519,21 @@  AcpiDmDumpIvrs (
 
         /* The hardware subtable can contain multiple device entries */
 
-        if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE)
+        if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE1 ||
+            Subtable->Type == ACPI_IVRS_TYPE_HARDWARE2)
         {
-            EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE);
-            DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable,
-                sizeof (ACPI_IVRS_HARDWARE));
+            if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE1)
+            {
+                EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE1);
+                DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable,
+                    sizeof (ACPI_IVRS_HARDWARE1));
+            }
+            else if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE2)
+            {
+                EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE2);
+                DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable,
+                    sizeof (ACPI_IVRS_HARDWARE2));
+            }
 
             while (EntryOffset < (Offset + Subtable->Length))
             {
diff --git a/src/acpica/source/common/dmtbinfo2.c b/src/acpica/source/common/dmtbinfo2.c
index 79802830..c000a921 100644
--- a/src/acpica/source/common/dmtbinfo2.c
+++ b/src/acpica/source/common/dmtbinfo2.c
@@ -403,7 +403,21 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs0[] =
     {ACPI_DMT_UINT64,   ACPI_IVRS0_OFFSET (BaseAddress),            "Base Address", 0},
     {ACPI_DMT_UINT16,   ACPI_IVRS0_OFFSET (PciSegmentGroup),        "PCI Segment Group", 0},
     {ACPI_DMT_UINT16,   ACPI_IVRS0_OFFSET (Info),                   "Virtualization Info", 0},
-    {ACPI_DMT_UINT32,   ACPI_IVRS0_OFFSET (Reserved),               "Reserved", 0},
+    {ACPI_DMT_UINT32,   ACPI_IVRS0_OFFSET (FeatureReporting),       "Feature Reporting", 0},
+    ACPI_DMT_TERMINATOR
+};
+
+/* 0x10: I/O Virtualization Hardware Definition (IVHD) Block */
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs01[] =
+{
+    {ACPI_DMT_UINT16,   ACPI_IVRS01_OFFSET (CapabilityOffset),       "Capability Offset", 0},
+    {ACPI_DMT_UINT64,   ACPI_IVRS01_OFFSET (BaseAddress),            "Base Address", 0},
+    {ACPI_DMT_UINT16,   ACPI_IVRS01_OFFSET (PciSegmentGroup),        "PCI Segment Group", 0},
+    {ACPI_DMT_UINT16,   ACPI_IVRS01_OFFSET (Info),                   "Virtualization Info", 0},
+    {ACPI_DMT_UINT32,   ACPI_IVRS01_OFFSET (Attributes),             "Attributes", 0},
+    {ACPI_DMT_UINT64,   ACPI_IVRS01_OFFSET (EfrRegisterImage),       "EFR Image", 0},
+    {ACPI_DMT_UINT64,   ACPI_IVRS01_OFFSET (Reserved),               "Reserved", 0},
     ACPI_DMT_TERMINATOR
 };
 
diff --git a/src/acpica/source/common/dmtbinfo3.c b/src/acpica/source/common/dmtbinfo3.c
index 07a26c2b..f4092c24 100644
--- a/src/acpica/source/common/dmtbinfo3.c
+++ b/src/acpica/source/common/dmtbinfo3.c
@@ -691,7 +691,7 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoWpbt0[] =
 
 /*******************************************************************************
  *
- * WSMT - Windows SMM Security Migrations Table
+ * WSMT - Windows SMM Security Mitigations Table
  *
  ******************************************************************************/
 
diff --git a/src/acpica/source/compiler/aslcompile.c b/src/acpica/source/compiler/aslcompile.c
index 9481b6bb..787a5444 100644
--- a/src/acpica/source/compiler/aslcompile.c
+++ b/src/acpica/source/compiler/aslcompile.c
@@ -283,6 +283,7 @@  CmDoCompile (
 
     LsDumpParseTree ();
 
+    UtEndEvent (Event);
     UtEndEvent (FullCompile);
     return (AE_OK);
 
diff --git a/src/acpica/source/compiler/aslcompiler.h b/src/acpica/source/compiler/aslcompiler.h
index 9bebc380..82d777d8 100644
--- a/src/acpica/source/compiler/aslcompiler.h
+++ b/src/acpica/source/compiler/aslcompiler.h
@@ -488,7 +488,7 @@  AslCheckExpectedExceptions (
     void);
 
 ACPI_STATUS
-AslExpectException (
+AslLogExpectedException (
     char                    *MessageIdString);
 
 ACPI_STATUS
@@ -501,9 +501,15 @@  AslDisableException (
 
 BOOLEAN
 AslIsExceptionIgnored (
+    char                    *Filename,
+    UINT32                  LineNumber,
     UINT8                   Level,
     UINT16                  MessageId);
 
+void
+AslLogExpectedExceptionByLine (
+    char                    *MessageIdString);
+
 void
 AslCoreSubsystemError (
     ACPI_PARSE_OBJECT       *Op,
diff --git a/src/acpica/source/compiler/aslcompiler.l b/src/acpica/source/compiler/aslcompiler.l
index 797f9899..4c3fbde3 100644
--- a/src/acpica/source/compiler/aslcompiler.l
+++ b/src/acpica/source/compiler/aslcompiler.l
@@ -156,7 +156,6 @@ 
 
 #include <stdlib.h>
 #include <string.h>
-YYSTYPE AslCompilerlval;
 
 /*
  * Generation:  Use the following command line:
@@ -195,6 +194,7 @@  count (int type);
 
 LeadNameChar                [A-Za-z_]
 DigitChar                   [0-9]
+ErrorCode                   [(][ ]*[1-9][0-9][0-9][0-9][ ]*[)]
 OctalChar                   [0-7]
 HexDigitChar                [A-Fa-f0-9]
 RootChar                    [\\]
@@ -692,7 +692,7 @@  NamePathTail                [.]{NameSeg}
 "IPMI"                      { count (0); return (PARSEOP_REGIONSPACE_IPMI); }
 "GeneralPurposeIo"          { count (0); return (PARSEOP_REGIONSPACE_GPIO); }       /* ACPI 5.0 */
 "GenericSerialBus"          { count (0); return (PARSEOP_REGIONSPACE_GSBUS); }      /* ACPI 5.0 */
-"PlatformCommChannel"       { count (0); return (PARSEOP_REGIONSPACE_PCC); }        /* ACPI 5.0 */
+"PCC"                       { count (0); return (PARSEOP_REGIONSPACE_PCC); }        /* ACPI 5.0 */
 "FFixedHW"                  { count (0); return (PARSEOP_REGIONSPACE_FFIXEDHW); }
 
     /* ResourceTypeKeyword: Resource Usage - Resource Descriptors */
@@ -810,6 +810,22 @@  NamePathTail                [.]{NameSeg}
 "__LINE__"                  { count (0); return (PARSEOP___LINE__); }
 "__PATH__"                  { count (0); return (PARSEOP___PATH__); }
 "__METHOD__"                { count (0); return (PARSEOP___METHOD__); }
+"__EXPECT__"{ErrorCode}     { char *s;
+                                int index = 0;
+                                count (0);
+                                while (!isdigit (AslCompilertext[index]))
+                                {
+                                    index++;
+                                }
+
+                                /*
+                                 * The eror code is contained inside the
+                                 * {ErrorCode} pattern. Extract it and log it
+                                 * as the expected error code.
+                                 */
+                                s = UtLocalCacheCalloc (ASL_ERROR_CODE_LENGTH + 1);
+                                memcpy (s, AslCompilertext + index, ASL_ERROR_CODE_LENGTH);
+                                AslLogExpectedExceptionByLine (s); }
 
 {NameSeg}                   { char *s;
                                 count (0);
diff --git a/src/acpica/source/compiler/asldefine.h b/src/acpica/source/compiler/asldefine.h
index 12a4cdd5..2627a58a 100644
--- a/src/acpica/source/compiler/asldefine.h
+++ b/src/acpica/source/compiler/asldefine.h
@@ -227,6 +227,7 @@ 
 #define ASL_NO_ABORT                        FALSE
 #define ASL_EOF                             ACPI_UINT32_MAX
 #define ASL_IGNORE_LINE                     (ACPI_UINT32_MAX -1)
+#define ASL_ERROR_CODE_LENGTH               4
 
 
 /* Listings */
diff --git a/src/acpica/source/compiler/aslerror.c b/src/acpica/source/compiler/aslerror.c
index 1931fffc..8fae779d 100644
--- a/src/acpica/source/compiler/aslerror.c
+++ b/src/acpica/source/compiler/aslerror.c
@@ -162,6 +162,8 @@  AeAddToErrorLog (
 
 static BOOLEAN
 AslIsExceptionExpected (
+    char                    *Filename,
+    UINT32                  LineNumber,
     UINT8                   Level,
     UINT16                  MessageId);
 
@@ -170,7 +172,8 @@  AslIsExceptionDisabled (
     UINT8                   Level,
     UINT16                  MessageId);
 
-static void AslInitEnode (
+static void
+AslInitEnode (
     ASL_ERROR_MSG           **Enode,
     UINT8                   Level,
     UINT16                  MessageId,
@@ -956,7 +959,7 @@  AslCommonError (
 {
     /* Check if user wants to ignore this exception */
 
-    if (AslIsExceptionIgnored (Level, MessageId))
+    if (AslIsExceptionIgnored (Filename, LogicalLineNumber, Level, MessageId))
     {
         return;
     }
@@ -1087,6 +1090,8 @@  GetModifiedLevel (
 
 BOOLEAN
 AslIsExceptionIgnored (
+    char                    *Filename,
+    UINT32                  LineNumber,
     UINT8                   Level,
     UINT16                  MessageId)
 {
@@ -1096,7 +1101,8 @@  AslIsExceptionIgnored (
     /* Note: this allows exception to be disabled and expected */
 
     ExceptionIgnored = AslIsExceptionDisabled (Level, MessageId);
-    ExceptionIgnored |= AslIsExceptionExpected (Level, MessageId);
+    ExceptionIgnored |=
+        AslIsExceptionExpected (Filename, LineNumber, Level, MessageId);
 
     return (AslGbl_AllExceptionsDisabled || ExceptionIgnored);
 }
@@ -1104,7 +1110,7 @@  AslIsExceptionIgnored (
 
 /*******************************************************************************
  *
- * FUNCTION:    AslCheckExpectException
+ * FUNCTION:    AslCheckExpectedException
  *
  * PARAMETERS:  none
  *
@@ -1120,6 +1126,8 @@  AslCheckExpectedExceptions (
     void)
 {
     UINT8                   i;
+    ASL_EXPECTED_MSG_NODE   *Current = AslGbl_ExpectedErrorCodeList;
+    ASL_LOCATION_NODE       *LocationNode;
 
 
     for (i = 0; i < AslGbl_ExpectedMessagesIndex; ++i)
@@ -1130,12 +1138,32 @@  AslCheckExpectedExceptions (
                 AslGbl_ExpectedMessages[i].MessageIdStr);
         }
     }
+
+    while (Current)
+    {
+        LocationNode = Current->LocationList;
+
+        while (LocationNode)
+        {
+            if (!LocationNode->MessageReceived)
+            {
+                AslCommonError (ASL_ERROR, ASL_MSG_EXCEPTION_NOT_RECEIVED,
+                    LocationNode->LineNumber, LocationNode->LineNumber,
+                    LocationNode->LogicalByteOffset, LocationNode->Column,
+                    LocationNode->Filename, Current->MessageIdStr);
+            }
+
+            LocationNode = LocationNode->Next;
+        }
+
+        Current = Current->Next;
+    }
 }
 
 
 /*******************************************************************************
  *
- * FUNCTION:    AslExpectException
+ * FUNCTION:    AslLogExpectedException
  *
  * PARAMETERS:  MessageIdString     - ID of excepted exception during compile
  *
@@ -1148,7 +1176,7 @@  AslCheckExpectedExceptions (
  ******************************************************************************/
 
 ACPI_STATUS
-AslExpectException (
+AslLogExpectedException (
     char                    *MessageIdString)
 {
     UINT32                  MessageId;
@@ -1182,6 +1210,61 @@  AslExpectException (
 }
 
 
+/*******************************************************************************
+ *
+ * FUNCTION:    AslLogExpectedExceptionByLine
+ *
+ * PARAMETERS:  MessageIdString     - ID of excepted exception during compile
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Enter a message ID into the global expected messages table
+ *              based on file and line number. If these messages are not raised
+ *              during the compilation, throw an error.
+ *
+ ******************************************************************************/
+
+void
+AslLogExpectedExceptionByLine (
+    char                    *MessageIdString)
+{
+    ASL_LOCATION_NODE       *NewErrorLocationNode;
+    ASL_EXPECTED_MSG_NODE   *Current = AslGbl_ExpectedErrorCodeList;
+    UINT32                  MessageId;
+
+
+    NewErrorLocationNode = UtLocalCalloc (sizeof (ASL_LOCATION_NODE));
+
+    NewErrorLocationNode->LineNumber = AslGbl_CurrentLineNumber;
+    NewErrorLocationNode->Filename = AslGbl_Files[ASL_FILE_INPUT].Filename;
+    NewErrorLocationNode->LogicalByteOffset = AslGbl_CurrentLineOffset;
+    NewErrorLocationNode->Column = AslGbl_CurrentColumn;
+
+    MessageId = (UINT32) strtoul (MessageIdString, NULL, 0);
+
+    /* search the existing list for a matching message ID */
+
+    while (Current && Current->MessageId != MessageId )
+    {
+        Current = Current->Next;
+    }
+    if (!Current)
+    {
+        /* ID was not found, create a new node for this message ID */
+
+        Current = UtLocalCalloc (sizeof (ASL_EXPECTED_MSG_NODE));
+
+        Current->Next = AslGbl_ExpectedErrorCodeList;
+        Current->MessageIdStr = MessageIdString;
+        Current->MessageId = MessageId;
+        AslGbl_ExpectedErrorCodeList = Current;
+    }
+
+    NewErrorLocationNode->Next = Current->LocationList;
+    Current->LocationList = NewErrorLocationNode;
+}
+
+
 /*******************************************************************************
  *
  * FUNCTION:    AslDisableException
@@ -1272,6 +1355,7 @@  AslElevateException (
     return (AE_OK);
 }
 
+
 /*******************************************************************************
  *
  * FUNCTION:    AslIsExceptionDisabled
@@ -1288,9 +1372,13 @@  AslElevateException (
 
 static BOOLEAN
 AslIsExceptionExpected (
+    char                    *Filename,
+    UINT32                  LineNumber,
     UINT8                   Level,
     UINT16                  MessageId)
 {
+    ASL_EXPECTED_MSG_NODE   *Current = AslGbl_ExpectedErrorCodeList;
+    ASL_LOCATION_NODE       *CurrentErrorLocation;
     UINT32                  EncodedMessageId;
     UINT32                  i;
 
@@ -1308,6 +1396,28 @@  AslIsExceptionExpected (
         }
     }
 
+    while (Current && Current->MessageId != EncodedMessageId)
+    {
+        Current = Current->Next;
+    }
+    if (!Current)
+    {
+        return (FALSE);
+    }
+
+    CurrentErrorLocation = Current->LocationList;
+
+    while (CurrentErrorLocation)
+    {
+        if (!strcmp (CurrentErrorLocation->Filename, Filename) &&
+            CurrentErrorLocation->LineNumber == LineNumber)
+        {
+            return (CurrentErrorLocation->MessageReceived = TRUE);
+        }
+
+        CurrentErrorLocation = CurrentErrorLocation->Next;
+    }
+
     return (FALSE);
 }
 
@@ -1410,7 +1520,8 @@  AslDualParseOpError (
 
     /* Check if user wants to ignore this exception */
 
-    if (AslIsExceptionIgnored (Level, MainMsgId) || !MainOp)
+    if (!MainOp || AslIsExceptionIgnored (MainOp->Asl.Filename,
+        MainOp->Asl.LogicalLineNumber, Level, MainMsgId))
     {
         return;
     }
diff --git a/src/acpica/source/compiler/aslglobal.h b/src/acpica/source/compiler/aslglobal.h
index 1a66dea9..231ed876 100644
--- a/src/acpica/source/compiler/aslglobal.h
+++ b/src/acpica/source/compiler/aslglobal.h
@@ -420,6 +420,7 @@  ASL_EXTERN char                     ASL_INIT_GLOBAL (*AslGbl_TableSignature, "NO
 ASL_EXTERN char                     ASL_INIT_GLOBAL (*AslGbl_TableId, "NO_ID");
 ASL_EXTERN ASL_FILE_INFO            ASL_INIT_GLOBAL (*AslGbl_Files, NULL);
 ASL_EXTERN ASL_GLOBAL_FILE_NODE     ASL_INIT_GLOBAL (*AslGbl_FilesList, NULL);
+ASL_EXTERN ASL_EXPECTED_MSG_NODE    ASL_INIT_GLOBAL (*AslGbl_ExpectedErrorCodeList, NULL);
 
 /* Specific to the -q option */
 
diff --git a/src/acpica/source/compiler/aslload.c b/src/acpica/source/compiler/aslload.c
index 0d26c641..bd2fc977 100644
--- a/src/acpica/source/compiler/aslload.c
+++ b/src/acpica/source/compiler/aslload.c
@@ -1018,6 +1018,74 @@  FinishNode:
 }
 
 
+/*******************************************************************************
+ *
+ * FUNCTION:    LdAnalyzeExternals
+ *
+ * PARAMETERS:  Type1
+ *              Type2
+ *
+ * RETURN:      BOOLEAN
+ *
+ * DESCRIPTION: Match Type1 and Type2 with the assumption that one might be
+ *              using external types and another might be using local types.
+ *              This should be used to compare the types found in external
+ *              declarations with types found in other external declarations or
+ *              named object declaration. This should not be used to match two
+ *              object type declarations.
+ *
+ ******************************************************************************/
+
+static BOOLEAN
+LdTypesMatchExternType (
+    ACPI_OBJECT_TYPE        Type1,
+    ACPI_OBJECT_TYPE        Type2)
+{
+    BOOLEAN                 Type1IsLocal = Type1 > ACPI_TYPE_EXTERNAL_MAX;
+    BOOLEAN                 Type2IsLocal = Type2 > ACPI_TYPE_EXTERNAL_MAX;
+    ACPI_OBJECT_TYPE        ExternalType;
+    ACPI_OBJECT_TYPE        LocalType;
+
+
+    /*
+     * The inputs could represent types that are local to ACPICA or types that
+     * are known externally. Some local types, such as the OperationRegion
+     * field units, are defined with more granularity than ACPICA local types.
+     *
+     * Therefore, map the local types to the external types before matching.
+     */
+    if (Type1IsLocal && !Type2IsLocal)
+    {
+        LocalType = Type1;
+        ExternalType = Type2;
+    }
+    else if (!Type1IsLocal && Type2IsLocal)
+    {
+        LocalType = Type2;
+        ExternalType = Type1;
+    }
+    else
+    {
+        return (Type1 == Type2);
+    }
+
+    switch (LocalType)
+    {
+        case ACPI_TYPE_LOCAL_REGION_FIELD:
+        case ACPI_TYPE_LOCAL_BANK_FIELD:
+        case ACPI_TYPE_LOCAL_INDEX_FIELD:
+
+            LocalType = ACPI_TYPE_FIELD_UNIT;
+            break;
+
+        default:
+            break;
+    }
+
+    return (LocalType == ExternalType);
+}
+
+
 /*******************************************************************************
  *
  * FUNCTION:    LdAnalyzeExternals
@@ -1072,12 +1140,12 @@  LdAnalyzeExternals (
 
     if ((ActualOpType != ACPI_TYPE_ANY) &&
         (ActualExternalOpType != ACPI_TYPE_ANY) &&
-        (ActualExternalOpType != ActualOpType))
+        !LdTypesMatchExternType (ActualExternalOpType, ActualOpType))
     {
         if (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL &&
             Node->Op->Asl.ParseOpcode == PARSEOP_EXTERNAL)
         {
-            AslDualParseOpError (ASL_ERROR,
+            AslDualParseOpError (ASL_WARNING,
                 ASL_MSG_DUPLICATE_EXTERN_MISMATCH, Op, NULL,
                 ASL_MSG_DUPLICATE_EXTERN_FOUND_HERE, Node->Op, NULL);
         }
@@ -1094,7 +1162,7 @@  LdAnalyzeExternals (
                 ExternalOp = Node->Op;
                 ActualOp = Op;
             }
-            AslDualParseOpError (ASL_ERROR,
+            AslDualParseOpError (ASL_WARNING,
                 ASL_MSG_DECLARATION_TYPE_MISMATCH, ExternalOp, NULL,
                 ASL_MSG_TYPE_MISMATCH_FOUND_HERE, ActualOp, NULL);
         }
@@ -1139,18 +1207,8 @@  LdAnalyzeExternals (
     {
         /* Allow update of externals of unknown type. */
 
-        if (AcpiNsOpensScope (ExternalOpType))
-        {
-            Node->Type = (UINT8) ExternalOpType;
-            Status = AE_OK;
-        }
-        else
-        {
-            sprintf (AslGbl_MsgBuffer, "%s [%s]", Op->Asl.ExternalName,
-                AcpiUtGetTypeName (Node->Type));
-            AslError (ASL_ERROR, ASL_MSG_SCOPE_TYPE, Op, AslGbl_MsgBuffer);
-            Status = AE_ERROR;
-        }
+        Node->Type = (UINT8) ExternalOpType;
+        Status = AE_OK;
     }
 
     return (Status);
diff --git a/src/acpica/source/compiler/asloptions.c b/src/acpica/source/compiler/asloptions.c
index e3b3f8e7..4bf9465b 100644
--- a/src/acpica/source/compiler/asloptions.c
+++ b/src/acpica/source/compiler/asloptions.c
@@ -948,7 +948,7 @@  AslDoOptions (
                 return (-1);
             }
 
-            Status = AslExpectException (AcpiGbl_Optarg);
+            Status = AslLogExpectedException (AcpiGbl_Optarg);
             if (ACPI_FAILURE (Status))
             {
                 return (-1);
diff --git a/src/acpica/source/compiler/asltypes.h b/src/acpica/source/compiler/asltypes.h
index cd54dbc0..33c547e4 100644
--- a/src/acpica/source/compiler/asltypes.h
+++ b/src/acpica/source/compiler/asltypes.h
@@ -381,12 +381,37 @@  typedef struct asl_error_msg
 
 typedef struct asl_expected_message
 {
-    UINT32                       MessageId;
-    char                         *MessageIdStr;
-    BOOLEAN                      MessageReceived;
+    UINT32                      MessageId;
+    char                        *MessageIdStr;
+    BOOLEAN                     MessageReceived;
 
 } ASL_EXPECTED_MESSAGE;
 
+/*
+ * An entry in the line-based expected messages list
+ *
+ * TBD: might be possible to merge this with ASL_EXPECTED_MESSAGE
+ */
+typedef struct asl_expected_msg_node
+{
+    struct asl_expected_msg_node    *Next;
+    UINT32                          MessageId;
+    char                            *MessageIdStr;
+    struct asl_location_node        *LocationList;
+
+} ASL_EXPECTED_MSG_NODE;
+
+typedef struct asl_location_node
+{
+    struct asl_location_node    *Next;
+    char                        *Filename;
+    UINT32                      LineNumber;
+    UINT32                      Column;
+    UINT32                      LogicalByteOffset;
+    BOOLEAN                     MessageReceived;
+
+} ASL_LOCATION_NODE;
+
 
 /* An entry in the listing file stack (for include files) */
 
diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h
index 9d9008a8..18de92ff 100644
--- a/src/acpica/source/compiler/dtcompiler.h
+++ b/src/acpica/source/compiler/dtcompiler.h
@@ -461,7 +461,6 @@  DtCreateTableUnit (
 
 /* dtparser - lex/yacc files */
 
-UINT64                      DtCompilerParserResult; /* Expression return value */
 int
 DtCompilerParserparse (
     void);
diff --git a/src/acpica/source/compiler/dtcompilerparser.l b/src/acpica/source/compiler/dtcompilerparser.l
index 28dcf6af..ecc07c48 100644
--- a/src/acpica/source/compiler/dtcompilerparser.l
+++ b/src/acpica/source/compiler/dtcompilerparser.l
@@ -153,7 +153,6 @@ 
 #include "aslcompiler.h"
 #include "dtcompilerparser.y.h"
 
-YYSTYPE DtCompilerlval;
 
 #define _COMPONENT          ACPI_COMPILER
         ACPI_MODULE_NAME    ("dtcompilerscanner")
diff --git a/src/acpica/source/compiler/dtcompilerparser.y b/src/acpica/source/compiler/dtcompilerparser.y
index 43eba4e9..e97e2a90 100644
--- a/src/acpica/source/compiler/dtcompilerparser.y
+++ b/src/acpica/source/compiler/dtcompilerparser.y
@@ -170,7 +170,6 @@  extern char                 *DtCompilerParsertext;
 extern DT_FIELD             *AslGbl_CurrentField;
 
 extern int                  DtLabelByteOffset;
-extern UINT64               DtCompilerParserResult; /* Expression return value */
 extern UINT64               DtCompilerParserlineno; /* Current line number */
 
 extern UINT32               DtTokenFirstLine;
diff --git a/src/acpica/source/compiler/dtparser.l b/src/acpica/source/compiler/dtparser.l
index ff7df507..631921df 100644
--- a/src/acpica/source/compiler/dtparser.l
+++ b/src/acpica/source/compiler/dtparser.l
@@ -208,7 +208,7 @@  NewLine         [\n]
 /*
  * Local support functions
  */
-YY_BUFFER_STATE         LexBuffer;
+static YY_BUFFER_STATE         LexBuffer;
 
 /******************************************************************************
  *
diff --git a/src/acpica/source/compiler/dttable1.c b/src/acpica/source/compiler/dttable1.c
index c7256b77..33df4dc2 100644
--- a/src/acpica/source/compiler/dttable1.c
+++ b/src/acpica/source/compiler/dttable1.c
@@ -1967,11 +1967,16 @@  DtCompileIvrs (
 
         switch (IvrsHeader->Type)
         {
-        case ACPI_IVRS_TYPE_HARDWARE:
+        case ACPI_IVRS_TYPE_HARDWARE1:
 
             InfoTable = AcpiDmTableInfoIvrs0;
             break;
 
+        case ACPI_IVRS_TYPE_HARDWARE2:
+
+            InfoTable = AcpiDmTableInfoIvrs01;
+            break;
+
         case ACPI_IVRS_TYPE_MEMORY1:
         case ACPI_IVRS_TYPE_MEMORY2:
         case ACPI_IVRS_TYPE_MEMORY3:
@@ -1994,7 +1999,8 @@  DtCompileIvrs (
         ParentTable = DtPeekSubtable ();
         DtInsertSubtable (ParentTable, Subtable);
 
-        if (IvrsHeader->Type == ACPI_IVRS_TYPE_HARDWARE)
+        if (IvrsHeader->Type == ACPI_IVRS_TYPE_HARDWARE1 ||
+            IvrsHeader->Type == ACPI_IVRS_TYPE_HARDWARE2)
         {
             while (*PFieldList &&
                 !strcmp ((*PFieldList)->Name, "Entry Type"))
diff --git a/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c
index 067d0ece..bb07894e 100644
--- a/src/acpica/source/compiler/dtutils.c
+++ b/src/acpica/source/compiler/dtutils.c
@@ -189,7 +189,8 @@  DtError (
 
     /* Check if user wants to ignore this exception */
 
-    if (AslIsExceptionIgnored (Level, MessageId))
+    if (AslIsExceptionIgnored (AslGbl_Files[ASL_FILE_INPUT].Filename,
+        FieldObject->Line, Level, MessageId))
     {
         return;
     }
diff --git a/src/acpica/source/compiler/prparser.l b/src/acpica/source/compiler/prparser.l
index 65595fa8..8752d3fc 100644
--- a/src/acpica/source/compiler/prparser.l
+++ b/src/acpica/source/compiler/prparser.l
@@ -224,7 +224,7 @@  Identifier      [a-zA-Z][0-9a-zA-Z]*
 /*
  * Local support functions
  */
-YY_BUFFER_STATE         LexBuffer;
+static YY_BUFFER_STATE         LexBuffer;
 
 
 /******************************************************************************
diff --git a/src/acpica/source/components/debugger/dbinput.c b/src/acpica/source/components/debugger/dbinput.c
index 0bfe9947..378e3db1 100644
--- a/src/acpica/source/components/debugger/dbinput.c
+++ b/src/acpica/source/components/debugger/dbinput.c
@@ -637,19 +637,16 @@  AcpiDbGetNextToken (
         return (NULL);
     }
 
-    /* Remove any spaces at the beginning */
+    /* Remove any spaces at the beginning, ignore blank lines */
 
-    if (*String == ' ')
+    while (*String && isspace (*String))
     {
-        while (*String && (*String == ' '))
-        {
-            String++;
-        }
+        String++;
+    }
 
-        if (!(*String))
-        {
-            return (NULL);
-        }
+    if (!(*String))
+    {
+        return (NULL);
     }
 
     switch (*String)
@@ -754,7 +751,7 @@  AcpiDbGetNextToken (
 
         /* Find end of token */
 
-        while (*String && (*String != ' '))
+        while (*String && !isspace (*String))
         {
             String++;
         }
diff --git a/src/acpica/source/components/debugger/dbxface.c b/src/acpica/source/components/debugger/dbxface.c
index e7d354d8..f84db8c9 100644
--- a/src/acpica/source/components/debugger/dbxface.c
+++ b/src/acpica/source/components/debugger/dbxface.c
@@ -594,6 +594,7 @@  AcpiInitializeDebugger (
     AcpiGbl_DbOutputFlags       = ACPI_DB_CONSOLE_OUTPUT;
 
     AcpiGbl_DbOpt_NoIniMethods  = FALSE;
+    AcpiGbl_DbOpt_NoRegionSupport = FALSE;
 
     AcpiGbl_DbBuffer = AcpiOsAllocate (ACPI_DEBUG_BUFFER_SIZE);
     if (!AcpiGbl_DbBuffer)
diff --git a/src/acpica/source/components/dispatcher/dswexec.c b/src/acpica/source/components/dispatcher/dswexec.c
index f2925ecf..3fa7b95b 100644
--- a/src/acpica/source/components/dispatcher/dswexec.c
+++ b/src/acpica/source/components/dispatcher/dswexec.c
@@ -158,7 +158,9 @@ 
 #include "acinterp.h"
 #include "acnamesp.h"
 #include "acdebug.h"
-
+#ifdef ACPI_EXEC_APP
+#include "aecommon.h"
+#endif
 
 #define _COMPONENT          ACPI_DISPATCHER
         ACPI_MODULE_NAME    ("dswexec")
@@ -504,7 +506,10 @@  AcpiDsExecEndOp (
     UINT32                  OpClass;
     ACPI_PARSE_OBJECT       *NextOp;
     ACPI_PARSE_OBJECT       *FirstArg;
-
+#ifdef ACPI_EXEC_APP
+    char                    *Namepath;
+    ACPI_OPERAND_OBJECT     *ObjDesc;
+#endif
 
     ACPI_FUNCTION_TRACE_PTR (DsExecEndOp, WalkState);
 
@@ -717,6 +722,29 @@  AcpiDsExecEndOp (
             }
 
             Status = AcpiDsEvalBufferFieldOperands (WalkState, Op);
+            if (ACPI_FAILURE (Status))
+            {
+                break;
+            }
+
+#ifdef ACPI_EXEC_APP
+            /*
+             * AcpiExec support for namespace initialization file (initialize
+             * BufferFields in this code.)
+             */
+            Namepath = AcpiNsGetExternalPathname (Op->Common.Node);
+            Status = AeLookupInitFileEntry (Namepath, &ObjDesc);
+            if (ACPI_SUCCESS (Status))
+            {
+                Status = AcpiExWriteDataToField (ObjDesc, Op->Common.Node->Object, NULL);
+                if ACPI_FAILURE (Status)
+                {
+                    ACPI_EXCEPTION ((AE_INFO, Status, "While writing to buffer field"));
+                }
+            }
+            ACPI_FREE (Namepath);
+            Status = AE_OK;
+#endif
             break;
 
 
diff --git a/src/acpica/source/components/dispatcher/dswload.c b/src/acpica/source/components/dispatcher/dswload.c
index d37bd5d4..62a4fdca 100644
--- a/src/acpica/source/components/dispatcher/dswload.c
+++ b/src/acpica/source/components/dispatcher/dswload.c
@@ -156,7 +156,6 @@ 
 #include "acdispat.h"
 #include "acinterp.h"
 #include "acnamesp.h"
-
 #ifdef ACPI_ASL_COMPILER
 #include "acdisasm.h"
 #endif
@@ -555,7 +554,6 @@  AcpiDsLoad1EndOp (
     ACPI_PARSE_OBJECT       *Op;
     ACPI_OBJECT_TYPE        ObjectType;
     ACPI_STATUS             Status = AE_OK;
-
 #ifdef ACPI_ASL_COMPILER
     UINT8                   ParamCount;
 #endif
diff --git a/src/acpica/source/components/dispatcher/dswload2.c b/src/acpica/source/components/dispatcher/dswload2.c
index ff2135ce..0ab715cd 100644
--- a/src/acpica/source/components/dispatcher/dswload2.c
+++ b/src/acpica/source/components/dispatcher/dswload2.c
@@ -157,6 +157,9 @@ 
 #include "acinterp.h"
 #include "acnamesp.h"
 #include "acevents.h"
+#ifdef ACPI_EXEC_APP
+#include "aecommon.h"
+#endif
 
 #define _COMPONENT          ACPI_DISPATCHER
         ACPI_MODULE_NAME    ("dswload2")
@@ -531,6 +534,10 @@  AcpiDsLoad2EndOp (
     ACPI_NAMESPACE_NODE     *NewNode;
     UINT32                  i;
     UINT8                   RegionSpace;
+#ifdef ACPI_EXEC_APP
+    ACPI_OPERAND_OBJECT     *ObjDesc;
+    char                    *Namepath;
+#endif
 
 
     ACPI_FUNCTION_TRACE (DsLoad2EndOp);
@@ -627,6 +634,11 @@  AcpiDsLoad2EndOp (
          * be evaluated later during the execution phase
          */
         Status = AcpiDsCreateBufferField (Op, WalkState);
+        if ACPI_FAILURE (Status)
+        {
+            ACPI_EXCEPTION ((AE_INFO, Status, "CreateBufferField failure"));
+            goto Cleanup;
+        }
         break;
 
      case AML_TYPE_NAMED_FIELD:
@@ -766,6 +778,31 @@  AcpiDsLoad2EndOp (
         case AML_NAME_OP:
 
             Status = AcpiDsCreateNode (WalkState, Node, Op);
+            if (ACPI_FAILURE (Status))
+            {
+                goto Cleanup;
+            }
+
+#ifdef ACPI_EXEC_APP
+            /*
+             * AcpiExec support for namespace initialization file (initialize
+             * Name opcodes in this code.)
+             */
+            Namepath = AcpiNsGetExternalPathname (Node);
+            Status = AeLookupInitFileEntry (Namepath, &ObjDesc);
+            if (ACPI_SUCCESS (Status))
+            {
+                /* Detach any existing object, attach new object */
+
+                if (Node->Object)
+                {
+                    AcpiNsDetachObject (Node);
+                }
+                AcpiNsAttachObject (Node, ObjDesc, ObjDesc->Common.Type);
+            }
+            ACPI_FREE (Namepath);
+            Status = AE_OK;
+#endif
             break;
 
         case AML_METHOD_OP:
diff --git a/src/acpica/source/components/hardware/hwsleep.c b/src/acpica/source/components/hardware/hwsleep.c
index 016f62be..d503f1cf 100644
--- a/src/acpica/source/components/hardware/hwsleep.c
+++ b/src/acpica/source/components/hardware/hwsleep.c
@@ -466,11 +466,11 @@  AcpiHwLegacyWake (
 
     /* Enable sleep button */
 
-	(void) AcpiWriteBitRegister (
+    (void) AcpiWriteBitRegister (
             AcpiGbl_FixedEventInfo[ACPI_EVENT_SLEEP_BUTTON].EnableRegisterId,
             ACPI_ENABLE_EVENT);
 
-	(void) AcpiWriteBitRegister (
+    (void) AcpiWriteBitRegister (
             AcpiGbl_FixedEventInfo[ACPI_EVENT_SLEEP_BUTTON].StatusRegisterId,
             ACPI_CLEAR_STATUS);
 
diff --git a/src/acpica/source/components/namespace/nsnames.c b/src/acpica/source/components/namespace/nsnames.c
index a9509195..a27a87f0 100644
--- a/src/acpica/source/components/namespace/nsnames.c
+++ b/src/acpica/source/components/namespace/nsnames.c
@@ -158,12 +158,6 @@ 
 #define _COMPONENT          ACPI_NAMESPACE
         ACPI_MODULE_NAME    ("nsnames")
 
-/* Local Prototypes */
-
-static void
-AcpiNsNormalizePathname (
-    char                    *OriginalPath);
-
 
 /*******************************************************************************
  *
@@ -616,7 +610,7 @@  Cleanup:
  *
  ******************************************************************************/
 
-static void
+void
 AcpiNsNormalizePathname (
     char                    *OriginalPath)
 {
diff --git a/src/acpica/source/components/utilities/utdecode.c b/src/acpica/source/components/utilities/utdecode.c
index aec32969..01b1823e 100644
--- a/src/acpica/source/components/utilities/utdecode.c
+++ b/src/acpica/source/components/utilities/utdecode.c
@@ -224,7 +224,7 @@  const char        *AcpiGbl_RegionTypes[ACPI_NUM_PREDEFINED_REGIONS] =
     "IPMI",              /* 0x07 */
     "GeneralPurposeIo",  /* 0x08 */
     "GenericSerialBus",  /* 0x09 */
-    "PlatformCommChannel"/* 0x0A */
+    "PCC"                /* 0x0A */
 };
 
 
diff --git a/src/acpica/source/components/utilities/utdelete.c b/src/acpica/source/components/utilities/utdelete.c
index 2f60917b..502ff413 100644
--- a/src/acpica/source/components/utilities/utdelete.c
+++ b/src/acpica/source/components/utilities/utdelete.c
@@ -626,13 +626,13 @@  AcpiUtUpdateRefCount (
  *
  * FUNCTION:    AcpiUtUpdateObjectReference
  *
- * PARAMETERS:  Object              - Increment ref count for this object
- *                                    and all sub-objects
+ * PARAMETERS:  Object              - Increment or decrement the ref count for
+ *                                    this object and all sub-objects
  *              Action              - Either REF_INCREMENT or REF_DECREMENT
  *
  * RETURN:      Status
  *
- * DESCRIPTION: Increment the object reference count
+ * DESCRIPTION: Increment or decrement the object reference count
  *
  * Object references are incremented when:
  * 1) An object is attached to a Node (namespace object)
@@ -671,7 +671,7 @@  AcpiUtUpdateObjectReference (
         }
 
         /*
-         * All sub-objects must have their reference count incremented
+         * All sub-objects must have their reference count updated
          * also. Different object types have different subobjects.
          */
         switch (Object->Common.Type)
@@ -740,6 +740,7 @@  AcpiUtUpdateObjectReference (
                     break;
                 }
             }
+
             NextObject = NULL;
             break;
 
diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h
index 960af4b0..d0ffe390 100644
--- a/src/acpica/source/include/acdisasm.h
+++ b/src/acpica/source/include/acdisasm.h
@@ -457,6 +457,7 @@  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIortMap[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIortPad[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs0[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs01[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs1[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs4[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs8a[];
diff --git a/src/acpica/source/include/acnamesp.h b/src/acpica/source/include/acnamesp.h
index 3dd605a0..48b36593 100644
--- a/src/acpica/source/include/acnamesp.h
+++ b/src/acpica/source/include/acnamesp.h
@@ -487,6 +487,10 @@  AcpiNsBuildNormalizedPath (
     UINT32                  PathSize,
     BOOLEAN                 NoTrailing);
 
+void
+AcpiNsNormalizePathname (
+    char                    *OriginalPath);
+
 char *
 AcpiNsGetNormalizedPathname (
     ACPI_NAMESPACE_NODE     *Node,
diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
index a39d180e..eeb63cd5 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                 0x20200214
+#define ACPI_CA_VERSION                 0x20200326
 
 #include "acconfig.h"
 #include "actypes.h"
diff --git a/src/acpica/source/include/actbinfo.h b/src/acpica/source/include/actbinfo.h
index 74da8bac..59c38a29 100644
--- a/src/acpica/source/include/actbinfo.h
+++ b/src/acpica/source/include/actbinfo.h
@@ -264,7 +264,8 @@ 
 #define ACPI_IORTH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_IORT_NODE,f)
 #define ACPI_IORTM_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_IORT_ID_MAPPING,f)
 #define ACPI_IVRSH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_IVRS_HEADER,f)
-#define ACPI_IVRS0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_IVRS_HARDWARE,f)
+#define ACPI_IVRS0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_IVRS_HARDWARE1,f)
+#define ACPI_IVRS01_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_IVRS_HARDWARE2,f)
 #define ACPI_IVRS1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_IVRS_MEMORY,f)
 #define ACPI_IVRSD_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_IVRS_DE_HEADER,f)
 #define ACPI_IVRS8A_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_IVRS_DEVICE8A,f)
diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h
index fe17576b..2f1dd299 100644
--- a/src/acpica/source/include/actbl2.h
+++ b/src/acpica/source/include/actbl2.h
@@ -187,6 +187,7 @@ 
 #define ACPI_SIG_SBST           "SBST"      /* Smart Battery Specification Table */
 #define ACPI_SIG_SDEI           "SDEI"      /* Software Delegated Exception Interface Table */
 #define ACPI_SIG_SDEV           "SDEV"      /* Secure Devices table */
+#define ACPI_SIG_NHLT           "NHLT"      /* Non-HDAudio Link Table */
 
 
 /*
@@ -457,7 +458,8 @@  typedef struct acpi_ivrs_header
 
 enum AcpiIvrsType
 {
-    ACPI_IVRS_TYPE_HARDWARE         = 0x10,
+    ACPI_IVRS_TYPE_HARDWARE1        = 0x10,
+    ACPI_IVRS_TYPE_HARDWARE2        = 0x11,
     ACPI_IVRS_TYPE_MEMORY1          = 0x20,
     ACPI_IVRS_TYPE_MEMORY2          = 0x21,
     ACPI_IVRS_TYPE_MEMORY3          = 0x22
@@ -485,16 +487,30 @@  enum AcpiIvrsType
 
 /* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */
 
-typedef struct acpi_ivrs_hardware
+typedef struct acpi_ivrs_hardware_10
 {
     ACPI_IVRS_HEADER        Header;
     UINT16                  CapabilityOffset;   /* Offset for IOMMU control fields */
     UINT64                  BaseAddress;        /* IOMMU control registers */
     UINT16                  PciSegmentGroup;
     UINT16                  Info;               /* MSI number and unit ID */
-    UINT32                  Reserved;
+    UINT32                  FeatureReporting;
+
+} ACPI_IVRS_HARDWARE1;
+
+/* 0x11: I/O Virtualization Hardware Definition Block (IVHD) */
 
-} ACPI_IVRS_HARDWARE;
+typedef struct acpi_ivrs_hardware_11
+{
+    ACPI_IVRS_HEADER        Header;
+    UINT16                  CapabilityOffset;   /* Offset for IOMMU control fields */
+    UINT64                  BaseAddress;        /* IOMMU control registers */
+    UINT16                  PciSegmentGroup;
+    UINT16                  Info;               /* MSI number and unit ID */
+    UINT32                  Attributes;
+    UINT64                  EfrRegisterImage;
+    UINT64                  Reserved;
+} ACPI_IVRS_HARDWARE2;
 
 /* Masks for Info field above */
 
diff --git a/src/acpica/source/include/actbl3.h b/src/acpica/source/include/actbl3.h
index cfae7c42..74d4648a 100644
--- a/src/acpica/source/include/actbl3.h
+++ b/src/acpica/source/include/actbl3.h
@@ -183,7 +183,7 @@ 
 #define ACPI_SIG_WDDT           "WDDT"      /* Watchdog Timer Description Table */
 #define ACPI_SIG_WDRT           "WDRT"      /* Watchdog Resource Table */
 #define ACPI_SIG_WPBT           "WPBT"      /* Windows Platform Binary Table */
-#define ACPI_SIG_WSMT           "WSMT"      /* Windows SMM Security Migrations Table */
+#define ACPI_SIG_WSMT           "WSMT"      /* Windows SMM Security Mitigations Table */
 #define ACPI_SIG_XENV           "XENV"      /* Xen Environment table */
 #define ACPI_SIG_XXXX           "XXXX"      /* Intermediate AML header for ASL/ASL+ converter */
 
@@ -904,10 +904,10 @@  typedef struct acpi_table_wpbt
 
 /*******************************************************************************
  *
- * WSMT - Windows SMM Security Migrations Table
+ * WSMT - Windows SMM Security Mitigations Table
  *        Version 1
  *
- * Conforms to "Windows SMM Security Migrations Table",
+ * Conforms to "Windows SMM Security Mitigations Table",
  * Version 1.0, April 18, 2016
  *
  ******************************************************************************/
diff --git a/src/acpica/source/include/acuuid.h b/src/acpica/source/include/acuuid.h
index bcbf6b1d..b856219c 100644
--- a/src/acpica/source/include/acuuid.h
+++ b/src/acpica/source/include/acuuid.h
@@ -200,4 +200,4 @@ 
 #define UUID_DEVICE_PROPERTIES          "daffd814-6eba-4d8c-8a91-bc9bbf4aa301"
 
 
-#endif /* __AUUID_H__ */
+#endif /* __ACUUID_H__ */
diff --git a/src/acpica/source/tools/acpiexec/aecommon.h b/src/acpica/source/tools/acpiexec/aecommon.h
index d9ade0b6..9dbb3fac 100644
--- a/src/acpica/source/tools/acpiexec/aecommon.h
+++ b/src/acpica/source/tools/acpiexec/aecommon.h
@@ -195,7 +195,9 @@  typedef struct ae_debug_regions
 typedef struct init_file_entry
 {
     char                    *Name;
+    char                    *Value;
     ACPI_OPERAND_OBJECT     *ObjDesc;
+    BOOLEAN                 IsUsed;
 
 } INIT_FILE_ENTRY;
 
@@ -346,19 +348,23 @@  int
 AeOpenInitializationFile (
     char                    *Filename);
 
-void
+ACPI_STATUS
 AeProcessInitFile (
     void);
 
-ACPI_STATUS
-AeSetupConfiguration (
-    void                    *RegionAddr);
-
 ACPI_STATUS
 AeLookupInitFileEntry (
     char                    *Pathname,
     ACPI_OPERAND_OBJECT     **ObjDesc);
 
+void
+AeDisplayUnusedInitFileItems (
+    void);
+
+void
+AeDeleteInitFileList (
+    void);
+
 /* aeexec */
 
 void
@@ -376,6 +382,10 @@  AeGetDevices (
     void                    *Context,
     void                    **ReturnValue);
 
+ACPI_STATUS
+AeSetupConfiguration (
+    void                    *RegionAddr);
+
 ACPI_STATUS
 ExecuteOSI (
     char                    *OsiString,
diff --git a/src/acpica/source/tools/acpiexec/aeinitfile.c b/src/acpica/source/tools/acpiexec/aeinitfile.c
index 0813c873..ce758ed1 100644
--- a/src/acpica/source/tools/acpiexec/aeinitfile.c
+++ b/src/acpica/source/tools/acpiexec/aeinitfile.c
@@ -151,24 +151,17 @@ 
 
 #include "aecommon.h"
 #include "acdispat.h"
+#include "acnamesp.h"
+
 
 #define _COMPONENT          ACPI_TOOLS
         ACPI_MODULE_NAME    ("aeinitfile")
 
 
-/* Local prototypes */
-
-static void
-AeEnterInitFileEntry (
-    INIT_FILE_ENTRY         InitEntry,
-    ACPI_WALK_STATE         *WalkState);
-
-
 #define AE_FILE_BUFFER_SIZE     512
 
 static char                 LineBuffer[AE_FILE_BUFFER_SIZE];
 static char                 NameBuffer[AE_FILE_BUFFER_SIZE];
-static char                 ValueBuffer[AE_FILE_BUFFER_SIZE];
 static FILE                 *InitFile;
 
 
@@ -211,23 +204,23 @@  AeOpenInitializationFile (
  * RETURN:      None
  *
  * DESCRIPTION: Read the initialization file and perform all namespace
- *              initializations. AcpiGbl_InitEntries will be used for region
- *              field initialization.
+ *              initializations. AcpiGbl_InitEntries will be used for all
+ *              object initialization.
  *
  * NOTE:        The format of the file is multiple lines, each of format:
- *                  <ACPI-pathname> <Integer Value>
+ *                  <ACPI-pathname> <New Value>
  *
  *****************************************************************************/
 
-void
-AeProcessInitFile(
+ACPI_STATUS
+AeProcessInitFile (
     void)
 {
     ACPI_WALK_STATE         *WalkState;
     UINT64                  idx;
-    ACPI_STATUS             Status;
+    ACPI_STATUS             Status = AE_OK;
     char                    *Token;
-    char                    *ObjectBuffer;
+    char                    *ValueBuffer;
     char                    *TempNameBuffer;
     ACPI_OBJECT_TYPE        Type;
     ACPI_OBJECT             TempObject;
@@ -235,13 +228,14 @@  AeProcessInitFile(
 
     if (!InitFile)
     {
-        return;
+        return (AE_OK);
     }
 
     /* Create needed objects to be reused for each init entry */
 
     WalkState = AcpiDsCreateWalkState (0, NULL, NULL, NULL);
     NameBuffer[0] = '\\';
+    NameBuffer[1] = 0;
 
     while (fgets (LineBuffer, AE_FILE_BUFFER_SIZE, InitFile) != NULL)
     {
@@ -249,12 +243,20 @@  AeProcessInitFile(
     }
     rewind (InitFile);
 
+    /*
+     * Allocate and populate the Gbl_InitEntries array
+     */
     AcpiGbl_InitEntries =
-        AcpiOsAllocate (sizeof (INIT_FILE_ENTRY) * AcpiGbl_InitFileLineCount);
+        AcpiOsAllocateZeroed (sizeof (INIT_FILE_ENTRY) * AcpiGbl_InitFileLineCount);
     for (idx = 0; fgets (LineBuffer, AE_FILE_BUFFER_SIZE, InitFile); ++idx)
     {
-
         TempNameBuffer = AcpiDbGetNextToken (LineBuffer, &Token, &Type);
+        if (!TempNameBuffer)
+        {
+            AcpiGbl_InitEntries[idx].Name = NULL;
+            continue;
+        }
+
         if (LineBuffer[0] == '\\')
         {
             strcpy (NameBuffer, TempNameBuffer);
@@ -266,48 +268,67 @@  AeProcessInitFile(
             strcpy (NameBuffer + 1, TempNameBuffer);
         }
 
+        AcpiNsNormalizePathname (NameBuffer);
         AcpiGbl_InitEntries[idx].Name =
             AcpiOsAllocateZeroed (strnlen (NameBuffer, AE_FILE_BUFFER_SIZE) + 1);
-
         strcpy (AcpiGbl_InitEntries[idx].Name, NameBuffer);
 
-        ObjectBuffer = AcpiDbGetNextToken (Token, &Token, &Type);
+        ValueBuffer = AcpiDbGetNextToken (Token, &Token, &Type);
+        if (!ValueBuffer)
+        {
+            AcpiGbl_InitEntries[idx].Value = NULL;
+            continue;
+        }
+
+        AcpiGbl_InitEntries[idx].Value =
+            AcpiOsAllocateZeroed (strnlen (ValueBuffer, AE_FILE_BUFFER_SIZE) + 1);
+        strcpy (AcpiGbl_InitEntries[idx].Value, ValueBuffer);
 
         if (Type == ACPI_TYPE_FIELD_UNIT)
         {
-            Status = AcpiDbConvertToObject (ACPI_TYPE_BUFFER, ObjectBuffer,
+            Status = AcpiDbConvertToObject (ACPI_TYPE_BUFFER, ValueBuffer,
                 &TempObject);
         }
         else
         {
-            Status = AcpiDbConvertToObject (Type, ObjectBuffer, &TempObject);
+            Status = AcpiDbConvertToObject (Type, ValueBuffer, &TempObject);
+        }
+
+        if (ACPI_FAILURE (Status))
+        {
+            AcpiOsPrintf ("%s[%s]: %s\n", NameBuffer, AcpiUtGetTypeName (Type),
+                AcpiFormatException (Status));
+            goto CleanupAndExit;
         }
 
         Status = AcpiUtCopyEobjectToIobject (&TempObject,
             &AcpiGbl_InitEntries[idx].ObjDesc);
 
-        if (Type == ACPI_TYPE_BUFFER || Type == ACPI_TYPE_FIELD_UNIT)
+        /* Cleanup the external object created by DbConvertToObject above */
+
+        if (ACPI_SUCCESS (Status))
         {
-            ACPI_FREE (TempObject.Buffer.Pointer);
+            if (Type == ACPI_TYPE_BUFFER || Type == ACPI_TYPE_FIELD_UNIT)
+            {
+                ACPI_FREE (TempObject.Buffer.Pointer);
+            }
+            else if (Type == ACPI_TYPE_PACKAGE)
+            {
+                AcpiDbDeleteObjects (1, &TempObject);
+            }
         }
-
-        if (ACPI_FAILURE (Status))
+        else
         {
-            AcpiOsPrintf ("%s %s\n", ValueBuffer,
+            AcpiOsPrintf ("%s[%s]: %s\n", NameBuffer, AcpiUtGetTypeName (Type),
                 AcpiFormatException (Status));
             goto CleanupAndExit;
         }
 
         /*
-         * Special case for field units. Field units are dependent on the
-         * parent region. This parent region has yet to be created so defer the
-         * initialization until the dispatcher. For all other types, initialize
-         * the namespace node with the value found in the init file.
+         * Initialize the namespace node with the value found in the init file.
          */
-        if (Type != ACPI_TYPE_FIELD_UNIT)
-        {
-            AeEnterInitFileEntry (AcpiGbl_InitEntries[idx], WalkState);
-        }
+        AcpiOsPrintf ("Namespace object init from file: %16s, Value \"%s\", Type %s\n",
+            AcpiGbl_InitEntries[idx].Name, AcpiGbl_InitEntries[idx].Value, AcpiUtGetTypeName (Type));
     }
 
     /* Cleanup */
@@ -315,97 +336,130 @@  AeProcessInitFile(
 CleanupAndExit:
     fclose (InitFile);
     AcpiDsDeleteWalkState (WalkState);
+    return (Status);
 }
 
 
 /******************************************************************************
  *
- * FUNCTION:    AeInitFileEntry
- *
- * PARAMETERS:  InitEntry           - Entry of the init file
- *              WalkState           - Used for the Store operation
+ * FUNCTION:    AeLookupInitFileEntry
  *
- * RETURN:      None
+ * PARAMETERS:  Pathname            - AML namepath in external format
+ *              ObjDesc             - Where the object is returned if it exists
  *
- * DESCRIPTION: Perform initialization of a single namespace object
+ * RETURN:      Status. AE_OK if a match was found
  *
- *              Note: namespace of objects are limited to integers and region
- *              fields units of 8 bytes at this time.
+ * DESCRIPTION: Search the init file for a particular name and its value.
  *
  *****************************************************************************/
 
-static void
-AeEnterInitFileEntry (
-    INIT_FILE_ENTRY         InitEntry,
-    ACPI_WALK_STATE         *WalkState)
+ACPI_STATUS
+AeLookupInitFileEntry (
+    char                    *Pathname,
+    ACPI_OPERAND_OBJECT     **ObjDesc)
 {
-    char                    *Pathname = InitEntry.Name;
-    ACPI_OPERAND_OBJECT     *ObjDesc = InitEntry.ObjDesc;
-    ACPI_NAMESPACE_NODE     *NewNode;
-    ACPI_STATUS             Status;
+    UINT32                  i;
 
+    ACPI_FUNCTION_TRACE (AeLookupInitFileEntry);
 
-    Status = AcpiNsLookup (NULL, Pathname, ObjDesc->Common.Type,
-        ACPI_IMODE_LOAD_PASS2, ACPI_NS_ERROR_IF_FOUND | ACPI_NS_NO_UPSEARCH |
-        ACPI_NS_EARLY_INIT, NULL, &NewNode);
-    if (ACPI_FAILURE (Status))
+    ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Lookup: %s\n", Pathname));
+
+    if (!AcpiGbl_InitEntries)
     {
-        ACPI_EXCEPTION ((AE_INFO, Status,
-            "While creating name from namespace initialization file: %s",
-            Pathname));
-        return;
+        return (AE_NOT_FOUND);
     }
 
-    /* Store pointer to value descriptor in the Node */
+    AcpiNsNormalizePathname (Pathname);
 
-    Status = AcpiNsAttachObject (NewNode, ObjDesc,
-         ObjDesc->Common.Type);
-    if (ACPI_FAILURE (Status))
+    for (i = 0; i < AcpiGbl_InitFileLineCount; ++i)
     {
-        ACPI_EXCEPTION ((AE_INFO, Status,
-            "While attaching object to node from namespace initialization file: %s",
-            Pathname));
-        return;
+        if (AcpiGbl_InitEntries[i].Name &&
+            !strcmp (AcpiGbl_InitEntries[i].Name, Pathname))
+        {
+            *ObjDesc = AcpiGbl_InitEntries[i].ObjDesc;
+            AcpiGbl_InitEntries[i].IsUsed = TRUE;
+            ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Found match: %s, %p\n", Pathname, *ObjDesc));
+            return_ACPI_STATUS (AE_OK);
+        }
     }
 
-    /* Remove local reference to the object */
+    ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "No match found: %s\n", Pathname));
+    return_ACPI_STATUS (AE_NOT_FOUND);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    AeDisplayUnusedInitFileItems
+ *
+ * PARAMETERS:  None
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Display all init file items that have not been referenced
+ *              (i.e., items that have not been found in the namespace).
+ *
+ *****************************************************************************/
+
+void
+AeDisplayUnusedInitFileItems (
+    void)
+{
+    UINT32                  i;
+
+
+    if (!AcpiGbl_InitEntries)
+    {
+        return;
+    }
 
-    AcpiUtRemoveReference (ObjDesc);
+    for (i = 0; i < AcpiGbl_InitFileLineCount; ++i)
+    {
+        if (AcpiGbl_InitEntries[i].Name &&
+            !AcpiGbl_InitEntries[i].IsUsed)
+        {
+            AcpiOsPrintf ("Init file entry not found in namespace "
+                "(or is a non-data type): %s\n",
+                AcpiGbl_InitEntries[i].Name);
+        }
+    }
 }
 
 
 /******************************************************************************
  *
- * FUNCTION:    AeLookupInitFileEntry
+ * FUNCTION:    AeDeleteInitFileList
  *
- * PARAMETERS:  Pathname            - AML namepath in external format
- *              ValueString         - value of the namepath if it exitst
+ * PARAMETERS:  None
  *
  * RETURN:      None
  *
- * DESCRIPTION: Search the init file for a particular name and its value.
+ * DESCRIPTION: Delete the global namespace initialization file data
  *
  *****************************************************************************/
 
-ACPI_STATUS
-AeLookupInitFileEntry (
-    char                    *Pathname,
-    ACPI_OPERAND_OBJECT     **ObjDesc)
+void
+AeDeleteInitFileList (
+    void)
 {
     UINT32                  i;
 
+
     if (!AcpiGbl_InitEntries)
     {
-        return AE_NOT_FOUND;
+        return;
     }
 
     for (i = 0; i < AcpiGbl_InitFileLineCount; ++i)
     {
-        if (!strcmp(AcpiGbl_InitEntries[i].Name, Pathname))
+
+        if ((AcpiGbl_InitEntries[i].ObjDesc) && (AcpiGbl_InitEntries[i].Value))
         {
-            *ObjDesc = AcpiGbl_InitEntries[i].ObjDesc;
-            return AE_OK;
+            /* Remove one reference on the object (and all subobjects) */
+
+            AcpiUtRemoveReference (AcpiGbl_InitEntries[i].ObjDesc);
         }
     }
-    return AE_NOT_FOUND;
+
+    AcpiOsFree (AcpiGbl_InitEntries);
 }