diff mbox series

[1/2] ACPICA: Update to version 20210604

Message ID 20210605135526.92280-2-colin.king@canonical.com
State Accepted
Headers show
Series ACPICA: Update to version 20210604 | expand

Commit Message

Colin Ian King June 5, 2021, 1:55 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/AMZT7XOO2HPVPMACSBAU5ELTVFEHDKAR/

Signed-off-by: Colin Ian King <colin.king@canonical.com>
---
 src/acpica/source/common/ahtable.c            |  42 +--
 src/acpica/source/common/dmtable.c            | 116 +++++++-
 src/acpica/source/common/dmtbdump2.c          | 230 +++++++++++++--
 src/acpica/source/common/dmtbdump3.c          |  60 ++++
 src/acpica/source/common/dmtbinfo1.c          |  13 +
 src/acpica/source/common/dmtbinfo2.c          | 211 +++++++++++---
 src/acpica/source/common/dmtbinfo3.c          |  24 ++
 src/acpica/source/compiler/aslcompiler.h      |   4 +
 src/acpica/source/compiler/aslmessages.c      |   6 +-
 src/acpica/source/compiler/aslmessages.h      |   4 +-
 src/acpica/source/compiler/aslutils.c         |  40 +++
 src/acpica/source/compiler/asluuid.c          |  47 ---
 src/acpica/source/compiler/dtcompiler.h       |  16 +
 src/acpica/source/compiler/dtfield.c          |   4 +-
 src/acpica/source/compiler/dtio.c             |   6 +-
 src/acpica/source/compiler/dttable1.c         | 274 ++++++++++++++----
 src/acpica/source/compiler/dttable2.c         | 169 +++++++++++
 src/acpica/source/compiler/dttemplate.h       | 212 ++++++++++++--
 src/acpica/source/compiler/dtutils.c          |  19 ++
 .../source/components/executer/exfield.c      |   6 +-
 .../source/components/executer/exserial.c     |  12 +
 .../source/components/namespace/nsrepair2.c   |   7 +
 .../source/components/utilities/utdelete.c    |   8 +
 .../source/components/utilities/utuuid.c      |  48 +++
 src/acpica/source/include/acbuffer.h          |   9 +
 src/acpica/source/include/acconfig.h          |   1 +
 src/acpica/source/include/acdisasm.h          |  37 ++-
 src/acpica/source/include/acpixf.h            |   2 +-
 src/acpica/source/include/actbinfo.h          |   9 +
 src/acpica/source/include/actbl1.h            |  43 ++-
 src/acpica/source/include/actbl2.h            | 156 ++++++++++
 src/acpica/source/include/acutils.h           |   5 +
 src/acpica/source/tools/acpiexec/aeinstall.c  |   1 +
 src/acpica/source/tools/acpiexec/aeregion.c   |  17 ++
 34 files changed, 1621 insertions(+), 237 deletions(-)

Comments

Alex Hung June 7, 2021, 2:36 a.m. UTC | #1
On 2021-06-05 7:55 a.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/AMZT7XOO2HPVPMACSBAU5ELTVFEHDKAR/
> 
> Signed-off-by: Colin Ian King <colin.king@canonical.com>
> ---
>  src/acpica/source/common/ahtable.c            |  42 +--
>  src/acpica/source/common/dmtable.c            | 116 +++++++-
>  src/acpica/source/common/dmtbdump2.c          | 230 +++++++++++++--
>  src/acpica/source/common/dmtbdump3.c          |  60 ++++
>  src/acpica/source/common/dmtbinfo1.c          |  13 +
>  src/acpica/source/common/dmtbinfo2.c          | 211 +++++++++++---
>  src/acpica/source/common/dmtbinfo3.c          |  24 ++
>  src/acpica/source/compiler/aslcompiler.h      |   4 +
>  src/acpica/source/compiler/aslmessages.c      |   6 +-
>  src/acpica/source/compiler/aslmessages.h      |   4 +-
>  src/acpica/source/compiler/aslutils.c         |  40 +++
>  src/acpica/source/compiler/asluuid.c          |  47 ---
>  src/acpica/source/compiler/dtcompiler.h       |  16 +
>  src/acpica/source/compiler/dtfield.c          |   4 +-
>  src/acpica/source/compiler/dtio.c             |   6 +-
>  src/acpica/source/compiler/dttable1.c         | 274 ++++++++++++++----
>  src/acpica/source/compiler/dttable2.c         | 169 +++++++++++
>  src/acpica/source/compiler/dttemplate.h       | 212 ++++++++++++--
>  src/acpica/source/compiler/dtutils.c          |  19 ++
>  .../source/components/executer/exfield.c      |   6 +-
>  .../source/components/executer/exserial.c     |  12 +
>  .../source/components/namespace/nsrepair2.c   |   7 +
>  .../source/components/utilities/utdelete.c    |   8 +
>  .../source/components/utilities/utuuid.c      |  48 +++
>  src/acpica/source/include/acbuffer.h          |   9 +
>  src/acpica/source/include/acconfig.h          |   1 +
>  src/acpica/source/include/acdisasm.h          |  37 ++-
>  src/acpica/source/include/acpixf.h            |   2 +-
>  src/acpica/source/include/actbinfo.h          |   9 +
>  src/acpica/source/include/actbl1.h            |  43 ++-
>  src/acpica/source/include/actbl2.h            | 156 ++++++++++
>  src/acpica/source/include/acutils.h           |   5 +
>  src/acpica/source/tools/acpiexec/aeinstall.c  |   1 +
>  src/acpica/source/tools/acpiexec/aeregion.c   |  17 ++
>  34 files changed, 1621 insertions(+), 237 deletions(-)
> 
> diff --git a/src/acpica/source/common/ahtable.c b/src/acpica/source/common/ahtable.c
> index e318ddf3..80f248d2 100644
> --- a/src/acpica/source/common/ahtable.c
> +++ b/src/acpica/source/common/ahtable.c
> @@ -199,20 +199,21 @@ AcpiAhGetTableInfo (
>   */
>  const AH_TABLE      AcpiGbl_SupportedTables[] =
>  {
> -    {ACPI_SIG_ASF,  "Alert Standard Format table"},
> +    {ACPI_SIG_ASF,  "Alert Standard Format Table"},
> +    {ACPI_SIG_BDAT, "BIOS Data ACPI Table"},
>      {ACPI_SIG_BERT, "Boot Error Record Table"},
>      {ACPI_SIG_BGRT, "Boot Graphics Resource Table"},
>      {ACPI_SIG_BOOT, "Simple Boot Flag Table"},
>      {ACPI_SIG_CEDT, "CXL Early Discovery Table"},
> -    {ACPI_SIG_CPEP, "Corrected Platform Error Polling table"},
> +    {ACPI_SIG_CPEP, "Corrected Platform Error Polling Table"},
>      {ACPI_SIG_CSRT, "Core System Resource Table"},
> -    {ACPI_SIG_DBG2, "Debug Port table type 2"},
> -    {ACPI_SIG_DBGP, "Debug Port table"},
> -    {ACPI_SIG_DMAR, "DMA Remapping table"},
> -    {ACPI_SIG_DRTM, "Dynamic Root of Trust for Measurement table"},
> +    {ACPI_SIG_DBG2, "Debug Port Table type 2"},
> +    {ACPI_SIG_DBGP, "Debug Port Table"},
> +    {ACPI_SIG_DMAR, "DMA Remapping Table"},
> +    {ACPI_SIG_DRTM, "Dynamic Root of Trust for Measurement Table"},
>      {ACPI_SIG_DSDT, "Differentiated System Description Table (AML table)"},
>      {ACPI_SIG_ECDT, "Embedded Controller Boot Resources Table"},
> -    {ACPI_SIG_EINJ, "Error Injection table"},
> +    {ACPI_SIG_EINJ, "Error Injection Table"},
>      {ACPI_SIG_ERST, "Error Record Serialization Table"},
>      {ACPI_SIG_FACS, "Firmware ACPI Control Structure"},
>      {ACPI_SIG_FADT, "Fixed ACPI Description Table (FADT)"},
> @@ -220,38 +221,41 @@ const AH_TABLE      AcpiGbl_SupportedTables[] =
>      {ACPI_SIG_GTDT, "Generic Timer Description Table"},
>      {ACPI_SIG_HEST, "Hardware Error Source Table"},
>      {ACPI_SIG_HMAT, "Heterogeneous Memory Attributes Table"},
> -    {ACPI_SIG_HPET, "High Precision Event Timer table"},
> +    {ACPI_SIG_HPET, "High Precision Event Timer Table"},
>      {ACPI_SIG_IORT, "IO Remapping Table"},
>      {ACPI_SIG_IVRS, "I/O Virtualization Reporting Structure"},
>      {ACPI_SIG_LPIT, "Low Power Idle Table"},
>      {ACPI_SIG_MADT, "Multiple APIC Description Table (MADT)"},
> -    {ACPI_SIG_MCFG, "Memory Mapped Configuration table"},
> -    {ACPI_SIG_MCHI, "Management Controller Host Interface table"},
> +    {ACPI_SIG_MCFG, "Memory Mapped Configuration Table"},
> +    {ACPI_SIG_MCHI, "Management Controller Host Interface Table"},
>      {ACPI_SIG_MPST, "Memory Power State Table"},
>      {ACPI_SIG_MSCT, "Maximum System Characteristics Table"},
> -    {ACPI_SIG_MSDM, "Microsoft Data Management table"},
> +    {ACPI_SIG_MSDM, "Microsoft Data Management Table"},
>      {ACPI_SIG_NFIT, "NVDIMM Firmware Interface Table"},
>      {ACPI_SIG_PCCT, "Platform Communications Channel Table"},
> -    {ACPI_SIG_PHAT, "Platform Health Assessment Table"},
>      {ACPI_SIG_PDTT, "Platform Debug Trigger Table"},
> +    {ACPI_SIG_PHAT, "Platform Health Assessment Table"},
>      {ACPI_SIG_PMTT, "Platform Memory Topology Table"},
>      {ACPI_SIG_PPTT, "Processor Properties Topology Table"},
> +    {ACPI_SIG_PRMT, "Platform Runtime Mechanism Table"},
>      {ACPI_SIG_RASF, "RAS Features Table"},
> +    {ACPI_SIG_RGRT, "Regulatory Graphics Resource Table"},
>      {ACPI_RSDP_NAME,"Root System Description Pointer"},
>      {ACPI_SIG_RSDT, "Root System Description Table"},
>      {ACPI_SIG_S3PT, "S3 Performance Table"},
>      {ACPI_SIG_SBST, "Smart Battery Specification Table"},
>      {ACPI_SIG_SDEI, "Software Delegated Exception Interface Table"},
> -    {ACPI_SIG_SDEV, "Secure Devices table"},
> +    {ACPI_SIG_SDEV, "Secure Devices Table"},
>      {ACPI_SIG_SLIC, "Software Licensing Description Table"},
>      {ACPI_SIG_SLIT, "System Locality Information Table"},
> -    {ACPI_SIG_SPCR, "Serial Port Console Redirection table"},
> -    {ACPI_SIG_SPMI, "Server Platform Management Interface table"},
> +    {ACPI_SIG_SPCR, "Serial Port Console Redirection Table"},
> +    {ACPI_SIG_SPMI, "Server Platform Management Interface Table"},
>      {ACPI_SIG_SRAT, "System Resource Affinity Table"},
>      {ACPI_SIG_SSDT, "Secondary System Description Table (AML table)"},
> -    {ACPI_SIG_STAO, "Status Override table"},
> -    {ACPI_SIG_TCPA, "Trusted Computing Platform Alliance table"},
> -    {ACPI_SIG_TPM2, "Trusted Platform Module hardware interface table"},
> +    {ACPI_SIG_STAO, "Status Override Table"},
> +    {ACPI_SIG_SVKL, "Storage Volume Key Location Table"},
> +    {ACPI_SIG_TCPA, "Trusted Computing Platform Alliance Table"},
> +    {ACPI_SIG_TPM2, "Trusted Platform Module hardware interface Table"},
>      {ACPI_SIG_UEFI, "UEFI Boot Optimization Table"},
>      {ACPI_SIG_VIOT, "Virtual I/O Translation Table"},
>      {ACPI_SIG_WAET, "Windows ACPI Emulated Devices Table"},
> @@ -260,7 +264,7 @@ const AH_TABLE      AcpiGbl_SupportedTables[] =
>      {ACPI_SIG_WDRT, "Watchdog Resource Table"},
>      {ACPI_SIG_WPBT, "Windows Platform Binary Table"},
>      {ACPI_SIG_WSMT, "Windows SMM Security Mitigations Table"},
> -    {ACPI_SIG_XENV, "Xen Environment 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 ffec889a..7a4e87e1 100644
> --- a/src/acpica/source/common/dmtable.c
> +++ b/src/acpica/source/common/dmtable.c
> @@ -187,6 +187,7 @@ static const char           *AcpiDmAsfSubnames[] =
>  static const char           *AcpiDmCedtSubnames[] =
>  {
>      "CXL Host Bridge Structure",
> +    "CXL Fixed Memory Window Structure",
>      "Unknown Subtable Type"         /* Reserved */
>  };
>  
> @@ -350,6 +351,7 @@ static const char           *AcpiDmMadtSubnames[] =
>      "Generic MSI Frame",                /* ACPI_MADT_GENERIC_MSI_FRAME */
>      "Generic Interrupt Redistributor",  /* ACPI_MADT_GENERIC_REDISTRIBUTOR */
>      "Generic Interrupt Translator",     /* ACPI_MADT_GENERIC_TRANSLATOR */
> +    "Mutiprocessor Wakeup",             /* ACPI_MADT_TYPE_MULTIPROC_WAKEUP */
>      "Unknown Subtable Type"             /* Reserved */
>  };
>  
> @@ -401,6 +403,12 @@ static const char           *AcpiDmPpttSubnames[] =
>      "Unknown Subtable Type"         /* Reserved */
>  };
>  
> +static const char           *AcpiDmRgrtSubnames[] =
> +{
> +    "Unknown/Reserved Image Type",  /* ACPI_RGRT_TYPE_RESERVED0 */
> +    "Type PNG"                      /* ACPI_RGRT_IMAGE_TYPE_PNG */
> +};
> +
>  static const char           *AcpiDmSdevSubnames[] =
>  {
>      "Namespace Device",             /* ACPI_SDEV_TYPE_NAMESPACE_DEVICE */
> @@ -438,9 +446,28 @@ static const char           *AcpiDmTpm2Subnames[] =
>  
>  static const char           *AcpiDmIvrsSubnames[] =
>  {
> -    "Hardware Definition Block",
> -    "Memory Definition Block",
> -    "Unknown Subtable Type"         /* Reserved */
> +    "Hardware Definition Block (IVHD)",
> +    "Hardware Definition Block - Mixed Format (IVHD)",
> +    "Memory Definition Block (IVMD)",
> +    "Unknown/Reserved Subtable Type"            /* Reserved */
> +};
> +
> +static const char           *AcpiDmIvrsDevEntryNames[] =
> +{
> +    "Unknown/Reserved Device Entry Type",       /* 0- Reserved */
> +    "Device Entry: Select All Devices",         /* 1 */
> +    "Device Entry: Select One Device",          /* 2 */
> +    "Device Entry: Start of Range",             /* 3 */
> +    "Device Entry: End of Range",               /* 4 */
> +    "Device Entry: Alias Select",               /* 66 */
> +    "Device Entry: Alias Start of Range",       /* 67 */
> +    "Unknown/Reserved Device Entry Type",       /* 68- Reserved */
> +    "Unknown/Reserved Device Entry Type",       /* 69- Reserved */
> +    "Device Entry: Extended Select",            /* 70 */
> +    "Device Entry: Extended Start of Range",    /* 71 */
> +    "Device Entry: Special Device",             /* 72 */
> +    "Device Entry: ACPI HID Named Device",      /* 240 */
> +    "Unknown/Reserved Device Entry Type"        /* Reserved */
>  };
>  
>  static const char           *AcpiDmLpitSubnames[] =
> @@ -507,6 +534,7 @@ static const char           *AcpiDmGasAccessWidth[] =
>  const ACPI_DMTABLE_DATA     AcpiDmTableData[] =
>  {
>      {ACPI_SIG_ASF,  NULL,                   AcpiDmDumpAsf,  DtCompileAsf,   TemplateAsf},
> +    {ACPI_SIG_BDAT, AcpiDmTableInfoBdat,    NULL,           NULL,           TemplateBdat},
>      {ACPI_SIG_BERT, AcpiDmTableInfoBert,    NULL,           NULL,           TemplateBert},
>      {ACPI_SIG_BGRT, AcpiDmTableInfoBgrt,    NULL,           NULL,           TemplateBgrt},
>      {ACPI_SIG_BOOT, AcpiDmTableInfoBoot,    NULL,           NULL,           TemplateBoot},
> @@ -541,7 +569,9 @@ const ACPI_DMTABLE_DATA     AcpiDmTableData[] =
>      {ACPI_SIG_PHAT, NULL,                   AcpiDmDumpPhat, DtCompilePhat,  TemplatePhat},
>      {ACPI_SIG_PMTT, NULL,                   AcpiDmDumpPmtt, DtCompilePmtt,  TemplatePmtt},
>      {ACPI_SIG_PPTT, NULL,                   AcpiDmDumpPptt, DtCompilePptt,  TemplatePptt},
> +    {ACPI_SIG_PRMT, NULL,                   AcpiDmDumpPrmt, DtCompilePrmt,  TemplatePrmt},
>      {ACPI_SIG_RASF, AcpiDmTableInfoRasf,    NULL,           NULL,           TemplateRasf},
> +    {ACPI_SIG_RGRT, NULL,                   AcpiDmDumpRgrt, DtCompileRgrt,  TemplateRgrt},
>      {ACPI_SIG_RSDT, NULL,                   AcpiDmDumpRsdt, DtCompileRsdt,  TemplateRsdt},
>      {ACPI_SIG_S3PT, NULL,                   NULL,           NULL,           TemplateS3pt},
>      {ACPI_SIG_SBST, AcpiDmTableInfoSbst,    NULL,           NULL,           TemplateSbst},
> @@ -553,6 +583,7 @@ const ACPI_DMTABLE_DATA     AcpiDmTableData[] =
>      {ACPI_SIG_SPMI, AcpiDmTableInfoSpmi,    NULL,           NULL,           TemplateSpmi},
>      {ACPI_SIG_SRAT, NULL,                   AcpiDmDumpSrat, DtCompileSrat,  TemplateSrat},
>      {ACPI_SIG_STAO, NULL,                   AcpiDmDumpStao, DtCompileStao,  TemplateStao},
> +    {ACPI_SIG_SVKL, AcpiDmTableInfoSvkl,    AcpiDmDumpSvkl, DtCompileSvkl,  TemplateSvkl},
>      {ACPI_SIG_TCPA, NULL,                   AcpiDmDumpTcpa, DtCompileTcpa,  TemplateTcpa},
>      {ACPI_SIG_TPM2, AcpiDmTableInfoTpm2,    AcpiDmDumpTpm2, DtCompileTpm2,  TemplateTpm2},
>      {ACPI_SIG_UEFI, AcpiDmTableInfoUefi,    NULL,           DtCompileUefi,  TemplateUefi},
> @@ -940,8 +971,8 @@ AcpiDmDumpTable (
>          if (SubtableLength && (Info->Offset >= SubtableLength))
>          {
>              AcpiOsPrintf (
> -                "/**** ACPI subtable terminates early - "
> -                "may be older version (dump table) */\n");
> +                "/**** ACPI subtable terminates early (Len %u) - "
> +                "may be older version (dump table) */\n", SubtableLength);
>  
>              /* Move on to next subtable */
>  
> @@ -966,11 +997,13 @@ AcpiDmDumpTable (
>          case ACPI_DMT_ACCWIDTH:
>          case ACPI_DMT_CEDT:
>          case ACPI_DMT_IVRS:
> +        case ACPI_DMT_IVRS_DE:
>          case ACPI_DMT_GTDT:
>          case ACPI_DMT_MADT:
>          case ACPI_DMT_PCCT:
>          case ACPI_DMT_PMTT:
>          case ACPI_DMT_PPTT:
> +        case ACPI_DMT_RGRT:
>          case ACPI_DMT_SDEV:
>          case ACPI_DMT_SRAT:
>          case ACPI_DMT_ASF:
> @@ -1077,6 +1110,11 @@ AcpiDmDumpTable (
>              ByteLength = strlen (ACPI_CAST_PTR (char, Target)) + 1;
>              break;
>  
> +        case ACPI_DMT_IVRS_UNTERMINATED_STRING:
> +
> +            ByteLength = ((ACPI_CAST_PTR (ACPI_IVRS_DEVICE_HID, Target) -1)->UidLength);
> +            break;
> +
>          case ACPI_DMT_GAS:
>  
>              if (!LastOutputBlankLine)
> @@ -1273,7 +1311,7 @@ AcpiDmDumpTable (
>  
>              /* Convert 16-byte UUID buffer to 36-byte formatted UUID string */
>  
> -            (void) AuConvertUuidToString ((char *) Target, AslGbl_MsgBuffer);
> +            (void) AcpiUtConvertUuidToString ((char *) Target, AslGbl_MsgBuffer);
>  
>              AcpiOsPrintf ("%s\n", AslGbl_MsgBuffer);
>              break;
> @@ -1283,6 +1321,11 @@ AcpiDmDumpTable (
>              AcpiOsPrintf ("\"%s\"\n", ACPI_CAST_PTR (char, Target));
>              break;
>  
> +        case ACPI_DMT_IVRS_UNTERMINATED_STRING:
> +
> +            AcpiOsPrintf ("\"%.*s\"\n", ByteLength, ACPI_CAST_PTR (char, Target));
> +            break;
> +
>          /* Fixed length ASCII name fields */
>  
>          case ACPI_DMT_SIG:
> @@ -1684,6 +1727,20 @@ AcpiDmDumpTable (
>              AcpiDmDumpBuffer (Target, 0, ByteLength, 0, NULL);
>              break;
>  
> +        case ACPI_DMT_RGRT:
> +
> +            /* RGRT subtable types */
> +
> +            Temp8 = *Target;
> +            if (Temp8 >= ACPI_RGRT_TYPE_RESERVED)
> +            {
> +                Temp8 = ACPI_RGRT_TYPE_RESERVED0;
> +            }
> +
> +            AcpiOsPrintf (UINT8_FORMAT, *Target,
> +                AcpiDmRgrtSubnames[Temp8]);
> +            break;
> +
>          case ACPI_DMT_SDEV:
>  
>              /* SDEV subtable types */
> @@ -1750,21 +1807,62 @@ AcpiDmDumpTable (
>              {
>              case ACPI_IVRS_TYPE_HARDWARE1:
>              case ACPI_IVRS_TYPE_HARDWARE2:
> -            case ACPI_IVRS_TYPE_HARDWARE3:
>  
>                  Name = AcpiDmIvrsSubnames[0];
>                  break;
>  
> +            case ACPI_IVRS_TYPE_HARDWARE3:
> +
> +                Name = AcpiDmIvrsSubnames[1];
> +                break;
> +
>              case ACPI_IVRS_TYPE_MEMORY1:
>              case ACPI_IVRS_TYPE_MEMORY2:
>              case ACPI_IVRS_TYPE_MEMORY3:
>  
> -                Name = AcpiDmIvrsSubnames[1];
> +                Name = AcpiDmIvrsSubnames[2];
>                  break;
>  
>              default:
>  
> -                Name = AcpiDmIvrsSubnames[2];
> +                Name = AcpiDmIvrsSubnames[3];
> +                break;
> +            }
> +
> +            AcpiOsPrintf (UINT8_FORMAT, *Target, Name);
> +            break;
> +
> +        case ACPI_DMT_IVRS_DE:
> +
> +            /* IVRS device entry types */
> +
> +            Temp8 = *Target;
> +            switch (Temp8)
> +            {
> +            case ACPI_IVRS_TYPE_ALL:
> +            case ACPI_IVRS_TYPE_SELECT:
> +            case ACPI_IVRS_TYPE_START:
> +            case ACPI_IVRS_TYPE_END:
> +
> +                Name = AcpiDmIvrsDevEntryNames[Temp8];
> +                break;
> +
> +            case ACPI_IVRS_TYPE_ALIAS_SELECT:
> +            case ACPI_IVRS_TYPE_ALIAS_START:
> +            case ACPI_IVRS_TYPE_EXT_SELECT:
> +            case ACPI_IVRS_TYPE_EXT_START:
> +            case ACPI_IVRS_TYPE_SPECIAL:
> +
> +                Name = AcpiDmIvrsDevEntryNames[Temp8 - 61];
> +                break;
> +
> +            case ACPI_IVRS_TYPE_HID:
> +
> +                Name = AcpiDmIvrsDevEntryNames[Temp8 - 228];
> +                break;
> +
> +            default:
> +                Name = AcpiDmIvrsDevEntryNames[0];  /* Unknown/Reserved */
>                  break;
>              }
>  
> diff --git a/src/acpica/source/common/dmtbdump2.c b/src/acpica/source/common/dmtbdump2.c
> index 80d9d459..1b3cdf76 100644
> --- a/src/acpica/source/common/dmtbdump2.c
> +++ b/src/acpica/source/common/dmtbdump2.c
> @@ -153,6 +153,7 @@
>  #include "accommon.h"
>  #include "acdisasm.h"
>  #include "actables.h"
> +#include "aslcompiler.h"
>  
>  /* This module used for application-level code only */
>  
> @@ -483,7 +484,18 @@ NextSubtable:
>   *
>   * RETURN:      None
>   *
> - * DESCRIPTION: Format the contents of a IVRS
> + * DESCRIPTION: Format the contents of a IVRS. Notes:
> + *              The IVRS is essentially a flat table, with the following
> + *              structure:
> + *              <Main ACPI Table Header>
> + *              <Main subtable - virtualization info>
> + *              <IVHD>
> + *                  <Device Entries>
> + *              ...
> + *              <IVHD>
> + *                  <Device Entries>
> + *              <IVMD>
> + *              ...
>   *
>   ******************************************************************************/
>  
> @@ -513,36 +525,36 @@ AcpiDmDumpIvrs (
>      /* Subtables */
>  
>      Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset);
> +
>      while (Offset < Table->Length)
>      {
> -        /* Common subtable header */
> -
> -        AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
> -            Subtable->Length, AcpiDmTableInfoIvrsHdr);
> -        if (ACPI_FAILURE (Status))
> -        {
> -            return;
> -        }
> -
>          switch (Subtable->Type)
>          {
> +        /* Type 10h, IVHD (I/O Virtualization Hardware Definition) */
> +
>          case ACPI_IVRS_TYPE_HARDWARE1:
>  
> -            InfoTable = AcpiDmTableInfoIvrs0;
> +            AcpiOsPrintf ("\n");
> +            InfoTable = AcpiDmTableInfoIvrsHware1;
>              break;
>  
> +        /* Types 11h, 40h, IVHD (I/O Virtualization Hardware Definition) */
> +
>          case ACPI_IVRS_TYPE_HARDWARE2:
>          case ACPI_IVRS_TYPE_HARDWARE3:
>  
> -            InfoTable = AcpiDmTableInfoIvrs01;
> +            AcpiOsPrintf ("\n");
> +            InfoTable = AcpiDmTableInfoIvrsHware23;
>              break;
>  
> +        /* Types 20h-22h, IVMD (I/O Virtualization Memory Definition Block) */
> +
>          case ACPI_IVRS_TYPE_MEMORY1:
>          case ACPI_IVRS_TYPE_MEMORY2:
>          case ACPI_IVRS_TYPE_MEMORY3:
>  
> -            InfoTable = AcpiDmTableInfoIvrs1;
> +            AcpiOsPrintf ("\n");
> +            InfoTable = AcpiDmTableInfoIvrsMemory;
>              break;
>  
>          default:
> @@ -562,7 +574,6 @@ AcpiDmDumpIvrs (
>  
>          /* Dump the subtable */
>  
> -        AcpiOsPrintf ("\n");
>          Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
>              Subtable->Length, InfoTable);
>          if (ACPI_FAILURE (Status))
> @@ -570,7 +581,7 @@ AcpiDmDumpIvrs (
>              return;
>          }
>  
> -        /* The hardware subtable can contain multiple device entries */
> +        /* The hardware subtables (IVHD) can contain multiple device entries */
>  
>          if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE1 ||
>              Subtable->Type == ACPI_IVRS_TYPE_HARDWARE2 ||
> @@ -584,16 +595,19 @@ AcpiDmDumpIvrs (
>              }
>              else
>              {
> -                /* ACPI_IVRS_TYPE_HARDWARE2 subtable type */
> +                /* ACPI_IVRS_TYPE_HARDWARE2, HARDWARE3 subtable types */
>  
>                  EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE2);
>                  DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable,
>                      sizeof (ACPI_IVRS_HARDWARE2));
>              }
>  
> +            /* Process all of the Device Entries */
> +
>              while (EntryOffset < (Offset + Subtable->Length))
>              {
>                  AcpiOsPrintf ("\n");
> +
>                  /*
>                   * Upper 2 bits of Type encode the length of the device entry
>                   *
> @@ -645,7 +659,7 @@ AcpiDmDumpIvrs (
>  
>                  case ACPI_IVRS_TYPE_HID:
>  
> -                    EntryLength = 22;
> +                    EntryLength = 4;
>                      InfoTable = AcpiDmTableInfoIvrsHid;
>                      break;
>  
> @@ -669,21 +683,87 @@ AcpiDmDumpIvrs (
>  
>                  HidSubtable = ACPI_CAST_PTR (ACPI_IVRS_DEVICE_HID, DeviceEntry);
>                  EntryOffset += EntryLength;
> -                DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, DeviceEntry,
> +                DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, HidSubtable,
>                      EntryLength);
>  
>                  if (EntryType == ACPI_IVRS_TYPE_HID)
>                  {
> -                    EntryLength = HidSubtable->UidLength;
> -                    Status = AcpiDmDumpTable (Table->Length, EntryOffset,
> -                        Table, EntryLength, AcpiDmTableInfoIvrsHid1);
> +                    /*
> +                     * Determine if the HID is an integer or a string.
> +                     * An integer is defined to be 32 bits, with the upper 32 bits
> +                     * set to zero. (from the ACPI Spec): "The HID can be a 32-bit
> +                     * integer or a character string. If an integer, the lower
> +                     * 4 bytes of the field contain the integer and the upper
> +                     * 4 bytes are padded with 0".
> +                     */
> +                    if (UtIsIdInteger ((UINT8 *) &HidSubtable->AcpiHid))
> +                    {
> +                        Status = AcpiDmDumpTable (Table->Length, EntryOffset,
> +                            &HidSubtable->AcpiHid, 8, AcpiDmTableInfoIvrsHidInteger);
> +                    }
> +                    else
> +                    {
> +                        Status = AcpiDmDumpTable (Table->Length, EntryOffset,
> +                            &HidSubtable->AcpiHid, 8, AcpiDmTableInfoIvrsHidString);
> +                    }
>                      if (ACPI_FAILURE (Status))
>                      {
>                          return;
>                      }
> -                    EntryOffset += EntryLength;
> +
> +                    EntryOffset += 8;
> +
> +                    /*
> +                     * Determine if the CID is an integer or a string. The format
> +                     * of the CID is the same as the HID above. From ACPI Spec:
> +                     * "If present, CID must be a single Compatible Device ID
> +                     * following the same format as the HID field."
> +                     */
> +                    if (UtIsIdInteger ((UINT8 *) &HidSubtable->AcpiCid))
> +                    {
> +                        Status = AcpiDmDumpTable (Table->Length, EntryOffset,
> +                            &HidSubtable->AcpiCid, 8, AcpiDmTableInfoIvrsCidInteger);
> +                    }
> +                    else
> +                    {
> +                        Status = AcpiDmDumpTable (Table->Length, EntryOffset,
> +                            &HidSubtable->AcpiCid, 8, AcpiDmTableInfoIvrsCidString);
> +                    }
> +                    if (ACPI_FAILURE (Status))
> +                    {
> +                        return;
> +                    }
> +
> +                    EntryOffset += 8;
> +                    EntryLength = HidSubtable->UidLength;
> +
> +                    if (EntryLength > ACPI_IVRS_UID_NOT_PRESENT)
> +                    {
> +                        /* Dump the UID based upon the UidType field (String or Integer) */
> +
> +                        if (HidSubtable->UidType == ACPI_IVRS_UID_IS_STRING)
> +                        {
> +                            Status = AcpiDmDumpTable (Table->Length, EntryOffset,
> +                                &HidSubtable->UidType, EntryLength, AcpiDmTableInfoIvrsUidString);
> +                            if (ACPI_FAILURE (Status))
> +                            {
> +                                return;
> +                            }
> +                        }
> +                        else /* ACPI_IVRS_UID_IS_INTEGER */
> +                        {
> +                            Status = AcpiDmDumpTable (Table->Length, EntryOffset,
> +                                &HidSubtable->UidType, EntryLength, AcpiDmTableInfoIvrsUidInteger);
> +                            if (ACPI_FAILURE (Status))
> +                            {
> +                                return;
> +                            }
> +                        }
> +                    }
> +
> +                    EntryOffset += EntryLength+2;
>                      DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER,
> -                        DeviceEntry, EntryLength);
> +                        Table, EntryOffset);
>                  }
>              }
>          }
> @@ -1923,6 +2003,108 @@ NextSubtable:
>  }
>  
>  
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiDmDumpPrmt
> + *
> + * PARAMETERS:  Table               - A PRMT table
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Format the contents of a PRMT. This table type consists
> + *              of an open-ended number of subtables.
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmDumpPrmt (
> +    ACPI_TABLE_HEADER       *Table)
> +{
> +    UINT32                  CurrentOffset = sizeof (ACPI_TABLE_HEADER);
> +    ACPI_TABLE_PRMT_HEADER  *PrmtHeader;
> +    ACPI_PRMT_MODULE_INFO   *PrmtModuleInfo;
> +    ACPI_PRMT_HANDLER_INFO  *PrmtHandlerInfo;
> +    ACPI_STATUS             Status;
> +    UINT32                  i, j;
> +
> +
> +    /* Main table header */
> +
> +    PrmtHeader = ACPI_ADD_PTR (ACPI_TABLE_PRMT_HEADER, Table, CurrentOffset);
> +    Status = AcpiDmDumpTable (Table->Length, CurrentOffset, PrmtHeader,
> +        sizeof (ACPI_TABLE_PRMT_HEADER), AcpiDmTableInfoPrmtHdr);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        AcpiOsPrintf ("Invalid PRMT header\n");
> +        return;
> +    }
> +
> +    CurrentOffset += sizeof (ACPI_TABLE_PRMT_HEADER);
> +
> +    /* PRM Module Information Structure array */
> +
> +    for (i = 0; i < PrmtHeader->ModuleInfoCount; ++i)
> +    {
> +        PrmtModuleInfo = ACPI_ADD_PTR (ACPI_PRMT_MODULE_INFO, Table, CurrentOffset);
> +        Status = AcpiDmDumpTable (Table->Length, CurrentOffset, PrmtModuleInfo,
> +            sizeof (ACPI_PRMT_MODULE_INFO), AcpiDmTableInfoPrmtModule);
> +
> +        CurrentOffset += sizeof (ACPI_PRMT_MODULE_INFO);
> +
> +        /* PRM handler information structure array */
> +
> +        for (j = 0; j < PrmtModuleInfo->HandlerInfoCount; ++j)
> +        {
> +            PrmtHandlerInfo = ACPI_ADD_PTR (ACPI_PRMT_HANDLER_INFO, Table, CurrentOffset);
> +            Status = AcpiDmDumpTable (Table->Length, CurrentOffset, PrmtHandlerInfo,
> +                sizeof (ACPI_PRMT_HANDLER_INFO), AcpiDmTableInfoPrmtHandler);
> +
> +            CurrentOffset += sizeof (ACPI_PRMT_HANDLER_INFO);
> +        }
> +    }
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiDmDumpRgrt
> + *
> + * PARAMETERS:  Table               - A RGRT table
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Format the contents of a RGRT
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmDumpRgrt (
> +    ACPI_TABLE_HEADER       *Table)
> +{
> +    ACPI_STATUS             Status;
> +    ACPI_TABLE_RGRT         *Subtable = ACPI_CAST_PTR (ACPI_TABLE_RGRT, Table);
> +    UINT32                  Offset = sizeof (ACPI_TABLE_RGRT);
> +
> +
> +    /* Main table */
> +
> +    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoRgrt);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return;
> +    }
> +
> +    /* Dump the binary image as a subtable */
> +
> +    Status = AcpiDmDumpTable (Table->Length, Offset, &Subtable->Image,
> +        Table->Length - Offset, AcpiDmTableInfoRgrt0);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return;
> +    }
> +}
> +
> +
>  /*******************************************************************************
>   *
>   * FUNCTION:    AcpiDmDumpS3pt
> diff --git a/src/acpica/source/common/dmtbdump3.c b/src/acpica/source/common/dmtbdump3.c
> index 7f559eee..e81a703b 100644
> --- a/src/acpica/source/common/dmtbdump3.c
> +++ b/src/acpica/source/common/dmtbdump3.c
> @@ -420,6 +420,65 @@ AcpiDmDumpStao (
>  }
>  
>  
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiDmDumpSvkl
> + *
> + * PARAMETERS:  Table               - A SVKL table
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Format the contents of a SVKL. This is a variable-length
> + *              table that contains an open-ended number of key subtables at
> + *              the end of the header.
> + *
> + * NOTES: SVKL is essentially a flat table, with a small main table and
> + *          a variable number of a single type of subtable.
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmDumpSvkl (
> +    ACPI_TABLE_HEADER       *Table)
> +{
> +    ACPI_STATUS             Status;
> +    UINT32                  Length = Table->Length;
> +    UINT32                  Offset = sizeof (ACPI_TABLE_SVKL);
> +    ACPI_SVKL_KEY           *Subtable;
> +
> +
> +    /* Main table */
> +
> +    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoSvkl);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return;
> +    }
> +
> +    /* The rest of the table consists of subtables (single type) */
> +
> +    Subtable = ACPI_ADD_PTR (ACPI_SVKL_KEY, Table, Offset);
> +    while (Offset < Table->Length)
> +    {
> +        /* Dump the subtable */
> +
> +        AcpiOsPrintf ("\n");
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
> +            sizeof (ACPI_SVKL_KEY), AcpiDmTableInfoSvkl0);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return;
> +        }
> +
> +        /* Point to next subtable */
> +
> +        Offset += sizeof (ACPI_SVKL_KEY);
> +        Subtable = ACPI_ADD_PTR (ACPI_SVKL_KEY, Subtable,
> +            sizeof (ACPI_SVKL_KEY));
> +    }
> +}
> +
> +
>  /*******************************************************************************
>   *
>   * FUNCTION:    AcpiDmDumpTcpa
> @@ -502,6 +561,7 @@ AcpiDmDumpTcpa (
>   * DESCRIPTION: Format the contents of a TPM2.
>   *
>   ******************************************************************************/
> +
>  static void
>  AcpiDmDumpTpm2Rev3 (
>      ACPI_TABLE_HEADER       *Table)
> diff --git a/src/acpica/source/common/dmtbinfo1.c b/src/acpica/source/common/dmtbinfo1.c
> index ea545f53..fbf3980d 100644
> --- a/src/acpica/source/common/dmtbinfo1.c
> +++ b/src/acpica/source/common/dmtbinfo1.c
> @@ -295,6 +295,19 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoAsf4[] =
>  };
>  
>  
> +/*******************************************************************************
> + *
> + * BDAT -  BIOS Data ACPI Table
> + *
> + ******************************************************************************/
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoBdat[] =
> +{
> +    {ACPI_DMT_GAS,      ACPI_BDAT_OFFSET (Gas),                     "BDAT Generic Address", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +
>  /*******************************************************************************
>   *
>   * BERT -  Boot Error Record table
> diff --git a/src/acpica/source/common/dmtbinfo2.c b/src/acpica/source/common/dmtbinfo2.c
> index 9bb4b48c..00cf2e4d 100644
> --- a/src/acpica/source/common/dmtbinfo2.c
> +++ b/src/acpica/source/common/dmtbinfo2.c
> @@ -414,23 +414,24 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs[] =
>      ACPI_DMT_TERMINATOR
>  };
>  
> -/* Common Subtable header (one per Subtable) */
> -
> -ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsHdr[] =
> -{
> -    {ACPI_DMT_IVRS,     ACPI_IVRSH_OFFSET (Type),                   "Subtable Type", 0},
> -    {ACPI_DMT_UINT8,    ACPI_IVRSH_OFFSET (Flags),                  "Flags", 0},
> -    {ACPI_DMT_UINT16,   ACPI_IVRSH_OFFSET (Length),                 "Length", DT_LENGTH},
> -    {ACPI_DMT_UINT16,   ACPI_IVRSH_OFFSET (DeviceId),               "DeviceId", 0},
> -    ACPI_DMT_TERMINATOR
> -};
> -
>  /* IVRS subtables */
>  
>  /* 0x10: I/O Virtualization Hardware Definition (IVHD) Block */
>  
> -ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs0[] =
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsHware1[] =
>  {
> +    {ACPI_DMT_IVRS,     ACPI_IVRSH_OFFSET (Type),                   "Subtable Type", 0},
> +    {ACPI_DMT_UINT8,    ACPI_IVRSH_OFFSET (Flags),                  "Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "HtTunEn", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "PassPW", 0},
> +    {ACPI_DMT_FLAG2,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "ResPassPW", 0},
> +    {ACPI_DMT_FLAG3,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Isoc Control", 0},
> +    {ACPI_DMT_FLAG4,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Iotlb Support", 0},
> +    {ACPI_DMT_FLAG5,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Coherent", 0},
> +    {ACPI_DMT_FLAG6,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Prefetch Support", 0},
> +    {ACPI_DMT_FLAG7,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "PPR Support", 0},
> +    {ACPI_DMT_UINT16,   ACPI_IVRSH_OFFSET (Length),                 "Length", DT_LENGTH},
> +    {ACPI_DMT_UINT16,   ACPI_IVRSH_OFFSET (DeviceId),               "DeviceId", 0},
>      {ACPI_DMT_UINT16,   ACPI_IVRS0_OFFSET (CapabilityOffset),       "Capability Offset", 0},
>      {ACPI_DMT_UINT64,   ACPI_IVRS0_OFFSET (BaseAddress),            "Base Address", 0},
>      {ACPI_DMT_UINT16,   ACPI_IVRS0_OFFSET (PciSegmentGroup),        "PCI Segment Group", 0},
> @@ -439,24 +440,44 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs0[] =
>      ACPI_DMT_TERMINATOR
>  };
>  
> -/* 0x10: I/O Virtualization Hardware Definition (IVHD) Block */
> +/* 0x11, 0x40: I/O Virtualization Hardware Definition (IVHD) Block */
>  
> -ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs01[] =
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsHware23[] =
>  {
> -    {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
> -};
> -
> -/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition (IVMD) Block */
> -
> -ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs1[] =
> +    {ACPI_DMT_IVRS,     ACPI_IVRSH_OFFSET (Type),                   "Subtable Type", 0},
> +    {ACPI_DMT_UINT8,    ACPI_IVRSH_OFFSET (Flags),                  "Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "HtTunEn", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "PassPW", 0},
> +    {ACPI_DMT_FLAG2,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "ResPassPW", 0},
> +    {ACPI_DMT_FLAG3,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Isoc Control", 0},
> +    {ACPI_DMT_FLAG4,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Iotlb Support", 0},
> +    {ACPI_DMT_FLAG5,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Coherent", 0},
> +    {ACPI_DMT_FLAG6,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Prefetch Support", 0},
> +    {ACPI_DMT_FLAG7,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "PPR Support", 0},
> +    {ACPI_DMT_UINT16,   ACPI_IVRS01_OFFSET (Header.Length),         "Length", DT_LENGTH},
> +    {ACPI_DMT_UINT16,   ACPI_IVRS01_OFFSET (Header.DeviceId),       "DeviceId", 0},
> +    {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
> +};
> +
> +/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition (IVMD) Device Entry Block */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsMemory[] =
>  {
> +    {ACPI_DMT_IVRS,     ACPI_IVRSH_OFFSET (Type),                   "Subtable Type", 0},
> +    {ACPI_DMT_UINT8,    ACPI_IVRSH_OFFSET (Flags),                  "Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Unity", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Readable", 0},
> +    {ACPI_DMT_FLAG2,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Writeable", 0},
> +    {ACPI_DMT_FLAG3,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Exclusion Range", 0},
> +    {ACPI_DMT_UINT16,   ACPI_IVRSH_OFFSET (Length),                 "Length", DT_LENGTH},
> +    {ACPI_DMT_UINT16,   ACPI_IVRSH_OFFSET (DeviceId),               "DeviceId", 0},
>      {ACPI_DMT_UINT16,   ACPI_IVRS1_OFFSET (AuxData),                "Auxiliary Data", 0},
>      {ACPI_DMT_UINT64,   ACPI_IVRS1_OFFSET (Reserved),               "Reserved", 0},
>      {ACPI_DMT_UINT64,   ACPI_IVRS1_OFFSET (StartAddress),           "Start Address", 0},
> @@ -467,19 +488,26 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs1[] =
>  /* Device entry header for IVHD block */
>  
>  #define ACPI_DMT_IVRS_DE_HEADER \
> -    {ACPI_DMT_UINT8,    ACPI_IVRSD_OFFSET (Type),                   "Entry Type", 0}, \
> +    {ACPI_DMT_IVRS_DE,  ACPI_IVRSD_OFFSET (Type),                   "Subtable Type", 0}, \
>      {ACPI_DMT_UINT16,   ACPI_IVRSD_OFFSET (Id),                     "Device ID", 0}, \
> -    {ACPI_DMT_UINT8,    ACPI_IVRSD_OFFSET (DataSetting),            "Data Setting", 0}
> +    {ACPI_DMT_UINT8,    ACPI_IVRSD_OFFSET (DataSetting),            "Data Setting (decoded below)", 0}, \
> +    {ACPI_DMT_FLAG0,    ACPI_IVRSDE_FLAG_OFFSET (DataSetting, 0),   "INITPass", 0}, \
> +    {ACPI_DMT_FLAG1,    ACPI_IVRSDE_FLAG_OFFSET (DataSetting, 0),   "EIntPass", 0}, \
> +    {ACPI_DMT_FLAG2,    ACPI_IVRSDE_FLAG_OFFSET (DataSetting, 0),   "NMIPass", 0}, \
> +    {ACPI_DMT_FLAG3,    ACPI_IVRSDE_FLAG_OFFSET (DataSetting, 0),   "Reserved", 0}, \
> +    {ACPI_DMT_FLAGS4,   ACPI_IVRSDE_FLAG_OFFSET (DataSetting, 0),   "System MGMT", 0}, \
> +    {ACPI_DMT_FLAG6,    ACPI_IVRSDE_FLAG_OFFSET (DataSetting, 0),   "LINT0 Pass", 0}, \
> +    {ACPI_DMT_FLAG7,    ACPI_IVRSDE_FLAG_OFFSET (DataSetting, 0),   "LINT1 Pass", 0}
>  
> -/* 4-byte device entry */
> +/* 4-byte device entry (Types 1,2,3,4) */
>  
>  ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs4[] =
>  {
>      ACPI_DMT_IVRS_DE_HEADER,
> -    {ACPI_DMT_EXIT,     0,                                          NULL, 0},
> +    ACPI_DMT_TERMINATOR
>  };
>  
> -/* 8-byte device entry */
> +/* 8-byte device entry (Type Alias Select, Alias Start of Range) */
>  
>  ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs8a[] =
>  {
> @@ -490,7 +518,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs8a[] =
>      ACPI_DMT_TERMINATOR
>  };
>  
> -/* 8-byte device entry */
> +/* 8-byte device entry (Type Extended Select, Extended Start of Range) */
>  
>  ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs8b[] =
>  {
> @@ -499,7 +527,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs8b[] =
>      ACPI_DMT_TERMINATOR
>  };
>  
> -/* 8-byte device entry */
> +/* 8-byte device entry (Type Special Device) */
>  
>  ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs8c[] =
>  {
> @@ -510,21 +538,50 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs8c[] =
>      ACPI_DMT_TERMINATOR
>  };
>  
> -/* Variable-length device entry */
> +/* Variable-length Device Entry Type 0xF0 */
>  
>  ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsHid[] =
>  {
>      ACPI_DMT_IVRS_DE_HEADER,
> -    {ACPI_DMT_NAME8,    ACPI_IVRSHID_OFFSET (AcpiHid),              "ACPI HID", 0},
> -    {ACPI_DMT_NAME8,    ACPI_IVRSHID_OFFSET (AcpiCid),              "ACPI CID", 0},
> -    {ACPI_DMT_UINT8,    ACPI_IVRSHID_OFFSET (UidType),              "UID Format", DT_DESCRIBES_OPTIONAL},
> -    {ACPI_DMT_UINT8,    ACPI_IVRSHID_OFFSET (UidLength),            "UID Length", DT_DESCRIBES_OPTIONAL},
>      ACPI_DMT_TERMINATOR
>  };
>  
> -ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsHid1[] =
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsUidString[] =
> +{
> +    {ACPI_DMT_UINT8,    0,                                          "UID Format", DT_DESCRIBES_OPTIONAL},
> +    {ACPI_DMT_UINT8,    1,                                          "UID Length", DT_DESCRIBES_OPTIONAL},
> +    {ACPI_DMT_IVRS_UNTERMINATED_STRING, 2,                          "UID", DT_OPTIONAL},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsUidInteger[] =
> +{
> +    {ACPI_DMT_UINT8,    0,                                          "UID Format", DT_DESCRIBES_OPTIONAL},
> +    {ACPI_DMT_UINT8,    1,                                          "UID Length", DT_DESCRIBES_OPTIONAL},
> +    {ACPI_DMT_UINT64, 2,                                            "UID", DT_OPTIONAL},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsHidString[] =
>  {
> -    {ACPI_DMT_RAW_BUFFER, 0,                                        "UID", DT_OPTIONAL},
> +    {ACPI_DMT_NAME8,        0,                                      "ACPI HID", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsHidInteger[] =
> +{
> +    {ACPI_DMT_UINT64,       0,                                      "ACPI HID", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsCidString[] =
> +{
> +    {ACPI_DMT_NAME8,        0,                                      "ACPI CID", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsCidInteger[] =
> +{
> +    {ACPI_DMT_UINT64,       0,                                      "ACPI CID", 0},
>      ACPI_DMT_TERMINATOR
>  };
>  
> @@ -1537,6 +1594,52 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoPptt2[] =
>  };
>  
>  
> +/*******************************************************************************
> + *
> + * PRMT - Platform Runtime Mechanism Table
> + *        Version 1
> + *
> + ******************************************************************************/
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoPrmtHdr[] =
> +{
> +    {ACPI_DMT_UUID,     ACPI_PRMTH_OFFSET (PlatformGuid[0]),       "Platform GUID", 0},
> +    {ACPI_DMT_UINT32,   ACPI_PRMTH_OFFSET (ModuleInfoOffset),      "Module info offset", 0},
> +    {ACPI_DMT_UINT32,   ACPI_PRMTH_OFFSET (ModuleInfoCount),       "Module info count", 0},
> +    ACPI_DMT_NEW_LINE,
> +    ACPI_DMT_TERMINATOR
> +
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoPrmtModule[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_PRMT0_OFFSET (Revision),               "Revision", 0},
> +    {ACPI_DMT_UINT16,   ACPI_PRMT0_OFFSET (Length),                 "Length", 0},
> +    {ACPI_DMT_UUID,     ACPI_PRMT0_OFFSET (ModuleGuid[0]),          "Module GUID", 0},
> +    {ACPI_DMT_UINT16,   ACPI_PRMT0_OFFSET (MajorRev),               "Major Revision", 0},
> +    {ACPI_DMT_UINT16,   ACPI_PRMT0_OFFSET (MinorRev),               "Minor Revision", 0},
> +    {ACPI_DMT_UINT16,   ACPI_PRMT0_OFFSET (HandlerInfoCount),       "Handler Info Count", 0},
> +    {ACPI_DMT_UINT32,   ACPI_PRMT0_OFFSET (HandlerInfoOffset),      "Handler Info Offset", 0},
> +    {ACPI_DMT_UINT64,   ACPI_PRMT0_OFFSET (MmioListPointer),        "Mmio List pointer", 0},
> +    ACPI_DMT_NEW_LINE,
> +    ACPI_DMT_TERMINATOR
> +
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoPrmtHandler[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_PRMT1_OFFSET (Revision),               "Revision", 0},
> +    {ACPI_DMT_UINT16,   ACPI_PRMT1_OFFSET (Length),                 "Length", 0},
> +    {ACPI_DMT_UUID,     ACPI_PRMT1_OFFSET (HandlerGuid[0]),         "Handler GUID", 0},
> +    {ACPI_DMT_UINT64,   ACPI_PRMT1_OFFSET (HandlerAddress),         "Handler address", 0},
> +    {ACPI_DMT_UINT64,   ACPI_PRMT1_OFFSET (StaticDataBufferAddress),"Satic Data Address", 0},
> +    {ACPI_DMT_UINT64,   ACPI_PRMT1_OFFSET (AcpiParamBufferAddress), "ACPI Parameter Address", 0},
> +    ACPI_DMT_NEW_LINE,
> +    ACPI_DMT_TERMINATOR
> +
> +};
> +
> +
>  /*******************************************************************************
>   *
>   * RASF -  RAS Feature table
> @@ -1550,6 +1653,31 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoRasf[] =
>  };
>  
>  
> +/*******************************************************************************
> + *
> + * RGRT -  Regulatory Graphics Resource Table
> + *
> + ******************************************************************************/
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoRgrt[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_RGRT_OFFSET (Version),                 "Version", 0},
> +    {ACPI_DMT_RGRT,     ACPI_RGRT_OFFSET (ImageType),               "Image Type", 0},
> +    {ACPI_DMT_UINT8,    ACPI_RGRT_OFFSET (Reserved),                "Reserved", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/*
> + * We treat the binary image field as its own subtable (to make
> + * ACPI_DMT_RAW_BUFFER work properly).
> + */
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoRgrt0[] =
> +{
> +    {ACPI_DMT_RAW_BUFFER, 0,                                        "Image", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +
>  /*******************************************************************************
>   *
>   * S3PT - S3 Performance Table
> @@ -1734,4 +1862,5 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoSdev1b[] =
>      {ACPI_DMT_RAW_BUFFER, 0,                                        "Vendor Data", 0}, /*, DT_OPTIONAL}, */
>      ACPI_DMT_TERMINATOR
>  };
> +
>  /*! [End] no source code translation !*/
> diff --git a/src/acpica/source/common/dmtbinfo3.c b/src/acpica/source/common/dmtbinfo3.c
> index 773ba16e..b0435019 100644
> --- a/src/acpica/source/common/dmtbinfo3.c
> +++ b/src/acpica/source/common/dmtbinfo3.c
> @@ -403,6 +403,30 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoStaoStr[] =
>  };
>  
>  
> +/*******************************************************************************
> + *
> + * SVKL - Storage Volume Key Location table
> + *
> + ******************************************************************************/
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoSvkl[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_SVKL_OFFSET (Count),                   "Key Count", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* SVKL subtables */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoSvkl0[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_SVKL0_OFFSET (Type),                   "Key Type", 0},
> +    {ACPI_DMT_UINT16,   ACPI_SVKL0_OFFSET (Format),                 "Key Format", 0},
> +    {ACPI_DMT_UINT32,   ACPI_SVKL0_OFFSET (Size),                   "Key Size", 0},
> +    {ACPI_DMT_UINT64,   ACPI_SVKL0_OFFSET (Address),                "Key Address", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +
>  /*******************************************************************************
>   *
>   * TCPA - Trusted Computing Platform Alliance table (Client)
> diff --git a/src/acpica/source/compiler/aslcompiler.h b/src/acpica/source/compiler/aslcompiler.h
> index e48e4674..5112ea49 100644
> --- a/src/acpica/source/compiler/aslcompiler.h
> +++ b/src/acpica/source/compiler/aslcompiler.h
> @@ -1224,6 +1224,10 @@ DbgPrint (
>  #define ASL_PARSE_OUTPUT    1
>  #define ASL_TREE_OUTPUT     2
>  
> +BOOLEAN
> +UtIsIdInteger (
> +    UINT8                   *Target);
> +
>  UINT8
>  UtIsBigEndianMachine (
>      void);
> diff --git a/src/acpica/source/compiler/aslmessages.c b/src/acpica/source/compiler/aslmessages.c
> index c9697645..4dd6422b 100644
> --- a/src/acpica/source/compiler/aslmessages.c
> +++ b/src/acpica/source/compiler/aslmessages.c
> @@ -400,14 +400,16 @@ const char                      *AslTableCompilerMsgs [] =
>  /*    ASL_MSG_INVALID_FIELD_NAME */         "Invalid Field Name",
>  /*    ASL_MSG_INVALID_HEX_INTEGER */        "Invalid hex integer constant",
>  /*    ASL_MSG_OEM_TABLE */                  "OEM table - unknown contents",
> -/*    ASL_MSG_RESERVED_VALUE */             "Reserved field",
> +/*    ASL_MSG_RESERVED_FIELD */             "Reserved field",
>  /*    ASL_MSG_UNKNOWN_LABEL */              "Label is undefined",
>  /*    ASL_MSG_UNKNOWN_SUBTABLE */           "Unknown subtable type",
>  /*    ASL_MSG_UNKNOWN_TABLE */              "Unknown ACPI table signature",
>  /*    ASL_MSG_ZERO_VALUE */                 "Value must be non-zero",
>  /*    ASL_MSG_INVALID_LABEL */              "Invalid field label detected",
>  /*    ASL_MSG_BUFFER_LIST */                "Invalid buffer initializer list",
> -/*    ASL_MSG_ENTRY_LIST */                 "Invalid entry initializer list"
> +/*    ASL_MSG_ENTRY_LIST */                 "Invalid entry initializer list",
> +/*    ASL_MSG_UNKNOWN_FORMAT */             "Unknown format value",
> +/*    ASL_MSG_RESERVED_VALUE */             "Value for field is reserved or unknown",
>  };
>  
>  /* Preprocessor */
> diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h
> index 1d9f7bec..69c2561b 100644
> --- a/src/acpica/source/compiler/aslmessages.h
> +++ b/src/acpica/source/compiler/aslmessages.h
> @@ -402,7 +402,7 @@ typedef enum
>      ASL_MSG_INVALID_FIELD_NAME,
>      ASL_MSG_INVALID_HEX_INTEGER,
>      ASL_MSG_OEM_TABLE,
> -    ASL_MSG_RESERVED_VALUE,
> +    ASL_MSG_RESERVED_FIELD,
>      ASL_MSG_UNKNOWN_LABEL,
>      ASL_MSG_UNKNOWN_SUBTABLE,
>      ASL_MSG_UNKNOWN_TABLE,
> @@ -410,6 +410,8 @@ typedef enum
>      ASL_MSG_INVALID_LABEL,
>      ASL_MSG_BUFFER_LIST,
>      ASL_MSG_ENTRY_LIST,
> +    ASL_MSG_UNKNOWN_FORMAT,
> +    ASL_MSG_RESERVED_VALUE,
>  
>      /* These messages are used by the Preprocessor only */
>  
> diff --git a/src/acpica/source/compiler/aslutils.c b/src/acpica/source/compiler/aslutils.c
> index 5dee45d9..44631957 100644
> --- a/src/acpica/source/compiler/aslutils.c
> +++ b/src/acpica/source/compiler/aslutils.c
> @@ -206,6 +206,46 @@ UtIsBigEndianMachine (
>  }
>  
>  
> +/*******************************************************************************
> + *
> + * FUNCTION:    UtIsIdInteger
> + *
> + * PARAMETERS:  Pointer to an ACPI ID (HID, CID) string
> + *
> + * RETURN:      TRUE if string is an integer
> + *              FALSE if string is not an integer
> + *
> + * DESCRIPTION: Determine whether the input ACPI ID string can be converted to
> + *              an integer value.
> + *
> + ******************************************************************************/
> +
> +BOOLEAN
> +UtIsIdInteger (
> +    UINT8                   *Target)
> +{
> +    UINT32                  i;
> +
> +
> +    /* The first three characters of the string must be alphabetic */
> +
> +    for (i = 0; i < 3; i++)
> +    {
> +        if (!isalpha ((int) Target[i]))
> +        {
> +            break;
> +        }
> +    }
> +
> +    if (i < 3)
> +    {
> +        return (TRUE);
> +    }
> +
> +    return (FALSE);
> +}
> +
> +
>  /******************************************************************************
>   *
>   * FUNCTION:    UtQueryForOverwrite
> diff --git a/src/acpica/source/compiler/asluuid.c b/src/acpica/source/compiler/asluuid.c
> index c8dd4a46..30540acd 100644
> --- a/src/acpica/source/compiler/asluuid.c
> +++ b/src/acpica/source/compiler/asluuid.c
> @@ -212,50 +212,3 @@ AuValidateUuid (
>      return (AE_OK);
>  }
>  
> -
> -/*******************************************************************************
> - *
> - * FUNCTION:    AuConvertUuidToString
> - *
> - * PARAMETERS:  UuidBuffer          - 16-byte UUID buffer
> - *              OutString           - 36-byte formatted UUID string
> - *
> - * RETURN:      Status
> - *
> - * DESCRIPTION: Convert 16-byte UUID buffer to 36-byte formatted UUID string
> - *              OutString must be 37 bytes to include null terminator.
> - *
> - ******************************************************************************/
> -
> -ACPI_STATUS
> -AuConvertUuidToString (
> -    char                    *UuidBuffer,
> -    char                    *OutString)
> -{
> -    UINT32                  i;
> -
> -
> -    if (!UuidBuffer || !OutString)
> -    {
> -        return (AE_BAD_PARAMETER);
> -    }
> -
> -    for (i = 0; i < UUID_BUFFER_LENGTH; i++)
> -    {
> -        OutString[AcpiGbl_MapToUuidOffset[i]] =
> -            AcpiUtHexToAsciiChar (UuidBuffer[i], 4);
> -
> -        OutString[AcpiGbl_MapToUuidOffset[i] + 1] =
> -            AcpiUtHexToAsciiChar (UuidBuffer[i], 0);
> -    }
> -
> -    /* Insert required hyphens (dashes) */
> -
> -    OutString[UUID_HYPHEN1_OFFSET] =
> -    OutString[UUID_HYPHEN2_OFFSET] =
> -    OutString[UUID_HYPHEN3_OFFSET] =
> -    OutString[UUID_HYPHEN4_OFFSET] = '-';
> -
> -    OutString[UUID_STRING_LENGTH] = 0; /* Null terminate */
> -    return (AE_OK);
> -}
> diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h
> index f2d00644..4f966808 100644
> --- a/src/acpica/source/compiler/dtcompiler.h
> +++ b/src/acpica/source/compiler/dtcompiler.h
> @@ -673,6 +673,14 @@ ACPI_STATUS
>  DtCompilePptt (
>      void                    **PFieldList);
>  
> +ACPI_STATUS
> +DtCompilePrmt (
> +    void                    **PFieldList);
> +
> +ACPI_STATUS
> +DtCompileRgrt (
> +    void                    **PFieldList);
> +
>  ACPI_STATUS
>  DtCompileRsdt (
>      void                    **PFieldList);
> @@ -701,6 +709,10 @@ ACPI_STATUS
>  DtCompileStao (
>      void                    **PFieldList);
>  
> +ACPI_STATUS
> +DtCompileSvkl (
> +    void                    **PFieldList);
> +
>  ACPI_STATUS
>  DtCompileTcpa (
>      void                    **PFieldList);
> @@ -743,6 +755,7 @@ DtGetGenericTableInfo (
>  
>  extern const unsigned char  TemplateAsf[];
>  extern const unsigned char  TemplateBoot[];
> +extern const unsigned char  TemplateBdat[];
>  extern const unsigned char  TemplateBert[];
>  extern const unsigned char  TemplateBgrt[];
>  extern const unsigned char  TemplateCedt[];
> @@ -776,7 +789,9 @@ extern const unsigned char  TemplatePdtt[];
>  extern const unsigned char  TemplatePhat[];
>  extern const unsigned char  TemplatePmtt[];
>  extern const unsigned char  TemplatePptt[];
> +extern const unsigned char  TemplatePrmt[];
>  extern const unsigned char  TemplateRasf[];
> +extern const unsigned char  TemplateRgrt[];
>  extern const unsigned char  TemplateRsdt[];
>  extern const unsigned char  TemplateS3pt[];
>  extern const unsigned char  TemplateSbst[];
> @@ -788,6 +803,7 @@ extern const unsigned char  TemplateSpcr[];
>  extern const unsigned char  TemplateSpmi[];
>  extern const unsigned char  TemplateSrat[];
>  extern const unsigned char  TemplateStao[];
> +extern const unsigned char  TemplateSvkl[];
>  extern const unsigned char  TemplateTcpa[];
>  extern const unsigned char  TemplateTpm2[];
>  extern const unsigned char  TemplateUefi[];
> diff --git a/src/acpica/source/compiler/dtfield.c b/src/acpica/source/compiler/dtfield.c
> index ee7788e3..729791d7 100644
> --- a/src/acpica/source/compiler/dtfield.c
> +++ b/src/acpica/source/compiler/dtfield.c
> @@ -434,14 +434,14 @@ DtCompileInteger (
>          {
>              if (Value != 1)
>              {
> -                DtError (ASL_WARNING, ASL_MSG_RESERVED_VALUE, Field,
> +                DtError (ASL_WARNING, ASL_MSG_RESERVED_FIELD, Field,
>                      "Must be one, setting to one");
>                  Value = 1;
>              }
>          }
>          else if (Value != 0)
>          {
> -            DtError (ASL_WARNING, ASL_MSG_RESERVED_VALUE, Field,
> +            DtError (ASL_WARNING, ASL_MSG_RESERVED_FIELD, Field,
>                  "Must be zero, setting to zero");
>              Value = 0;
>          }
> diff --git a/src/acpica/source/compiler/dtio.c b/src/acpica/source/compiler/dtio.c
> index 781b2b8a..e1776f3f 100644
> --- a/src/acpica/source/compiler/dtio.c
> +++ b/src/acpica/source/compiler/dtio.c
> @@ -1086,9 +1086,9 @@ DtDumpSubtableTree (
>  {
>  
>      DbgPrint (ASL_DEBUG_OUTPUT,
> -        "[%.04X] %24s %*s%p (%.02X) - (%.02X)\n",
> +        "[%.04X] %24s %*s%p (%.02X) - (%.02X)        %.02X\n",
>          Subtable->Depth, Subtable->Name, (4 * Subtable->Depth), " ",
> -        Subtable, Subtable->Length, Subtable->TotalLength);
> +        Subtable, Subtable->Length, Subtable->TotalLength, *Subtable->Buffer);
>  }
>  
>  
> @@ -1123,7 +1123,7 @@ DtDumpSubtableList (
>      DtWalkTableTree (AslGbl_RootTable, DtDumpSubtableInfo, NULL, NULL);
>  
>      DbgPrint (ASL_DEBUG_OUTPUT,
> -        "\nSubtable Tree: (Depth, Name, Subtable, Length, TotalLength)\n\n");
> +        "\nSubtable Tree: (Depth, Name, Subtable, Length, TotalLength, Integer Value)\n\n");
>      DtWalkTableTree (AslGbl_RootTable, DtDumpSubtableTree, NULL, NULL);
>  
>      DbgPrint (ASL_DEBUG_OUTPUT, "\n");
> diff --git a/src/acpica/source/compiler/dttable1.c b/src/acpica/source/compiler/dttable1.c
> index 458a7174..bf710e31 100644
> --- a/src/acpica/source/compiler/dttable1.c
> +++ b/src/acpica/source/compiler/dttable1.c
> @@ -2058,7 +2058,18 @@ DtCompileIort (
>   *
>   * RETURN:      Status
>   *
> - * DESCRIPTION: Compile IVRS.
> + * DESCRIPTION: Compile IVRS. Notes:
> + *              The IVRS is essentially a flat table, with the following
> + *              structure:
> + *              <Main ACPI Table Header>
> + *              <Main subtable - virtualization info>
> + *              <IVHD>
> + *                  <Device Entries>
> + *              ...
> + *              <IVHD>
> + *                  <Device Entries>
> + *              <IVMD>
> + *              ...
>   *
>   *****************************************************************************/
>  
> @@ -2069,12 +2080,16 @@ DtCompileIvrs (
>      ACPI_STATUS             Status;
>      DT_SUBTABLE             *Subtable;
>      DT_SUBTABLE             *ParentTable;
> +    DT_SUBTABLE             *MainSubtable;
>      DT_FIELD                **PFieldList = (DT_FIELD **) List;
>      DT_FIELD                *SubtableStart;
> -    ACPI_DMTABLE_INFO       *InfoTable;
> -    ACPI_IVRS_HEADER        *IvrsHeader;
> -    UINT8                   EntryType;
> +    ACPI_DMTABLE_INFO       *InfoTable = NULL;
> +    UINT8                   SubtableType;
> +    UINT8                   Temp64[16];
> +    UINT8                   Temp8;
> +
>  
> +    /* Main table */
>  
>      Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrs,
>          &Subtable);
> @@ -2085,122 +2100,263 @@ DtCompileIvrs (
>  
>      ParentTable = DtPeekSubtable ();
>      DtInsertSubtable (ParentTable, Subtable);
> +    DtPushSubtable (Subtable);
> +
> +    /* Save a pointer to the main subtable */
> +
> +    MainSubtable = Subtable;
>  
>      while (*PFieldList)
>      {
>          SubtableStart = *PFieldList;
> -        Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsHdr,
> -            &Subtable);
> -        if (ACPI_FAILURE (Status))
> -        {
> -            return (Status);
> -        }
>  
> -        ParentTable = DtPeekSubtable ();
> -        DtInsertSubtable (ParentTable, Subtable);
> -        DtPushSubtable (Subtable);
> +        /* Compile the SubtableType integer */
>  
> -        IvrsHeader = ACPI_CAST_PTR (ACPI_IVRS_HEADER, Subtable->Buffer);
> +        DtCompileInteger (&SubtableType, *PFieldList, 1, 0);
>  
> -        switch (IvrsHeader->Type)
> +        switch (SubtableType)
>          {
> +
> +        /* Type 10h, IVHD (I/O Virtualization Hardware Definition) */
> +
>          case ACPI_IVRS_TYPE_HARDWARE1:
>  
> -            InfoTable = AcpiDmTableInfoIvrs0;
> +            InfoTable = AcpiDmTableInfoIvrsHware1;
>              break;
>  
> +        /* Types 11h, 40h, IVHD (I/O Virtualization Hardware Definition) */
> +
>          case ACPI_IVRS_TYPE_HARDWARE2:
> +        case ACPI_IVRS_TYPE_HARDWARE3:
>  
> -            InfoTable = AcpiDmTableInfoIvrs01;
> +            InfoTable = AcpiDmTableInfoIvrsHware23;
>              break;
>  
> +        /* Types 20h, 21h, 22h, IVMD (I/O Virtualization Memory Definition Block) */
> +
>          case ACPI_IVRS_TYPE_MEMORY1:
>          case ACPI_IVRS_TYPE_MEMORY2:
>          case ACPI_IVRS_TYPE_MEMORY3:
>  
> -            InfoTable = AcpiDmTableInfoIvrs1;
> +            InfoTable = AcpiDmTableInfoIvrsMemory;
> +            break;
> +
> +        /* 4-byte device entries */
> +
> +        case ACPI_IVRS_TYPE_PAD4:
> +        case ACPI_IVRS_TYPE_ALL:
> +        case ACPI_IVRS_TYPE_SELECT:
> +        case ACPI_IVRS_TYPE_START:
> +        case ACPI_IVRS_TYPE_END:
> +
> +            InfoTable = AcpiDmTableInfoIvrs4;
> +            break;
> +
> +        /* 8-byte device entries, type A */
> +
> +        case ACPI_IVRS_TYPE_ALIAS_SELECT:
> +        case ACPI_IVRS_TYPE_ALIAS_START:
> +
> +            InfoTable = AcpiDmTableInfoIvrs8a;
> +            break;
> +
> +        /* 8-byte device entries, type B */
> +
> +        case ACPI_IVRS_TYPE_EXT_SELECT:
> +        case ACPI_IVRS_TYPE_EXT_START:
> +
> +            InfoTable = AcpiDmTableInfoIvrs8b;
> +            break;
> +
> +        /* 8-byte device entries, type C */
> +
> +        case ACPI_IVRS_TYPE_SPECIAL:
> +
> +            InfoTable = AcpiDmTableInfoIvrs8c;
> +            break;
> +
> +        /* Variable device entries, type F0h */
> +
> +        case ACPI_IVRS_TYPE_HID:
> +
> +            InfoTable = AcpiDmTableInfoIvrsHid;
>              break;
>  
>          default:
>  
> -            DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "IVRS");
> +            DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart,
> +                "IVRS Device Entry");
>              return (AE_ERROR);
>          }
>  
> -        Status = DtCompileTable (PFieldList, InfoTable, &Subtable);
> +        /* Compile the InfoTable from above */
> +
> +        Status = DtCompileTable (PFieldList, InfoTable,
> +            &Subtable);
>          if (ACPI_FAILURE (Status))
>          {
>              return (Status);
>          }
>  
>          ParentTable = DtPeekSubtable ();
> -        DtInsertSubtable (ParentTable, Subtable);
> +        if (SubtableType != ACPI_IVRS_TYPE_HARDWARE1 &&
> +            SubtableType != ACPI_IVRS_TYPE_HARDWARE2 &&
> +            SubtableType != ACPI_IVRS_TYPE_HARDWARE3 &&
> +            SubtableType != ACPI_IVRS_TYPE_HID &&
> +            SubtableType != ACPI_IVRS_TYPE_MEMORY1 &&
> +            SubtableType != ACPI_IVRS_TYPE_MEMORY2 &&
> +            SubtableType != ACPI_IVRS_TYPE_MEMORY3)
> +        {
> +            if (ParentTable)
> +                DtInsertSubtable (ParentTable, Subtable);
> +        }
>  
> -        if (IvrsHeader->Type == ACPI_IVRS_TYPE_HARDWARE1 ||
> -            IvrsHeader->Type == ACPI_IVRS_TYPE_HARDWARE2)
> +        switch (SubtableType)
>          {
> -            while (*PFieldList &&
> -                !strcmp ((*PFieldList)->Name, "Entry Type"))
> +        case ACPI_IVRS_TYPE_HARDWARE1:
> +        case ACPI_IVRS_TYPE_HARDWARE2:
> +        case ACPI_IVRS_TYPE_HARDWARE3:
> +        case ACPI_IVRS_TYPE_MEMORY1:
> +        case ACPI_IVRS_TYPE_MEMORY2:
> +        case ACPI_IVRS_TYPE_MEMORY3:
> +
> +            /* Insert these IVHDs/IVMDs at the root subtable */
> +
> +            DtInsertSubtable (MainSubtable, Subtable);
> +            DtPushSubtable (Subtable);
> +            ParentTable = MainSubtable;
> +            break;
> +
> +        case ACPI_IVRS_TYPE_HID:
> +
> +            /* Special handling for the HID named device entry (0xF0) */
> +
> +            if (ParentTable)
> +            {
> +                DtInsertSubtable (ParentTable, Subtable);
> +            }
> +
> +            /*
> +             * Process the HID value. First, get the HID value as a string.
> +             */
> +            DtCompileOneField ((UINT8 *) &Temp64, *PFieldList, 16, DT_FIELD_TYPE_STRING, 0);
> +
> +               /*
> +                * Determine if the HID is an integer or a string.
> +                * An integer is defined to be 32 bits, with the upper 32 bits
> +                * set to zero. (from the ACPI Spec): "The HID can be a 32-bit
> +                * integer or a character string. If an integer, the lower
> +                * 4 bytes of the field contain the integer and the upper
> +                * 4 bytes are padded with 0".
> +                */
> +            if (UtIsIdInteger ((UINT8 *) &Temp64))
>              {
> -                SubtableStart = *PFieldList;
> -                DtCompileInteger (&EntryType, *PFieldList, 1, 0);
> +                /* Compile the HID value as an integer */
>  
> -                switch (EntryType)
> +                DtCompileOneField ((UINT8 *) &Temp64, *PFieldList, 8, DT_FIELD_TYPE_INTEGER, 0);
> +
> +                Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsHidInteger,
> +                    &Subtable);
> +                if (ACPI_FAILURE (Status))
>                  {
> -                /* 4-byte device entries */
> +                    return (Status);
> +                }
> +            }
> +            else
> +            {
> +                /* Compile the HID value as a string */
>  
> -                case ACPI_IVRS_TYPE_PAD4:
> -                case ACPI_IVRS_TYPE_ALL:
> -                case ACPI_IVRS_TYPE_SELECT:
> -                case ACPI_IVRS_TYPE_START:
> -                case ACPI_IVRS_TYPE_END:
> +                Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsHidString,
> +                    &Subtable);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return (Status);
> +                }
> +            }
>  
> -                    InfoTable = AcpiDmTableInfoIvrs4;
> -                    break;
> +            DtInsertSubtable (ParentTable, Subtable);
>  
> -                /* 8-byte entries, type A */
> +            /*
> +             * Process the CID value. First, get the CID value as a string.
> +             */
> +            DtCompileOneField ((UINT8 *) &Temp64, *PFieldList, 16, DT_FIELD_TYPE_STRING, 0);
>  
> -                case ACPI_IVRS_TYPE_ALIAS_SELECT:
> -                case ACPI_IVRS_TYPE_ALIAS_START:
> +            if (UtIsIdInteger ((UINT8 *) &Temp64))
> +            {
> +                /* Compile the CID value as an integer */
>  
> -                    InfoTable = AcpiDmTableInfoIvrs8a;
> -                    break;
> +                DtCompileOneField ((UINT8 *) &Temp64, *PFieldList, 8, DT_FIELD_TYPE_INTEGER, 0);
>  
> -                /* 8-byte entries, type B */
> +                Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsCidInteger,
> +                    &Subtable);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return (Status);
> +                }
> +            }
> +            else
> +            {
> +                /* Compile the CID value as a string */
>  
> -                case ACPI_IVRS_TYPE_PAD8:
> -                case ACPI_IVRS_TYPE_EXT_SELECT:
> -                case ACPI_IVRS_TYPE_EXT_START:
> +                Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsCidString,
> +                    &Subtable);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return (Status);
> +                }
> +            }
>  
> -                    InfoTable = AcpiDmTableInfoIvrs8b;
> -                    break;
> +            DtInsertSubtable (ParentTable, Subtable);
>  
> -                /* 8-byte entries, type C */
> +            /*
> +             * Process the UID value. First, get and decode the "UID Format" field (Integer).
> +             */
> +            if (!*PFieldList)
> +            {
> +                return (AE_OK);
> +            }
>  
> -                case ACPI_IVRS_TYPE_SPECIAL:
> +            DtCompileOneField (&Temp8, *PFieldList, 1, DT_FIELD_TYPE_INTEGER, 0);
>  
> -                    InfoTable = AcpiDmTableInfoIvrs8c;
> -                    break;
> +            switch (Temp8)
> +            {
> +            case ACPI_IVRS_UID_NOT_PRESENT:
> +                break;
>  
> -                default:
> +            case ACPI_IVRS_UID_IS_INTEGER:
>  
> -                    DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart,
> -                        "IVRS Device Entry");
> -                    return (AE_ERROR);
> +                Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsUidInteger,
> +                    &Subtable);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return (Status);
>                  }
> +                DtInsertSubtable (ParentTable, Subtable);
> +                break;
>  
> -                Status = DtCompileTable (PFieldList, InfoTable,
> +            case ACPI_IVRS_UID_IS_STRING:
> +
> +                Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsUidString,
>                      &Subtable);
>                  if (ACPI_FAILURE (Status))
>                  {
>                      return (Status);
>                  }
> -
>                  DtInsertSubtable (ParentTable, Subtable);
> +                break;
> +
> +            default:
> +
> +                DtFatal (ASL_MSG_UNKNOWN_FORMAT, SubtableStart,
> +                    "IVRS Device Entry");
> +                return (AE_ERROR);
>              }
> -        }
>  
> -        DtPopSubtable ();
> +        default:
> +
> +            /* All other subtable types come through here */
> +            break;
> +        }
>      }
>  
>      return (AE_OK);
> diff --git a/src/acpica/source/compiler/dttable2.c b/src/acpica/source/compiler/dttable2.c
> index f6efcf3d..3a0d8a22 100644
> --- a/src/acpica/source/compiler/dttable2.c
> +++ b/src/acpica/source/compiler/dttable2.c
> @@ -1335,6 +1335,118 @@ DtCompilePptt (
>  }
>  
>  
> +/******************************************************************************
> + *
> + * FUNCTION:    DtCompilePrmt
> + *
> + * PARAMETERS:  List                - Current field list pointer
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Compile PRMT.
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +DtCompilePrmt (
> +    void                    **List)
> +{
> +    ACPI_STATUS             Status;
> +    ACPI_TABLE_PRMT_HEADER  *PrmtHeader;
> +    ACPI_PRMT_MODULE_INFO   *PrmtModuleInfo;
> +    DT_SUBTABLE             *Subtable;
> +    DT_SUBTABLE             *ParentTable;
> +    DT_FIELD                **PFieldList = (DT_FIELD **) List;
> +    UINT32                  i, j;
> +
> +    ParentTable = DtPeekSubtable ();
> +
> +    /* Compile PRMT subtable header */
> +
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoPrmtHdr,
> +        &Subtable);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +    DtInsertSubtable (ParentTable, Subtable);
> +    PrmtHeader = ACPI_CAST_PTR (ACPI_TABLE_PRMT_HEADER, Subtable->Buffer);
> +
> +    for (i = 0; i < PrmtHeader->ModuleInfoCount; i++)
> +    {
> +        Status = DtCompileTable (PFieldList, AcpiDmTableInfoPrmtModule,
> +            &Subtable);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +        DtInsertSubtable (ParentTable, Subtable);
> +        PrmtModuleInfo = ACPI_CAST_PTR (ACPI_PRMT_MODULE_INFO, Subtable->Buffer);
> +
> +        for (j = 0; j < PrmtModuleInfo->HandlerInfoCount; j++)
> +        {
> +            Status = DtCompileTable (PFieldList, AcpiDmTableInfoPrmtHandler,
> +                &Subtable);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return (Status);
> +            }
> +            DtInsertSubtable (ParentTable, Subtable);
> +        }
> +    }
> +
> +    return (AE_OK);
> +}
> +
> +
> +/******************************************************************************
> + *
> + * FUNCTION:    DtCompileRgrt
> + *
> + * PARAMETERS:  List                - Current field list pointer
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Compile RGRT.
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +DtCompileRgrt (
> +    void                    **List)
> +{
> +    ACPI_STATUS             Status;
> +    DT_SUBTABLE             *Subtable;
> +    DT_SUBTABLE             *ParentTable;
> +    DT_FIELD                **PFieldList = (DT_FIELD **) List;
> +
> +
> +    /* Compile the main table */
> +
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoRgrt,
> +        &Subtable);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +
> +    ParentTable = DtPeekSubtable ();
> +    DtInsertSubtable (ParentTable, Subtable);
> +
> +    /* Compile the "Subtable" -- actually just the binary (PNG) image */
> +
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoRgrt0,
> +        &Subtable);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +
> +    DtInsertSubtable (ParentTable, Subtable);
> +    return (AE_OK);
> +}
> +
> +
>  /******************************************************************************
>   *
>   * FUNCTION:    DtCompileRsdt
> @@ -2024,6 +2136,63 @@ DtCompileStao (
>  }
>  
>  
> +
> +/******************************************************************************
> + *
> + * FUNCTION:    DtCompileSvkl
> + *
> + * PARAMETERS:  PFieldList          - Current field list pointer
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Compile SVKL.
> + *
> + * NOTES: SVKL is essentially a flat table, with a small main table and
> + *          a variable number of a single type of subtable.
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +DtCompileSvkl (
> +    void                    **List)
> +{
> +    DT_FIELD                **PFieldList = (DT_FIELD **) List;
> +    DT_SUBTABLE             *Subtable;
> +    DT_SUBTABLE             *ParentTable;
> +    ACPI_STATUS             Status;
> +
> +
> +    /* Compile the main table */
> +
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoSvkl,
> +        &Subtable);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +
> +    ParentTable = DtPeekSubtable ();
> +    DtInsertSubtable (ParentTable, Subtable);
> +
> +    /* Compile each subtable */
> +
> +    while (*PFieldList)
> +    {
> +        Status = DtCompileTable (PFieldList, AcpiDmTableInfoSvkl0,
> +            &Subtable);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        ParentTable = DtPeekSubtable ();
> +        DtInsertSubtable (ParentTable, Subtable);
> +    }
> +
> +    return (AE_OK);
> +}
> +
> +
>  /******************************************************************************
>   *
>   * FUNCTION:    DtCompileTcpa
> diff --git a/src/acpica/source/compiler/dttemplate.h b/src/acpica/source/compiler/dttemplate.h
> index fbe68ec9..224a6a11 100644
> --- a/src/acpica/source/compiler/dttemplate.h
> +++ b/src/acpica/source/compiler/dttemplate.h
> @@ -174,6 +174,16 @@ const unsigned char TemplateAsf[] =
>      0x01,0x00                                 /* 00000070    ".."       */
>  };
>  
> +const unsigned char TemplateBdat[] =
> +{
> +    0x42,0x44,0x41,0x54,0x30,0x00,0x00,0x00,  /* 00000000    "BDAT0..." */
> +    0x01,0xED,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
> +    0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65,  /* 00000010    "Template" */
> +    0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> +    0x31,0x03,0x21,0x20,0x01,0x08,0x00,0x01,  /* 00000020    "1.! ...." */
> +    0xF0,0xDE,0xBC,0x9A,0x78,0x56,0x34,0x12   /* 00000028    "....xV4." */
> +};
> +
>  const unsigned char TemplateBgrt[] =
>  {
>      0x42,0x47,0x52,0x54,0x38,0x00,0x00,0x00,  /* 00000000    "BGRT8..." */
> @@ -794,30 +804,72 @@ const unsigned char TemplateIort[] =
>  
>  const unsigned char TemplateIvrs[] =
>  {
> -    0x49,0x56,0x52,0x53,0xBC,0x00,0x00,0x00,  /* 00000000    "IVRS...." */
> -    0x01,0x87,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
> +    0x49,0x56,0x52,0x53,0x10,0x02,0x00,0x00,  /* 00000000    "IVRS...." */
> +    0x02,0x6C,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    ".lINTEL " */
>      0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45,  /* 00000010    "TEMPLATE" */
>      0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> -    0x28,0x05,0x10,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "(.. ...." */
> +    0x31,0x03,0x21,0x20,0x41,0x30,0x20,0x00,  /* 00000020    "1.! A0 ." */
>      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000028    "........" */
> -    0x10,0x14,0x34,0x00,0x00,0x00,0x00,0x00,  /* 00000030    "..4....." */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000038    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000040    "........" */
> -    0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,  /* 00000048    "....@..." */
> -    0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,  /* 00000050    "....B..." */
> -    0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,  /* 00000058    "....H..." */
> -    0x00,0x00,0x00,0x00,0x20,0x08,0x20,0x00,  /* 00000060    ".... . ." */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000068    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000070    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000078    "........" */
> -    0x00,0x00,0x00,0x00,0x21,0x04,0x20,0x00,  /* 00000080    "....!. ." */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000088    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000090    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000098    "........" */
> -    0x00,0x00,0x00,0x00,0x10,0x14,0x18,0x00,  /* 000000A0    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000A8    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000B0    "........" */
> -    0x00,0x00,0x00,0x00                       /* 000000B8    "...."     */
> +    0x10,0xB0,0x64,0x00,0x02,0x00,0x40,0x00,  /* 00000030    "..d...@." */
> +    0x00,0x00,0xF0,0xFD,0x00,0x00,0x00,0x00,  /* 00000038    "........" */
> +    0x00,0x00,0x00,0x00,0x6F,0x8F,0x04,0x80,  /* 00000040    "....o..." */
> +    0x03,0x08,0x00,0x00,0x01,0x08,0x00,0x00,  /* 00000048    "........" */
> +    0x02,0x08,0x00,0x00,0x04,0xFE,0xFF,0x00,  /* 00000050    "........" */
> +    0x42,0x00,0xFF,0x00,0x00,0xA5,0x00,0x00,  /* 00000058    "B......." */
> +    0x43,0x00,0xFF,0x00,0x00,0xA5,0x00,0x00,  /* 00000060    "C......." */
> +    0x46,0x00,0xFF,0x00,0x44,0x33,0x22,0x11,  /* 00000068    "F...D3"." */
> +    0x47,0x00,0xFF,0x00,0x44,0x33,0x22,0x11,  /* 00000070    "G...D3"." */
> +    0x04,0xFF,0xFF,0x00,0x48,0x00,0x00,0x00,  /* 00000078    "....H..." */
> +    0x00,0xA0,0x00,0x02,0x48,0x00,0x00,0xD7,  /* 00000080    "....H..." */
> +    0x21,0xA0,0x00,0x01,0x48,0x00,0x00,0x00,  /* 00000088    "!...H..." */
> +    0x22,0x01,0x00,0x01,0x11,0xB0,0x48,0x00,  /* 00000090    "".....H." */
> +    0x02,0x00,0x40,0x00,0x00,0x00,0xF0,0xFD,  /* 00000098    "..@....." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000A0    "........" */
> +    0x00,0x02,0x04,0x00,0xDE,0x4A,0x25,0x22,  /* 000000A8    ".....J%"" */
> +    0xEF,0x73,0x6D,0x20,0x00,0x00,0x00,0x00,  /* 000000B0    ".sm ...." */
> +    0x00,0x00,0x00,0x00,0x03,0x08,0x00,0x00,  /* 000000B8    "........" */
> +    0x04,0xFE,0xFF,0x00,0x43,0x00,0xFF,0x00,  /* 000000C0    "....C..." */
> +    0x00,0xA5,0x00,0x00,0x04,0xFF,0xFF,0x00,  /* 000000C8    "........" */
> +    0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,  /* 000000D0    "....H..." */
> +    0x00,0xA0,0x00,0x02,0x40,0xB0,0xD4,0x00,  /* 000000D8    "....@..." */
> +    0x02,0x00,0x40,0x00,0x00,0x00,0xF0,0xFD,  /* 000000E0    "..@....." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000E8    "........" */
> +    0x00,0x02,0x04,0x00,0xDE,0x4A,0x25,0x22,  /* 000000F0    ".....J%"" */
> +    0xEF,0x73,0x6D,0x20,0x00,0x00,0x00,0x00,  /* 000000F8    ".sm ...." */
> +    0x00,0x00,0x00,0x00,0x03,0x08,0x00,0x00,  /* 00000100    "........" */
> +    0x04,0xFE,0xFF,0x00,0x43,0x00,0xFF,0x00,  /* 00000108    "....C..." */
> +    0x00,0xA5,0x00,0x00,0x04,0xFF,0xFF,0x00,  /* 00000110    "........" */
> +    0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,  /* 00000118    "....H..." */
> +    0x00,0xA0,0x00,0x02,0x48,0x00,0x00,0xD7,  /* 00000120    "....H..." */
> +    0x21,0xA0,0x00,0x01,0x48,0x00,0x00,0x00,  /* 00000128    "!...H..." */
> +    0x22,0x01,0x00,0x01,0xF0,0xA5,0x00,0x40,  /* 00000130    ""......@" */
> +    0x49,0x4E,0x54,0x43,0x30,0x30,0x32,0x30,  /* 00000138    "INTC0020" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000140    "........" */
> +    0x02,0x09,0x5C,0x5F,0x53,0x42,0x2E,0x44,  /* 00000148    "..\_SB.D" */
> +    0x45,0x56,0x30,0xF0,0xA5,0x00,0x40,0x49,  /* 00000150    "EV0...@I" */
> +    0x4E,0x54,0x43,0x30,0x30,0x32,0x30,0x00,  /* 00000158    "NTC0020." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,  /* 00000160    "........" */
> +    0x09,0x5C,0x5F,0x53,0x42,0x2E,0x44,0x45,  /* 00000168    ".\_SB.DE" */
> +    0x56,0x31,0xF0,0xA5,0x00,0x40,0x49,0x4E,  /* 00000170    "V1...@IN" */
> +    0x54,0x43,0x30,0x30,0x32,0x30,0x00,0x00,  /* 00000178    "TC0020.." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x09,  /* 00000180    "........" */
> +    0x5C,0x5F,0x53,0x42,0x2E,0x44,0x45,0x56,  /* 00000188    "\_SB.DEV" */
> +    0x32,0xF0,0xA5,0x00,0x40,0x49,0x4E,0x54,  /* 00000190    "2...@INT" */
> +    0x43,0x30,0x30,0x32,0x30,0x00,0x00,0x00,  /* 00000198    "C0020..." */
> +    0x00,0x00,0x00,0x00,0x00,0x02,0x09,0x5C,  /* 000001A0    ".......\" */
> +    0x5F,0x53,0x42,0x2E,0x44,0x45,0x56,0x33,  /* 000001A8    "_SB.DEV3" */
> +    0x20,0x0D,0x20,0x00,0x22,0x11,0x00,0x00,  /* 000001B0    " . ."..." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001B8    "........" */
> +    0xCD,0xAB,0x78,0x56,0x34,0x12,0x00,0x00,  /* 000001C0    "..xV4..." */
> +    0xDC,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001C8    "........" */
> +    0x21,0x0D,0x20,0x00,0x22,0x11,0x00,0x00,  /* 000001D0    "!. ."..." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001D8    "........" */
> +    0xCD,0xAB,0x78,0x56,0x34,0x12,0x00,0x00,  /* 000001E0    "..xV4..." */
> +    0xDC,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001E8    "........" */
> +    0x22,0x0D,0x20,0x00,0x22,0x11,0x00,0x00,  /* 000001F0    "". ."..." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001F8    "........" */
> +    0xCD,0xAB,0x78,0x56,0x34,0x12,0x00,0x00,  /* 00000200    "..xV4..." */
> +    0xDC,0xFE,0x00,0x00,0x00,0x00,0x00,0x00   /* 00000208    "........" */
>  };
>  
>  const unsigned char TemplateLpit[] =
> @@ -1205,6 +1257,97 @@ const unsigned char TemplatePptt[] =
>      0x00,0x00                                 /* 00000070    ".."       */
>  };
>  
> +const unsigned char TemplatePrmt[] =
> +{
> +    0x50,0x52,0x4D,0x54,0xB8,0x02,0x00,0x00,  /* 00000000    "PRMT...." */
> +    0x00,0x13,0x4F,0x45,0x4D,0x43,0x41,0x20,  /* 00000008    "..OEMCA " */
> +    0x4F,0x45,0x4D,0x43,0x41,0x20,0x20,0x20,  /* 00000010    "OEMCA   " */
> +    0x02,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> +    0x17,0x07,0x20,0x20,0xA5,0x61,0x6B,0xB6,  /* 00000020    "..  .ak." */
> +    0x01,0xA1,0x46,0xED,0xA6,0xA3,0xCA,0xC1,  /* 00000028    "..F....." */
> +    0xC4,0xD1,0x30,0x1E,0x3C,0x00,0x00,0x00,  /* 00000030    "..0.<..." */
> +    0x04,0x00,0x00,0x00,0x00,0x00,0xAA,0x00,  /* 00000038    "........" */
> +    0xC2,0xB3,0x52,0x16,0xA1,0xA7,0xAC,0x46,  /* 00000040    "..R....F" */
> +    0xAF,0x93,0xDD,0x6D,0xEE,0x44,0x66,0x69,  /* 00000048    "...m.Dfi" */
> +    0x01,0x00,0x00,0x00,0x03,0x00,0x26,0x00,  /* 00000050    "......&." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000058    "........" */
> +    0x00,0x00,0x00,0x00,0x2C,0x00,0x5F,0xAD,  /* 00000060    "....,._." */
> +    0xF2,0xD5,0x47,0xA3,0x3E,0x4D,0x87,0xBC,  /* 00000068    "..G.>M.." */
> +    0xC2,0xCE,0x63,0x02,0x9C,0xC8,0x90,0xC2,  /* 00000070    "..c....." */
> +    0x5E,0x8A,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000078    "^......." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000080    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000088    "........" */
> +    0x2C,0x00,0xC3,0xAD,0xE7,0xA9,0xD0,0x8C,  /* 00000090    ",......." */
> +    0x9A,0x42,0x89,0x15,0x10,0x94,0x6E,0xBD,  /* 00000098    ".B....n." */
> +    0xE3,0x18,0xC0,0xC2,0x5E,0x8A,0x00,0x00,  /* 000000A0    "....^..." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000A8    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000B0    "........" */
> +    0x00,0x00,0x00,0x00,0x2C,0x00,0x14,0xC2,  /* 000000B8    "....,..." */
> +    0x88,0xB6,0x81,0x40,0xEB,0x4E,0x8D,0x26,  /* 000000C0    "...@.N.&" */
> +    0x1E,0xB5,0xA3,0xBC,0xF1,0x1A,0xF0,0xC2,  /* 000000C8    "........" */
> +    0x5E,0x8A,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000D0    "^......." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000D8    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000E0    "........" */
> +    0x52,0x00,0xA6,0x58,0x2A,0xDC,0x27,0x59,  /* 000000E8    "R..X*.'Y" */
> +    0x76,0x47,0xB9,0x95,0xD1,0x18,0xA2,0x73,  /* 000000F0    "vG.....s" */
> +    0x35,0xA2,0x01,0x00,0x00,0x00,0x01,0x00,  /* 000000F8    "5......." */
> +    0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000100    "&......." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x2C,0x00,  /* 00000108    "......,." */
> +    0x13,0x2D,0x4F,0x2E,0x40,0x62,0xD0,0x4E,  /* 00000110    ".-O.@b.N" */
> +    0xA4,0x01,0xC7,0x23,0xFB,0xDC,0x34,0xE8,  /* 00000118    "...#..4." */
> +    0x90,0x32,0x5E,0x8A,0x00,0x00,0x00,0x00,  /* 00000120    ".2^....." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000128    "........" */
> +    0xF8,0x7F,0x71,0x8A,0x00,0x00,0x00,0x00,  /* 00000130    "..q....." */
> +    0x00,0x00,0x2E,0x01,0xD7,0x3E,0xF9,0x0E,  /* 00000138    ".....>.." */
> +    0xAE,0x14,0x5B,0x42,0x92,0x8F,0xB8,0x5A,  /* 00000140    "..[B...Z" */
> +    0x62,0x13,0xB5,0x7E,0x01,0x00,0x00,0x00,  /* 00000148    "b..~...." */
> +    0x06,0x00,0x26,0x00,0x00,0x00,0xE0,0x3F,  /* 00000150    "..&....?" */
> +    0x71,0x8A,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000158    "q......." */
> +    0x2C,0x00,0x3C,0xCD,0x20,0x21,0x8B,0x84,  /* 00000160    ",.<. !.." */
> +    0x8F,0x4D,0xAB,0xBB,0x4B,0x74,0xCE,0x64,  /* 00000168    ".M..Kt.d" */
> +    0xAC,0x89,0x4C,0xA6,0x5D,0x8A,0x00,0x00,  /* 00000170    "..L.]..." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000178    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000180    "........" */
> +    0x00,0x00,0x00,0x00,0x2C,0x00,0xA7,0x35,  /* 00000188    "....,..5" */
> +    0x09,0xEA,0x6B,0x50,0x59,0x41,0xBB,0xBB,  /* 00000190    "..kPYA.." */
> +    0x48,0xDE,0xEE,0xCB,0x6F,0x58,0x34,0xA7,  /* 00000198    "H...oX4." */
> +    0x5D,0x8A,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001A0    "]......." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001A8    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001B0    "........" */
> +    0x2C,0x00,0xA9,0xBD,0xD1,0x1B,0x9A,0x90,  /* 000001B8    ",......." */
> +    0x14,0x46,0x96,0x99,0x25,0xEC,0x0C,0x27,  /* 000001C0    ".F..%..'" */
> +    0x83,0xF7,0x94,0xA7,0x5D,0x8A,0x00,0x00,  /* 000001C8    "....]..." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001D0    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001D8    "........" */
> +    0x00,0x00,0x00,0x00,0x2C,0x00,0xE7,0xB4,  /* 000001E0    "....,..." */
> +    0x28,0x5D,0x67,0x38,0xEE,0x4A,0xAA,0x09,  /* 000001E8    "(]g8.J.." */
> +    0x51,0xFC,0x28,0x2C,0x3B,0x22,0x9C,0xA6,  /* 000001F0    "Q.(,;".." */
> +    0x5D,0x8A,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001F8    "]......." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000200    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000208    "........" */
> +    0x2C,0x00,0x02,0xB7,0x64,0x4B,0x2B,0x4D,  /* 00000210    ",...dK+M" */
> +    0xFE,0x4D,0xAC,0x5A,0x0B,0x41,0x10,0xA2,  /* 00000218    ".M.Z.A.." */
> +    0xCA,0x47,0x48,0xA7,0x5D,0x8A,0x00,0x00,  /* 00000220    ".GH.]..." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000228    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000230    "........" */
> +    0x00,0x00,0x00,0x00,0x2C,0x00,0xDE,0xFD,  /* 00000238    "....,..." */
> +    0x0E,0x8A,0xD0,0x78,0xF0,0x45,0xAE,0xA0,  /* 00000240    "...x.E.." */
> +    0xC2,0x82,0x45,0xC7,0xE1,0xDB,0x98,0xA7,  /* 00000248    "..E....." */
> +    0x5D,0x8A,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000250    "]......." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000258    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000260    "........" */
> +    0x52,0x00,0x2B,0xF4,0x6C,0x5A,0xB4,0x8B,  /* 00000268    "R.+.lZ.." */
> +    0x2C,0x47,0xA2,0x33,0x5C,0x4D,0xC4,0x03,  /* 00000270    ",G.3\M.." */
> +    0x3D,0xC7,0x01,0x00,0x00,0x00,0x01,0x00,  /* 00000278    "=......." */
> +    0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000280    "&......." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x2C,0x00,  /* 00000288    "......,." */
> +    0x81,0x60,0x46,0xE1,0x62,0x75,0x0F,0x43,  /* 00000290    ".`F.bu.C" */
> +    0x89,0x6B,0xB0,0xE5,0x23,0xDC,0x33,0x5A,  /* 00000298    ".k..#.3Z" */
> +    0x90,0x12,0x5D,0x8A,0x00,0x00,0x00,0x00,  /* 000002A0    "..]....." */
> +    0xE0,0x5F,0x71,0x8A,0x00,0x00,0x00,0x00,  /* 000002A8    "._q....." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00   /* 000002B0    "........" */
> +};
> +
>  const unsigned char TemplateRasf[] =
>  {
>      0x52,0x41,0x53,0x46,0x30,0x00,0x00,0x00,  /* 00000000    "RASF0..." */
> @@ -1215,6 +1358,20 @@ const unsigned char TemplateRasf[] =
>      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00   /* 00000028    "........" */
>  };
>  
> +const unsigned char TemplateRgrt[] =
> +{
> +    0x52,0x47,0x52,0x54,0x50,0x00,0x00,0x00,  /* 00000000    "RGRTP..." */
> +    0x01,0x33,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    ".3INTEL " */
> +    0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65,  /* 00000010    "Template" */
> +    0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> +    0x31,0x03,0x21,0x20,0x01,0x00,0x01,0x00,  /* 00000020    "1.! ...." */
> +    0xAA,0x01,0x02,0x03,0x04,0x05,0x06,0x07,  /* 00000028    "........" */
> +    0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,  /* 00000030    "........" */
> +    0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,  /* 00000038    "........" */
> +    0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,  /* 00000040    "........" */
> +    0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27   /* 00000048    " !"#$%&'" */
> +};
> +
>  const unsigned char TemplateRsdp[] =
>  {
>      0x52,0x53,0x44,0x20,0x50,0x54,0x52,0x20,  /* 00000000    "RSD PTR " */
> @@ -1475,6 +1632,19 @@ const unsigned char TemplateStao[] =
>      0x31,0x2E,0x50,0x54,0x31,0x00             /* 00000078    "1.PT1."   */
>  };
>  
> +const unsigned char TemplateSvkl[] =
> +{
> +    0x53,0x56,0x4B,0x4C,0x48,0x00,0x00,0x00,  /* 00000000    "SVKLH..." */
> +    0x04,0xDB,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
> +    0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65,  /* 00000010    "Template" */
> +    0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> +    0x31,0x03,0x21,0x20,0x02,0x00,0x00,0x00,  /* 00000020    "1.! ...." */
> +    0x00,0x00,0x00,0x00,0x21,0x43,0xAA,0xAA,  /* 00000028    "....!C.." */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 00000030    "....gE#." */
> +    0x00,0x00,0x00,0x00,0x21,0x43,0xBB,0xBB,  /* 00000038    "....!C.." */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01   /* 00000040    "....gE#." */
> +};
> +
>  const unsigned char TemplateTcpa[] =
>  {
>      0x54,0x43,0x50,0x41,0x64,0x00,0x00,0x00,  /* 00000000    "TCPAd..." */
> diff --git a/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c
> index d69ad2fb..ba454b31 100644
> --- a/src/acpica/source/compiler/dtutils.c
> +++ b/src/acpica/source/compiler/dtutils.c
> @@ -426,6 +426,7 @@ DtGetFieldType (
>      case ACPI_DMT_NAME6:
>      case ACPI_DMT_NAME8:
>      case ACPI_DMT_STRING:
> +    case ACPI_DMT_IVRS_UNTERMINATED_STRING:
>  
>          Type = DT_FIELD_TYPE_STRING;
>          break;
> @@ -576,11 +577,13 @@ DtGetFieldLength (
>      case ACPI_DMT_ACCWIDTH:
>      case ACPI_DMT_CEDT:
>      case ACPI_DMT_IVRS:
> +    case ACPI_DMT_IVRS_DE:
>      case ACPI_DMT_GTDT:
>      case ACPI_DMT_MADT:
>      case ACPI_DMT_PCCT:
>      case ACPI_DMT_PMTT:
>      case ACPI_DMT_PPTT:
> +    case ACPI_DMT_RGRT:
>      case ACPI_DMT_SDEV:
>      case ACPI_DMT_SRAT:
>      case ACPI_DMT_ASF:
> @@ -660,6 +663,22 @@ DtGetFieldLength (
>          }
>          break;
>  
> +    case ACPI_DMT_IVRS_UNTERMINATED_STRING:
> +
> +        Value = DtGetFieldValue (Field);
> +        if (Value)
> +        {
> +            ByteLength = strlen (Value);
> +        }
> +        else
> +        {   /* At this point, this is a fatal error */
> +
> +            sprintf (AslGbl_MsgBuffer, "Expected \"%s\"", Info->Name);
> +            DtFatal (ASL_MSG_COMPILER_INTERNAL, NULL, AslGbl_MsgBuffer);
> +            return (0);
> +        }
> +        break;
> +
>      case ACPI_DMT_GAS:
>  
>          ByteLength = sizeof (ACPI_GENERIC_ADDRESS);
> diff --git a/src/acpica/source/components/executer/exfield.c b/src/acpica/source/components/executer/exfield.c
> index 585d21cc..7871e350 100644
> --- a/src/acpica/source/components/executer/exfield.c
> +++ b/src/acpica/source/components/executer/exfield.c
> @@ -295,7 +295,8 @@ AcpiExReadDataFromField (
>      else if ((ObjDesc->Common.Type == ACPI_TYPE_LOCAL_REGION_FIELD) &&
>          (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS ||
>           ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_GSBUS ||
> -         ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_IPMI))
> +         ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_IPMI  ||
> +         ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_PLATFORM_RT))
>      {
>          /* SMBus, GSBus, IPMI serial */
>  
> @@ -467,7 +468,8 @@ AcpiExWriteDataToField (
>      else if ((ObjDesc->Common.Type == ACPI_TYPE_LOCAL_REGION_FIELD) &&
>          (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS ||
>           ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_GSBUS ||
> -         ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_IPMI))
> +         ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_IPMI  ||
> +         ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_PLATFORM_RT))
>      {
>          /* SMBus, GSBus, IPMI serial */
>  
> diff --git a/src/acpica/source/components/executer/exserial.c b/src/acpica/source/components/executer/exserial.c
> index 69ce5316..776409db 100644
> --- a/src/acpica/source/components/executer/exserial.c
> +++ b/src/acpica/source/components/executer/exserial.c
> @@ -353,6 +353,12 @@ AcpiExReadSerialBus (
>          Function = ACPI_READ | (AccessorType << 16);
>          break;
>  
> +    case ACPI_ADR_SPACE_PLATFORM_RT:
> +
> +        BufferLength = ACPI_PRM_INPUT_BUFFER_SIZE;
> +        Function = ACPI_READ;
> +        break;
> +
>      default:
>          return_ACPI_STATUS (AE_AML_INVALID_SPACE_ID);
>      }
> @@ -472,6 +478,12 @@ AcpiExWriteSerialBus (
>          Function = ACPI_WRITE | (AccessorType << 16);
>          break;
>  
> +    case ACPI_ADR_SPACE_PLATFORM_RT:
> +
> +        BufferLength = ACPI_PRM_INPUT_BUFFER_SIZE;
> +        Function = ACPI_WRITE;
> +        break;
> +
>      default:
>          return_ACPI_STATUS (AE_AML_INVALID_SPACE_ID);
>      }
> diff --git a/src/acpica/source/components/namespace/nsrepair2.c b/src/acpica/source/components/namespace/nsrepair2.c
> index d3dcd318..40f0634d 100644
> --- a/src/acpica/source/components/namespace/nsrepair2.c
> +++ b/src/acpica/source/components/namespace/nsrepair2.c
> @@ -565,6 +565,13 @@ AcpiNsRepair_CID (
>  
>              (*ElementPtr)->Common.ReferenceCount =
>                  OriginalRefCount;
> +
> +            /*
> +             * The OriginalElement holds a reference from the package object
> +             * that represents _HID. Since a new element was created by _HID,
> +             * remove the reference from the _CID package.
> +             */
> +            AcpiUtRemoveReference (OriginalElement);
>          }
>  
>          ElementPtr++;
> diff --git a/src/acpica/source/components/utilities/utdelete.c b/src/acpica/source/components/utilities/utdelete.c
> index 2cf71aee..624aa687 100644
> --- a/src/acpica/source/components/utilities/utdelete.c
> +++ b/src/acpica/source/components/utilities/utdelete.c
> @@ -443,6 +443,14 @@ AcpiUtDeleteInternalObj (
>          }
>          break;
>  
> +    case ACPI_TYPE_LOCAL_ADDRESS_HANDLER:
> +
> +        ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS,
> +            "***** Address handler %p\n", Object));
> +
> +        AcpiOsDeleteMutex (Object->AddressSpace.ContextMutex);
> +        break;
> +
>      default:
>  
>          break;
> diff --git a/src/acpica/source/components/utilities/utuuid.c b/src/acpica/source/components/utilities/utuuid.c
> index 97ae40be..299353cc 100644
> --- a/src/acpica/source/components/utilities/utuuid.c
> +++ b/src/acpica/source/components/utilities/utuuid.c
> @@ -208,4 +208,52 @@ AcpiUtConvertStringToUuid (
>              InString[AcpiGbl_MapToUuidOffset[i] + 1]);
>      }
>  }
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiUtConvertUuidToString
> + *
> + * PARAMETERS:  UuidBuffer          - 16-byte UUID buffer
> + *              OutString           - 36-byte formatted UUID string
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Convert 16-byte UUID buffer to 36-byte formatted UUID string
> + *              OutString must be 37 bytes to include null terminator.
> + *
> + ******************************************************************************/
> +
> +ACPI_STATUS
> +AcpiUtConvertUuidToString (
> +    char                    *UuidBuffer,
> +    char                    *OutString)
> +{
> +    UINT32                  i;
> +
> +
> +    if (!UuidBuffer || !OutString)
> +    {
> +        return (AE_BAD_PARAMETER);
> +    }
> +
> +    for (i = 0; i < UUID_BUFFER_LENGTH; i++)
> +    {
> +        OutString[AcpiGbl_MapToUuidOffset[i]] =
> +            AcpiUtHexToAsciiChar (UuidBuffer[i], 4);
> +
> +        OutString[AcpiGbl_MapToUuidOffset[i] + 1] =
> +            AcpiUtHexToAsciiChar (UuidBuffer[i], 0);
> +    }
> +
> +    /* Insert required hyphens (dashes) */
> +
> +    OutString[UUID_HYPHEN1_OFFSET] =
> +    OutString[UUID_HYPHEN2_OFFSET] =
> +    OutString[UUID_HYPHEN3_OFFSET] =
> +    OutString[UUID_HYPHEN4_OFFSET] = '-';
> +
> +    OutString[UUID_STRING_LENGTH] = 0; /* Null terminate */
> +    return (AE_OK);
> +}
>  #endif
> diff --git a/src/acpica/source/include/acbuffer.h b/src/acpica/source/include/acbuffer.h
> index 3c541751..1576afa6 100644
> --- a/src/acpica/source/include/acbuffer.h
> +++ b/src/acpica/source/include/acbuffer.h
> @@ -359,5 +359,14 @@ typedef struct acpi_pld_info
>  #define ACPI_PLD_GET_HORIZ_OFFSET(dword)        ACPI_GET_BITS (dword, 16, ACPI_16BIT_MASK)
>  #define ACPI_PLD_SET_HORIZ_OFFSET(dword,value)  ACPI_SET_BITS (dword, 16, ACPI_16BIT_MASK, value)   /* Offset 128+16=144, Len 16 */
>  
> +/* Panel position defined in _PLD section of ACPI Specification 6.3 */
> +
> +#define ACPI_PLD_PANEL_TOP      0
> +#define ACPI_PLD_PANEL_BOTTOM   1
> +#define ACPI_PLD_PANEL_LEFT     2
> +#define ACPI_PLD_PANEL_RIGHT    3
> +#define ACPI_PLD_PANEL_FRONT    4
> +#define ACPI_PLD_PANEL_BACK     5
> +#define ACPI_PLD_PANEL_UNKNOWN  6
>  
>  #endif /* ACBUFFER_H */
> diff --git a/src/acpica/source/include/acconfig.h b/src/acpica/source/include/acconfig.h
> index b320a97e..a5808526 100644
> --- a/src/acpica/source/include/acconfig.h
> +++ b/src/acpica/source/include/acconfig.h
> @@ -333,6 +333,7 @@
>  #define ACPI_MAX_GSBUS_DATA_SIZE        255
>  #define ACPI_MAX_GSBUS_BUFFER_SIZE      ACPI_SERIAL_HEADER_SIZE + ACPI_MAX_GSBUS_DATA_SIZE
>  
> +#define ACPI_PRM_INPUT_BUFFER_SIZE      26
>  
>  /* _SxD and _SxW control methods */
>  
> diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h
> index f02f3239..9b584d67 100644
> --- a/src/acpica/source/include/acdisasm.h
> +++ b/src/acpica/source/include/acdisasm.h
> @@ -266,6 +266,8 @@ typedef enum
>      ACPI_DMT_HMAT,
>      ACPI_DMT_IORTMEM,
>      ACPI_DMT_IVRS,
> +    ACPI_DMT_IVRS_DE,
> +    ACPI_DMT_IVRS_UNTERMINATED_STRING,
>      ACPI_DMT_LPIT,
>      ACPI_DMT_MADT,
>      ACPI_DMT_NFIT,
> @@ -274,6 +276,7 @@ typedef enum
>      ACPI_DMT_PMTT,
>      ACPI_DMT_PMTT_VENDOR,
>      ACPI_DMT_PPTT,
> +    ACPI_DMT_RGRT,
>      ACPI_DMT_SDEI,
>      ACPI_DMT_SDEV,
>      ACPI_DMT_SLIC,
> @@ -365,6 +368,7 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAsf2a[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAsf3[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAsf4[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAsfHdr[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoBdat[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoBoot[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoBert[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoBgrt[];
> @@ -465,16 +469,20 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIortHdr3[];
>  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        AcpiDmTableInfoIvrsHware1[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsHware23[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsMemory[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs4[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs8a[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs8b[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs8c[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsCidString[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsCidInteger[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsHid[];
> -extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsHid1[];
> -extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsHdr[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsUidString[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsUidInteger[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsHidString[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsHidInteger[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt0[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt1[];
> @@ -546,7 +554,12 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPptt1[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPptt1a[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPptt2[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPpttHdr[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPrmtHdr[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPrmtModule[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPrmtHandler[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoRasf[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoRgrt[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoRgrt0[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoRsdp1[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoRsdp2[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoS3pt[];
> @@ -580,6 +593,8 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSrat4[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSrat5[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoStao[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoStaoStr[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSvkl[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSvkl0[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTcpaHdr[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTcpaClient[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTcpaServer[];
> @@ -774,6 +789,14 @@ void
>  AcpiDmDumpPptt (
>      ACPI_TABLE_HEADER       *Table);
>  
> +void
> +AcpiDmDumpPrmt (
> +    ACPI_TABLE_HEADER       *Table);
> +
> +void
> +AcpiDmDumpRgrt (
> +    ACPI_TABLE_HEADER       *Table);
> +
>  UINT32
>  AcpiDmDumpRsdp (
>      ACPI_TABLE_HEADER       *Table);
> @@ -806,6 +829,10 @@ void
>  AcpiDmDumpStao (
>      ACPI_TABLE_HEADER       *Table);
>  
> +void
> +AcpiDmDumpSvkl (
> +    ACPI_TABLE_HEADER       *Table);
> +
>  void
>  AcpiDmDumpTcpa (
>      ACPI_TABLE_HEADER       *Table);
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index 0733ac41..dc459c9a 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                 0x20210331
> +#define ACPI_CA_VERSION                 0x20210604
>  
>  #include "acconfig.h"
>  #include "actypes.h"
> diff --git a/src/acpica/source/include/actbinfo.h b/src/acpica/source/include/actbinfo.h
> index af10c774..027e6085 100644
> --- a/src/acpica/source/include/actbinfo.h
> +++ b/src/acpica/source/include/actbinfo.h
> @@ -156,6 +156,7 @@
>  #define ACPI_GAS_OFFSET(f)              (UINT16) ACPI_OFFSET (ACPI_GENERIC_ADDRESS,f)
>  #define ACPI_HDR_OFFSET(f)              (UINT16) ACPI_OFFSET (ACPI_TABLE_HEADER,f)
>  #define ACPI_RSDP_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_RSDP,f)
> +#define ACPI_BDAT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_BDAT,f)
>  #define ACPI_BERT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_BERT,f)
>  #define ACPI_BGRT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_BGRT,f)
>  #define ACPI_BOOT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_BOOT,f)
> @@ -183,6 +184,7 @@
>  #define ACPI_PDTT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_PDTT,f)
>  #define ACPI_PMTT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_PMTT,f)
>  #define ACPI_RASF_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_RASF,f)
> +#define ACPI_RGRT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_RGRT,f)
>  #define ACPI_S3PT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_S3PT,f)
>  #define ACPI_SBST_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SBST,f)
>  #define ACPI_SDEI_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SDEI,f)
> @@ -192,6 +194,7 @@
>  #define ACPI_SPMI_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SPMI,f)
>  #define ACPI_SRAT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SRAT,f)
>  #define ACPI_STAO_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_STAO,f)
> +#define ACPI_SVKL_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SVKL,f)
>  #define ACPI_TCPA_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_HDR,f)
>  #define ACPI_TPM2_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_TPM2,f)
>  #define ACPI_TPM23_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_TABLE_TPM23,f)
> @@ -334,6 +337,9 @@
>  #define ACPI_PPTT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PPTT_CACHE,f)
>  #define ACPI_PPTT1A_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_PPTT_CACHE_V1,f)
>  #define ACPI_PPTT2_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PPTT_ID,f)
> +#define ACPI_PRMTH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_TABLE_PRMT_HEADER,f)
> +#define ACPI_PRMT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PRMT_MODULE_INFO,f)
> +#define ACPI_PRMT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PRMT_HANDLER_INFO,f)
>  #define ACPI_S3PTH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_FPDT_HEADER,f)
>  #define ACPI_S3PT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_S3PT_RESUME,f)
>  #define ACPI_S3PT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_S3PT_SUSPEND,f)
> @@ -353,6 +359,7 @@
>  #define ACPI_SRAT3_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_SRAT_GICC_AFFINITY,f)
>  #define ACPI_SRAT4_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_SRAT_GIC_ITS_AFFINITY,f)
>  #define ACPI_SRAT5_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_SRAT_GENERIC_AFFINITY,f)
> +#define ACPI_SVKL0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_SVKL_KEY,f)
>  #define ACPI_TCPA_CLIENT_OFFSET(f)      (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_CLIENT,f)
>  #define ACPI_TCPA_SERVER_OFFSET(f)      (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_SERVER,f)
>  #define ACPI_TPM2A_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_TPM2_TRAILER,f)
> @@ -398,6 +405,8 @@
>  #define ACPI_IORT6_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_IORT_RMR,f,o)
>  #define ACPI_IORTA_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_IORT_MEMORY_ACCESS,f,o)
>  #define ACPI_IORTM_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_IORT_ID_MAPPING,f,o)
> +#define ACPI_IVRS_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_IVRS_HEADER,f,o)
> +#define ACPI_IVRSDE_FLAG_OFFSET(f,o)    ACPI_FLAG_OFFSET (ACPI_IVRS_DE_HEADER,f,o)
>  #define ACPI_LPITH_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_LPIT_HEADER,f,o)
>  #define ACPI_MADT_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_MADT,f,o)
>  #define ACPI_MADT0_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_APIC,f,o)
> diff --git a/src/acpica/source/include/actbl1.h b/src/acpica/source/include/actbl1.h
> index 437a122b..136ebf12 100644
> --- a/src/acpica/source/include/actbl1.h
> +++ b/src/acpica/source/include/actbl1.h
> @@ -523,9 +523,19 @@ typedef struct acpi_cedt_header
>  enum AcpiCedtType
>  {
>      ACPI_CEDT_TYPE_CHBS                 = 0,
> -    ACPI_CEDT_TYPE_RESERVED             = 1
> +    ACPI_CEDT_TYPE_CFMWS                = 1,
> +    ACPI_CEDT_TYPE_RESERVED             = 2,
>  };
>  
> +/* Values for version field above */
> +
> +#define ACPI_CEDT_CHBS_VERSION_CXL11    (0)
> +#define ACPI_CEDT_CHBS_VERSION_CXL20    (1)
> +
> +/* Values for length field above */
> +
> +#define ACPI_CEDT_CHBS_LENGTH_CXL11     (0x2000)
> +#define ACPI_CEDT_CHBS_LENGTH_CXL20     (0x10000)
>  
>  /*
>   * CEDT subtables
> @@ -545,6 +555,37 @@ typedef struct acpi_cedt_chbs
>  } ACPI_CEDT_CHBS;
>  
>  
> +/* 1: CXL Fixed Memory Window Structure */
> +
> +typedef struct acpi_cedt_cfmws
> +{
> +    ACPI_CEDT_HEADER        Header;
> +    UINT32                  Reserved1;
> +    UINT64                  BaseHpa;
> +    UINT64                  WindowSize;
> +    UINT8                   InterleaveWays;
> +    UINT8                   InterleaveArithmetic;
> +    UINT16                  Reserved2;
> +    UINT32                  Granularity;
> +    UINT16                  Restrictions;
> +    UINT16                  QtgId;
> +    UINT32                  InterleaveTargets[];
> +
> +} ACPI_CEDT_CFMWS;
> +
> +/* Values for Interleave Arithmetic field above */
> +
> +#define ACPI_CEDT_CFMWS_ARITHMETIC_MODULO	(0)
> +
> +/* Values for Restrictions field above */
> +
> +#define ACPI_CEDT_CFMWS_RESTRICT_TYPE2		(1)
> +#define ACPI_CEDT_CFMWS_RESTRICT_TYPE3		(1<<1)
> +#define ACPI_CEDT_CFMWS_RESTRICT_VOLATILE	(1<<2)
> +#define ACPI_CEDT_CFMWS_RESTRICT_PMEM		(1<<3)
> +#define ACPI_CEDT_CFMWS_RESTRICT_FIXED		(1<<4)
> +
> +
>  /*******************************************************************************
>   *
>   * CPEP - Corrected Platform Error Polling table (ACPI 4.0)
> diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h
> index 71c39e86..cb237a6b 100644
> --- a/src/acpica/source/include/actbl2.h
> +++ b/src/acpica/source/include/actbl2.h
> @@ -168,6 +168,7 @@
>   * file. Useful because they make it more difficult to inadvertently type in
>   * the wrong signature.
>   */
> +#define ACPI_SIG_BDAT           "BDAT"      /* BIOS Data ACPI Table */
>  #define ACPI_SIG_IORT           "IORT"      /* IO Remapping Table */
>  #define ACPI_SIG_IVRS           "IVRS"      /* I/O Virtualization Reporting Structure */
>  #define ACPI_SIG_LPIT           "LPIT"      /* Low Power Idle Table */
> @@ -183,11 +184,14 @@
>  #define ACPI_SIG_PHAT           "PHAT"      /* Platform Health Assessment Table */
>  #define ACPI_SIG_PMTT           "PMTT"      /* Platform Memory Topology Table */
>  #define ACPI_SIG_PPTT           "PPTT"      /* Processor Properties Topology Table */
> +#define ACPI_SIG_PRMT           "PRMT"      /* Platform Runtime Mechanism Table */
>  #define ACPI_SIG_RASF           "RASF"      /* RAS Feature table */
> +#define ACPI_SIG_RGRT           "RGRT"      /* Regulatory Graphics Resource Table */
>  #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 */
> +#define ACPI_SIG_SVKL           "SVKL"      /* Storage Volume Key Location Table */
>  
>  
>  /*
> @@ -209,6 +213,23 @@
>   */
>  
>  
> +/*******************************************************************************
> + *
> + * BDAT - BIOS Data ACPI Table
> + *
> + * Conforms to "BIOS Data ACPI Table", Interface Specification v4.0 Draft 5
> + * Nov 2020
> + *
> + ******************************************************************************/
> +
> +typedef struct acpi_table_bdat
> +{
> +    ACPI_TABLE_HEADER       Header;
> +    ACPI_GENERIC_ADDRESS    Gas;
> +
> +} ACPI_TABLE_BDAT;
> +
> +
>  /*******************************************************************************
>   *
>   * IORT - IO Remapping Table
> @@ -649,6 +670,11 @@ typedef struct acpi_ivrs_device_hid
>  
>  } ACPI_IVRS_DEVICE_HID;
>  
> +/* Values for UidType above */
> +
> +#define ACPI_IVRS_UID_NOT_PRESENT   0
> +#define ACPI_IVRS_UID_IS_INTEGER    1
> +#define ACPI_IVRS_UID_IS_STRING     2
>  
>  /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */
>  
> @@ -1034,6 +1060,22 @@ typedef struct acpi_madt_multiproc_wakeup
>  
>  } ACPI_MADT_MULTIPROC_WAKEUP;
>  
> +#define ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE	2032
> +#define ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE	2048
> +
> +typedef struct acpi_madt_multiproc_wakeup_mailbox
> +{
> +    UINT16                  Command;
> +    UINT16                  Reserved; /* reserved - must be zero */
> +    UINT32                  ApicId;
> +    UINT64                  WakeupVector;
> +    UINT8                   ReservedOs[ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE]; /* reserved for OS use */
> +    UINT8                   ReservedFirmware[ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE]; /* reserved for firmware use */
> +
> +} ACPI_MADT_MULTIPROC_WAKEUP_MAILBOX;
> +
> +#define ACPI_MP_WAKE_COMMAND_WAKEUP    1
> +
>  
>  /*
>   * Common flags fields for MADT subtables
> @@ -2100,6 +2142,52 @@ typedef struct acpi_pptt_id
>  } ACPI_PPTT_ID;
>  
>  
> +/*******************************************************************************
> + *
> + * PRMT - Platform Runtime Mechanism Table
> + *        Version 1
> + *
> + ******************************************************************************/
> +
> +typedef struct acpi_table_prmt
> +{
> +    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
> +
> +} ACPI_TABLE_PRMT;
> +
> +typedef struct acpi_table_prmt_header
> +{
> +    UINT8                   PlatformGuid[16];
> +    UINT32                  ModuleInfoOffset;
> +    UINT32                  ModuleInfoCount;
> +
> +} ACPI_TABLE_PRMT_HEADER;
> +
> +typedef struct acpi_prmt_module_info
> +{
> +    UINT16                  Revision;
> +    UINT16                  Length;
> +    UINT8                   ModuleGuid[16];
> +    UINT16                  MajorRev;
> +    UINT16                  MinorRev;
> +    UINT16                  HandlerInfoCount;
> +    UINT32                  HandlerInfoOffset;
> +    UINT64                  MmioListPointer;
> +
> +} ACPI_PRMT_MODULE_INFO;
> +
> +typedef struct acpi_prmt_handler_info
> +{
> +    UINT16                  Revision;
> +    UINT16                  Length;
> +    UINT8                   HandlerGuid[16];
> +    UINT64                  HandlerAddress;
> +    UINT64                  StaticDataBufferAddress;
> +    UINT64                  AcpiParamBufferAddress;
> +
> +} ACPI_PRMT_HANDLER_INFO;
> +
> +
>  /*******************************************************************************
>   *
>   * RASF - RAS Feature Table (ACPI 5.0)
> @@ -2209,6 +2297,36 @@ enum AcpiRasfStatus
>  #define ACPI_RASF_STATUS                (0x1F<<3)
>  
>  
> +/*******************************************************************************
> + *
> + * RGRT - Regulatory Graphics Resource Table
> + *        Version 1
> + *
> + * Conforms to "ACPI RGRT" available at:
> + * https://microsoft.github.io/mu/dyn/mu_plus/MsCorePkg/AcpiRGRT/feature_acpi_rgrt/
> + *
> + ******************************************************************************/
> +
> +typedef struct acpi_table_rgrt
> +{
> +    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
> +    UINT16                  Version;
> +    UINT8                   ImageType;
> +    UINT8                   Reserved;
> +    UINT8                   Image[0];
> +
> +} ACPI_TABLE_RGRT;
> +
> +/* ImageType values */
> +
> +enum AcpiRgrtImageType
> +{
> +    ACPI_RGRT_TYPE_RESERVED0            = 0,
> +    ACPI_RGRT_IMAGE_TYPE_PNG            = 1,
> +    ACPI_RGRT_TYPE_RESERVED             = 2     /* 2 and greater are reserved */
> +};
> +
> +
>  /*******************************************************************************
>   *
>   * SBST - Smart Battery Specification Table
> @@ -2371,6 +2489,44 @@ typedef struct acpi_sdev_pcie_path
>  } ACPI_SDEV_PCIE_PATH;
>  
>  
> +/*******************************************************************************
> + *
> + * SVKL - Storage Volume Key Location Table (ACPI 6.4)
> + *        From: "Guest-Host-Communication Interface (GHCI) for Intel
> + *        Trust Domain Extensions (Intel TDX)".
> + *        Version 1
> + *
> + ******************************************************************************/
> +
> +typedef struct acpi_table_svkl
> +{
> +    ACPI_TABLE_HEADER       Header; /* Common ACPI table header */
> +    UINT32                  Count;
> +
> +} ACPI_TABLE_SVKL;
> +
> +typedef struct acpi_svkl_key
> +{
> +    UINT16                  Type;
> +    UINT16                  Format;
> +    UINT32                  Size;
> +    UINT64                  Address;
> +
> +} ACPI_SVKL_KEY;
> +
> +enum acpi_svkl_type
> +{
> +    ACPI_SVKL_TYPE_MAIN_STORAGE = 0,
> +    ACPI_SVKL_TYPE_RESERVED     = 1 /* 1 and greater are reserved */
> +};
> +
> +enum acpi_svkl_format
> +{
> +    ACPI_SVKL_FORMAT_RAW_BINARY = 0,
> +    ACPI_SVKL_FORMAT_RESERVED   = 1 /* 1 and greater are reserved */
> +};
> +
> +
>  /* Reset to default packing */
>  
>  #pragma pack()
> diff --git a/src/acpica/source/include/acutils.h b/src/acpica/source/include/acutils.h
> index 4d485422..791b7d9c 100644
> --- a/src/acpica/source/include/acutils.h
> +++ b/src/acpica/source/include/acutils.h
> @@ -1268,6 +1268,11 @@ void
>  AcpiUtConvertStringToUuid (
>      char                    *InString,
>      UINT8                   *UuidBuffer);
> +
> +ACPI_STATUS
> +AcpiUtConvertUuidToString (
> +    char                    *UuidBuffer,
> +    char                    *OutString);
>  #endif
>  
>  #endif /* _ACUTILS_H */
> diff --git a/src/acpica/source/tools/acpiexec/aeinstall.c b/src/acpica/source/tools/acpiexec/aeinstall.c
> index e39c683d..1d32443b 100644
> --- a/src/acpica/source/tools/acpiexec/aeinstall.c
> +++ b/src/acpica/source/tools/acpiexec/aeinstall.c
> @@ -216,6 +216,7 @@ static ACPI_ADR_SPACE_TYPE  SpaceIdList[] =
>      ACPI_ADR_SPACE_GPIO,
>      ACPI_ADR_SPACE_GSBUS,
>      ACPI_ADR_SPACE_PLATFORM_COMM,
> +    ACPI_ADR_SPACE_PLATFORM_RT,
>      ACPI_ADR_SPACE_FIXED_HARDWARE,
>      ACPI_ADR_SPACE_USER_DEFINED1,
>      ACPI_ADR_SPACE_USER_DEFINED2
> diff --git a/src/acpica/source/tools/acpiexec/aeregion.c b/src/acpica/source/tools/acpiexec/aeregion.c
> index faae7347..decd17f7 100644
> --- a/src/acpica/source/tools/acpiexec/aeregion.c
> +++ b/src/acpica/source/tools/acpiexec/aeregion.c
> @@ -205,6 +205,7 @@ AeRegionHandler (
>      UINT32                  Value1;
>      UINT32                  Value2;
>      ACPI_RESOURCE           *Resource;
> +    char                    Uuid[ACPI_PRM_INPUT_BUFFER_SIZE + 1];
>  
>  
>      ACPI_FUNCTION_NAME (AeRegionHandler);
> @@ -446,6 +447,7 @@ AeRegionHandler (
>       * default values. Note: ASLTS will depend on these values.
>       */
>      case ACPI_ADR_SPACE_PLATFORM_COMM: /* ACPI 6.3 */
> +
>          if (AcpiGbl_DisplayRegionAccess)
>          {
>              AcpiOsPrintf ("AcpiExec: PCC Write : Addr %.4X Width %X\n",
> @@ -457,6 +459,21 @@ AeRegionHandler (
>          }
>          return (AE_OK);
>  
> +    case ACPI_ADR_SPACE_PLATFORM_RT:
> +
> +        AcpiOsPrintf ("Acpiexec: PRM %s invoked\n",
> +            (Function & ACPI_IO_MASK) ? "Write" : "Read ");
> +
> +        if ((Function & ACPI_IO_MASK) == ACPI_WRITE)
> +        {
> +            AcpiUtConvertUuidToString((char *) Buffer + 10, Uuid);
> +            AcpiOsPrintf ("Mode: %u GUID: %s\n", Buffer[0], Uuid);
> +        }
> +
> +        /* Unpack the input buffer and print the contents for debug */
> +
> +        break;
> +
>      default:
>          break;
>      }
> 


Acked-by: Alex Hung <alex.hung@canonical.com>
ivanhu June 7, 2021, 8:51 a.m. UTC | #2
On 6/5/21 9:55 PM, 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/AMZT7XOO2HPVPMACSBAU5ELTVFEHDKAR/
> 
> Signed-off-by: Colin Ian King <colin.king@canonical.com>
> ---
>  src/acpica/source/common/ahtable.c            |  42 +--
>  src/acpica/source/common/dmtable.c            | 116 +++++++-
>  src/acpica/source/common/dmtbdump2.c          | 230 +++++++++++++--
>  src/acpica/source/common/dmtbdump3.c          |  60 ++++
>  src/acpica/source/common/dmtbinfo1.c          |  13 +
>  src/acpica/source/common/dmtbinfo2.c          | 211 +++++++++++---
>  src/acpica/source/common/dmtbinfo3.c          |  24 ++
>  src/acpica/source/compiler/aslcompiler.h      |   4 +
>  src/acpica/source/compiler/aslmessages.c      |   6 +-
>  src/acpica/source/compiler/aslmessages.h      |   4 +-
>  src/acpica/source/compiler/aslutils.c         |  40 +++
>  src/acpica/source/compiler/asluuid.c          |  47 ---
>  src/acpica/source/compiler/dtcompiler.h       |  16 +
>  src/acpica/source/compiler/dtfield.c          |   4 +-
>  src/acpica/source/compiler/dtio.c             |   6 +-
>  src/acpica/source/compiler/dttable1.c         | 274 ++++++++++++++----
>  src/acpica/source/compiler/dttable2.c         | 169 +++++++++++
>  src/acpica/source/compiler/dttemplate.h       | 212 ++++++++++++--
>  src/acpica/source/compiler/dtutils.c          |  19 ++
>  .../source/components/executer/exfield.c      |   6 +-
>  .../source/components/executer/exserial.c     |  12 +
>  .../source/components/namespace/nsrepair2.c   |   7 +
>  .../source/components/utilities/utdelete.c    |   8 +
>  .../source/components/utilities/utuuid.c      |  48 +++
>  src/acpica/source/include/acbuffer.h          |   9 +
>  src/acpica/source/include/acconfig.h          |   1 +
>  src/acpica/source/include/acdisasm.h          |  37 ++-
>  src/acpica/source/include/acpixf.h            |   2 +-
>  src/acpica/source/include/actbinfo.h          |   9 +
>  src/acpica/source/include/actbl1.h            |  43 ++-
>  src/acpica/source/include/actbl2.h            | 156 ++++++++++
>  src/acpica/source/include/acutils.h           |   5 +
>  src/acpica/source/tools/acpiexec/aeinstall.c  |   1 +
>  src/acpica/source/tools/acpiexec/aeregion.c   |  17 ++
>  34 files changed, 1621 insertions(+), 237 deletions(-)
> 
> diff --git a/src/acpica/source/common/ahtable.c b/src/acpica/source/common/ahtable.c
> index e318ddf3..80f248d2 100644
> --- a/src/acpica/source/common/ahtable.c
> +++ b/src/acpica/source/common/ahtable.c
> @@ -199,20 +199,21 @@ AcpiAhGetTableInfo (
>   */
>  const AH_TABLE      AcpiGbl_SupportedTables[] =
>  {
> -    {ACPI_SIG_ASF,  "Alert Standard Format table"},
> +    {ACPI_SIG_ASF,  "Alert Standard Format Table"},
> +    {ACPI_SIG_BDAT, "BIOS Data ACPI Table"},
>      {ACPI_SIG_BERT, "Boot Error Record Table"},
>      {ACPI_SIG_BGRT, "Boot Graphics Resource Table"},
>      {ACPI_SIG_BOOT, "Simple Boot Flag Table"},
>      {ACPI_SIG_CEDT, "CXL Early Discovery Table"},
> -    {ACPI_SIG_CPEP, "Corrected Platform Error Polling table"},
> +    {ACPI_SIG_CPEP, "Corrected Platform Error Polling Table"},
>      {ACPI_SIG_CSRT, "Core System Resource Table"},
> -    {ACPI_SIG_DBG2, "Debug Port table type 2"},
> -    {ACPI_SIG_DBGP, "Debug Port table"},
> -    {ACPI_SIG_DMAR, "DMA Remapping table"},
> -    {ACPI_SIG_DRTM, "Dynamic Root of Trust for Measurement table"},
> +    {ACPI_SIG_DBG2, "Debug Port Table type 2"},
> +    {ACPI_SIG_DBGP, "Debug Port Table"},
> +    {ACPI_SIG_DMAR, "DMA Remapping Table"},
> +    {ACPI_SIG_DRTM, "Dynamic Root of Trust for Measurement Table"},
>      {ACPI_SIG_DSDT, "Differentiated System Description Table (AML table)"},
>      {ACPI_SIG_ECDT, "Embedded Controller Boot Resources Table"},
> -    {ACPI_SIG_EINJ, "Error Injection table"},
> +    {ACPI_SIG_EINJ, "Error Injection Table"},
>      {ACPI_SIG_ERST, "Error Record Serialization Table"},
>      {ACPI_SIG_FACS, "Firmware ACPI Control Structure"},
>      {ACPI_SIG_FADT, "Fixed ACPI Description Table (FADT)"},
> @@ -220,38 +221,41 @@ const AH_TABLE      AcpiGbl_SupportedTables[] =
>      {ACPI_SIG_GTDT, "Generic Timer Description Table"},
>      {ACPI_SIG_HEST, "Hardware Error Source Table"},
>      {ACPI_SIG_HMAT, "Heterogeneous Memory Attributes Table"},
> -    {ACPI_SIG_HPET, "High Precision Event Timer table"},
> +    {ACPI_SIG_HPET, "High Precision Event Timer Table"},
>      {ACPI_SIG_IORT, "IO Remapping Table"},
>      {ACPI_SIG_IVRS, "I/O Virtualization Reporting Structure"},
>      {ACPI_SIG_LPIT, "Low Power Idle Table"},
>      {ACPI_SIG_MADT, "Multiple APIC Description Table (MADT)"},
> -    {ACPI_SIG_MCFG, "Memory Mapped Configuration table"},
> -    {ACPI_SIG_MCHI, "Management Controller Host Interface table"},
> +    {ACPI_SIG_MCFG, "Memory Mapped Configuration Table"},
> +    {ACPI_SIG_MCHI, "Management Controller Host Interface Table"},
>      {ACPI_SIG_MPST, "Memory Power State Table"},
>      {ACPI_SIG_MSCT, "Maximum System Characteristics Table"},
> -    {ACPI_SIG_MSDM, "Microsoft Data Management table"},
> +    {ACPI_SIG_MSDM, "Microsoft Data Management Table"},
>      {ACPI_SIG_NFIT, "NVDIMM Firmware Interface Table"},
>      {ACPI_SIG_PCCT, "Platform Communications Channel Table"},
> -    {ACPI_SIG_PHAT, "Platform Health Assessment Table"},
>      {ACPI_SIG_PDTT, "Platform Debug Trigger Table"},
> +    {ACPI_SIG_PHAT, "Platform Health Assessment Table"},
>      {ACPI_SIG_PMTT, "Platform Memory Topology Table"},
>      {ACPI_SIG_PPTT, "Processor Properties Topology Table"},
> +    {ACPI_SIG_PRMT, "Platform Runtime Mechanism Table"},
>      {ACPI_SIG_RASF, "RAS Features Table"},
> +    {ACPI_SIG_RGRT, "Regulatory Graphics Resource Table"},
>      {ACPI_RSDP_NAME,"Root System Description Pointer"},
>      {ACPI_SIG_RSDT, "Root System Description Table"},
>      {ACPI_SIG_S3PT, "S3 Performance Table"},
>      {ACPI_SIG_SBST, "Smart Battery Specification Table"},
>      {ACPI_SIG_SDEI, "Software Delegated Exception Interface Table"},
> -    {ACPI_SIG_SDEV, "Secure Devices table"},
> +    {ACPI_SIG_SDEV, "Secure Devices Table"},
>      {ACPI_SIG_SLIC, "Software Licensing Description Table"},
>      {ACPI_SIG_SLIT, "System Locality Information Table"},
> -    {ACPI_SIG_SPCR, "Serial Port Console Redirection table"},
> -    {ACPI_SIG_SPMI, "Server Platform Management Interface table"},
> +    {ACPI_SIG_SPCR, "Serial Port Console Redirection Table"},
> +    {ACPI_SIG_SPMI, "Server Platform Management Interface Table"},
>      {ACPI_SIG_SRAT, "System Resource Affinity Table"},
>      {ACPI_SIG_SSDT, "Secondary System Description Table (AML table)"},
> -    {ACPI_SIG_STAO, "Status Override table"},
> -    {ACPI_SIG_TCPA, "Trusted Computing Platform Alliance table"},
> -    {ACPI_SIG_TPM2, "Trusted Platform Module hardware interface table"},
> +    {ACPI_SIG_STAO, "Status Override Table"},
> +    {ACPI_SIG_SVKL, "Storage Volume Key Location Table"},
> +    {ACPI_SIG_TCPA, "Trusted Computing Platform Alliance Table"},
> +    {ACPI_SIG_TPM2, "Trusted Platform Module hardware interface Table"},
>      {ACPI_SIG_UEFI, "UEFI Boot Optimization Table"},
>      {ACPI_SIG_VIOT, "Virtual I/O Translation Table"},
>      {ACPI_SIG_WAET, "Windows ACPI Emulated Devices Table"},
> @@ -260,7 +264,7 @@ const AH_TABLE      AcpiGbl_SupportedTables[] =
>      {ACPI_SIG_WDRT, "Watchdog Resource Table"},
>      {ACPI_SIG_WPBT, "Windows Platform Binary Table"},
>      {ACPI_SIG_WSMT, "Windows SMM Security Mitigations Table"},
> -    {ACPI_SIG_XENV, "Xen Environment 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 ffec889a..7a4e87e1 100644
> --- a/src/acpica/source/common/dmtable.c
> +++ b/src/acpica/source/common/dmtable.c
> @@ -187,6 +187,7 @@ static const char           *AcpiDmAsfSubnames[] =
>  static const char           *AcpiDmCedtSubnames[] =
>  {
>      "CXL Host Bridge Structure",
> +    "CXL Fixed Memory Window Structure",
>      "Unknown Subtable Type"         /* Reserved */
>  };
>  
> @@ -350,6 +351,7 @@ static const char           *AcpiDmMadtSubnames[] =
>      "Generic MSI Frame",                /* ACPI_MADT_GENERIC_MSI_FRAME */
>      "Generic Interrupt Redistributor",  /* ACPI_MADT_GENERIC_REDISTRIBUTOR */
>      "Generic Interrupt Translator",     /* ACPI_MADT_GENERIC_TRANSLATOR */
> +    "Mutiprocessor Wakeup",             /* ACPI_MADT_TYPE_MULTIPROC_WAKEUP */
>      "Unknown Subtable Type"             /* Reserved */
>  };
>  
> @@ -401,6 +403,12 @@ static const char           *AcpiDmPpttSubnames[] =
>      "Unknown Subtable Type"         /* Reserved */
>  };
>  
> +static const char           *AcpiDmRgrtSubnames[] =
> +{
> +    "Unknown/Reserved Image Type",  /* ACPI_RGRT_TYPE_RESERVED0 */
> +    "Type PNG"                      /* ACPI_RGRT_IMAGE_TYPE_PNG */
> +};
> +
>  static const char           *AcpiDmSdevSubnames[] =
>  {
>      "Namespace Device",             /* ACPI_SDEV_TYPE_NAMESPACE_DEVICE */
> @@ -438,9 +446,28 @@ static const char           *AcpiDmTpm2Subnames[] =
>  
>  static const char           *AcpiDmIvrsSubnames[] =
>  {
> -    "Hardware Definition Block",
> -    "Memory Definition Block",
> -    "Unknown Subtable Type"         /* Reserved */
> +    "Hardware Definition Block (IVHD)",
> +    "Hardware Definition Block - Mixed Format (IVHD)",
> +    "Memory Definition Block (IVMD)",
> +    "Unknown/Reserved Subtable Type"            /* Reserved */
> +};
> +
> +static const char           *AcpiDmIvrsDevEntryNames[] =
> +{
> +    "Unknown/Reserved Device Entry Type",       /* 0- Reserved */
> +    "Device Entry: Select All Devices",         /* 1 */
> +    "Device Entry: Select One Device",          /* 2 */
> +    "Device Entry: Start of Range",             /* 3 */
> +    "Device Entry: End of Range",               /* 4 */
> +    "Device Entry: Alias Select",               /* 66 */
> +    "Device Entry: Alias Start of Range",       /* 67 */
> +    "Unknown/Reserved Device Entry Type",       /* 68- Reserved */
> +    "Unknown/Reserved Device Entry Type",       /* 69- Reserved */
> +    "Device Entry: Extended Select",            /* 70 */
> +    "Device Entry: Extended Start of Range",    /* 71 */
> +    "Device Entry: Special Device",             /* 72 */
> +    "Device Entry: ACPI HID Named Device",      /* 240 */
> +    "Unknown/Reserved Device Entry Type"        /* Reserved */
>  };
>  
>  static const char           *AcpiDmLpitSubnames[] =
> @@ -507,6 +534,7 @@ static const char           *AcpiDmGasAccessWidth[] =
>  const ACPI_DMTABLE_DATA     AcpiDmTableData[] =
>  {
>      {ACPI_SIG_ASF,  NULL,                   AcpiDmDumpAsf,  DtCompileAsf,   TemplateAsf},
> +    {ACPI_SIG_BDAT, AcpiDmTableInfoBdat,    NULL,           NULL,           TemplateBdat},
>      {ACPI_SIG_BERT, AcpiDmTableInfoBert,    NULL,           NULL,           TemplateBert},
>      {ACPI_SIG_BGRT, AcpiDmTableInfoBgrt,    NULL,           NULL,           TemplateBgrt},
>      {ACPI_SIG_BOOT, AcpiDmTableInfoBoot,    NULL,           NULL,           TemplateBoot},
> @@ -541,7 +569,9 @@ const ACPI_DMTABLE_DATA     AcpiDmTableData[] =
>      {ACPI_SIG_PHAT, NULL,                   AcpiDmDumpPhat, DtCompilePhat,  TemplatePhat},
>      {ACPI_SIG_PMTT, NULL,                   AcpiDmDumpPmtt, DtCompilePmtt,  TemplatePmtt},
>      {ACPI_SIG_PPTT, NULL,                   AcpiDmDumpPptt, DtCompilePptt,  TemplatePptt},
> +    {ACPI_SIG_PRMT, NULL,                   AcpiDmDumpPrmt, DtCompilePrmt,  TemplatePrmt},
>      {ACPI_SIG_RASF, AcpiDmTableInfoRasf,    NULL,           NULL,           TemplateRasf},
> +    {ACPI_SIG_RGRT, NULL,                   AcpiDmDumpRgrt, DtCompileRgrt,  TemplateRgrt},
>      {ACPI_SIG_RSDT, NULL,                   AcpiDmDumpRsdt, DtCompileRsdt,  TemplateRsdt},
>      {ACPI_SIG_S3PT, NULL,                   NULL,           NULL,           TemplateS3pt},
>      {ACPI_SIG_SBST, AcpiDmTableInfoSbst,    NULL,           NULL,           TemplateSbst},
> @@ -553,6 +583,7 @@ const ACPI_DMTABLE_DATA     AcpiDmTableData[] =
>      {ACPI_SIG_SPMI, AcpiDmTableInfoSpmi,    NULL,           NULL,           TemplateSpmi},
>      {ACPI_SIG_SRAT, NULL,                   AcpiDmDumpSrat, DtCompileSrat,  TemplateSrat},
>      {ACPI_SIG_STAO, NULL,                   AcpiDmDumpStao, DtCompileStao,  TemplateStao},
> +    {ACPI_SIG_SVKL, AcpiDmTableInfoSvkl,    AcpiDmDumpSvkl, DtCompileSvkl,  TemplateSvkl},
>      {ACPI_SIG_TCPA, NULL,                   AcpiDmDumpTcpa, DtCompileTcpa,  TemplateTcpa},
>      {ACPI_SIG_TPM2, AcpiDmTableInfoTpm2,    AcpiDmDumpTpm2, DtCompileTpm2,  TemplateTpm2},
>      {ACPI_SIG_UEFI, AcpiDmTableInfoUefi,    NULL,           DtCompileUefi,  TemplateUefi},
> @@ -940,8 +971,8 @@ AcpiDmDumpTable (
>          if (SubtableLength && (Info->Offset >= SubtableLength))
>          {
>              AcpiOsPrintf (
> -                "/**** ACPI subtable terminates early - "
> -                "may be older version (dump table) */\n");
> +                "/**** ACPI subtable terminates early (Len %u) - "
> +                "may be older version (dump table) */\n", SubtableLength);
>  
>              /* Move on to next subtable */
>  
> @@ -966,11 +997,13 @@ AcpiDmDumpTable (
>          case ACPI_DMT_ACCWIDTH:
>          case ACPI_DMT_CEDT:
>          case ACPI_DMT_IVRS:
> +        case ACPI_DMT_IVRS_DE:
>          case ACPI_DMT_GTDT:
>          case ACPI_DMT_MADT:
>          case ACPI_DMT_PCCT:
>          case ACPI_DMT_PMTT:
>          case ACPI_DMT_PPTT:
> +        case ACPI_DMT_RGRT:
>          case ACPI_DMT_SDEV:
>          case ACPI_DMT_SRAT:
>          case ACPI_DMT_ASF:
> @@ -1077,6 +1110,11 @@ AcpiDmDumpTable (
>              ByteLength = strlen (ACPI_CAST_PTR (char, Target)) + 1;
>              break;
>  
> +        case ACPI_DMT_IVRS_UNTERMINATED_STRING:
> +
> +            ByteLength = ((ACPI_CAST_PTR (ACPI_IVRS_DEVICE_HID, Target) -1)->UidLength);
> +            break;
> +
>          case ACPI_DMT_GAS:
>  
>              if (!LastOutputBlankLine)
> @@ -1273,7 +1311,7 @@ AcpiDmDumpTable (
>  
>              /* Convert 16-byte UUID buffer to 36-byte formatted UUID string */
>  
> -            (void) AuConvertUuidToString ((char *) Target, AslGbl_MsgBuffer);
> +            (void) AcpiUtConvertUuidToString ((char *) Target, AslGbl_MsgBuffer);
>  
>              AcpiOsPrintf ("%s\n", AslGbl_MsgBuffer);
>              break;
> @@ -1283,6 +1321,11 @@ AcpiDmDumpTable (
>              AcpiOsPrintf ("\"%s\"\n", ACPI_CAST_PTR (char, Target));
>              break;
>  
> +        case ACPI_DMT_IVRS_UNTERMINATED_STRING:
> +
> +            AcpiOsPrintf ("\"%.*s\"\n", ByteLength, ACPI_CAST_PTR (char, Target));
> +            break;
> +
>          /* Fixed length ASCII name fields */
>  
>          case ACPI_DMT_SIG:
> @@ -1684,6 +1727,20 @@ AcpiDmDumpTable (
>              AcpiDmDumpBuffer (Target, 0, ByteLength, 0, NULL);
>              break;
>  
> +        case ACPI_DMT_RGRT:
> +
> +            /* RGRT subtable types */
> +
> +            Temp8 = *Target;
> +            if (Temp8 >= ACPI_RGRT_TYPE_RESERVED)
> +            {
> +                Temp8 = ACPI_RGRT_TYPE_RESERVED0;
> +            }
> +
> +            AcpiOsPrintf (UINT8_FORMAT, *Target,
> +                AcpiDmRgrtSubnames[Temp8]);
> +            break;
> +
>          case ACPI_DMT_SDEV:
>  
>              /* SDEV subtable types */
> @@ -1750,21 +1807,62 @@ AcpiDmDumpTable (
>              {
>              case ACPI_IVRS_TYPE_HARDWARE1:
>              case ACPI_IVRS_TYPE_HARDWARE2:
> -            case ACPI_IVRS_TYPE_HARDWARE3:
>  
>                  Name = AcpiDmIvrsSubnames[0];
>                  break;
>  
> +            case ACPI_IVRS_TYPE_HARDWARE3:
> +
> +                Name = AcpiDmIvrsSubnames[1];
> +                break;
> +
>              case ACPI_IVRS_TYPE_MEMORY1:
>              case ACPI_IVRS_TYPE_MEMORY2:
>              case ACPI_IVRS_TYPE_MEMORY3:
>  
> -                Name = AcpiDmIvrsSubnames[1];
> +                Name = AcpiDmIvrsSubnames[2];
>                  break;
>  
>              default:
>  
> -                Name = AcpiDmIvrsSubnames[2];
> +                Name = AcpiDmIvrsSubnames[3];
> +                break;
> +            }
> +
> +            AcpiOsPrintf (UINT8_FORMAT, *Target, Name);
> +            break;
> +
> +        case ACPI_DMT_IVRS_DE:
> +
> +            /* IVRS device entry types */
> +
> +            Temp8 = *Target;
> +            switch (Temp8)
> +            {
> +            case ACPI_IVRS_TYPE_ALL:
> +            case ACPI_IVRS_TYPE_SELECT:
> +            case ACPI_IVRS_TYPE_START:
> +            case ACPI_IVRS_TYPE_END:
> +
> +                Name = AcpiDmIvrsDevEntryNames[Temp8];
> +                break;
> +
> +            case ACPI_IVRS_TYPE_ALIAS_SELECT:
> +            case ACPI_IVRS_TYPE_ALIAS_START:
> +            case ACPI_IVRS_TYPE_EXT_SELECT:
> +            case ACPI_IVRS_TYPE_EXT_START:
> +            case ACPI_IVRS_TYPE_SPECIAL:
> +
> +                Name = AcpiDmIvrsDevEntryNames[Temp8 - 61];
> +                break;
> +
> +            case ACPI_IVRS_TYPE_HID:
> +
> +                Name = AcpiDmIvrsDevEntryNames[Temp8 - 228];
> +                break;
> +
> +            default:
> +                Name = AcpiDmIvrsDevEntryNames[0];  /* Unknown/Reserved */
>                  break;
>              }
>  
> diff --git a/src/acpica/source/common/dmtbdump2.c b/src/acpica/source/common/dmtbdump2.c
> index 80d9d459..1b3cdf76 100644
> --- a/src/acpica/source/common/dmtbdump2.c
> +++ b/src/acpica/source/common/dmtbdump2.c
> @@ -153,6 +153,7 @@
>  #include "accommon.h"
>  #include "acdisasm.h"
>  #include "actables.h"
> +#include "aslcompiler.h"
>  
>  /* This module used for application-level code only */
>  
> @@ -483,7 +484,18 @@ NextSubtable:
>   *
>   * RETURN:      None
>   *
> - * DESCRIPTION: Format the contents of a IVRS
> + * DESCRIPTION: Format the contents of a IVRS. Notes:
> + *              The IVRS is essentially a flat table, with the following
> + *              structure:
> + *              <Main ACPI Table Header>
> + *              <Main subtable - virtualization info>
> + *              <IVHD>
> + *                  <Device Entries>
> + *              ...
> + *              <IVHD>
> + *                  <Device Entries>
> + *              <IVMD>
> + *              ...
>   *
>   ******************************************************************************/
>  
> @@ -513,36 +525,36 @@ AcpiDmDumpIvrs (
>      /* Subtables */
>  
>      Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset);
> +
>      while (Offset < Table->Length)
>      {
> -        /* Common subtable header */
> -
> -        AcpiOsPrintf ("\n");
> -        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
> -            Subtable->Length, AcpiDmTableInfoIvrsHdr);
> -        if (ACPI_FAILURE (Status))
> -        {
> -            return;
> -        }
> -
>          switch (Subtable->Type)
>          {
> +        /* Type 10h, IVHD (I/O Virtualization Hardware Definition) */
> +
>          case ACPI_IVRS_TYPE_HARDWARE1:
>  
> -            InfoTable = AcpiDmTableInfoIvrs0;
> +            AcpiOsPrintf ("\n");
> +            InfoTable = AcpiDmTableInfoIvrsHware1;
>              break;
>  
> +        /* Types 11h, 40h, IVHD (I/O Virtualization Hardware Definition) */
> +
>          case ACPI_IVRS_TYPE_HARDWARE2:
>          case ACPI_IVRS_TYPE_HARDWARE3:
>  
> -            InfoTable = AcpiDmTableInfoIvrs01;
> +            AcpiOsPrintf ("\n");
> +            InfoTable = AcpiDmTableInfoIvrsHware23;
>              break;
>  
> +        /* Types 20h-22h, IVMD (I/O Virtualization Memory Definition Block) */
> +
>          case ACPI_IVRS_TYPE_MEMORY1:
>          case ACPI_IVRS_TYPE_MEMORY2:
>          case ACPI_IVRS_TYPE_MEMORY3:
>  
> -            InfoTable = AcpiDmTableInfoIvrs1;
> +            AcpiOsPrintf ("\n");
> +            InfoTable = AcpiDmTableInfoIvrsMemory;
>              break;
>  
>          default:
> @@ -562,7 +574,6 @@ AcpiDmDumpIvrs (
>  
>          /* Dump the subtable */
>  
> -        AcpiOsPrintf ("\n");
>          Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
>              Subtable->Length, InfoTable);
>          if (ACPI_FAILURE (Status))
> @@ -570,7 +581,7 @@ AcpiDmDumpIvrs (
>              return;
>          }
>  
> -        /* The hardware subtable can contain multiple device entries */
> +        /* The hardware subtables (IVHD) can contain multiple device entries */
>  
>          if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE1 ||
>              Subtable->Type == ACPI_IVRS_TYPE_HARDWARE2 ||
> @@ -584,16 +595,19 @@ AcpiDmDumpIvrs (
>              }
>              else
>              {
> -                /* ACPI_IVRS_TYPE_HARDWARE2 subtable type */
> +                /* ACPI_IVRS_TYPE_HARDWARE2, HARDWARE3 subtable types */
>  
>                  EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE2);
>                  DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable,
>                      sizeof (ACPI_IVRS_HARDWARE2));
>              }
>  
> +            /* Process all of the Device Entries */
> +
>              while (EntryOffset < (Offset + Subtable->Length))
>              {
>                  AcpiOsPrintf ("\n");
> +
>                  /*
>                   * Upper 2 bits of Type encode the length of the device entry
>                   *
> @@ -645,7 +659,7 @@ AcpiDmDumpIvrs (
>  
>                  case ACPI_IVRS_TYPE_HID:
>  
> -                    EntryLength = 22;
> +                    EntryLength = 4;
>                      InfoTable = AcpiDmTableInfoIvrsHid;
>                      break;
>  
> @@ -669,21 +683,87 @@ AcpiDmDumpIvrs (
>  
>                  HidSubtable = ACPI_CAST_PTR (ACPI_IVRS_DEVICE_HID, DeviceEntry);
>                  EntryOffset += EntryLength;
> -                DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, DeviceEntry,
> +                DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, HidSubtable,
>                      EntryLength);
>  
>                  if (EntryType == ACPI_IVRS_TYPE_HID)
>                  {
> -                    EntryLength = HidSubtable->UidLength;
> -                    Status = AcpiDmDumpTable (Table->Length, EntryOffset,
> -                        Table, EntryLength, AcpiDmTableInfoIvrsHid1);
> +                    /*
> +                     * Determine if the HID is an integer or a string.
> +                     * An integer is defined to be 32 bits, with the upper 32 bits
> +                     * set to zero. (from the ACPI Spec): "The HID can be a 32-bit
> +                     * integer or a character string. If an integer, the lower
> +                     * 4 bytes of the field contain the integer and the upper
> +                     * 4 bytes are padded with 0".
> +                     */
> +                    if (UtIsIdInteger ((UINT8 *) &HidSubtable->AcpiHid))
> +                    {
> +                        Status = AcpiDmDumpTable (Table->Length, EntryOffset,
> +                            &HidSubtable->AcpiHid, 8, AcpiDmTableInfoIvrsHidInteger);
> +                    }
> +                    else
> +                    {
> +                        Status = AcpiDmDumpTable (Table->Length, EntryOffset,
> +                            &HidSubtable->AcpiHid, 8, AcpiDmTableInfoIvrsHidString);
> +                    }
>                      if (ACPI_FAILURE (Status))
>                      {
>                          return;
>                      }
> -                    EntryOffset += EntryLength;
> +
> +                    EntryOffset += 8;
> +
> +                    /*
> +                     * Determine if the CID is an integer or a string. The format
> +                     * of the CID is the same as the HID above. From ACPI Spec:
> +                     * "If present, CID must be a single Compatible Device ID
> +                     * following the same format as the HID field."
> +                     */
> +                    if (UtIsIdInteger ((UINT8 *) &HidSubtable->AcpiCid))
> +                    {
> +                        Status = AcpiDmDumpTable (Table->Length, EntryOffset,
> +                            &HidSubtable->AcpiCid, 8, AcpiDmTableInfoIvrsCidInteger);
> +                    }
> +                    else
> +                    {
> +                        Status = AcpiDmDumpTable (Table->Length, EntryOffset,
> +                            &HidSubtable->AcpiCid, 8, AcpiDmTableInfoIvrsCidString);
> +                    }
> +                    if (ACPI_FAILURE (Status))
> +                    {
> +                        return;
> +                    }
> +
> +                    EntryOffset += 8;
> +                    EntryLength = HidSubtable->UidLength;
> +
> +                    if (EntryLength > ACPI_IVRS_UID_NOT_PRESENT)
> +                    {
> +                        /* Dump the UID based upon the UidType field (String or Integer) */
> +
> +                        if (HidSubtable->UidType == ACPI_IVRS_UID_IS_STRING)
> +                        {
> +                            Status = AcpiDmDumpTable (Table->Length, EntryOffset,
> +                                &HidSubtable->UidType, EntryLength, AcpiDmTableInfoIvrsUidString);
> +                            if (ACPI_FAILURE (Status))
> +                            {
> +                                return;
> +                            }
> +                        }
> +                        else /* ACPI_IVRS_UID_IS_INTEGER */
> +                        {
> +                            Status = AcpiDmDumpTable (Table->Length, EntryOffset,
> +                                &HidSubtable->UidType, EntryLength, AcpiDmTableInfoIvrsUidInteger);
> +                            if (ACPI_FAILURE (Status))
> +                            {
> +                                return;
> +                            }
> +                        }
> +                    }
> +
> +                    EntryOffset += EntryLength+2;
>                      DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER,
> -                        DeviceEntry, EntryLength);
> +                        Table, EntryOffset);
>                  }
>              }
>          }
> @@ -1923,6 +2003,108 @@ NextSubtable:
>  }
>  
>  
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiDmDumpPrmt
> + *
> + * PARAMETERS:  Table               - A PRMT table
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Format the contents of a PRMT. This table type consists
> + *              of an open-ended number of subtables.
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmDumpPrmt (
> +    ACPI_TABLE_HEADER       *Table)
> +{
> +    UINT32                  CurrentOffset = sizeof (ACPI_TABLE_HEADER);
> +    ACPI_TABLE_PRMT_HEADER  *PrmtHeader;
> +    ACPI_PRMT_MODULE_INFO   *PrmtModuleInfo;
> +    ACPI_PRMT_HANDLER_INFO  *PrmtHandlerInfo;
> +    ACPI_STATUS             Status;
> +    UINT32                  i, j;
> +
> +
> +    /* Main table header */
> +
> +    PrmtHeader = ACPI_ADD_PTR (ACPI_TABLE_PRMT_HEADER, Table, CurrentOffset);
> +    Status = AcpiDmDumpTable (Table->Length, CurrentOffset, PrmtHeader,
> +        sizeof (ACPI_TABLE_PRMT_HEADER), AcpiDmTableInfoPrmtHdr);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        AcpiOsPrintf ("Invalid PRMT header\n");
> +        return;
> +    }
> +
> +    CurrentOffset += sizeof (ACPI_TABLE_PRMT_HEADER);
> +
> +    /* PRM Module Information Structure array */
> +
> +    for (i = 0; i < PrmtHeader->ModuleInfoCount; ++i)
> +    {
> +        PrmtModuleInfo = ACPI_ADD_PTR (ACPI_PRMT_MODULE_INFO, Table, CurrentOffset);
> +        Status = AcpiDmDumpTable (Table->Length, CurrentOffset, PrmtModuleInfo,
> +            sizeof (ACPI_PRMT_MODULE_INFO), AcpiDmTableInfoPrmtModule);
> +
> +        CurrentOffset += sizeof (ACPI_PRMT_MODULE_INFO);
> +
> +        /* PRM handler information structure array */
> +
> +        for (j = 0; j < PrmtModuleInfo->HandlerInfoCount; ++j)
> +        {
> +            PrmtHandlerInfo = ACPI_ADD_PTR (ACPI_PRMT_HANDLER_INFO, Table, CurrentOffset);
> +            Status = AcpiDmDumpTable (Table->Length, CurrentOffset, PrmtHandlerInfo,
> +                sizeof (ACPI_PRMT_HANDLER_INFO), AcpiDmTableInfoPrmtHandler);
> +
> +            CurrentOffset += sizeof (ACPI_PRMT_HANDLER_INFO);
> +        }
> +    }
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiDmDumpRgrt
> + *
> + * PARAMETERS:  Table               - A RGRT table
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Format the contents of a RGRT
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmDumpRgrt (
> +    ACPI_TABLE_HEADER       *Table)
> +{
> +    ACPI_STATUS             Status;
> +    ACPI_TABLE_RGRT         *Subtable = ACPI_CAST_PTR (ACPI_TABLE_RGRT, Table);
> +    UINT32                  Offset = sizeof (ACPI_TABLE_RGRT);
> +
> +
> +    /* Main table */
> +
> +    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoRgrt);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return;
> +    }
> +
> +    /* Dump the binary image as a subtable */
> +
> +    Status = AcpiDmDumpTable (Table->Length, Offset, &Subtable->Image,
> +        Table->Length - Offset, AcpiDmTableInfoRgrt0);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return;
> +    }
> +}
> +
> +
>  /*******************************************************************************
>   *
>   * FUNCTION:    AcpiDmDumpS3pt
> diff --git a/src/acpica/source/common/dmtbdump3.c b/src/acpica/source/common/dmtbdump3.c
> index 7f559eee..e81a703b 100644
> --- a/src/acpica/source/common/dmtbdump3.c
> +++ b/src/acpica/source/common/dmtbdump3.c
> @@ -420,6 +420,65 @@ AcpiDmDumpStao (
>  }
>  
>  
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiDmDumpSvkl
> + *
> + * PARAMETERS:  Table               - A SVKL table
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Format the contents of a SVKL. This is a variable-length
> + *              table that contains an open-ended number of key subtables at
> + *              the end of the header.
> + *
> + * NOTES: SVKL is essentially a flat table, with a small main table and
> + *          a variable number of a single type of subtable.
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmDumpSvkl (
> +    ACPI_TABLE_HEADER       *Table)
> +{
> +    ACPI_STATUS             Status;
> +    UINT32                  Length = Table->Length;
> +    UINT32                  Offset = sizeof (ACPI_TABLE_SVKL);
> +    ACPI_SVKL_KEY           *Subtable;
> +
> +
> +    /* Main table */
> +
> +    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoSvkl);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return;
> +    }
> +
> +    /* The rest of the table consists of subtables (single type) */
> +
> +    Subtable = ACPI_ADD_PTR (ACPI_SVKL_KEY, Table, Offset);
> +    while (Offset < Table->Length)
> +    {
> +        /* Dump the subtable */
> +
> +        AcpiOsPrintf ("\n");
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
> +            sizeof (ACPI_SVKL_KEY), AcpiDmTableInfoSvkl0);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return;
> +        }
> +
> +        /* Point to next subtable */
> +
> +        Offset += sizeof (ACPI_SVKL_KEY);
> +        Subtable = ACPI_ADD_PTR (ACPI_SVKL_KEY, Subtable,
> +            sizeof (ACPI_SVKL_KEY));
> +    }
> +}
> +
> +
>  /*******************************************************************************
>   *
>   * FUNCTION:    AcpiDmDumpTcpa
> @@ -502,6 +561,7 @@ AcpiDmDumpTcpa (
>   * DESCRIPTION: Format the contents of a TPM2.
>   *
>   ******************************************************************************/
> +
>  static void
>  AcpiDmDumpTpm2Rev3 (
>      ACPI_TABLE_HEADER       *Table)
> diff --git a/src/acpica/source/common/dmtbinfo1.c b/src/acpica/source/common/dmtbinfo1.c
> index ea545f53..fbf3980d 100644
> --- a/src/acpica/source/common/dmtbinfo1.c
> +++ b/src/acpica/source/common/dmtbinfo1.c
> @@ -295,6 +295,19 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoAsf4[] =
>  };
>  
>  
> +/*******************************************************************************
> + *
> + * BDAT -  BIOS Data ACPI Table
> + *
> + ******************************************************************************/
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoBdat[] =
> +{
> +    {ACPI_DMT_GAS,      ACPI_BDAT_OFFSET (Gas),                     "BDAT Generic Address", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +
>  /*******************************************************************************
>   *
>   * BERT -  Boot Error Record table
> diff --git a/src/acpica/source/common/dmtbinfo2.c b/src/acpica/source/common/dmtbinfo2.c
> index 9bb4b48c..00cf2e4d 100644
> --- a/src/acpica/source/common/dmtbinfo2.c
> +++ b/src/acpica/source/common/dmtbinfo2.c
> @@ -414,23 +414,24 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs[] =
>      ACPI_DMT_TERMINATOR
>  };
>  
> -/* Common Subtable header (one per Subtable) */
> -
> -ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsHdr[] =
> -{
> -    {ACPI_DMT_IVRS,     ACPI_IVRSH_OFFSET (Type),                   "Subtable Type", 0},
> -    {ACPI_DMT_UINT8,    ACPI_IVRSH_OFFSET (Flags),                  "Flags", 0},
> -    {ACPI_DMT_UINT16,   ACPI_IVRSH_OFFSET (Length),                 "Length", DT_LENGTH},
> -    {ACPI_DMT_UINT16,   ACPI_IVRSH_OFFSET (DeviceId),               "DeviceId", 0},
> -    ACPI_DMT_TERMINATOR
> -};
> -
>  /* IVRS subtables */
>  
>  /* 0x10: I/O Virtualization Hardware Definition (IVHD) Block */
>  
> -ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs0[] =
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsHware1[] =
>  {
> +    {ACPI_DMT_IVRS,     ACPI_IVRSH_OFFSET (Type),                   "Subtable Type", 0},
> +    {ACPI_DMT_UINT8,    ACPI_IVRSH_OFFSET (Flags),                  "Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "HtTunEn", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "PassPW", 0},
> +    {ACPI_DMT_FLAG2,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "ResPassPW", 0},
> +    {ACPI_DMT_FLAG3,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Isoc Control", 0},
> +    {ACPI_DMT_FLAG4,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Iotlb Support", 0},
> +    {ACPI_DMT_FLAG5,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Coherent", 0},
> +    {ACPI_DMT_FLAG6,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Prefetch Support", 0},
> +    {ACPI_DMT_FLAG7,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "PPR Support", 0},
> +    {ACPI_DMT_UINT16,   ACPI_IVRSH_OFFSET (Length),                 "Length", DT_LENGTH},
> +    {ACPI_DMT_UINT16,   ACPI_IVRSH_OFFSET (DeviceId),               "DeviceId", 0},
>      {ACPI_DMT_UINT16,   ACPI_IVRS0_OFFSET (CapabilityOffset),       "Capability Offset", 0},
>      {ACPI_DMT_UINT64,   ACPI_IVRS0_OFFSET (BaseAddress),            "Base Address", 0},
>      {ACPI_DMT_UINT16,   ACPI_IVRS0_OFFSET (PciSegmentGroup),        "PCI Segment Group", 0},
> @@ -439,24 +440,44 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs0[] =
>      ACPI_DMT_TERMINATOR
>  };
>  
> -/* 0x10: I/O Virtualization Hardware Definition (IVHD) Block */
> +/* 0x11, 0x40: I/O Virtualization Hardware Definition (IVHD) Block */
>  
> -ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs01[] =
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsHware23[] =
>  {
> -    {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
> -};
> -
> -/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition (IVMD) Block */
> -
> -ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs1[] =
> +    {ACPI_DMT_IVRS,     ACPI_IVRSH_OFFSET (Type),                   "Subtable Type", 0},
> +    {ACPI_DMT_UINT8,    ACPI_IVRSH_OFFSET (Flags),                  "Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "HtTunEn", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "PassPW", 0},
> +    {ACPI_DMT_FLAG2,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "ResPassPW", 0},
> +    {ACPI_DMT_FLAG3,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Isoc Control", 0},
> +    {ACPI_DMT_FLAG4,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Iotlb Support", 0},
> +    {ACPI_DMT_FLAG5,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Coherent", 0},
> +    {ACPI_DMT_FLAG6,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Prefetch Support", 0},
> +    {ACPI_DMT_FLAG7,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "PPR Support", 0},
> +    {ACPI_DMT_UINT16,   ACPI_IVRS01_OFFSET (Header.Length),         "Length", DT_LENGTH},
> +    {ACPI_DMT_UINT16,   ACPI_IVRS01_OFFSET (Header.DeviceId),       "DeviceId", 0},
> +    {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
> +};
> +
> +/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition (IVMD) Device Entry Block */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsMemory[] =
>  {
> +    {ACPI_DMT_IVRS,     ACPI_IVRSH_OFFSET (Type),                   "Subtable Type", 0},
> +    {ACPI_DMT_UINT8,    ACPI_IVRSH_OFFSET (Flags),                  "Flags (decoded below)", DT_FLAG},
> +    {ACPI_DMT_FLAG0,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Unity", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Readable", 0},
> +    {ACPI_DMT_FLAG2,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Writeable", 0},
> +    {ACPI_DMT_FLAG3,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Exclusion Range", 0},
> +    {ACPI_DMT_UINT16,   ACPI_IVRSH_OFFSET (Length),                 "Length", DT_LENGTH},
> +    {ACPI_DMT_UINT16,   ACPI_IVRSH_OFFSET (DeviceId),               "DeviceId", 0},
>      {ACPI_DMT_UINT16,   ACPI_IVRS1_OFFSET (AuxData),                "Auxiliary Data", 0},
>      {ACPI_DMT_UINT64,   ACPI_IVRS1_OFFSET (Reserved),               "Reserved", 0},
>      {ACPI_DMT_UINT64,   ACPI_IVRS1_OFFSET (StartAddress),           "Start Address", 0},
> @@ -467,19 +488,26 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs1[] =
>  /* Device entry header for IVHD block */
>  
>  #define ACPI_DMT_IVRS_DE_HEADER \
> -    {ACPI_DMT_UINT8,    ACPI_IVRSD_OFFSET (Type),                   "Entry Type", 0}, \
> +    {ACPI_DMT_IVRS_DE,  ACPI_IVRSD_OFFSET (Type),                   "Subtable Type", 0}, \
>      {ACPI_DMT_UINT16,   ACPI_IVRSD_OFFSET (Id),                     "Device ID", 0}, \
> -    {ACPI_DMT_UINT8,    ACPI_IVRSD_OFFSET (DataSetting),            "Data Setting", 0}
> +    {ACPI_DMT_UINT8,    ACPI_IVRSD_OFFSET (DataSetting),            "Data Setting (decoded below)", 0}, \
> +    {ACPI_DMT_FLAG0,    ACPI_IVRSDE_FLAG_OFFSET (DataSetting, 0),   "INITPass", 0}, \
> +    {ACPI_DMT_FLAG1,    ACPI_IVRSDE_FLAG_OFFSET (DataSetting, 0),   "EIntPass", 0}, \
> +    {ACPI_DMT_FLAG2,    ACPI_IVRSDE_FLAG_OFFSET (DataSetting, 0),   "NMIPass", 0}, \
> +    {ACPI_DMT_FLAG3,    ACPI_IVRSDE_FLAG_OFFSET (DataSetting, 0),   "Reserved", 0}, \
> +    {ACPI_DMT_FLAGS4,   ACPI_IVRSDE_FLAG_OFFSET (DataSetting, 0),   "System MGMT", 0}, \
> +    {ACPI_DMT_FLAG6,    ACPI_IVRSDE_FLAG_OFFSET (DataSetting, 0),   "LINT0 Pass", 0}, \
> +    {ACPI_DMT_FLAG7,    ACPI_IVRSDE_FLAG_OFFSET (DataSetting, 0),   "LINT1 Pass", 0}
>  
> -/* 4-byte device entry */
> +/* 4-byte device entry (Types 1,2,3,4) */
>  
>  ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs4[] =
>  {
>      ACPI_DMT_IVRS_DE_HEADER,
> -    {ACPI_DMT_EXIT,     0,                                          NULL, 0},
> +    ACPI_DMT_TERMINATOR
>  };
>  
> -/* 8-byte device entry */
> +/* 8-byte device entry (Type Alias Select, Alias Start of Range) */
>  
>  ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs8a[] =
>  {
> @@ -490,7 +518,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs8a[] =
>      ACPI_DMT_TERMINATOR
>  };
>  
> -/* 8-byte device entry */
> +/* 8-byte device entry (Type Extended Select, Extended Start of Range) */
>  
>  ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs8b[] =
>  {
> @@ -499,7 +527,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs8b[] =
>      ACPI_DMT_TERMINATOR
>  };
>  
> -/* 8-byte device entry */
> +/* 8-byte device entry (Type Special Device) */
>  
>  ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs8c[] =
>  {
> @@ -510,21 +538,50 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs8c[] =
>      ACPI_DMT_TERMINATOR
>  };
>  
> -/* Variable-length device entry */
> +/* Variable-length Device Entry Type 0xF0 */
>  
>  ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsHid[] =
>  {
>      ACPI_DMT_IVRS_DE_HEADER,
> -    {ACPI_DMT_NAME8,    ACPI_IVRSHID_OFFSET (AcpiHid),              "ACPI HID", 0},
> -    {ACPI_DMT_NAME8,    ACPI_IVRSHID_OFFSET (AcpiCid),              "ACPI CID", 0},
> -    {ACPI_DMT_UINT8,    ACPI_IVRSHID_OFFSET (UidType),              "UID Format", DT_DESCRIBES_OPTIONAL},
> -    {ACPI_DMT_UINT8,    ACPI_IVRSHID_OFFSET (UidLength),            "UID Length", DT_DESCRIBES_OPTIONAL},
>      ACPI_DMT_TERMINATOR
>  };
>  
> -ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsHid1[] =
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsUidString[] =
> +{
> +    {ACPI_DMT_UINT8,    0,                                          "UID Format", DT_DESCRIBES_OPTIONAL},
> +    {ACPI_DMT_UINT8,    1,                                          "UID Length", DT_DESCRIBES_OPTIONAL},
> +    {ACPI_DMT_IVRS_UNTERMINATED_STRING, 2,                          "UID", DT_OPTIONAL},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsUidInteger[] =
> +{
> +    {ACPI_DMT_UINT8,    0,                                          "UID Format", DT_DESCRIBES_OPTIONAL},
> +    {ACPI_DMT_UINT8,    1,                                          "UID Length", DT_DESCRIBES_OPTIONAL},
> +    {ACPI_DMT_UINT64, 2,                                            "UID", DT_OPTIONAL},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsHidString[] =
>  {
> -    {ACPI_DMT_RAW_BUFFER, 0,                                        "UID", DT_OPTIONAL},
> +    {ACPI_DMT_NAME8,        0,                                      "ACPI HID", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsHidInteger[] =
> +{
> +    {ACPI_DMT_UINT64,       0,                                      "ACPI HID", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsCidString[] =
> +{
> +    {ACPI_DMT_NAME8,        0,                                      "ACPI CID", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsCidInteger[] =
> +{
> +    {ACPI_DMT_UINT64,       0,                                      "ACPI CID", 0},
>      ACPI_DMT_TERMINATOR
>  };
>  
> @@ -1537,6 +1594,52 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoPptt2[] =
>  };
>  
>  
> +/*******************************************************************************
> + *
> + * PRMT - Platform Runtime Mechanism Table
> + *        Version 1
> + *
> + ******************************************************************************/
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoPrmtHdr[] =
> +{
> +    {ACPI_DMT_UUID,     ACPI_PRMTH_OFFSET (PlatformGuid[0]),       "Platform GUID", 0},
> +    {ACPI_DMT_UINT32,   ACPI_PRMTH_OFFSET (ModuleInfoOffset),      "Module info offset", 0},
> +    {ACPI_DMT_UINT32,   ACPI_PRMTH_OFFSET (ModuleInfoCount),       "Module info count", 0},
> +    ACPI_DMT_NEW_LINE,
> +    ACPI_DMT_TERMINATOR
> +
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoPrmtModule[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_PRMT0_OFFSET (Revision),               "Revision", 0},
> +    {ACPI_DMT_UINT16,   ACPI_PRMT0_OFFSET (Length),                 "Length", 0},
> +    {ACPI_DMT_UUID,     ACPI_PRMT0_OFFSET (ModuleGuid[0]),          "Module GUID", 0},
> +    {ACPI_DMT_UINT16,   ACPI_PRMT0_OFFSET (MajorRev),               "Major Revision", 0},
> +    {ACPI_DMT_UINT16,   ACPI_PRMT0_OFFSET (MinorRev),               "Minor Revision", 0},
> +    {ACPI_DMT_UINT16,   ACPI_PRMT0_OFFSET (HandlerInfoCount),       "Handler Info Count", 0},
> +    {ACPI_DMT_UINT32,   ACPI_PRMT0_OFFSET (HandlerInfoOffset),      "Handler Info Offset", 0},
> +    {ACPI_DMT_UINT64,   ACPI_PRMT0_OFFSET (MmioListPointer),        "Mmio List pointer", 0},
> +    ACPI_DMT_NEW_LINE,
> +    ACPI_DMT_TERMINATOR
> +
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoPrmtHandler[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_PRMT1_OFFSET (Revision),               "Revision", 0},
> +    {ACPI_DMT_UINT16,   ACPI_PRMT1_OFFSET (Length),                 "Length", 0},
> +    {ACPI_DMT_UUID,     ACPI_PRMT1_OFFSET (HandlerGuid[0]),         "Handler GUID", 0},
> +    {ACPI_DMT_UINT64,   ACPI_PRMT1_OFFSET (HandlerAddress),         "Handler address", 0},
> +    {ACPI_DMT_UINT64,   ACPI_PRMT1_OFFSET (StaticDataBufferAddress),"Satic Data Address", 0},
> +    {ACPI_DMT_UINT64,   ACPI_PRMT1_OFFSET (AcpiParamBufferAddress), "ACPI Parameter Address", 0},
> +    ACPI_DMT_NEW_LINE,
> +    ACPI_DMT_TERMINATOR
> +
> +};
> +
> +
>  /*******************************************************************************
>   *
>   * RASF -  RAS Feature table
> @@ -1550,6 +1653,31 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoRasf[] =
>  };
>  
>  
> +/*******************************************************************************
> + *
> + * RGRT -  Regulatory Graphics Resource Table
> + *
> + ******************************************************************************/
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoRgrt[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_RGRT_OFFSET (Version),                 "Version", 0},
> +    {ACPI_DMT_RGRT,     ACPI_RGRT_OFFSET (ImageType),               "Image Type", 0},
> +    {ACPI_DMT_UINT8,    ACPI_RGRT_OFFSET (Reserved),                "Reserved", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/*
> + * We treat the binary image field as its own subtable (to make
> + * ACPI_DMT_RAW_BUFFER work properly).
> + */
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoRgrt0[] =
> +{
> +    {ACPI_DMT_RAW_BUFFER, 0,                                        "Image", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +
>  /*******************************************************************************
>   *
>   * S3PT - S3 Performance Table
> @@ -1734,4 +1862,5 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoSdev1b[] =
>      {ACPI_DMT_RAW_BUFFER, 0,                                        "Vendor Data", 0}, /*, DT_OPTIONAL}, */
>      ACPI_DMT_TERMINATOR
>  };
> +
>  /*! [End] no source code translation !*/
> diff --git a/src/acpica/source/common/dmtbinfo3.c b/src/acpica/source/common/dmtbinfo3.c
> index 773ba16e..b0435019 100644
> --- a/src/acpica/source/common/dmtbinfo3.c
> +++ b/src/acpica/source/common/dmtbinfo3.c
> @@ -403,6 +403,30 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoStaoStr[] =
>  };
>  
>  
> +/*******************************************************************************
> + *
> + * SVKL - Storage Volume Key Location table
> + *
> + ******************************************************************************/
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoSvkl[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_SVKL_OFFSET (Count),                   "Key Count", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* SVKL subtables */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoSvkl0[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_SVKL0_OFFSET (Type),                   "Key Type", 0},
> +    {ACPI_DMT_UINT16,   ACPI_SVKL0_OFFSET (Format),                 "Key Format", 0},
> +    {ACPI_DMT_UINT32,   ACPI_SVKL0_OFFSET (Size),                   "Key Size", 0},
> +    {ACPI_DMT_UINT64,   ACPI_SVKL0_OFFSET (Address),                "Key Address", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +
>  /*******************************************************************************
>   *
>   * TCPA - Trusted Computing Platform Alliance table (Client)
> diff --git a/src/acpica/source/compiler/aslcompiler.h b/src/acpica/source/compiler/aslcompiler.h
> index e48e4674..5112ea49 100644
> --- a/src/acpica/source/compiler/aslcompiler.h
> +++ b/src/acpica/source/compiler/aslcompiler.h
> @@ -1224,6 +1224,10 @@ DbgPrint (
>  #define ASL_PARSE_OUTPUT    1
>  #define ASL_TREE_OUTPUT     2
>  
> +BOOLEAN
> +UtIsIdInteger (
> +    UINT8                   *Target);
> +
>  UINT8
>  UtIsBigEndianMachine (
>      void);
> diff --git a/src/acpica/source/compiler/aslmessages.c b/src/acpica/source/compiler/aslmessages.c
> index c9697645..4dd6422b 100644
> --- a/src/acpica/source/compiler/aslmessages.c
> +++ b/src/acpica/source/compiler/aslmessages.c
> @@ -400,14 +400,16 @@ const char                      *AslTableCompilerMsgs [] =
>  /*    ASL_MSG_INVALID_FIELD_NAME */         "Invalid Field Name",
>  /*    ASL_MSG_INVALID_HEX_INTEGER */        "Invalid hex integer constant",
>  /*    ASL_MSG_OEM_TABLE */                  "OEM table - unknown contents",
> -/*    ASL_MSG_RESERVED_VALUE */             "Reserved field",
> +/*    ASL_MSG_RESERVED_FIELD */             "Reserved field",
>  /*    ASL_MSG_UNKNOWN_LABEL */              "Label is undefined",
>  /*    ASL_MSG_UNKNOWN_SUBTABLE */           "Unknown subtable type",
>  /*    ASL_MSG_UNKNOWN_TABLE */              "Unknown ACPI table signature",
>  /*    ASL_MSG_ZERO_VALUE */                 "Value must be non-zero",
>  /*    ASL_MSG_INVALID_LABEL */              "Invalid field label detected",
>  /*    ASL_MSG_BUFFER_LIST */                "Invalid buffer initializer list",
> -/*    ASL_MSG_ENTRY_LIST */                 "Invalid entry initializer list"
> +/*    ASL_MSG_ENTRY_LIST */                 "Invalid entry initializer list",
> +/*    ASL_MSG_UNKNOWN_FORMAT */             "Unknown format value",
> +/*    ASL_MSG_RESERVED_VALUE */             "Value for field is reserved or unknown",
>  };
>  
>  /* Preprocessor */
> diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h
> index 1d9f7bec..69c2561b 100644
> --- a/src/acpica/source/compiler/aslmessages.h
> +++ b/src/acpica/source/compiler/aslmessages.h
> @@ -402,7 +402,7 @@ typedef enum
>      ASL_MSG_INVALID_FIELD_NAME,
>      ASL_MSG_INVALID_HEX_INTEGER,
>      ASL_MSG_OEM_TABLE,
> -    ASL_MSG_RESERVED_VALUE,
> +    ASL_MSG_RESERVED_FIELD,
>      ASL_MSG_UNKNOWN_LABEL,
>      ASL_MSG_UNKNOWN_SUBTABLE,
>      ASL_MSG_UNKNOWN_TABLE,
> @@ -410,6 +410,8 @@ typedef enum
>      ASL_MSG_INVALID_LABEL,
>      ASL_MSG_BUFFER_LIST,
>      ASL_MSG_ENTRY_LIST,
> +    ASL_MSG_UNKNOWN_FORMAT,
> +    ASL_MSG_RESERVED_VALUE,
>  
>      /* These messages are used by the Preprocessor only */
>  
> diff --git a/src/acpica/source/compiler/aslutils.c b/src/acpica/source/compiler/aslutils.c
> index 5dee45d9..44631957 100644
> --- a/src/acpica/source/compiler/aslutils.c
> +++ b/src/acpica/source/compiler/aslutils.c
> @@ -206,6 +206,46 @@ UtIsBigEndianMachine (
>  }
>  
>  
> +/*******************************************************************************
> + *
> + * FUNCTION:    UtIsIdInteger
> + *
> + * PARAMETERS:  Pointer to an ACPI ID (HID, CID) string
> + *
> + * RETURN:      TRUE if string is an integer
> + *              FALSE if string is not an integer
> + *
> + * DESCRIPTION: Determine whether the input ACPI ID string can be converted to
> + *              an integer value.
> + *
> + ******************************************************************************/
> +
> +BOOLEAN
> +UtIsIdInteger (
> +    UINT8                   *Target)
> +{
> +    UINT32                  i;
> +
> +
> +    /* The first three characters of the string must be alphabetic */
> +
> +    for (i = 0; i < 3; i++)
> +    {
> +        if (!isalpha ((int) Target[i]))
> +        {
> +            break;
> +        }
> +    }
> +
> +    if (i < 3)
> +    {
> +        return (TRUE);
> +    }
> +
> +    return (FALSE);
> +}
> +
> +
>  /******************************************************************************
>   *
>   * FUNCTION:    UtQueryForOverwrite
> diff --git a/src/acpica/source/compiler/asluuid.c b/src/acpica/source/compiler/asluuid.c
> index c8dd4a46..30540acd 100644
> --- a/src/acpica/source/compiler/asluuid.c
> +++ b/src/acpica/source/compiler/asluuid.c
> @@ -212,50 +212,3 @@ AuValidateUuid (
>      return (AE_OK);
>  }
>  
> -
> -/*******************************************************************************
> - *
> - * FUNCTION:    AuConvertUuidToString
> - *
> - * PARAMETERS:  UuidBuffer          - 16-byte UUID buffer
> - *              OutString           - 36-byte formatted UUID string
> - *
> - * RETURN:      Status
> - *
> - * DESCRIPTION: Convert 16-byte UUID buffer to 36-byte formatted UUID string
> - *              OutString must be 37 bytes to include null terminator.
> - *
> - ******************************************************************************/
> -
> -ACPI_STATUS
> -AuConvertUuidToString (
> -    char                    *UuidBuffer,
> -    char                    *OutString)
> -{
> -    UINT32                  i;
> -
> -
> -    if (!UuidBuffer || !OutString)
> -    {
> -        return (AE_BAD_PARAMETER);
> -    }
> -
> -    for (i = 0; i < UUID_BUFFER_LENGTH; i++)
> -    {
> -        OutString[AcpiGbl_MapToUuidOffset[i]] =
> -            AcpiUtHexToAsciiChar (UuidBuffer[i], 4);
> -
> -        OutString[AcpiGbl_MapToUuidOffset[i] + 1] =
> -            AcpiUtHexToAsciiChar (UuidBuffer[i], 0);
> -    }
> -
> -    /* Insert required hyphens (dashes) */
> -
> -    OutString[UUID_HYPHEN1_OFFSET] =
> -    OutString[UUID_HYPHEN2_OFFSET] =
> -    OutString[UUID_HYPHEN3_OFFSET] =
> -    OutString[UUID_HYPHEN4_OFFSET] = '-';
> -
> -    OutString[UUID_STRING_LENGTH] = 0; /* Null terminate */
> -    return (AE_OK);
> -}
> diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h
> index f2d00644..4f966808 100644
> --- a/src/acpica/source/compiler/dtcompiler.h
> +++ b/src/acpica/source/compiler/dtcompiler.h
> @@ -673,6 +673,14 @@ ACPI_STATUS
>  DtCompilePptt (
>      void                    **PFieldList);
>  
> +ACPI_STATUS
> +DtCompilePrmt (
> +    void                    **PFieldList);
> +
> +ACPI_STATUS
> +DtCompileRgrt (
> +    void                    **PFieldList);
> +
>  ACPI_STATUS
>  DtCompileRsdt (
>      void                    **PFieldList);
> @@ -701,6 +709,10 @@ ACPI_STATUS
>  DtCompileStao (
>      void                    **PFieldList);
>  
> +ACPI_STATUS
> +DtCompileSvkl (
> +    void                    **PFieldList);
> +
>  ACPI_STATUS
>  DtCompileTcpa (
>      void                    **PFieldList);
> @@ -743,6 +755,7 @@ DtGetGenericTableInfo (
>  
>  extern const unsigned char  TemplateAsf[];
>  extern const unsigned char  TemplateBoot[];
> +extern const unsigned char  TemplateBdat[];
>  extern const unsigned char  TemplateBert[];
>  extern const unsigned char  TemplateBgrt[];
>  extern const unsigned char  TemplateCedt[];
> @@ -776,7 +789,9 @@ extern const unsigned char  TemplatePdtt[];
>  extern const unsigned char  TemplatePhat[];
>  extern const unsigned char  TemplatePmtt[];
>  extern const unsigned char  TemplatePptt[];
> +extern const unsigned char  TemplatePrmt[];
>  extern const unsigned char  TemplateRasf[];
> +extern const unsigned char  TemplateRgrt[];
>  extern const unsigned char  TemplateRsdt[];
>  extern const unsigned char  TemplateS3pt[];
>  extern const unsigned char  TemplateSbst[];
> @@ -788,6 +803,7 @@ extern const unsigned char  TemplateSpcr[];
>  extern const unsigned char  TemplateSpmi[];
>  extern const unsigned char  TemplateSrat[];
>  extern const unsigned char  TemplateStao[];
> +extern const unsigned char  TemplateSvkl[];
>  extern const unsigned char  TemplateTcpa[];
>  extern const unsigned char  TemplateTpm2[];
>  extern const unsigned char  TemplateUefi[];
> diff --git a/src/acpica/source/compiler/dtfield.c b/src/acpica/source/compiler/dtfield.c
> index ee7788e3..729791d7 100644
> --- a/src/acpica/source/compiler/dtfield.c
> +++ b/src/acpica/source/compiler/dtfield.c
> @@ -434,14 +434,14 @@ DtCompileInteger (
>          {
>              if (Value != 1)
>              {
> -                DtError (ASL_WARNING, ASL_MSG_RESERVED_VALUE, Field,
> +                DtError (ASL_WARNING, ASL_MSG_RESERVED_FIELD, Field,
>                      "Must be one, setting to one");
>                  Value = 1;
>              }
>          }
>          else if (Value != 0)
>          {
> -            DtError (ASL_WARNING, ASL_MSG_RESERVED_VALUE, Field,
> +            DtError (ASL_WARNING, ASL_MSG_RESERVED_FIELD, Field,
>                  "Must be zero, setting to zero");
>              Value = 0;
>          }
> diff --git a/src/acpica/source/compiler/dtio.c b/src/acpica/source/compiler/dtio.c
> index 781b2b8a..e1776f3f 100644
> --- a/src/acpica/source/compiler/dtio.c
> +++ b/src/acpica/source/compiler/dtio.c
> @@ -1086,9 +1086,9 @@ DtDumpSubtableTree (
>  {
>  
>      DbgPrint (ASL_DEBUG_OUTPUT,
> -        "[%.04X] %24s %*s%p (%.02X) - (%.02X)\n",
> +        "[%.04X] %24s %*s%p (%.02X) - (%.02X)        %.02X\n",
>          Subtable->Depth, Subtable->Name, (4 * Subtable->Depth), " ",
> -        Subtable, Subtable->Length, Subtable->TotalLength);
> +        Subtable, Subtable->Length, Subtable->TotalLength, *Subtable->Buffer);
>  }
>  
>  
> @@ -1123,7 +1123,7 @@ DtDumpSubtableList (
>      DtWalkTableTree (AslGbl_RootTable, DtDumpSubtableInfo, NULL, NULL);
>  
>      DbgPrint (ASL_DEBUG_OUTPUT,
> -        "\nSubtable Tree: (Depth, Name, Subtable, Length, TotalLength)\n\n");
> +        "\nSubtable Tree: (Depth, Name, Subtable, Length, TotalLength, Integer Value)\n\n");
>      DtWalkTableTree (AslGbl_RootTable, DtDumpSubtableTree, NULL, NULL);
>  
>      DbgPrint (ASL_DEBUG_OUTPUT, "\n");
> diff --git a/src/acpica/source/compiler/dttable1.c b/src/acpica/source/compiler/dttable1.c
> index 458a7174..bf710e31 100644
> --- a/src/acpica/source/compiler/dttable1.c
> +++ b/src/acpica/source/compiler/dttable1.c
> @@ -2058,7 +2058,18 @@ DtCompileIort (
>   *
>   * RETURN:      Status
>   *
> - * DESCRIPTION: Compile IVRS.
> + * DESCRIPTION: Compile IVRS. Notes:
> + *              The IVRS is essentially a flat table, with the following
> + *              structure:
> + *              <Main ACPI Table Header>
> + *              <Main subtable - virtualization info>
> + *              <IVHD>
> + *                  <Device Entries>
> + *              ...
> + *              <IVHD>
> + *                  <Device Entries>
> + *              <IVMD>
> + *              ...
>   *
>   *****************************************************************************/
>  
> @@ -2069,12 +2080,16 @@ DtCompileIvrs (
>      ACPI_STATUS             Status;
>      DT_SUBTABLE             *Subtable;
>      DT_SUBTABLE             *ParentTable;
> +    DT_SUBTABLE             *MainSubtable;
>      DT_FIELD                **PFieldList = (DT_FIELD **) List;
>      DT_FIELD                *SubtableStart;
> -    ACPI_DMTABLE_INFO       *InfoTable;
> -    ACPI_IVRS_HEADER        *IvrsHeader;
> -    UINT8                   EntryType;
> +    ACPI_DMTABLE_INFO       *InfoTable = NULL;
> +    UINT8                   SubtableType;
> +    UINT8                   Temp64[16];
> +    UINT8                   Temp8;
> +
>  
> +    /* Main table */
>  
>      Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrs,
>          &Subtable);
> @@ -2085,122 +2100,263 @@ DtCompileIvrs (
>  
>      ParentTable = DtPeekSubtable ();
>      DtInsertSubtable (ParentTable, Subtable);
> +    DtPushSubtable (Subtable);
> +
> +    /* Save a pointer to the main subtable */
> +
> +    MainSubtable = Subtable;
>  
>      while (*PFieldList)
>      {
>          SubtableStart = *PFieldList;
> -        Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsHdr,
> -            &Subtable);
> -        if (ACPI_FAILURE (Status))
> -        {
> -            return (Status);
> -        }
>  
> -        ParentTable = DtPeekSubtable ();
> -        DtInsertSubtable (ParentTable, Subtable);
> -        DtPushSubtable (Subtable);
> +        /* Compile the SubtableType integer */
>  
> -        IvrsHeader = ACPI_CAST_PTR (ACPI_IVRS_HEADER, Subtable->Buffer);
> +        DtCompileInteger (&SubtableType, *PFieldList, 1, 0);
>  
> -        switch (IvrsHeader->Type)
> +        switch (SubtableType)
>          {
> +
> +        /* Type 10h, IVHD (I/O Virtualization Hardware Definition) */
> +
>          case ACPI_IVRS_TYPE_HARDWARE1:
>  
> -            InfoTable = AcpiDmTableInfoIvrs0;
> +            InfoTable = AcpiDmTableInfoIvrsHware1;
>              break;
>  
> +        /* Types 11h, 40h, IVHD (I/O Virtualization Hardware Definition) */
> +
>          case ACPI_IVRS_TYPE_HARDWARE2:
> +        case ACPI_IVRS_TYPE_HARDWARE3:
>  
> -            InfoTable = AcpiDmTableInfoIvrs01;
> +            InfoTable = AcpiDmTableInfoIvrsHware23;
>              break;
>  
> +        /* Types 20h, 21h, 22h, IVMD (I/O Virtualization Memory Definition Block) */
> +
>          case ACPI_IVRS_TYPE_MEMORY1:
>          case ACPI_IVRS_TYPE_MEMORY2:
>          case ACPI_IVRS_TYPE_MEMORY3:
>  
> -            InfoTable = AcpiDmTableInfoIvrs1;
> +            InfoTable = AcpiDmTableInfoIvrsMemory;
> +            break;
> +
> +        /* 4-byte device entries */
> +
> +        case ACPI_IVRS_TYPE_PAD4:
> +        case ACPI_IVRS_TYPE_ALL:
> +        case ACPI_IVRS_TYPE_SELECT:
> +        case ACPI_IVRS_TYPE_START:
> +        case ACPI_IVRS_TYPE_END:
> +
> +            InfoTable = AcpiDmTableInfoIvrs4;
> +            break;
> +
> +        /* 8-byte device entries, type A */
> +
> +        case ACPI_IVRS_TYPE_ALIAS_SELECT:
> +        case ACPI_IVRS_TYPE_ALIAS_START:
> +
> +            InfoTable = AcpiDmTableInfoIvrs8a;
> +            break;
> +
> +        /* 8-byte device entries, type B */
> +
> +        case ACPI_IVRS_TYPE_EXT_SELECT:
> +        case ACPI_IVRS_TYPE_EXT_START:
> +
> +            InfoTable = AcpiDmTableInfoIvrs8b;
> +            break;
> +
> +        /* 8-byte device entries, type C */
> +
> +        case ACPI_IVRS_TYPE_SPECIAL:
> +
> +            InfoTable = AcpiDmTableInfoIvrs8c;
> +            break;
> +
> +        /* Variable device entries, type F0h */
> +
> +        case ACPI_IVRS_TYPE_HID:
> +
> +            InfoTable = AcpiDmTableInfoIvrsHid;
>              break;
>  
>          default:
>  
> -            DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "IVRS");
> +            DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart,
> +                "IVRS Device Entry");
>              return (AE_ERROR);
>          }
>  
> -        Status = DtCompileTable (PFieldList, InfoTable, &Subtable);
> +        /* Compile the InfoTable from above */
> +
> +        Status = DtCompileTable (PFieldList, InfoTable,
> +            &Subtable);
>          if (ACPI_FAILURE (Status))
>          {
>              return (Status);
>          }
>  
>          ParentTable = DtPeekSubtable ();
> -        DtInsertSubtable (ParentTable, Subtable);
> +        if (SubtableType != ACPI_IVRS_TYPE_HARDWARE1 &&
> +            SubtableType != ACPI_IVRS_TYPE_HARDWARE2 &&
> +            SubtableType != ACPI_IVRS_TYPE_HARDWARE3 &&
> +            SubtableType != ACPI_IVRS_TYPE_HID &&
> +            SubtableType != ACPI_IVRS_TYPE_MEMORY1 &&
> +            SubtableType != ACPI_IVRS_TYPE_MEMORY2 &&
> +            SubtableType != ACPI_IVRS_TYPE_MEMORY3)
> +        {
> +            if (ParentTable)
> +                DtInsertSubtable (ParentTable, Subtable);
> +        }
>  
> -        if (IvrsHeader->Type == ACPI_IVRS_TYPE_HARDWARE1 ||
> -            IvrsHeader->Type == ACPI_IVRS_TYPE_HARDWARE2)
> +        switch (SubtableType)
>          {
> -            while (*PFieldList &&
> -                !strcmp ((*PFieldList)->Name, "Entry Type"))
> +        case ACPI_IVRS_TYPE_HARDWARE1:
> +        case ACPI_IVRS_TYPE_HARDWARE2:
> +        case ACPI_IVRS_TYPE_HARDWARE3:
> +        case ACPI_IVRS_TYPE_MEMORY1:
> +        case ACPI_IVRS_TYPE_MEMORY2:
> +        case ACPI_IVRS_TYPE_MEMORY3:
> +
> +            /* Insert these IVHDs/IVMDs at the root subtable */
> +
> +            DtInsertSubtable (MainSubtable, Subtable);
> +            DtPushSubtable (Subtable);
> +            ParentTable = MainSubtable;
> +            break;
> +
> +        case ACPI_IVRS_TYPE_HID:
> +
> +            /* Special handling for the HID named device entry (0xF0) */
> +
> +            if (ParentTable)
> +            {
> +                DtInsertSubtable (ParentTable, Subtable);
> +            }
> +
> +            /*
> +             * Process the HID value. First, get the HID value as a string.
> +             */
> +            DtCompileOneField ((UINT8 *) &Temp64, *PFieldList, 16, DT_FIELD_TYPE_STRING, 0);
> +
> +               /*
> +                * Determine if the HID is an integer or a string.
> +                * An integer is defined to be 32 bits, with the upper 32 bits
> +                * set to zero. (from the ACPI Spec): "The HID can be a 32-bit
> +                * integer or a character string. If an integer, the lower
> +                * 4 bytes of the field contain the integer and the upper
> +                * 4 bytes are padded with 0".
> +                */
> +            if (UtIsIdInteger ((UINT8 *) &Temp64))
>              {
> -                SubtableStart = *PFieldList;
> -                DtCompileInteger (&EntryType, *PFieldList, 1, 0);
> +                /* Compile the HID value as an integer */
>  
> -                switch (EntryType)
> +                DtCompileOneField ((UINT8 *) &Temp64, *PFieldList, 8, DT_FIELD_TYPE_INTEGER, 0);
> +
> +                Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsHidInteger,
> +                    &Subtable);
> +                if (ACPI_FAILURE (Status))
>                  {
> -                /* 4-byte device entries */
> +                    return (Status);
> +                }
> +            }
> +            else
> +            {
> +                /* Compile the HID value as a string */
>  
> -                case ACPI_IVRS_TYPE_PAD4:
> -                case ACPI_IVRS_TYPE_ALL:
> -                case ACPI_IVRS_TYPE_SELECT:
> -                case ACPI_IVRS_TYPE_START:
> -                case ACPI_IVRS_TYPE_END:
> +                Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsHidString,
> +                    &Subtable);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return (Status);
> +                }
> +            }
>  
> -                    InfoTable = AcpiDmTableInfoIvrs4;
> -                    break;
> +            DtInsertSubtable (ParentTable, Subtable);
>  
> -                /* 8-byte entries, type A */
> +            /*
> +             * Process the CID value. First, get the CID value as a string.
> +             */
> +            DtCompileOneField ((UINT8 *) &Temp64, *PFieldList, 16, DT_FIELD_TYPE_STRING, 0);
>  
> -                case ACPI_IVRS_TYPE_ALIAS_SELECT:
> -                case ACPI_IVRS_TYPE_ALIAS_START:
> +            if (UtIsIdInteger ((UINT8 *) &Temp64))
> +            {
> +                /* Compile the CID value as an integer */
>  
> -                    InfoTable = AcpiDmTableInfoIvrs8a;
> -                    break;
> +                DtCompileOneField ((UINT8 *) &Temp64, *PFieldList, 8, DT_FIELD_TYPE_INTEGER, 0);
>  
> -                /* 8-byte entries, type B */
> +                Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsCidInteger,
> +                    &Subtable);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return (Status);
> +                }
> +            }
> +            else
> +            {
> +                /* Compile the CID value as a string */
>  
> -                case ACPI_IVRS_TYPE_PAD8:
> -                case ACPI_IVRS_TYPE_EXT_SELECT:
> -                case ACPI_IVRS_TYPE_EXT_START:
> +                Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsCidString,
> +                    &Subtable);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return (Status);
> +                }
> +            }
>  
> -                    InfoTable = AcpiDmTableInfoIvrs8b;
> -                    break;
> +            DtInsertSubtable (ParentTable, Subtable);
>  
> -                /* 8-byte entries, type C */
> +            /*
> +             * Process the UID value. First, get and decode the "UID Format" field (Integer).
> +             */
> +            if (!*PFieldList)
> +            {
> +                return (AE_OK);
> +            }
>  
> -                case ACPI_IVRS_TYPE_SPECIAL:
> +            DtCompileOneField (&Temp8, *PFieldList, 1, DT_FIELD_TYPE_INTEGER, 0);
>  
> -                    InfoTable = AcpiDmTableInfoIvrs8c;
> -                    break;
> +            switch (Temp8)
> +            {
> +            case ACPI_IVRS_UID_NOT_PRESENT:
> +                break;
>  
> -                default:
> +            case ACPI_IVRS_UID_IS_INTEGER:
>  
> -                    DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart,
> -                        "IVRS Device Entry");
> -                    return (AE_ERROR);
> +                Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsUidInteger,
> +                    &Subtable);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return (Status);
>                  }
> +                DtInsertSubtable (ParentTable, Subtable);
> +                break;
>  
> -                Status = DtCompileTable (PFieldList, InfoTable,
> +            case ACPI_IVRS_UID_IS_STRING:
> +
> +                Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsUidString,
>                      &Subtable);
>                  if (ACPI_FAILURE (Status))
>                  {
>                      return (Status);
>                  }
> -
>                  DtInsertSubtable (ParentTable, Subtable);
> +                break;
> +
> +            default:
> +
> +                DtFatal (ASL_MSG_UNKNOWN_FORMAT, SubtableStart,
> +                    "IVRS Device Entry");
> +                return (AE_ERROR);
>              }
> -        }
>  
> -        DtPopSubtable ();
> +        default:
> +
> +            /* All other subtable types come through here */
> +            break;
> +        }
>      }
>  
>      return (AE_OK);
> diff --git a/src/acpica/source/compiler/dttable2.c b/src/acpica/source/compiler/dttable2.c
> index f6efcf3d..3a0d8a22 100644
> --- a/src/acpica/source/compiler/dttable2.c
> +++ b/src/acpica/source/compiler/dttable2.c
> @@ -1335,6 +1335,118 @@ DtCompilePptt (
>  }
>  
>  
> +/******************************************************************************
> + *
> + * FUNCTION:    DtCompilePrmt
> + *
> + * PARAMETERS:  List                - Current field list pointer
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Compile PRMT.
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +DtCompilePrmt (
> +    void                    **List)
> +{
> +    ACPI_STATUS             Status;
> +    ACPI_TABLE_PRMT_HEADER  *PrmtHeader;
> +    ACPI_PRMT_MODULE_INFO   *PrmtModuleInfo;
> +    DT_SUBTABLE             *Subtable;
> +    DT_SUBTABLE             *ParentTable;
> +    DT_FIELD                **PFieldList = (DT_FIELD **) List;
> +    UINT32                  i, j;
> +
> +    ParentTable = DtPeekSubtable ();
> +
> +    /* Compile PRMT subtable header */
> +
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoPrmtHdr,
> +        &Subtable);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +    DtInsertSubtable (ParentTable, Subtable);
> +    PrmtHeader = ACPI_CAST_PTR (ACPI_TABLE_PRMT_HEADER, Subtable->Buffer);
> +
> +    for (i = 0; i < PrmtHeader->ModuleInfoCount; i++)
> +    {
> +        Status = DtCompileTable (PFieldList, AcpiDmTableInfoPrmtModule,
> +            &Subtable);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +        DtInsertSubtable (ParentTable, Subtable);
> +        PrmtModuleInfo = ACPI_CAST_PTR (ACPI_PRMT_MODULE_INFO, Subtable->Buffer);
> +
> +        for (j = 0; j < PrmtModuleInfo->HandlerInfoCount; j++)
> +        {
> +            Status = DtCompileTable (PFieldList, AcpiDmTableInfoPrmtHandler,
> +                &Subtable);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return (Status);
> +            }
> +            DtInsertSubtable (ParentTable, Subtable);
> +        }
> +    }
> +
> +    return (AE_OK);
> +}
> +
> +
> +/******************************************************************************
> + *
> + * FUNCTION:    DtCompileRgrt
> + *
> + * PARAMETERS:  List                - Current field list pointer
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Compile RGRT.
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +DtCompileRgrt (
> +    void                    **List)
> +{
> +    ACPI_STATUS             Status;
> +    DT_SUBTABLE             *Subtable;
> +    DT_SUBTABLE             *ParentTable;
> +    DT_FIELD                **PFieldList = (DT_FIELD **) List;
> +
> +
> +    /* Compile the main table */
> +
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoRgrt,
> +        &Subtable);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +
> +    ParentTable = DtPeekSubtable ();
> +    DtInsertSubtable (ParentTable, Subtable);
> +
> +    /* Compile the "Subtable" -- actually just the binary (PNG) image */
> +
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoRgrt0,
> +        &Subtable);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +
> +    DtInsertSubtable (ParentTable, Subtable);
> +    return (AE_OK);
> +}
> +
> +
>  /******************************************************************************
>   *
>   * FUNCTION:    DtCompileRsdt
> @@ -2024,6 +2136,63 @@ DtCompileStao (
>  }
>  
>  
> +
> +/******************************************************************************
> + *
> + * FUNCTION:    DtCompileSvkl
> + *
> + * PARAMETERS:  PFieldList          - Current field list pointer
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Compile SVKL.
> + *
> + * NOTES: SVKL is essentially a flat table, with a small main table and
> + *          a variable number of a single type of subtable.
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +DtCompileSvkl (
> +    void                    **List)
> +{
> +    DT_FIELD                **PFieldList = (DT_FIELD **) List;
> +    DT_SUBTABLE             *Subtable;
> +    DT_SUBTABLE             *ParentTable;
> +    ACPI_STATUS             Status;
> +
> +
> +    /* Compile the main table */
> +
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoSvkl,
> +        &Subtable);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return (Status);
> +    }
> +
> +    ParentTable = DtPeekSubtable ();
> +    DtInsertSubtable (ParentTable, Subtable);
> +
> +    /* Compile each subtable */
> +
> +    while (*PFieldList)
> +    {
> +        Status = DtCompileTable (PFieldList, AcpiDmTableInfoSvkl0,
> +            &Subtable);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        ParentTable = DtPeekSubtable ();
> +        DtInsertSubtable (ParentTable, Subtable);
> +    }
> +
> +    return (AE_OK);
> +}
> +
> +
>  /******************************************************************************
>   *
>   * FUNCTION:    DtCompileTcpa
> diff --git a/src/acpica/source/compiler/dttemplate.h b/src/acpica/source/compiler/dttemplate.h
> index fbe68ec9..224a6a11 100644
> --- a/src/acpica/source/compiler/dttemplate.h
> +++ b/src/acpica/source/compiler/dttemplate.h
> @@ -174,6 +174,16 @@ const unsigned char TemplateAsf[] =
>      0x01,0x00                                 /* 00000070    ".."       */
>  };
>  
> +const unsigned char TemplateBdat[] =
> +{
> +    0x42,0x44,0x41,0x54,0x30,0x00,0x00,0x00,  /* 00000000    "BDAT0..." */
> +    0x01,0xED,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
> +    0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65,  /* 00000010    "Template" */
> +    0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> +    0x31,0x03,0x21,0x20,0x01,0x08,0x00,0x01,  /* 00000020    "1.! ...." */
> +    0xF0,0xDE,0xBC,0x9A,0x78,0x56,0x34,0x12   /* 00000028    "....xV4." */
> +};
> +
>  const unsigned char TemplateBgrt[] =
>  {
>      0x42,0x47,0x52,0x54,0x38,0x00,0x00,0x00,  /* 00000000    "BGRT8..." */
> @@ -794,30 +804,72 @@ const unsigned char TemplateIort[] =
>  
>  const unsigned char TemplateIvrs[] =
>  {
> -    0x49,0x56,0x52,0x53,0xBC,0x00,0x00,0x00,  /* 00000000    "IVRS...." */
> -    0x01,0x87,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
> +    0x49,0x56,0x52,0x53,0x10,0x02,0x00,0x00,  /* 00000000    "IVRS...." */
> +    0x02,0x6C,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    ".lINTEL " */
>      0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45,  /* 00000010    "TEMPLATE" */
>      0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> -    0x28,0x05,0x10,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "(.. ...." */
> +    0x31,0x03,0x21,0x20,0x41,0x30,0x20,0x00,  /* 00000020    "1.! A0 ." */
>      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000028    "........" */
> -    0x10,0x14,0x34,0x00,0x00,0x00,0x00,0x00,  /* 00000030    "..4....." */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000038    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000040    "........" */
> -    0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,  /* 00000048    "....@..." */
> -    0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,  /* 00000050    "....B..." */
> -    0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,  /* 00000058    "....H..." */
> -    0x00,0x00,0x00,0x00,0x20,0x08,0x20,0x00,  /* 00000060    ".... . ." */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000068    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000070    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000078    "........" */
> -    0x00,0x00,0x00,0x00,0x21,0x04,0x20,0x00,  /* 00000080    "....!. ." */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000088    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000090    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000098    "........" */
> -    0x00,0x00,0x00,0x00,0x10,0x14,0x18,0x00,  /* 000000A0    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000A8    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000B0    "........" */
> -    0x00,0x00,0x00,0x00                       /* 000000B8    "...."     */
> +    0x10,0xB0,0x64,0x00,0x02,0x00,0x40,0x00,  /* 00000030    "..d...@." */
> +    0x00,0x00,0xF0,0xFD,0x00,0x00,0x00,0x00,  /* 00000038    "........" */
> +    0x00,0x00,0x00,0x00,0x6F,0x8F,0x04,0x80,  /* 00000040    "....o..." */
> +    0x03,0x08,0x00,0x00,0x01,0x08,0x00,0x00,  /* 00000048    "........" */
> +    0x02,0x08,0x00,0x00,0x04,0xFE,0xFF,0x00,  /* 00000050    "........" */
> +    0x42,0x00,0xFF,0x00,0x00,0xA5,0x00,0x00,  /* 00000058    "B......." */
> +    0x43,0x00,0xFF,0x00,0x00,0xA5,0x00,0x00,  /* 00000060    "C......." */
> +    0x46,0x00,0xFF,0x00,0x44,0x33,0x22,0x11,  /* 00000068    "F...D3"." */
> +    0x47,0x00,0xFF,0x00,0x44,0x33,0x22,0x11,  /* 00000070    "G...D3"." */
> +    0x04,0xFF,0xFF,0x00,0x48,0x00,0x00,0x00,  /* 00000078    "....H..." */
> +    0x00,0xA0,0x00,0x02,0x48,0x00,0x00,0xD7,  /* 00000080    "....H..." */
> +    0x21,0xA0,0x00,0x01,0x48,0x00,0x00,0x00,  /* 00000088    "!...H..." */
> +    0x22,0x01,0x00,0x01,0x11,0xB0,0x48,0x00,  /* 00000090    "".....H." */
> +    0x02,0x00,0x40,0x00,0x00,0x00,0xF0,0xFD,  /* 00000098    "..@....." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000A0    "........" */
> +    0x00,0x02,0x04,0x00,0xDE,0x4A,0x25,0x22,  /* 000000A8    ".....J%"" */
> +    0xEF,0x73,0x6D,0x20,0x00,0x00,0x00,0x00,  /* 000000B0    ".sm ...." */
> +    0x00,0x00,0x00,0x00,0x03,0x08,0x00,0x00,  /* 000000B8    "........" */
> +    0x04,0xFE,0xFF,0x00,0x43,0x00,0xFF,0x00,  /* 000000C0    "....C..." */
> +    0x00,0xA5,0x00,0x00,0x04,0xFF,0xFF,0x00,  /* 000000C8    "........" */
> +    0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,  /* 000000D0    "....H..." */
> +    0x00,0xA0,0x00,0x02,0x40,0xB0,0xD4,0x00,  /* 000000D8    "....@..." */
> +    0x02,0x00,0x40,0x00,0x00,0x00,0xF0,0xFD,  /* 000000E0    "..@....." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000E8    "........" */
> +    0x00,0x02,0x04,0x00,0xDE,0x4A,0x25,0x22,  /* 000000F0    ".....J%"" */
> +    0xEF,0x73,0x6D,0x20,0x00,0x00,0x00,0x00,  /* 000000F8    ".sm ...." */
> +    0x00,0x00,0x00,0x00,0x03,0x08,0x00,0x00,  /* 00000100    "........" */
> +    0x04,0xFE,0xFF,0x00,0x43,0x00,0xFF,0x00,  /* 00000108    "....C..." */
> +    0x00,0xA5,0x00,0x00,0x04,0xFF,0xFF,0x00,  /* 00000110    "........" */
> +    0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,  /* 00000118    "....H..." */
> +    0x00,0xA0,0x00,0x02,0x48,0x00,0x00,0xD7,  /* 00000120    "....H..." */
> +    0x21,0xA0,0x00,0x01,0x48,0x00,0x00,0x00,  /* 00000128    "!...H..." */
> +    0x22,0x01,0x00,0x01,0xF0,0xA5,0x00,0x40,  /* 00000130    ""......@" */
> +    0x49,0x4E,0x54,0x43,0x30,0x30,0x32,0x30,  /* 00000138    "INTC0020" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000140    "........" */
> +    0x02,0x09,0x5C,0x5F,0x53,0x42,0x2E,0x44,  /* 00000148    "..\_SB.D" */
> +    0x45,0x56,0x30,0xF0,0xA5,0x00,0x40,0x49,  /* 00000150    "EV0...@I" */
> +    0x4E,0x54,0x43,0x30,0x30,0x32,0x30,0x00,  /* 00000158    "NTC0020." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,  /* 00000160    "........" */
> +    0x09,0x5C,0x5F,0x53,0x42,0x2E,0x44,0x45,  /* 00000168    ".\_SB.DE" */
> +    0x56,0x31,0xF0,0xA5,0x00,0x40,0x49,0x4E,  /* 00000170    "V1...@IN" */
> +    0x54,0x43,0x30,0x30,0x32,0x30,0x00,0x00,  /* 00000178    "TC0020.." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x09,  /* 00000180    "........" */
> +    0x5C,0x5F,0x53,0x42,0x2E,0x44,0x45,0x56,  /* 00000188    "\_SB.DEV" */
> +    0x32,0xF0,0xA5,0x00,0x40,0x49,0x4E,0x54,  /* 00000190    "2...@INT" */
> +    0x43,0x30,0x30,0x32,0x30,0x00,0x00,0x00,  /* 00000198    "C0020..." */
> +    0x00,0x00,0x00,0x00,0x00,0x02,0x09,0x5C,  /* 000001A0    ".......\" */
> +    0x5F,0x53,0x42,0x2E,0x44,0x45,0x56,0x33,  /* 000001A8    "_SB.DEV3" */
> +    0x20,0x0D,0x20,0x00,0x22,0x11,0x00,0x00,  /* 000001B0    " . ."..." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001B8    "........" */
> +    0xCD,0xAB,0x78,0x56,0x34,0x12,0x00,0x00,  /* 000001C0    "..xV4..." */
> +    0xDC,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001C8    "........" */
> +    0x21,0x0D,0x20,0x00,0x22,0x11,0x00,0x00,  /* 000001D0    "!. ."..." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001D8    "........" */
> +    0xCD,0xAB,0x78,0x56,0x34,0x12,0x00,0x00,  /* 000001E0    "..xV4..." */
> +    0xDC,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001E8    "........" */
> +    0x22,0x0D,0x20,0x00,0x22,0x11,0x00,0x00,  /* 000001F0    "". ."..." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001F8    "........" */
> +    0xCD,0xAB,0x78,0x56,0x34,0x12,0x00,0x00,  /* 00000200    "..xV4..." */
> +    0xDC,0xFE,0x00,0x00,0x00,0x00,0x00,0x00   /* 00000208    "........" */
>  };
>  
>  const unsigned char TemplateLpit[] =
> @@ -1205,6 +1257,97 @@ const unsigned char TemplatePptt[] =
>      0x00,0x00                                 /* 00000070    ".."       */
>  };
>  
> +const unsigned char TemplatePrmt[] =
> +{
> +    0x50,0x52,0x4D,0x54,0xB8,0x02,0x00,0x00,  /* 00000000    "PRMT...." */
> +    0x00,0x13,0x4F,0x45,0x4D,0x43,0x41,0x20,  /* 00000008    "..OEMCA " */
> +    0x4F,0x45,0x4D,0x43,0x41,0x20,0x20,0x20,  /* 00000010    "OEMCA   " */
> +    0x02,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> +    0x17,0x07,0x20,0x20,0xA5,0x61,0x6B,0xB6,  /* 00000020    "..  .ak." */
> +    0x01,0xA1,0x46,0xED,0xA6,0xA3,0xCA,0xC1,  /* 00000028    "..F....." */
> +    0xC4,0xD1,0x30,0x1E,0x3C,0x00,0x00,0x00,  /* 00000030    "..0.<..." */
> +    0x04,0x00,0x00,0x00,0x00,0x00,0xAA,0x00,  /* 00000038    "........" */
> +    0xC2,0xB3,0x52,0x16,0xA1,0xA7,0xAC,0x46,  /* 00000040    "..R....F" */
> +    0xAF,0x93,0xDD,0x6D,0xEE,0x44,0x66,0x69,  /* 00000048    "...m.Dfi" */
> +    0x01,0x00,0x00,0x00,0x03,0x00,0x26,0x00,  /* 00000050    "......&." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000058    "........" */
> +    0x00,0x00,0x00,0x00,0x2C,0x00,0x5F,0xAD,  /* 00000060    "....,._." */
> +    0xF2,0xD5,0x47,0xA3,0x3E,0x4D,0x87,0xBC,  /* 00000068    "..G.>M.." */
> +    0xC2,0xCE,0x63,0x02,0x9C,0xC8,0x90,0xC2,  /* 00000070    "..c....." */
> +    0x5E,0x8A,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000078    "^......." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000080    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000088    "........" */
> +    0x2C,0x00,0xC3,0xAD,0xE7,0xA9,0xD0,0x8C,  /* 00000090    ",......." */
> +    0x9A,0x42,0x89,0x15,0x10,0x94,0x6E,0xBD,  /* 00000098    ".B....n." */
> +    0xE3,0x18,0xC0,0xC2,0x5E,0x8A,0x00,0x00,  /* 000000A0    "....^..." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000A8    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000B0    "........" */
> +    0x00,0x00,0x00,0x00,0x2C,0x00,0x14,0xC2,  /* 000000B8    "....,..." */
> +    0x88,0xB6,0x81,0x40,0xEB,0x4E,0x8D,0x26,  /* 000000C0    "...@.N.&" */
> +    0x1E,0xB5,0xA3,0xBC,0xF1,0x1A,0xF0,0xC2,  /* 000000C8    "........" */
> +    0x5E,0x8A,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000D0    "^......." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000D8    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000E0    "........" */
> +    0x52,0x00,0xA6,0x58,0x2A,0xDC,0x27,0x59,  /* 000000E8    "R..X*.'Y" */
> +    0x76,0x47,0xB9,0x95,0xD1,0x18,0xA2,0x73,  /* 000000F0    "vG.....s" */
> +    0x35,0xA2,0x01,0x00,0x00,0x00,0x01,0x00,  /* 000000F8    "5......." */
> +    0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000100    "&......." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x2C,0x00,  /* 00000108    "......,." */
> +    0x13,0x2D,0x4F,0x2E,0x40,0x62,0xD0,0x4E,  /* 00000110    ".-O.@b.N" */
> +    0xA4,0x01,0xC7,0x23,0xFB,0xDC,0x34,0xE8,  /* 00000118    "...#..4." */
> +    0x90,0x32,0x5E,0x8A,0x00,0x00,0x00,0x00,  /* 00000120    ".2^....." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000128    "........" */
> +    0xF8,0x7F,0x71,0x8A,0x00,0x00,0x00,0x00,  /* 00000130    "..q....." */
> +    0x00,0x00,0x2E,0x01,0xD7,0x3E,0xF9,0x0E,  /* 00000138    ".....>.." */
> +    0xAE,0x14,0x5B,0x42,0x92,0x8F,0xB8,0x5A,  /* 00000140    "..[B...Z" */
> +    0x62,0x13,0xB5,0x7E,0x01,0x00,0x00,0x00,  /* 00000148    "b..~...." */
> +    0x06,0x00,0x26,0x00,0x00,0x00,0xE0,0x3F,  /* 00000150    "..&....?" */
> +    0x71,0x8A,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000158    "q......." */
> +    0x2C,0x00,0x3C,0xCD,0x20,0x21,0x8B,0x84,  /* 00000160    ",.<. !.." */
> +    0x8F,0x4D,0xAB,0xBB,0x4B,0x74,0xCE,0x64,  /* 00000168    ".M..Kt.d" */
> +    0xAC,0x89,0x4C,0xA6,0x5D,0x8A,0x00,0x00,  /* 00000170    "..L.]..." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000178    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000180    "........" */
> +    0x00,0x00,0x00,0x00,0x2C,0x00,0xA7,0x35,  /* 00000188    "....,..5" */
> +    0x09,0xEA,0x6B,0x50,0x59,0x41,0xBB,0xBB,  /* 00000190    "..kPYA.." */
> +    0x48,0xDE,0xEE,0xCB,0x6F,0x58,0x34,0xA7,  /* 00000198    "H...oX4." */
> +    0x5D,0x8A,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001A0    "]......." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001A8    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001B0    "........" */
> +    0x2C,0x00,0xA9,0xBD,0xD1,0x1B,0x9A,0x90,  /* 000001B8    ",......." */
> +    0x14,0x46,0x96,0x99,0x25,0xEC,0x0C,0x27,  /* 000001C0    ".F..%..'" */
> +    0x83,0xF7,0x94,0xA7,0x5D,0x8A,0x00,0x00,  /* 000001C8    "....]..." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001D0    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001D8    "........" */
> +    0x00,0x00,0x00,0x00,0x2C,0x00,0xE7,0xB4,  /* 000001E0    "....,..." */
> +    0x28,0x5D,0x67,0x38,0xEE,0x4A,0xAA,0x09,  /* 000001E8    "(]g8.J.." */
> +    0x51,0xFC,0x28,0x2C,0x3B,0x22,0x9C,0xA6,  /* 000001F0    "Q.(,;".." */
> +    0x5D,0x8A,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001F8    "]......." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000200    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000208    "........" */
> +    0x2C,0x00,0x02,0xB7,0x64,0x4B,0x2B,0x4D,  /* 00000210    ",...dK+M" */
> +    0xFE,0x4D,0xAC,0x5A,0x0B,0x41,0x10,0xA2,  /* 00000218    ".M.Z.A.." */
> +    0xCA,0x47,0x48,0xA7,0x5D,0x8A,0x00,0x00,  /* 00000220    ".GH.]..." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000228    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000230    "........" */
> +    0x00,0x00,0x00,0x00,0x2C,0x00,0xDE,0xFD,  /* 00000238    "....,..." */
> +    0x0E,0x8A,0xD0,0x78,0xF0,0x45,0xAE,0xA0,  /* 00000240    "...x.E.." */
> +    0xC2,0x82,0x45,0xC7,0xE1,0xDB,0x98,0xA7,  /* 00000248    "..E....." */
> +    0x5D,0x8A,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000250    "]......." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000258    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000260    "........" */
> +    0x52,0x00,0x2B,0xF4,0x6C,0x5A,0xB4,0x8B,  /* 00000268    "R.+.lZ.." */
> +    0x2C,0x47,0xA2,0x33,0x5C,0x4D,0xC4,0x03,  /* 00000270    ",G.3\M.." */
> +    0x3D,0xC7,0x01,0x00,0x00,0x00,0x01,0x00,  /* 00000278    "=......." */
> +    0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000280    "&......." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x2C,0x00,  /* 00000288    "......,." */
> +    0x81,0x60,0x46,0xE1,0x62,0x75,0x0F,0x43,  /* 00000290    ".`F.bu.C" */
> +    0x89,0x6B,0xB0,0xE5,0x23,0xDC,0x33,0x5A,  /* 00000298    ".k..#.3Z" */
> +    0x90,0x12,0x5D,0x8A,0x00,0x00,0x00,0x00,  /* 000002A0    "..]....." */
> +    0xE0,0x5F,0x71,0x8A,0x00,0x00,0x00,0x00,  /* 000002A8    "._q....." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00   /* 000002B0    "........" */
> +};
> +
>  const unsigned char TemplateRasf[] =
>  {
>      0x52,0x41,0x53,0x46,0x30,0x00,0x00,0x00,  /* 00000000    "RASF0..." */
> @@ -1215,6 +1358,20 @@ const unsigned char TemplateRasf[] =
>      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00   /* 00000028    "........" */
>  };
>  
> +const unsigned char TemplateRgrt[] =
> +{
> +    0x52,0x47,0x52,0x54,0x50,0x00,0x00,0x00,  /* 00000000    "RGRTP..." */
> +    0x01,0x33,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    ".3INTEL " */
> +    0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65,  /* 00000010    "Template" */
> +    0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> +    0x31,0x03,0x21,0x20,0x01,0x00,0x01,0x00,  /* 00000020    "1.! ...." */
> +    0xAA,0x01,0x02,0x03,0x04,0x05,0x06,0x07,  /* 00000028    "........" */
> +    0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,  /* 00000030    "........" */
> +    0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,  /* 00000038    "........" */
> +    0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,  /* 00000040    "........" */
> +    0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27   /* 00000048    " !"#$%&'" */
> +};
> +
>  const unsigned char TemplateRsdp[] =
>  {
>      0x52,0x53,0x44,0x20,0x50,0x54,0x52,0x20,  /* 00000000    "RSD PTR " */
> @@ -1475,6 +1632,19 @@ const unsigned char TemplateStao[] =
>      0x31,0x2E,0x50,0x54,0x31,0x00             /* 00000078    "1.PT1."   */
>  };
>  
> +const unsigned char TemplateSvkl[] =
> +{
> +    0x53,0x56,0x4B,0x4C,0x48,0x00,0x00,0x00,  /* 00000000    "SVKLH..." */
> +    0x04,0xDB,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
> +    0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65,  /* 00000010    "Template" */
> +    0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> +    0x31,0x03,0x21,0x20,0x02,0x00,0x00,0x00,  /* 00000020    "1.! ...." */
> +    0x00,0x00,0x00,0x00,0x21,0x43,0xAA,0xAA,  /* 00000028    "....!C.." */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 00000030    "....gE#." */
> +    0x00,0x00,0x00,0x00,0x21,0x43,0xBB,0xBB,  /* 00000038    "....!C.." */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01   /* 00000040    "....gE#." */
> +};
> +
>  const unsigned char TemplateTcpa[] =
>  {
>      0x54,0x43,0x50,0x41,0x64,0x00,0x00,0x00,  /* 00000000    "TCPAd..." */
> diff --git a/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c
> index d69ad2fb..ba454b31 100644
> --- a/src/acpica/source/compiler/dtutils.c
> +++ b/src/acpica/source/compiler/dtutils.c
> @@ -426,6 +426,7 @@ DtGetFieldType (
>      case ACPI_DMT_NAME6:
>      case ACPI_DMT_NAME8:
>      case ACPI_DMT_STRING:
> +    case ACPI_DMT_IVRS_UNTERMINATED_STRING:
>  
>          Type = DT_FIELD_TYPE_STRING;
>          break;
> @@ -576,11 +577,13 @@ DtGetFieldLength (
>      case ACPI_DMT_ACCWIDTH:
>      case ACPI_DMT_CEDT:
>      case ACPI_DMT_IVRS:
> +    case ACPI_DMT_IVRS_DE:
>      case ACPI_DMT_GTDT:
>      case ACPI_DMT_MADT:
>      case ACPI_DMT_PCCT:
>      case ACPI_DMT_PMTT:
>      case ACPI_DMT_PPTT:
> +    case ACPI_DMT_RGRT:
>      case ACPI_DMT_SDEV:
>      case ACPI_DMT_SRAT:
>      case ACPI_DMT_ASF:
> @@ -660,6 +663,22 @@ DtGetFieldLength (
>          }
>          break;
>  
> +    case ACPI_DMT_IVRS_UNTERMINATED_STRING:
> +
> +        Value = DtGetFieldValue (Field);
> +        if (Value)
> +        {
> +            ByteLength = strlen (Value);
> +        }
> +        else
> +        {   /* At this point, this is a fatal error */
> +
> +            sprintf (AslGbl_MsgBuffer, "Expected \"%s\"", Info->Name);
> +            DtFatal (ASL_MSG_COMPILER_INTERNAL, NULL, AslGbl_MsgBuffer);
> +            return (0);
> +        }
> +        break;
> +
>      case ACPI_DMT_GAS:
>  
>          ByteLength = sizeof (ACPI_GENERIC_ADDRESS);
> diff --git a/src/acpica/source/components/executer/exfield.c b/src/acpica/source/components/executer/exfield.c
> index 585d21cc..7871e350 100644
> --- a/src/acpica/source/components/executer/exfield.c
> +++ b/src/acpica/source/components/executer/exfield.c
> @@ -295,7 +295,8 @@ AcpiExReadDataFromField (
>      else if ((ObjDesc->Common.Type == ACPI_TYPE_LOCAL_REGION_FIELD) &&
>          (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS ||
>           ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_GSBUS ||
> -         ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_IPMI))
> +         ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_IPMI  ||
> +         ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_PLATFORM_RT))
>      {
>          /* SMBus, GSBus, IPMI serial */
>  
> @@ -467,7 +468,8 @@ AcpiExWriteDataToField (
>      else if ((ObjDesc->Common.Type == ACPI_TYPE_LOCAL_REGION_FIELD) &&
>          (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS ||
>           ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_GSBUS ||
> -         ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_IPMI))
> +         ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_IPMI  ||
> +         ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_PLATFORM_RT))
>      {
>          /* SMBus, GSBus, IPMI serial */
>  
> diff --git a/src/acpica/source/components/executer/exserial.c b/src/acpica/source/components/executer/exserial.c
> index 69ce5316..776409db 100644
> --- a/src/acpica/source/components/executer/exserial.c
> +++ b/src/acpica/source/components/executer/exserial.c
> @@ -353,6 +353,12 @@ AcpiExReadSerialBus (
>          Function = ACPI_READ | (AccessorType << 16);
>          break;
>  
> +    case ACPI_ADR_SPACE_PLATFORM_RT:
> +
> +        BufferLength = ACPI_PRM_INPUT_BUFFER_SIZE;
> +        Function = ACPI_READ;
> +        break;
> +
>      default:
>          return_ACPI_STATUS (AE_AML_INVALID_SPACE_ID);
>      }
> @@ -472,6 +478,12 @@ AcpiExWriteSerialBus (
>          Function = ACPI_WRITE | (AccessorType << 16);
>          break;
>  
> +    case ACPI_ADR_SPACE_PLATFORM_RT:
> +
> +        BufferLength = ACPI_PRM_INPUT_BUFFER_SIZE;
> +        Function = ACPI_WRITE;
> +        break;
> +
>      default:
>          return_ACPI_STATUS (AE_AML_INVALID_SPACE_ID);
>      }
> diff --git a/src/acpica/source/components/namespace/nsrepair2.c b/src/acpica/source/components/namespace/nsrepair2.c
> index d3dcd318..40f0634d 100644
> --- a/src/acpica/source/components/namespace/nsrepair2.c
> +++ b/src/acpica/source/components/namespace/nsrepair2.c
> @@ -565,6 +565,13 @@ AcpiNsRepair_CID (
>  
>              (*ElementPtr)->Common.ReferenceCount =
>                  OriginalRefCount;
> +
> +            /*
> +             * The OriginalElement holds a reference from the package object
> +             * that represents _HID. Since a new element was created by _HID,
> +             * remove the reference from the _CID package.
> +             */
> +            AcpiUtRemoveReference (OriginalElement);
>          }
>  
>          ElementPtr++;
> diff --git a/src/acpica/source/components/utilities/utdelete.c b/src/acpica/source/components/utilities/utdelete.c
> index 2cf71aee..624aa687 100644
> --- a/src/acpica/source/components/utilities/utdelete.c
> +++ b/src/acpica/source/components/utilities/utdelete.c
> @@ -443,6 +443,14 @@ AcpiUtDeleteInternalObj (
>          }
>          break;
>  
> +    case ACPI_TYPE_LOCAL_ADDRESS_HANDLER:
> +
> +        ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS,
> +            "***** Address handler %p\n", Object));
> +
> +        AcpiOsDeleteMutex (Object->AddressSpace.ContextMutex);
> +        break;
> +
>      default:
>  
>          break;
> diff --git a/src/acpica/source/components/utilities/utuuid.c b/src/acpica/source/components/utilities/utuuid.c
> index 97ae40be..299353cc 100644
> --- a/src/acpica/source/components/utilities/utuuid.c
> +++ b/src/acpica/source/components/utilities/utuuid.c
> @@ -208,4 +208,52 @@ AcpiUtConvertStringToUuid (
>              InString[AcpiGbl_MapToUuidOffset[i] + 1]);
>      }
>  }
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiUtConvertUuidToString
> + *
> + * PARAMETERS:  UuidBuffer          - 16-byte UUID buffer
> + *              OutString           - 36-byte formatted UUID string
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Convert 16-byte UUID buffer to 36-byte formatted UUID string
> + *              OutString must be 37 bytes to include null terminator.
> + *
> + ******************************************************************************/
> +
> +ACPI_STATUS
> +AcpiUtConvertUuidToString (
> +    char                    *UuidBuffer,
> +    char                    *OutString)
> +{
> +    UINT32                  i;
> +
> +
> +    if (!UuidBuffer || !OutString)
> +    {
> +        return (AE_BAD_PARAMETER);
> +    }
> +
> +    for (i = 0; i < UUID_BUFFER_LENGTH; i++)
> +    {
> +        OutString[AcpiGbl_MapToUuidOffset[i]] =
> +            AcpiUtHexToAsciiChar (UuidBuffer[i], 4);
> +
> +        OutString[AcpiGbl_MapToUuidOffset[i] + 1] =
> +            AcpiUtHexToAsciiChar (UuidBuffer[i], 0);
> +    }
> +
> +    /* Insert required hyphens (dashes) */
> +
> +    OutString[UUID_HYPHEN1_OFFSET] =
> +    OutString[UUID_HYPHEN2_OFFSET] =
> +    OutString[UUID_HYPHEN3_OFFSET] =
> +    OutString[UUID_HYPHEN4_OFFSET] = '-';
> +
> +    OutString[UUID_STRING_LENGTH] = 0; /* Null terminate */
> +    return (AE_OK);
> +}
>  #endif
> diff --git a/src/acpica/source/include/acbuffer.h b/src/acpica/source/include/acbuffer.h
> index 3c541751..1576afa6 100644
> --- a/src/acpica/source/include/acbuffer.h
> +++ b/src/acpica/source/include/acbuffer.h
> @@ -359,5 +359,14 @@ typedef struct acpi_pld_info
>  #define ACPI_PLD_GET_HORIZ_OFFSET(dword)        ACPI_GET_BITS (dword, 16, ACPI_16BIT_MASK)
>  #define ACPI_PLD_SET_HORIZ_OFFSET(dword,value)  ACPI_SET_BITS (dword, 16, ACPI_16BIT_MASK, value)   /* Offset 128+16=144, Len 16 */
>  
> +/* Panel position defined in _PLD section of ACPI Specification 6.3 */
> +
> +#define ACPI_PLD_PANEL_TOP      0
> +#define ACPI_PLD_PANEL_BOTTOM   1
> +#define ACPI_PLD_PANEL_LEFT     2
> +#define ACPI_PLD_PANEL_RIGHT    3
> +#define ACPI_PLD_PANEL_FRONT    4
> +#define ACPI_PLD_PANEL_BACK     5
> +#define ACPI_PLD_PANEL_UNKNOWN  6
>  
>  #endif /* ACBUFFER_H */
> diff --git a/src/acpica/source/include/acconfig.h b/src/acpica/source/include/acconfig.h
> index b320a97e..a5808526 100644
> --- a/src/acpica/source/include/acconfig.h
> +++ b/src/acpica/source/include/acconfig.h
> @@ -333,6 +333,7 @@
>  #define ACPI_MAX_GSBUS_DATA_SIZE        255
>  #define ACPI_MAX_GSBUS_BUFFER_SIZE      ACPI_SERIAL_HEADER_SIZE + ACPI_MAX_GSBUS_DATA_SIZE
>  
> +#define ACPI_PRM_INPUT_BUFFER_SIZE      26
>  
>  /* _SxD and _SxW control methods */
>  
> diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h
> index f02f3239..9b584d67 100644
> --- a/src/acpica/source/include/acdisasm.h
> +++ b/src/acpica/source/include/acdisasm.h
> @@ -266,6 +266,8 @@ typedef enum
>      ACPI_DMT_HMAT,
>      ACPI_DMT_IORTMEM,
>      ACPI_DMT_IVRS,
> +    ACPI_DMT_IVRS_DE,
> +    ACPI_DMT_IVRS_UNTERMINATED_STRING,
>      ACPI_DMT_LPIT,
>      ACPI_DMT_MADT,
>      ACPI_DMT_NFIT,
> @@ -274,6 +276,7 @@ typedef enum
>      ACPI_DMT_PMTT,
>      ACPI_DMT_PMTT_VENDOR,
>      ACPI_DMT_PPTT,
> +    ACPI_DMT_RGRT,
>      ACPI_DMT_SDEI,
>      ACPI_DMT_SDEV,
>      ACPI_DMT_SLIC,
> @@ -365,6 +368,7 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAsf2a[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAsf3[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAsf4[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAsfHdr[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoBdat[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoBoot[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoBert[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoBgrt[];
> @@ -465,16 +469,20 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIortHdr3[];
>  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        AcpiDmTableInfoIvrsHware1[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsHware23[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsMemory[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs4[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs8a[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs8b[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs8c[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsCidString[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsCidInteger[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsHid[];
> -extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsHid1[];
> -extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsHdr[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsUidString[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsUidInteger[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsHidString[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsHidInteger[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt0[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt1[];
> @@ -546,7 +554,12 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPptt1[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPptt1a[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPptt2[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPpttHdr[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPrmtHdr[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPrmtModule[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPrmtHandler[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoRasf[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoRgrt[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoRgrt0[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoRsdp1[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoRsdp2[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoS3pt[];
> @@ -580,6 +593,8 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSrat4[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSrat5[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoStao[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoStaoStr[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSvkl[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSvkl0[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTcpaHdr[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTcpaClient[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTcpaServer[];
> @@ -774,6 +789,14 @@ void
>  AcpiDmDumpPptt (
>      ACPI_TABLE_HEADER       *Table);
>  
> +void
> +AcpiDmDumpPrmt (
> +    ACPI_TABLE_HEADER       *Table);
> +
> +void
> +AcpiDmDumpRgrt (
> +    ACPI_TABLE_HEADER       *Table);
> +
>  UINT32
>  AcpiDmDumpRsdp (
>      ACPI_TABLE_HEADER       *Table);
> @@ -806,6 +829,10 @@ void
>  AcpiDmDumpStao (
>      ACPI_TABLE_HEADER       *Table);
>  
> +void
> +AcpiDmDumpSvkl (
> +    ACPI_TABLE_HEADER       *Table);
> +
>  void
>  AcpiDmDumpTcpa (
>      ACPI_TABLE_HEADER       *Table);
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index 0733ac41..dc459c9a 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                 0x20210331
> +#define ACPI_CA_VERSION                 0x20210604
>  
>  #include "acconfig.h"
>  #include "actypes.h"
> diff --git a/src/acpica/source/include/actbinfo.h b/src/acpica/source/include/actbinfo.h
> index af10c774..027e6085 100644
> --- a/src/acpica/source/include/actbinfo.h
> +++ b/src/acpica/source/include/actbinfo.h
> @@ -156,6 +156,7 @@
>  #define ACPI_GAS_OFFSET(f)              (UINT16) ACPI_OFFSET (ACPI_GENERIC_ADDRESS,f)
>  #define ACPI_HDR_OFFSET(f)              (UINT16) ACPI_OFFSET (ACPI_TABLE_HEADER,f)
>  #define ACPI_RSDP_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_RSDP,f)
> +#define ACPI_BDAT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_BDAT,f)
>  #define ACPI_BERT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_BERT,f)
>  #define ACPI_BGRT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_BGRT,f)
>  #define ACPI_BOOT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_BOOT,f)
> @@ -183,6 +184,7 @@
>  #define ACPI_PDTT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_PDTT,f)
>  #define ACPI_PMTT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_PMTT,f)
>  #define ACPI_RASF_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_RASF,f)
> +#define ACPI_RGRT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_RGRT,f)
>  #define ACPI_S3PT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_S3PT,f)
>  #define ACPI_SBST_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SBST,f)
>  #define ACPI_SDEI_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SDEI,f)
> @@ -192,6 +194,7 @@
>  #define ACPI_SPMI_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SPMI,f)
>  #define ACPI_SRAT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SRAT,f)
>  #define ACPI_STAO_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_STAO,f)
> +#define ACPI_SVKL_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SVKL,f)
>  #define ACPI_TCPA_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_HDR,f)
>  #define ACPI_TPM2_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_TPM2,f)
>  #define ACPI_TPM23_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_TABLE_TPM23,f)
> @@ -334,6 +337,9 @@
>  #define ACPI_PPTT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PPTT_CACHE,f)
>  #define ACPI_PPTT1A_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_PPTT_CACHE_V1,f)
>  #define ACPI_PPTT2_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PPTT_ID,f)
> +#define ACPI_PRMTH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_TABLE_PRMT_HEADER,f)
> +#define ACPI_PRMT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PRMT_MODULE_INFO,f)
> +#define ACPI_PRMT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PRMT_HANDLER_INFO,f)
>  #define ACPI_S3PTH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_FPDT_HEADER,f)
>  #define ACPI_S3PT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_S3PT_RESUME,f)
>  #define ACPI_S3PT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_S3PT_SUSPEND,f)
> @@ -353,6 +359,7 @@
>  #define ACPI_SRAT3_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_SRAT_GICC_AFFINITY,f)
>  #define ACPI_SRAT4_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_SRAT_GIC_ITS_AFFINITY,f)
>  #define ACPI_SRAT5_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_SRAT_GENERIC_AFFINITY,f)
> +#define ACPI_SVKL0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_SVKL_KEY,f)
>  #define ACPI_TCPA_CLIENT_OFFSET(f)      (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_CLIENT,f)
>  #define ACPI_TCPA_SERVER_OFFSET(f)      (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_SERVER,f)
>  #define ACPI_TPM2A_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_TPM2_TRAILER,f)
> @@ -398,6 +405,8 @@
>  #define ACPI_IORT6_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_IORT_RMR,f,o)
>  #define ACPI_IORTA_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_IORT_MEMORY_ACCESS,f,o)
>  #define ACPI_IORTM_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_IORT_ID_MAPPING,f,o)
> +#define ACPI_IVRS_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_IVRS_HEADER,f,o)
> +#define ACPI_IVRSDE_FLAG_OFFSET(f,o)    ACPI_FLAG_OFFSET (ACPI_IVRS_DE_HEADER,f,o)
>  #define ACPI_LPITH_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_LPIT_HEADER,f,o)
>  #define ACPI_MADT_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_MADT,f,o)
>  #define ACPI_MADT0_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_APIC,f,o)
> diff --git a/src/acpica/source/include/actbl1.h b/src/acpica/source/include/actbl1.h
> index 437a122b..136ebf12 100644
> --- a/src/acpica/source/include/actbl1.h
> +++ b/src/acpica/source/include/actbl1.h
> @@ -523,9 +523,19 @@ typedef struct acpi_cedt_header
>  enum AcpiCedtType
>  {
>      ACPI_CEDT_TYPE_CHBS                 = 0,
> -    ACPI_CEDT_TYPE_RESERVED             = 1
> +    ACPI_CEDT_TYPE_CFMWS                = 1,
> +    ACPI_CEDT_TYPE_RESERVED             = 2,
>  };
>  
> +/* Values for version field above */
> +
> +#define ACPI_CEDT_CHBS_VERSION_CXL11    (0)
> +#define ACPI_CEDT_CHBS_VERSION_CXL20    (1)
> +
> +/* Values for length field above */
> +
> +#define ACPI_CEDT_CHBS_LENGTH_CXL11     (0x2000)
> +#define ACPI_CEDT_CHBS_LENGTH_CXL20     (0x10000)
>  
>  /*
>   * CEDT subtables
> @@ -545,6 +555,37 @@ typedef struct acpi_cedt_chbs
>  } ACPI_CEDT_CHBS;
>  
>  
> +/* 1: CXL Fixed Memory Window Structure */
> +
> +typedef struct acpi_cedt_cfmws
> +{
> +    ACPI_CEDT_HEADER        Header;
> +    UINT32                  Reserved1;
> +    UINT64                  BaseHpa;
> +    UINT64                  WindowSize;
> +    UINT8                   InterleaveWays;
> +    UINT8                   InterleaveArithmetic;
> +    UINT16                  Reserved2;
> +    UINT32                  Granularity;
> +    UINT16                  Restrictions;
> +    UINT16                  QtgId;
> +    UINT32                  InterleaveTargets[];
> +
> +} ACPI_CEDT_CFMWS;
> +
> +/* Values for Interleave Arithmetic field above */
> +
> +#define ACPI_CEDT_CFMWS_ARITHMETIC_MODULO	(0)
> +
> +/* Values for Restrictions field above */
> +
> +#define ACPI_CEDT_CFMWS_RESTRICT_TYPE2		(1)
> +#define ACPI_CEDT_CFMWS_RESTRICT_TYPE3		(1<<1)
> +#define ACPI_CEDT_CFMWS_RESTRICT_VOLATILE	(1<<2)
> +#define ACPI_CEDT_CFMWS_RESTRICT_PMEM		(1<<3)
> +#define ACPI_CEDT_CFMWS_RESTRICT_FIXED		(1<<4)
> +
> +
>  /*******************************************************************************
>   *
>   * CPEP - Corrected Platform Error Polling table (ACPI 4.0)
> diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h
> index 71c39e86..cb237a6b 100644
> --- a/src/acpica/source/include/actbl2.h
> +++ b/src/acpica/source/include/actbl2.h
> @@ -168,6 +168,7 @@
>   * file. Useful because they make it more difficult to inadvertently type in
>   * the wrong signature.
>   */
> +#define ACPI_SIG_BDAT           "BDAT"      /* BIOS Data ACPI Table */
>  #define ACPI_SIG_IORT           "IORT"      /* IO Remapping Table */
>  #define ACPI_SIG_IVRS           "IVRS"      /* I/O Virtualization Reporting Structure */
>  #define ACPI_SIG_LPIT           "LPIT"      /* Low Power Idle Table */
> @@ -183,11 +184,14 @@
>  #define ACPI_SIG_PHAT           "PHAT"      /* Platform Health Assessment Table */
>  #define ACPI_SIG_PMTT           "PMTT"      /* Platform Memory Topology Table */
>  #define ACPI_SIG_PPTT           "PPTT"      /* Processor Properties Topology Table */
> +#define ACPI_SIG_PRMT           "PRMT"      /* Platform Runtime Mechanism Table */
>  #define ACPI_SIG_RASF           "RASF"      /* RAS Feature table */
> +#define ACPI_SIG_RGRT           "RGRT"      /* Regulatory Graphics Resource Table */
>  #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 */
> +#define ACPI_SIG_SVKL           "SVKL"      /* Storage Volume Key Location Table */
>  
>  
>  /*
> @@ -209,6 +213,23 @@
>   */
>  
>  
> +/*******************************************************************************
> + *
> + * BDAT - BIOS Data ACPI Table
> + *
> + * Conforms to "BIOS Data ACPI Table", Interface Specification v4.0 Draft 5
> + * Nov 2020
> + *
> + ******************************************************************************/
> +
> +typedef struct acpi_table_bdat
> +{
> +    ACPI_TABLE_HEADER       Header;
> +    ACPI_GENERIC_ADDRESS    Gas;
> +
> +} ACPI_TABLE_BDAT;
> +
> +
>  /*******************************************************************************
>   *
>   * IORT - IO Remapping Table
> @@ -649,6 +670,11 @@ typedef struct acpi_ivrs_device_hid
>  
>  } ACPI_IVRS_DEVICE_HID;
>  
> +/* Values for UidType above */
> +
> +#define ACPI_IVRS_UID_NOT_PRESENT   0
> +#define ACPI_IVRS_UID_IS_INTEGER    1
> +#define ACPI_IVRS_UID_IS_STRING     2
>  
>  /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */
>  
> @@ -1034,6 +1060,22 @@ typedef struct acpi_madt_multiproc_wakeup
>  
>  } ACPI_MADT_MULTIPROC_WAKEUP;
>  
> +#define ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE	2032
> +#define ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE	2048
> +
> +typedef struct acpi_madt_multiproc_wakeup_mailbox
> +{
> +    UINT16                  Command;
> +    UINT16                  Reserved; /* reserved - must be zero */
> +    UINT32                  ApicId;
> +    UINT64                  WakeupVector;
> +    UINT8                   ReservedOs[ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE]; /* reserved for OS use */
> +    UINT8                   ReservedFirmware[ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE]; /* reserved for firmware use */
> +
> +} ACPI_MADT_MULTIPROC_WAKEUP_MAILBOX;
> +
> +#define ACPI_MP_WAKE_COMMAND_WAKEUP    1
> +
>  
>  /*
>   * Common flags fields for MADT subtables
> @@ -2100,6 +2142,52 @@ typedef struct acpi_pptt_id
>  } ACPI_PPTT_ID;
>  
>  
> +/*******************************************************************************
> + *
> + * PRMT - Platform Runtime Mechanism Table
> + *        Version 1
> + *
> + ******************************************************************************/
> +
> +typedef struct acpi_table_prmt
> +{
> +    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
> +
> +} ACPI_TABLE_PRMT;
> +
> +typedef struct acpi_table_prmt_header
> +{
> +    UINT8                   PlatformGuid[16];
> +    UINT32                  ModuleInfoOffset;
> +    UINT32                  ModuleInfoCount;
> +
> +} ACPI_TABLE_PRMT_HEADER;
> +
> +typedef struct acpi_prmt_module_info
> +{
> +    UINT16                  Revision;
> +    UINT16                  Length;
> +    UINT8                   ModuleGuid[16];
> +    UINT16                  MajorRev;
> +    UINT16                  MinorRev;
> +    UINT16                  HandlerInfoCount;
> +    UINT32                  HandlerInfoOffset;
> +    UINT64                  MmioListPointer;
> +
> +} ACPI_PRMT_MODULE_INFO;
> +
> +typedef struct acpi_prmt_handler_info
> +{
> +    UINT16                  Revision;
> +    UINT16                  Length;
> +    UINT8                   HandlerGuid[16];
> +    UINT64                  HandlerAddress;
> +    UINT64                  StaticDataBufferAddress;
> +    UINT64                  AcpiParamBufferAddress;
> +
> +} ACPI_PRMT_HANDLER_INFO;
> +
> +
>  /*******************************************************************************
>   *
>   * RASF - RAS Feature Table (ACPI 5.0)
> @@ -2209,6 +2297,36 @@ enum AcpiRasfStatus
>  #define ACPI_RASF_STATUS                (0x1F<<3)
>  
>  
> +/*******************************************************************************
> + *
> + * RGRT - Regulatory Graphics Resource Table
> + *        Version 1
> + *
> + * Conforms to "ACPI RGRT" available at:
> + * https://microsoft.github.io/mu/dyn/mu_plus/MsCorePkg/AcpiRGRT/feature_acpi_rgrt/
> + *
> + ******************************************************************************/
> +
> +typedef struct acpi_table_rgrt
> +{
> +    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
> +    UINT16                  Version;
> +    UINT8                   ImageType;
> +    UINT8                   Reserved;
> +    UINT8                   Image[0];
> +
> +} ACPI_TABLE_RGRT;
> +
> +/* ImageType values */
> +
> +enum AcpiRgrtImageType
> +{
> +    ACPI_RGRT_TYPE_RESERVED0            = 0,
> +    ACPI_RGRT_IMAGE_TYPE_PNG            = 1,
> +    ACPI_RGRT_TYPE_RESERVED             = 2     /* 2 and greater are reserved */
> +};
> +
> +
>  /*******************************************************************************
>   *
>   * SBST - Smart Battery Specification Table
> @@ -2371,6 +2489,44 @@ typedef struct acpi_sdev_pcie_path
>  } ACPI_SDEV_PCIE_PATH;
>  
>  
> +/*******************************************************************************
> + *
> + * SVKL - Storage Volume Key Location Table (ACPI 6.4)
> + *        From: "Guest-Host-Communication Interface (GHCI) for Intel
> + *        Trust Domain Extensions (Intel TDX)".
> + *        Version 1
> + *
> + ******************************************************************************/
> +
> +typedef struct acpi_table_svkl
> +{
> +    ACPI_TABLE_HEADER       Header; /* Common ACPI table header */
> +    UINT32                  Count;
> +
> +} ACPI_TABLE_SVKL;
> +
> +typedef struct acpi_svkl_key
> +{
> +    UINT16                  Type;
> +    UINT16                  Format;
> +    UINT32                  Size;
> +    UINT64                  Address;
> +
> +} ACPI_SVKL_KEY;
> +
> +enum acpi_svkl_type
> +{
> +    ACPI_SVKL_TYPE_MAIN_STORAGE = 0,
> +    ACPI_SVKL_TYPE_RESERVED     = 1 /* 1 and greater are reserved */
> +};
> +
> +enum acpi_svkl_format
> +{
> +    ACPI_SVKL_FORMAT_RAW_BINARY = 0,
> +    ACPI_SVKL_FORMAT_RESERVED   = 1 /* 1 and greater are reserved */
> +};
> +
> +
>  /* Reset to default packing */
>  
>  #pragma pack()
> diff --git a/src/acpica/source/include/acutils.h b/src/acpica/source/include/acutils.h
> index 4d485422..791b7d9c 100644
> --- a/src/acpica/source/include/acutils.h
> +++ b/src/acpica/source/include/acutils.h
> @@ -1268,6 +1268,11 @@ void
>  AcpiUtConvertStringToUuid (
>      char                    *InString,
>      UINT8                   *UuidBuffer);
> +
> +ACPI_STATUS
> +AcpiUtConvertUuidToString (
> +    char                    *UuidBuffer,
> +    char                    *OutString);
>  #endif
>  
>  #endif /* _ACUTILS_H */
> diff --git a/src/acpica/source/tools/acpiexec/aeinstall.c b/src/acpica/source/tools/acpiexec/aeinstall.c
> index e39c683d..1d32443b 100644
> --- a/src/acpica/source/tools/acpiexec/aeinstall.c
> +++ b/src/acpica/source/tools/acpiexec/aeinstall.c
> @@ -216,6 +216,7 @@ static ACPI_ADR_SPACE_TYPE  SpaceIdList[] =
>      ACPI_ADR_SPACE_GPIO,
>      ACPI_ADR_SPACE_GSBUS,
>      ACPI_ADR_SPACE_PLATFORM_COMM,
> +    ACPI_ADR_SPACE_PLATFORM_RT,
>      ACPI_ADR_SPACE_FIXED_HARDWARE,
>      ACPI_ADR_SPACE_USER_DEFINED1,
>      ACPI_ADR_SPACE_USER_DEFINED2
> diff --git a/src/acpica/source/tools/acpiexec/aeregion.c b/src/acpica/source/tools/acpiexec/aeregion.c
> index faae7347..decd17f7 100644
> --- a/src/acpica/source/tools/acpiexec/aeregion.c
> +++ b/src/acpica/source/tools/acpiexec/aeregion.c
> @@ -205,6 +205,7 @@ AeRegionHandler (
>      UINT32                  Value1;
>      UINT32                  Value2;
>      ACPI_RESOURCE           *Resource;
> +    char                    Uuid[ACPI_PRM_INPUT_BUFFER_SIZE + 1];
>  
>  
>      ACPI_FUNCTION_NAME (AeRegionHandler);
> @@ -446,6 +447,7 @@ AeRegionHandler (
>       * default values. Note: ASLTS will depend on these values.
>       */
>      case ACPI_ADR_SPACE_PLATFORM_COMM: /* ACPI 6.3 */
> +
>          if (AcpiGbl_DisplayRegionAccess)
>          {
>              AcpiOsPrintf ("AcpiExec: PCC Write : Addr %.4X Width %X\n",
> @@ -457,6 +459,21 @@ AeRegionHandler (
>          }
>          return (AE_OK);
>  
> +    case ACPI_ADR_SPACE_PLATFORM_RT:
> +
> +        AcpiOsPrintf ("Acpiexec: PRM %s invoked\n",
> +            (Function & ACPI_IO_MASK) ? "Write" : "Read ");
> +
> +        if ((Function & ACPI_IO_MASK) == ACPI_WRITE)
> +        {
> +            AcpiUtConvertUuidToString((char *) Buffer + 10, Uuid);
> +            AcpiOsPrintf ("Mode: %u GUID: %s\n", Buffer[0], Uuid);
> +        }
> +
> +        /* Unpack the input buffer and print the contents for debug */
> +
> +        break;
> +
>      default:
>          break;
>      }
> 

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 e318ddf3..80f248d2 100644
--- a/src/acpica/source/common/ahtable.c
+++ b/src/acpica/source/common/ahtable.c
@@ -199,20 +199,21 @@  AcpiAhGetTableInfo (
  */
 const AH_TABLE      AcpiGbl_SupportedTables[] =
 {
-    {ACPI_SIG_ASF,  "Alert Standard Format table"},
+    {ACPI_SIG_ASF,  "Alert Standard Format Table"},
+    {ACPI_SIG_BDAT, "BIOS Data ACPI Table"},
     {ACPI_SIG_BERT, "Boot Error Record Table"},
     {ACPI_SIG_BGRT, "Boot Graphics Resource Table"},
     {ACPI_SIG_BOOT, "Simple Boot Flag Table"},
     {ACPI_SIG_CEDT, "CXL Early Discovery Table"},
-    {ACPI_SIG_CPEP, "Corrected Platform Error Polling table"},
+    {ACPI_SIG_CPEP, "Corrected Platform Error Polling Table"},
     {ACPI_SIG_CSRT, "Core System Resource Table"},
-    {ACPI_SIG_DBG2, "Debug Port table type 2"},
-    {ACPI_SIG_DBGP, "Debug Port table"},
-    {ACPI_SIG_DMAR, "DMA Remapping table"},
-    {ACPI_SIG_DRTM, "Dynamic Root of Trust for Measurement table"},
+    {ACPI_SIG_DBG2, "Debug Port Table type 2"},
+    {ACPI_SIG_DBGP, "Debug Port Table"},
+    {ACPI_SIG_DMAR, "DMA Remapping Table"},
+    {ACPI_SIG_DRTM, "Dynamic Root of Trust for Measurement Table"},
     {ACPI_SIG_DSDT, "Differentiated System Description Table (AML table)"},
     {ACPI_SIG_ECDT, "Embedded Controller Boot Resources Table"},
-    {ACPI_SIG_EINJ, "Error Injection table"},
+    {ACPI_SIG_EINJ, "Error Injection Table"},
     {ACPI_SIG_ERST, "Error Record Serialization Table"},
     {ACPI_SIG_FACS, "Firmware ACPI Control Structure"},
     {ACPI_SIG_FADT, "Fixed ACPI Description Table (FADT)"},
@@ -220,38 +221,41 @@  const AH_TABLE      AcpiGbl_SupportedTables[] =
     {ACPI_SIG_GTDT, "Generic Timer Description Table"},
     {ACPI_SIG_HEST, "Hardware Error Source Table"},
     {ACPI_SIG_HMAT, "Heterogeneous Memory Attributes Table"},
-    {ACPI_SIG_HPET, "High Precision Event Timer table"},
+    {ACPI_SIG_HPET, "High Precision Event Timer Table"},
     {ACPI_SIG_IORT, "IO Remapping Table"},
     {ACPI_SIG_IVRS, "I/O Virtualization Reporting Structure"},
     {ACPI_SIG_LPIT, "Low Power Idle Table"},
     {ACPI_SIG_MADT, "Multiple APIC Description Table (MADT)"},
-    {ACPI_SIG_MCFG, "Memory Mapped Configuration table"},
-    {ACPI_SIG_MCHI, "Management Controller Host Interface table"},
+    {ACPI_SIG_MCFG, "Memory Mapped Configuration Table"},
+    {ACPI_SIG_MCHI, "Management Controller Host Interface Table"},
     {ACPI_SIG_MPST, "Memory Power State Table"},
     {ACPI_SIG_MSCT, "Maximum System Characteristics Table"},
-    {ACPI_SIG_MSDM, "Microsoft Data Management table"},
+    {ACPI_SIG_MSDM, "Microsoft Data Management Table"},
     {ACPI_SIG_NFIT, "NVDIMM Firmware Interface Table"},
     {ACPI_SIG_PCCT, "Platform Communications Channel Table"},
-    {ACPI_SIG_PHAT, "Platform Health Assessment Table"},
     {ACPI_SIG_PDTT, "Platform Debug Trigger Table"},
+    {ACPI_SIG_PHAT, "Platform Health Assessment Table"},
     {ACPI_SIG_PMTT, "Platform Memory Topology Table"},
     {ACPI_SIG_PPTT, "Processor Properties Topology Table"},
+    {ACPI_SIG_PRMT, "Platform Runtime Mechanism Table"},
     {ACPI_SIG_RASF, "RAS Features Table"},
+    {ACPI_SIG_RGRT, "Regulatory Graphics Resource Table"},
     {ACPI_RSDP_NAME,"Root System Description Pointer"},
     {ACPI_SIG_RSDT, "Root System Description Table"},
     {ACPI_SIG_S3PT, "S3 Performance Table"},
     {ACPI_SIG_SBST, "Smart Battery Specification Table"},
     {ACPI_SIG_SDEI, "Software Delegated Exception Interface Table"},
-    {ACPI_SIG_SDEV, "Secure Devices table"},
+    {ACPI_SIG_SDEV, "Secure Devices Table"},
     {ACPI_SIG_SLIC, "Software Licensing Description Table"},
     {ACPI_SIG_SLIT, "System Locality Information Table"},
-    {ACPI_SIG_SPCR, "Serial Port Console Redirection table"},
-    {ACPI_SIG_SPMI, "Server Platform Management Interface table"},
+    {ACPI_SIG_SPCR, "Serial Port Console Redirection Table"},
+    {ACPI_SIG_SPMI, "Server Platform Management Interface Table"},
     {ACPI_SIG_SRAT, "System Resource Affinity Table"},
     {ACPI_SIG_SSDT, "Secondary System Description Table (AML table)"},
-    {ACPI_SIG_STAO, "Status Override table"},
-    {ACPI_SIG_TCPA, "Trusted Computing Platform Alliance table"},
-    {ACPI_SIG_TPM2, "Trusted Platform Module hardware interface table"},
+    {ACPI_SIG_STAO, "Status Override Table"},
+    {ACPI_SIG_SVKL, "Storage Volume Key Location Table"},
+    {ACPI_SIG_TCPA, "Trusted Computing Platform Alliance Table"},
+    {ACPI_SIG_TPM2, "Trusted Platform Module hardware interface Table"},
     {ACPI_SIG_UEFI, "UEFI Boot Optimization Table"},
     {ACPI_SIG_VIOT, "Virtual I/O Translation Table"},
     {ACPI_SIG_WAET, "Windows ACPI Emulated Devices Table"},
@@ -260,7 +264,7 @@  const AH_TABLE      AcpiGbl_SupportedTables[] =
     {ACPI_SIG_WDRT, "Watchdog Resource Table"},
     {ACPI_SIG_WPBT, "Windows Platform Binary Table"},
     {ACPI_SIG_WSMT, "Windows SMM Security Mitigations Table"},
-    {ACPI_SIG_XENV, "Xen Environment 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 ffec889a..7a4e87e1 100644
--- a/src/acpica/source/common/dmtable.c
+++ b/src/acpica/source/common/dmtable.c
@@ -187,6 +187,7 @@  static const char           *AcpiDmAsfSubnames[] =
 static const char           *AcpiDmCedtSubnames[] =
 {
     "CXL Host Bridge Structure",
+    "CXL Fixed Memory Window Structure",
     "Unknown Subtable Type"         /* Reserved */
 };
 
@@ -350,6 +351,7 @@  static const char           *AcpiDmMadtSubnames[] =
     "Generic MSI Frame",                /* ACPI_MADT_GENERIC_MSI_FRAME */
     "Generic Interrupt Redistributor",  /* ACPI_MADT_GENERIC_REDISTRIBUTOR */
     "Generic Interrupt Translator",     /* ACPI_MADT_GENERIC_TRANSLATOR */
+    "Mutiprocessor Wakeup",             /* ACPI_MADT_TYPE_MULTIPROC_WAKEUP */
     "Unknown Subtable Type"             /* Reserved */
 };
 
@@ -401,6 +403,12 @@  static const char           *AcpiDmPpttSubnames[] =
     "Unknown Subtable Type"         /* Reserved */
 };
 
+static const char           *AcpiDmRgrtSubnames[] =
+{
+    "Unknown/Reserved Image Type",  /* ACPI_RGRT_TYPE_RESERVED0 */
+    "Type PNG"                      /* ACPI_RGRT_IMAGE_TYPE_PNG */
+};
+
 static const char           *AcpiDmSdevSubnames[] =
 {
     "Namespace Device",             /* ACPI_SDEV_TYPE_NAMESPACE_DEVICE */
@@ -438,9 +446,28 @@  static const char           *AcpiDmTpm2Subnames[] =
 
 static const char           *AcpiDmIvrsSubnames[] =
 {
-    "Hardware Definition Block",
-    "Memory Definition Block",
-    "Unknown Subtable Type"         /* Reserved */
+    "Hardware Definition Block (IVHD)",
+    "Hardware Definition Block - Mixed Format (IVHD)",
+    "Memory Definition Block (IVMD)",
+    "Unknown/Reserved Subtable Type"            /* Reserved */
+};
+
+static const char           *AcpiDmIvrsDevEntryNames[] =
+{
+    "Unknown/Reserved Device Entry Type",       /* 0- Reserved */
+    "Device Entry: Select All Devices",         /* 1 */
+    "Device Entry: Select One Device",          /* 2 */
+    "Device Entry: Start of Range",             /* 3 */
+    "Device Entry: End of Range",               /* 4 */
+    "Device Entry: Alias Select",               /* 66 */
+    "Device Entry: Alias Start of Range",       /* 67 */
+    "Unknown/Reserved Device Entry Type",       /* 68- Reserved */
+    "Unknown/Reserved Device Entry Type",       /* 69- Reserved */
+    "Device Entry: Extended Select",            /* 70 */
+    "Device Entry: Extended Start of Range",    /* 71 */
+    "Device Entry: Special Device",             /* 72 */
+    "Device Entry: ACPI HID Named Device",      /* 240 */
+    "Unknown/Reserved Device Entry Type"        /* Reserved */
 };
 
 static const char           *AcpiDmLpitSubnames[] =
@@ -507,6 +534,7 @@  static const char           *AcpiDmGasAccessWidth[] =
 const ACPI_DMTABLE_DATA     AcpiDmTableData[] =
 {
     {ACPI_SIG_ASF,  NULL,                   AcpiDmDumpAsf,  DtCompileAsf,   TemplateAsf},
+    {ACPI_SIG_BDAT, AcpiDmTableInfoBdat,    NULL,           NULL,           TemplateBdat},
     {ACPI_SIG_BERT, AcpiDmTableInfoBert,    NULL,           NULL,           TemplateBert},
     {ACPI_SIG_BGRT, AcpiDmTableInfoBgrt,    NULL,           NULL,           TemplateBgrt},
     {ACPI_SIG_BOOT, AcpiDmTableInfoBoot,    NULL,           NULL,           TemplateBoot},
@@ -541,7 +569,9 @@  const ACPI_DMTABLE_DATA     AcpiDmTableData[] =
     {ACPI_SIG_PHAT, NULL,                   AcpiDmDumpPhat, DtCompilePhat,  TemplatePhat},
     {ACPI_SIG_PMTT, NULL,                   AcpiDmDumpPmtt, DtCompilePmtt,  TemplatePmtt},
     {ACPI_SIG_PPTT, NULL,                   AcpiDmDumpPptt, DtCompilePptt,  TemplatePptt},
+    {ACPI_SIG_PRMT, NULL,                   AcpiDmDumpPrmt, DtCompilePrmt,  TemplatePrmt},
     {ACPI_SIG_RASF, AcpiDmTableInfoRasf,    NULL,           NULL,           TemplateRasf},
+    {ACPI_SIG_RGRT, NULL,                   AcpiDmDumpRgrt, DtCompileRgrt,  TemplateRgrt},
     {ACPI_SIG_RSDT, NULL,                   AcpiDmDumpRsdt, DtCompileRsdt,  TemplateRsdt},
     {ACPI_SIG_S3PT, NULL,                   NULL,           NULL,           TemplateS3pt},
     {ACPI_SIG_SBST, AcpiDmTableInfoSbst,    NULL,           NULL,           TemplateSbst},
@@ -553,6 +583,7 @@  const ACPI_DMTABLE_DATA     AcpiDmTableData[] =
     {ACPI_SIG_SPMI, AcpiDmTableInfoSpmi,    NULL,           NULL,           TemplateSpmi},
     {ACPI_SIG_SRAT, NULL,                   AcpiDmDumpSrat, DtCompileSrat,  TemplateSrat},
     {ACPI_SIG_STAO, NULL,                   AcpiDmDumpStao, DtCompileStao,  TemplateStao},
+    {ACPI_SIG_SVKL, AcpiDmTableInfoSvkl,    AcpiDmDumpSvkl, DtCompileSvkl,  TemplateSvkl},
     {ACPI_SIG_TCPA, NULL,                   AcpiDmDumpTcpa, DtCompileTcpa,  TemplateTcpa},
     {ACPI_SIG_TPM2, AcpiDmTableInfoTpm2,    AcpiDmDumpTpm2, DtCompileTpm2,  TemplateTpm2},
     {ACPI_SIG_UEFI, AcpiDmTableInfoUefi,    NULL,           DtCompileUefi,  TemplateUefi},
@@ -940,8 +971,8 @@  AcpiDmDumpTable (
         if (SubtableLength && (Info->Offset >= SubtableLength))
         {
             AcpiOsPrintf (
-                "/**** ACPI subtable terminates early - "
-                "may be older version (dump table) */\n");
+                "/**** ACPI subtable terminates early (Len %u) - "
+                "may be older version (dump table) */\n", SubtableLength);
 
             /* Move on to next subtable */
 
@@ -966,11 +997,13 @@  AcpiDmDumpTable (
         case ACPI_DMT_ACCWIDTH:
         case ACPI_DMT_CEDT:
         case ACPI_DMT_IVRS:
+        case ACPI_DMT_IVRS_DE:
         case ACPI_DMT_GTDT:
         case ACPI_DMT_MADT:
         case ACPI_DMT_PCCT:
         case ACPI_DMT_PMTT:
         case ACPI_DMT_PPTT:
+        case ACPI_DMT_RGRT:
         case ACPI_DMT_SDEV:
         case ACPI_DMT_SRAT:
         case ACPI_DMT_ASF:
@@ -1077,6 +1110,11 @@  AcpiDmDumpTable (
             ByteLength = strlen (ACPI_CAST_PTR (char, Target)) + 1;
             break;
 
+        case ACPI_DMT_IVRS_UNTERMINATED_STRING:
+
+            ByteLength = ((ACPI_CAST_PTR (ACPI_IVRS_DEVICE_HID, Target) -1)->UidLength);
+            break;
+
         case ACPI_DMT_GAS:
 
             if (!LastOutputBlankLine)
@@ -1273,7 +1311,7 @@  AcpiDmDumpTable (
 
             /* Convert 16-byte UUID buffer to 36-byte formatted UUID string */
 
-            (void) AuConvertUuidToString ((char *) Target, AslGbl_MsgBuffer);
+            (void) AcpiUtConvertUuidToString ((char *) Target, AslGbl_MsgBuffer);
 
             AcpiOsPrintf ("%s\n", AslGbl_MsgBuffer);
             break;
@@ -1283,6 +1321,11 @@  AcpiDmDumpTable (
             AcpiOsPrintf ("\"%s\"\n", ACPI_CAST_PTR (char, Target));
             break;
 
+        case ACPI_DMT_IVRS_UNTERMINATED_STRING:
+
+            AcpiOsPrintf ("\"%.*s\"\n", ByteLength, ACPI_CAST_PTR (char, Target));
+            break;
+
         /* Fixed length ASCII name fields */
 
         case ACPI_DMT_SIG:
@@ -1684,6 +1727,20 @@  AcpiDmDumpTable (
             AcpiDmDumpBuffer (Target, 0, ByteLength, 0, NULL);
             break;
 
+        case ACPI_DMT_RGRT:
+
+            /* RGRT subtable types */
+
+            Temp8 = *Target;
+            if (Temp8 >= ACPI_RGRT_TYPE_RESERVED)
+            {
+                Temp8 = ACPI_RGRT_TYPE_RESERVED0;
+            }
+
+            AcpiOsPrintf (UINT8_FORMAT, *Target,
+                AcpiDmRgrtSubnames[Temp8]);
+            break;
+
         case ACPI_DMT_SDEV:
 
             /* SDEV subtable types */
@@ -1750,21 +1807,62 @@  AcpiDmDumpTable (
             {
             case ACPI_IVRS_TYPE_HARDWARE1:
             case ACPI_IVRS_TYPE_HARDWARE2:
-            case ACPI_IVRS_TYPE_HARDWARE3:
 
                 Name = AcpiDmIvrsSubnames[0];
                 break;
 
+            case ACPI_IVRS_TYPE_HARDWARE3:
+
+                Name = AcpiDmIvrsSubnames[1];
+                break;
+
             case ACPI_IVRS_TYPE_MEMORY1:
             case ACPI_IVRS_TYPE_MEMORY2:
             case ACPI_IVRS_TYPE_MEMORY3:
 
-                Name = AcpiDmIvrsSubnames[1];
+                Name = AcpiDmIvrsSubnames[2];
                 break;
 
             default:
 
-                Name = AcpiDmIvrsSubnames[2];
+                Name = AcpiDmIvrsSubnames[3];
+                break;
+            }
+
+            AcpiOsPrintf (UINT8_FORMAT, *Target, Name);
+            break;
+
+        case ACPI_DMT_IVRS_DE:
+
+            /* IVRS device entry types */
+
+            Temp8 = *Target;
+            switch (Temp8)
+            {
+            case ACPI_IVRS_TYPE_ALL:
+            case ACPI_IVRS_TYPE_SELECT:
+            case ACPI_IVRS_TYPE_START:
+            case ACPI_IVRS_TYPE_END:
+
+                Name = AcpiDmIvrsDevEntryNames[Temp8];
+                break;
+
+            case ACPI_IVRS_TYPE_ALIAS_SELECT:
+            case ACPI_IVRS_TYPE_ALIAS_START:
+            case ACPI_IVRS_TYPE_EXT_SELECT:
+            case ACPI_IVRS_TYPE_EXT_START:
+            case ACPI_IVRS_TYPE_SPECIAL:
+
+                Name = AcpiDmIvrsDevEntryNames[Temp8 - 61];
+                break;
+
+            case ACPI_IVRS_TYPE_HID:
+
+                Name = AcpiDmIvrsDevEntryNames[Temp8 - 228];
+                break;
+
+            default:
+                Name = AcpiDmIvrsDevEntryNames[0];  /* Unknown/Reserved */
                 break;
             }
 
diff --git a/src/acpica/source/common/dmtbdump2.c b/src/acpica/source/common/dmtbdump2.c
index 80d9d459..1b3cdf76 100644
--- a/src/acpica/source/common/dmtbdump2.c
+++ b/src/acpica/source/common/dmtbdump2.c
@@ -153,6 +153,7 @@ 
 #include "accommon.h"
 #include "acdisasm.h"
 #include "actables.h"
+#include "aslcompiler.h"
 
 /* This module used for application-level code only */
 
@@ -483,7 +484,18 @@  NextSubtable:
  *
  * RETURN:      None
  *
- * DESCRIPTION: Format the contents of a IVRS
+ * DESCRIPTION: Format the contents of a IVRS. Notes:
+ *              The IVRS is essentially a flat table, with the following
+ *              structure:
+ *              <Main ACPI Table Header>
+ *              <Main subtable - virtualization info>
+ *              <IVHD>
+ *                  <Device Entries>
+ *              ...
+ *              <IVHD>
+ *                  <Device Entries>
+ *              <IVMD>
+ *              ...
  *
  ******************************************************************************/
 
@@ -513,36 +525,36 @@  AcpiDmDumpIvrs (
     /* Subtables */
 
     Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset);
+
     while (Offset < Table->Length)
     {
-        /* Common subtable header */
-
-        AcpiOsPrintf ("\n");
-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
-            Subtable->Length, AcpiDmTableInfoIvrsHdr);
-        if (ACPI_FAILURE (Status))
-        {
-            return;
-        }
-
         switch (Subtable->Type)
         {
+        /* Type 10h, IVHD (I/O Virtualization Hardware Definition) */
+
         case ACPI_IVRS_TYPE_HARDWARE1:
 
-            InfoTable = AcpiDmTableInfoIvrs0;
+            AcpiOsPrintf ("\n");
+            InfoTable = AcpiDmTableInfoIvrsHware1;
             break;
 
+        /* Types 11h, 40h, IVHD (I/O Virtualization Hardware Definition) */
+
         case ACPI_IVRS_TYPE_HARDWARE2:
         case ACPI_IVRS_TYPE_HARDWARE3:
 
-            InfoTable = AcpiDmTableInfoIvrs01;
+            AcpiOsPrintf ("\n");
+            InfoTable = AcpiDmTableInfoIvrsHware23;
             break;
 
+        /* Types 20h-22h, IVMD (I/O Virtualization Memory Definition Block) */
+
         case ACPI_IVRS_TYPE_MEMORY1:
         case ACPI_IVRS_TYPE_MEMORY2:
         case ACPI_IVRS_TYPE_MEMORY3:
 
-            InfoTable = AcpiDmTableInfoIvrs1;
+            AcpiOsPrintf ("\n");
+            InfoTable = AcpiDmTableInfoIvrsMemory;
             break;
 
         default:
@@ -562,7 +574,6 @@  AcpiDmDumpIvrs (
 
         /* Dump the subtable */
 
-        AcpiOsPrintf ("\n");
         Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
             Subtable->Length, InfoTable);
         if (ACPI_FAILURE (Status))
@@ -570,7 +581,7 @@  AcpiDmDumpIvrs (
             return;
         }
 
-        /* The hardware subtable can contain multiple device entries */
+        /* The hardware subtables (IVHD) can contain multiple device entries */
 
         if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE1 ||
             Subtable->Type == ACPI_IVRS_TYPE_HARDWARE2 ||
@@ -584,16 +595,19 @@  AcpiDmDumpIvrs (
             }
             else
             {
-                /* ACPI_IVRS_TYPE_HARDWARE2 subtable type */
+                /* ACPI_IVRS_TYPE_HARDWARE2, HARDWARE3 subtable types */
 
                 EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE2);
                 DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable,
                     sizeof (ACPI_IVRS_HARDWARE2));
             }
 
+            /* Process all of the Device Entries */
+
             while (EntryOffset < (Offset + Subtable->Length))
             {
                 AcpiOsPrintf ("\n");
+
                 /*
                  * Upper 2 bits of Type encode the length of the device entry
                  *
@@ -645,7 +659,7 @@  AcpiDmDumpIvrs (
 
                 case ACPI_IVRS_TYPE_HID:
 
-                    EntryLength = 22;
+                    EntryLength = 4;
                     InfoTable = AcpiDmTableInfoIvrsHid;
                     break;
 
@@ -669,21 +683,87 @@  AcpiDmDumpIvrs (
 
                 HidSubtable = ACPI_CAST_PTR (ACPI_IVRS_DEVICE_HID, DeviceEntry);
                 EntryOffset += EntryLength;
-                DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, DeviceEntry,
+                DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, HidSubtable,
                     EntryLength);
 
                 if (EntryType == ACPI_IVRS_TYPE_HID)
                 {
-                    EntryLength = HidSubtable->UidLength;
-                    Status = AcpiDmDumpTable (Table->Length, EntryOffset,
-                        Table, EntryLength, AcpiDmTableInfoIvrsHid1);
+                    /*
+                     * Determine if the HID is an integer or a string.
+                     * An integer is defined to be 32 bits, with the upper 32 bits
+                     * set to zero. (from the ACPI Spec): "The HID can be a 32-bit
+                     * integer or a character string. If an integer, the lower
+                     * 4 bytes of the field contain the integer and the upper
+                     * 4 bytes are padded with 0".
+                     */
+                    if (UtIsIdInteger ((UINT8 *) &HidSubtable->AcpiHid))
+                    {
+                        Status = AcpiDmDumpTable (Table->Length, EntryOffset,
+                            &HidSubtable->AcpiHid, 8, AcpiDmTableInfoIvrsHidInteger);
+                    }
+                    else
+                    {
+                        Status = AcpiDmDumpTable (Table->Length, EntryOffset,
+                            &HidSubtable->AcpiHid, 8, AcpiDmTableInfoIvrsHidString);
+                    }
                     if (ACPI_FAILURE (Status))
                     {
                         return;
                     }
-                    EntryOffset += EntryLength;
+
+                    EntryOffset += 8;
+
+                    /*
+                     * Determine if the CID is an integer or a string. The format
+                     * of the CID is the same as the HID above. From ACPI Spec:
+                     * "If present, CID must be a single Compatible Device ID
+                     * following the same format as the HID field."
+                     */
+                    if (UtIsIdInteger ((UINT8 *) &HidSubtable->AcpiCid))
+                    {
+                        Status = AcpiDmDumpTable (Table->Length, EntryOffset,
+                            &HidSubtable->AcpiCid, 8, AcpiDmTableInfoIvrsCidInteger);
+                    }
+                    else
+                    {
+                        Status = AcpiDmDumpTable (Table->Length, EntryOffset,
+                            &HidSubtable->AcpiCid, 8, AcpiDmTableInfoIvrsCidString);
+                    }
+                    if (ACPI_FAILURE (Status))
+                    {
+                        return;
+                    }
+
+                    EntryOffset += 8;
+                    EntryLength = HidSubtable->UidLength;
+
+                    if (EntryLength > ACPI_IVRS_UID_NOT_PRESENT)
+                    {
+                        /* Dump the UID based upon the UidType field (String or Integer) */
+
+                        if (HidSubtable->UidType == ACPI_IVRS_UID_IS_STRING)
+                        {
+                            Status = AcpiDmDumpTable (Table->Length, EntryOffset,
+                                &HidSubtable->UidType, EntryLength, AcpiDmTableInfoIvrsUidString);
+                            if (ACPI_FAILURE (Status))
+                            {
+                                return;
+                            }
+                        }
+                        else /* ACPI_IVRS_UID_IS_INTEGER */
+                        {
+                            Status = AcpiDmDumpTable (Table->Length, EntryOffset,
+                                &HidSubtable->UidType, EntryLength, AcpiDmTableInfoIvrsUidInteger);
+                            if (ACPI_FAILURE (Status))
+                            {
+                                return;
+                            }
+                        }
+                    }
+
+                    EntryOffset += EntryLength+2;
                     DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER,
-                        DeviceEntry, EntryLength);
+                        Table, EntryOffset);
                 }
             }
         }
@@ -1923,6 +2003,108 @@  NextSubtable:
 }
 
 
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiDmDumpPrmt
+ *
+ * PARAMETERS:  Table               - A PRMT table
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Format the contents of a PRMT. This table type consists
+ *              of an open-ended number of subtables.
+ *
+ ******************************************************************************/
+
+void
+AcpiDmDumpPrmt (
+    ACPI_TABLE_HEADER       *Table)
+{
+    UINT32                  CurrentOffset = sizeof (ACPI_TABLE_HEADER);
+    ACPI_TABLE_PRMT_HEADER  *PrmtHeader;
+    ACPI_PRMT_MODULE_INFO   *PrmtModuleInfo;
+    ACPI_PRMT_HANDLER_INFO  *PrmtHandlerInfo;
+    ACPI_STATUS             Status;
+    UINT32                  i, j;
+
+
+    /* Main table header */
+
+    PrmtHeader = ACPI_ADD_PTR (ACPI_TABLE_PRMT_HEADER, Table, CurrentOffset);
+    Status = AcpiDmDumpTable (Table->Length, CurrentOffset, PrmtHeader,
+        sizeof (ACPI_TABLE_PRMT_HEADER), AcpiDmTableInfoPrmtHdr);
+    if (ACPI_FAILURE (Status))
+    {
+        AcpiOsPrintf ("Invalid PRMT header\n");
+        return;
+    }
+
+    CurrentOffset += sizeof (ACPI_TABLE_PRMT_HEADER);
+
+    /* PRM Module Information Structure array */
+
+    for (i = 0; i < PrmtHeader->ModuleInfoCount; ++i)
+    {
+        PrmtModuleInfo = ACPI_ADD_PTR (ACPI_PRMT_MODULE_INFO, Table, CurrentOffset);
+        Status = AcpiDmDumpTable (Table->Length, CurrentOffset, PrmtModuleInfo,
+            sizeof (ACPI_PRMT_MODULE_INFO), AcpiDmTableInfoPrmtModule);
+
+        CurrentOffset += sizeof (ACPI_PRMT_MODULE_INFO);
+
+        /* PRM handler information structure array */
+
+        for (j = 0; j < PrmtModuleInfo->HandlerInfoCount; ++j)
+        {
+            PrmtHandlerInfo = ACPI_ADD_PTR (ACPI_PRMT_HANDLER_INFO, Table, CurrentOffset);
+            Status = AcpiDmDumpTable (Table->Length, CurrentOffset, PrmtHandlerInfo,
+                sizeof (ACPI_PRMT_HANDLER_INFO), AcpiDmTableInfoPrmtHandler);
+
+            CurrentOffset += sizeof (ACPI_PRMT_HANDLER_INFO);
+        }
+    }
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiDmDumpRgrt
+ *
+ * PARAMETERS:  Table               - A RGRT table
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Format the contents of a RGRT
+ *
+ ******************************************************************************/
+
+void
+AcpiDmDumpRgrt (
+    ACPI_TABLE_HEADER       *Table)
+{
+    ACPI_STATUS             Status;
+    ACPI_TABLE_RGRT         *Subtable = ACPI_CAST_PTR (ACPI_TABLE_RGRT, Table);
+    UINT32                  Offset = sizeof (ACPI_TABLE_RGRT);
+
+
+    /* Main table */
+
+    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoRgrt);
+    if (ACPI_FAILURE (Status))
+    {
+        return;
+    }
+
+    /* Dump the binary image as a subtable */
+
+    Status = AcpiDmDumpTable (Table->Length, Offset, &Subtable->Image,
+        Table->Length - Offset, AcpiDmTableInfoRgrt0);
+    if (ACPI_FAILURE (Status))
+    {
+        return;
+    }
+}
+
+
 /*******************************************************************************
  *
  * FUNCTION:    AcpiDmDumpS3pt
diff --git a/src/acpica/source/common/dmtbdump3.c b/src/acpica/source/common/dmtbdump3.c
index 7f559eee..e81a703b 100644
--- a/src/acpica/source/common/dmtbdump3.c
+++ b/src/acpica/source/common/dmtbdump3.c
@@ -420,6 +420,65 @@  AcpiDmDumpStao (
 }
 
 
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiDmDumpSvkl
+ *
+ * PARAMETERS:  Table               - A SVKL table
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Format the contents of a SVKL. This is a variable-length
+ *              table that contains an open-ended number of key subtables at
+ *              the end of the header.
+ *
+ * NOTES: SVKL is essentially a flat table, with a small main table and
+ *          a variable number of a single type of subtable.
+ *
+ ******************************************************************************/
+
+void
+AcpiDmDumpSvkl (
+    ACPI_TABLE_HEADER       *Table)
+{
+    ACPI_STATUS             Status;
+    UINT32                  Length = Table->Length;
+    UINT32                  Offset = sizeof (ACPI_TABLE_SVKL);
+    ACPI_SVKL_KEY           *Subtable;
+
+
+    /* Main table */
+
+    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoSvkl);
+    if (ACPI_FAILURE (Status))
+    {
+        return;
+    }
+
+    /* The rest of the table consists of subtables (single type) */
+
+    Subtable = ACPI_ADD_PTR (ACPI_SVKL_KEY, Table, Offset);
+    while (Offset < Table->Length)
+    {
+        /* Dump the subtable */
+
+        AcpiOsPrintf ("\n");
+        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+            sizeof (ACPI_SVKL_KEY), AcpiDmTableInfoSvkl0);
+        if (ACPI_FAILURE (Status))
+        {
+            return;
+        }
+
+        /* Point to next subtable */
+
+        Offset += sizeof (ACPI_SVKL_KEY);
+        Subtable = ACPI_ADD_PTR (ACPI_SVKL_KEY, Subtable,
+            sizeof (ACPI_SVKL_KEY));
+    }
+}
+
+
 /*******************************************************************************
  *
  * FUNCTION:    AcpiDmDumpTcpa
@@ -502,6 +561,7 @@  AcpiDmDumpTcpa (
  * DESCRIPTION: Format the contents of a TPM2.
  *
  ******************************************************************************/
+
 static void
 AcpiDmDumpTpm2Rev3 (
     ACPI_TABLE_HEADER       *Table)
diff --git a/src/acpica/source/common/dmtbinfo1.c b/src/acpica/source/common/dmtbinfo1.c
index ea545f53..fbf3980d 100644
--- a/src/acpica/source/common/dmtbinfo1.c
+++ b/src/acpica/source/common/dmtbinfo1.c
@@ -295,6 +295,19 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoAsf4[] =
 };
 
 
+/*******************************************************************************
+ *
+ * BDAT -  BIOS Data ACPI Table
+ *
+ ******************************************************************************/
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoBdat[] =
+{
+    {ACPI_DMT_GAS,      ACPI_BDAT_OFFSET (Gas),                     "BDAT Generic Address", 0},
+    ACPI_DMT_TERMINATOR
+};
+
+
 /*******************************************************************************
  *
  * BERT -  Boot Error Record table
diff --git a/src/acpica/source/common/dmtbinfo2.c b/src/acpica/source/common/dmtbinfo2.c
index 9bb4b48c..00cf2e4d 100644
--- a/src/acpica/source/common/dmtbinfo2.c
+++ b/src/acpica/source/common/dmtbinfo2.c
@@ -414,23 +414,24 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs[] =
     ACPI_DMT_TERMINATOR
 };
 
-/* Common Subtable header (one per Subtable) */
-
-ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsHdr[] =
-{
-    {ACPI_DMT_IVRS,     ACPI_IVRSH_OFFSET (Type),                   "Subtable Type", 0},
-    {ACPI_DMT_UINT8,    ACPI_IVRSH_OFFSET (Flags),                  "Flags", 0},
-    {ACPI_DMT_UINT16,   ACPI_IVRSH_OFFSET (Length),                 "Length", DT_LENGTH},
-    {ACPI_DMT_UINT16,   ACPI_IVRSH_OFFSET (DeviceId),               "DeviceId", 0},
-    ACPI_DMT_TERMINATOR
-};
-
 /* IVRS subtables */
 
 /* 0x10: I/O Virtualization Hardware Definition (IVHD) Block */
 
-ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs0[] =
+ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsHware1[] =
 {
+    {ACPI_DMT_IVRS,     ACPI_IVRSH_OFFSET (Type),                   "Subtable Type", 0},
+    {ACPI_DMT_UINT8,    ACPI_IVRSH_OFFSET (Flags),                  "Flags (decoded below)", DT_FLAG},
+    {ACPI_DMT_FLAG0,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "HtTunEn", 0},
+    {ACPI_DMT_FLAG1,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "PassPW", 0},
+    {ACPI_DMT_FLAG2,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "ResPassPW", 0},
+    {ACPI_DMT_FLAG3,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Isoc Control", 0},
+    {ACPI_DMT_FLAG4,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Iotlb Support", 0},
+    {ACPI_DMT_FLAG5,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Coherent", 0},
+    {ACPI_DMT_FLAG6,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Prefetch Support", 0},
+    {ACPI_DMT_FLAG7,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "PPR Support", 0},
+    {ACPI_DMT_UINT16,   ACPI_IVRSH_OFFSET (Length),                 "Length", DT_LENGTH},
+    {ACPI_DMT_UINT16,   ACPI_IVRSH_OFFSET (DeviceId),               "DeviceId", 0},
     {ACPI_DMT_UINT16,   ACPI_IVRS0_OFFSET (CapabilityOffset),       "Capability Offset", 0},
     {ACPI_DMT_UINT64,   ACPI_IVRS0_OFFSET (BaseAddress),            "Base Address", 0},
     {ACPI_DMT_UINT16,   ACPI_IVRS0_OFFSET (PciSegmentGroup),        "PCI Segment Group", 0},
@@ -439,24 +440,44 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs0[] =
     ACPI_DMT_TERMINATOR
 };
 
-/* 0x10: I/O Virtualization Hardware Definition (IVHD) Block */
+/* 0x11, 0x40: I/O Virtualization Hardware Definition (IVHD) Block */
 
-ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs01[] =
+ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsHware23[] =
 {
-    {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
-};
-
-/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition (IVMD) Block */
-
-ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs1[] =
+    {ACPI_DMT_IVRS,     ACPI_IVRSH_OFFSET (Type),                   "Subtable Type", 0},
+    {ACPI_DMT_UINT8,    ACPI_IVRSH_OFFSET (Flags),                  "Flags (decoded below)", DT_FLAG},
+    {ACPI_DMT_FLAG0,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "HtTunEn", 0},
+    {ACPI_DMT_FLAG1,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "PassPW", 0},
+    {ACPI_DMT_FLAG2,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "ResPassPW", 0},
+    {ACPI_DMT_FLAG3,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Isoc Control", 0},
+    {ACPI_DMT_FLAG4,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Iotlb Support", 0},
+    {ACPI_DMT_FLAG5,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Coherent", 0},
+    {ACPI_DMT_FLAG6,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Prefetch Support", 0},
+    {ACPI_DMT_FLAG7,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "PPR Support", 0},
+    {ACPI_DMT_UINT16,   ACPI_IVRS01_OFFSET (Header.Length),         "Length", DT_LENGTH},
+    {ACPI_DMT_UINT16,   ACPI_IVRS01_OFFSET (Header.DeviceId),       "DeviceId", 0},
+    {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
+};
+
+/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition (IVMD) Device Entry Block */
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsMemory[] =
 {
+    {ACPI_DMT_IVRS,     ACPI_IVRSH_OFFSET (Type),                   "Subtable Type", 0},
+    {ACPI_DMT_UINT8,    ACPI_IVRSH_OFFSET (Flags),                  "Flags (decoded below)", DT_FLAG},
+    {ACPI_DMT_FLAG0,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Unity", 0},
+    {ACPI_DMT_FLAG1,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Readable", 0},
+    {ACPI_DMT_FLAG2,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Writeable", 0},
+    {ACPI_DMT_FLAG3,    ACPI_IVRS_FLAG_OFFSET (Flags,0),            "Exclusion Range", 0},
+    {ACPI_DMT_UINT16,   ACPI_IVRSH_OFFSET (Length),                 "Length", DT_LENGTH},
+    {ACPI_DMT_UINT16,   ACPI_IVRSH_OFFSET (DeviceId),               "DeviceId", 0},
     {ACPI_DMT_UINT16,   ACPI_IVRS1_OFFSET (AuxData),                "Auxiliary Data", 0},
     {ACPI_DMT_UINT64,   ACPI_IVRS1_OFFSET (Reserved),               "Reserved", 0},
     {ACPI_DMT_UINT64,   ACPI_IVRS1_OFFSET (StartAddress),           "Start Address", 0},
@@ -467,19 +488,26 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs1[] =
 /* Device entry header for IVHD block */
 
 #define ACPI_DMT_IVRS_DE_HEADER \
-    {ACPI_DMT_UINT8,    ACPI_IVRSD_OFFSET (Type),                   "Entry Type", 0}, \
+    {ACPI_DMT_IVRS_DE,  ACPI_IVRSD_OFFSET (Type),                   "Subtable Type", 0}, \
     {ACPI_DMT_UINT16,   ACPI_IVRSD_OFFSET (Id),                     "Device ID", 0}, \
-    {ACPI_DMT_UINT8,    ACPI_IVRSD_OFFSET (DataSetting),            "Data Setting", 0}
+    {ACPI_DMT_UINT8,    ACPI_IVRSD_OFFSET (DataSetting),            "Data Setting (decoded below)", 0}, \
+    {ACPI_DMT_FLAG0,    ACPI_IVRSDE_FLAG_OFFSET (DataSetting, 0),   "INITPass", 0}, \
+    {ACPI_DMT_FLAG1,    ACPI_IVRSDE_FLAG_OFFSET (DataSetting, 0),   "EIntPass", 0}, \
+    {ACPI_DMT_FLAG2,    ACPI_IVRSDE_FLAG_OFFSET (DataSetting, 0),   "NMIPass", 0}, \
+    {ACPI_DMT_FLAG3,    ACPI_IVRSDE_FLAG_OFFSET (DataSetting, 0),   "Reserved", 0}, \
+    {ACPI_DMT_FLAGS4,   ACPI_IVRSDE_FLAG_OFFSET (DataSetting, 0),   "System MGMT", 0}, \
+    {ACPI_DMT_FLAG6,    ACPI_IVRSDE_FLAG_OFFSET (DataSetting, 0),   "LINT0 Pass", 0}, \
+    {ACPI_DMT_FLAG7,    ACPI_IVRSDE_FLAG_OFFSET (DataSetting, 0),   "LINT1 Pass", 0}
 
-/* 4-byte device entry */
+/* 4-byte device entry (Types 1,2,3,4) */
 
 ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs4[] =
 {
     ACPI_DMT_IVRS_DE_HEADER,
-    {ACPI_DMT_EXIT,     0,                                          NULL, 0},
+    ACPI_DMT_TERMINATOR
 };
 
-/* 8-byte device entry */
+/* 8-byte device entry (Type Alias Select, Alias Start of Range) */
 
 ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs8a[] =
 {
@@ -490,7 +518,7 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs8a[] =
     ACPI_DMT_TERMINATOR
 };
 
-/* 8-byte device entry */
+/* 8-byte device entry (Type Extended Select, Extended Start of Range) */
 
 ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs8b[] =
 {
@@ -499,7 +527,7 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs8b[] =
     ACPI_DMT_TERMINATOR
 };
 
-/* 8-byte device entry */
+/* 8-byte device entry (Type Special Device) */
 
 ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs8c[] =
 {
@@ -510,21 +538,50 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrs8c[] =
     ACPI_DMT_TERMINATOR
 };
 
-/* Variable-length device entry */
+/* Variable-length Device Entry Type 0xF0 */
 
 ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsHid[] =
 {
     ACPI_DMT_IVRS_DE_HEADER,
-    {ACPI_DMT_NAME8,    ACPI_IVRSHID_OFFSET (AcpiHid),              "ACPI HID", 0},
-    {ACPI_DMT_NAME8,    ACPI_IVRSHID_OFFSET (AcpiCid),              "ACPI CID", 0},
-    {ACPI_DMT_UINT8,    ACPI_IVRSHID_OFFSET (UidType),              "UID Format", DT_DESCRIBES_OPTIONAL},
-    {ACPI_DMT_UINT8,    ACPI_IVRSHID_OFFSET (UidLength),            "UID Length", DT_DESCRIBES_OPTIONAL},
     ACPI_DMT_TERMINATOR
 };
 
-ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsHid1[] =
+ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsUidString[] =
+{
+    {ACPI_DMT_UINT8,    0,                                          "UID Format", DT_DESCRIBES_OPTIONAL},
+    {ACPI_DMT_UINT8,    1,                                          "UID Length", DT_DESCRIBES_OPTIONAL},
+    {ACPI_DMT_IVRS_UNTERMINATED_STRING, 2,                          "UID", DT_OPTIONAL},
+    ACPI_DMT_TERMINATOR
+};
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsUidInteger[] =
+{
+    {ACPI_DMT_UINT8,    0,                                          "UID Format", DT_DESCRIBES_OPTIONAL},
+    {ACPI_DMT_UINT8,    1,                                          "UID Length", DT_DESCRIBES_OPTIONAL},
+    {ACPI_DMT_UINT64, 2,                                            "UID", DT_OPTIONAL},
+    ACPI_DMT_TERMINATOR
+};
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsHidString[] =
 {
-    {ACPI_DMT_RAW_BUFFER, 0,                                        "UID", DT_OPTIONAL},
+    {ACPI_DMT_NAME8,        0,                                      "ACPI HID", 0},
+    ACPI_DMT_TERMINATOR
+};
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsHidInteger[] =
+{
+    {ACPI_DMT_UINT64,       0,                                      "ACPI HID", 0},
+    ACPI_DMT_TERMINATOR
+};
+ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsCidString[] =
+{
+    {ACPI_DMT_NAME8,        0,                                      "ACPI CID", 0},
+    ACPI_DMT_TERMINATOR
+};
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoIvrsCidInteger[] =
+{
+    {ACPI_DMT_UINT64,       0,                                      "ACPI CID", 0},
     ACPI_DMT_TERMINATOR
 };
 
@@ -1537,6 +1594,52 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoPptt2[] =
 };
 
 
+/*******************************************************************************
+ *
+ * PRMT - Platform Runtime Mechanism Table
+ *        Version 1
+ *
+ ******************************************************************************/
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoPrmtHdr[] =
+{
+    {ACPI_DMT_UUID,     ACPI_PRMTH_OFFSET (PlatformGuid[0]),       "Platform GUID", 0},
+    {ACPI_DMT_UINT32,   ACPI_PRMTH_OFFSET (ModuleInfoOffset),      "Module info offset", 0},
+    {ACPI_DMT_UINT32,   ACPI_PRMTH_OFFSET (ModuleInfoCount),       "Module info count", 0},
+    ACPI_DMT_NEW_LINE,
+    ACPI_DMT_TERMINATOR
+
+};
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoPrmtModule[] =
+{
+    {ACPI_DMT_UINT16,   ACPI_PRMT0_OFFSET (Revision),               "Revision", 0},
+    {ACPI_DMT_UINT16,   ACPI_PRMT0_OFFSET (Length),                 "Length", 0},
+    {ACPI_DMT_UUID,     ACPI_PRMT0_OFFSET (ModuleGuid[0]),          "Module GUID", 0},
+    {ACPI_DMT_UINT16,   ACPI_PRMT0_OFFSET (MajorRev),               "Major Revision", 0},
+    {ACPI_DMT_UINT16,   ACPI_PRMT0_OFFSET (MinorRev),               "Minor Revision", 0},
+    {ACPI_DMT_UINT16,   ACPI_PRMT0_OFFSET (HandlerInfoCount),       "Handler Info Count", 0},
+    {ACPI_DMT_UINT32,   ACPI_PRMT0_OFFSET (HandlerInfoOffset),      "Handler Info Offset", 0},
+    {ACPI_DMT_UINT64,   ACPI_PRMT0_OFFSET (MmioListPointer),        "Mmio List pointer", 0},
+    ACPI_DMT_NEW_LINE,
+    ACPI_DMT_TERMINATOR
+
+};
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoPrmtHandler[] =
+{
+    {ACPI_DMT_UINT16,   ACPI_PRMT1_OFFSET (Revision),               "Revision", 0},
+    {ACPI_DMT_UINT16,   ACPI_PRMT1_OFFSET (Length),                 "Length", 0},
+    {ACPI_DMT_UUID,     ACPI_PRMT1_OFFSET (HandlerGuid[0]),         "Handler GUID", 0},
+    {ACPI_DMT_UINT64,   ACPI_PRMT1_OFFSET (HandlerAddress),         "Handler address", 0},
+    {ACPI_DMT_UINT64,   ACPI_PRMT1_OFFSET (StaticDataBufferAddress),"Satic Data Address", 0},
+    {ACPI_DMT_UINT64,   ACPI_PRMT1_OFFSET (AcpiParamBufferAddress), "ACPI Parameter Address", 0},
+    ACPI_DMT_NEW_LINE,
+    ACPI_DMT_TERMINATOR
+
+};
+
+
 /*******************************************************************************
  *
  * RASF -  RAS Feature table
@@ -1550,6 +1653,31 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoRasf[] =
 };
 
 
+/*******************************************************************************
+ *
+ * RGRT -  Regulatory Graphics Resource Table
+ *
+ ******************************************************************************/
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoRgrt[] =
+{
+    {ACPI_DMT_UINT16,   ACPI_RGRT_OFFSET (Version),                 "Version", 0},
+    {ACPI_DMT_RGRT,     ACPI_RGRT_OFFSET (ImageType),               "Image Type", 0},
+    {ACPI_DMT_UINT8,    ACPI_RGRT_OFFSET (Reserved),                "Reserved", 0},
+    ACPI_DMT_TERMINATOR
+};
+
+/*
+ * We treat the binary image field as its own subtable (to make
+ * ACPI_DMT_RAW_BUFFER work properly).
+ */
+ACPI_DMTABLE_INFO           AcpiDmTableInfoRgrt0[] =
+{
+    {ACPI_DMT_RAW_BUFFER, 0,                                        "Image", 0},
+    ACPI_DMT_TERMINATOR
+};
+
+
 /*******************************************************************************
  *
  * S3PT - S3 Performance Table
@@ -1734,4 +1862,5 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoSdev1b[] =
     {ACPI_DMT_RAW_BUFFER, 0,                                        "Vendor Data", 0}, /*, DT_OPTIONAL}, */
     ACPI_DMT_TERMINATOR
 };
+
 /*! [End] no source code translation !*/
diff --git a/src/acpica/source/common/dmtbinfo3.c b/src/acpica/source/common/dmtbinfo3.c
index 773ba16e..b0435019 100644
--- a/src/acpica/source/common/dmtbinfo3.c
+++ b/src/acpica/source/common/dmtbinfo3.c
@@ -403,6 +403,30 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoStaoStr[] =
 };
 
 
+/*******************************************************************************
+ *
+ * SVKL - Storage Volume Key Location table
+ *
+ ******************************************************************************/
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoSvkl[] =
+{
+    {ACPI_DMT_UINT32,   ACPI_SVKL_OFFSET (Count),                   "Key Count", 0},
+    ACPI_DMT_TERMINATOR
+};
+
+/* SVKL subtables */
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoSvkl0[] =
+{
+    {ACPI_DMT_UINT16,   ACPI_SVKL0_OFFSET (Type),                   "Key Type", 0},
+    {ACPI_DMT_UINT16,   ACPI_SVKL0_OFFSET (Format),                 "Key Format", 0},
+    {ACPI_DMT_UINT32,   ACPI_SVKL0_OFFSET (Size),                   "Key Size", 0},
+    {ACPI_DMT_UINT64,   ACPI_SVKL0_OFFSET (Address),                "Key Address", 0},
+    ACPI_DMT_TERMINATOR
+};
+
+
 /*******************************************************************************
  *
  * TCPA - Trusted Computing Platform Alliance table (Client)
diff --git a/src/acpica/source/compiler/aslcompiler.h b/src/acpica/source/compiler/aslcompiler.h
index e48e4674..5112ea49 100644
--- a/src/acpica/source/compiler/aslcompiler.h
+++ b/src/acpica/source/compiler/aslcompiler.h
@@ -1224,6 +1224,10 @@  DbgPrint (
 #define ASL_PARSE_OUTPUT    1
 #define ASL_TREE_OUTPUT     2
 
+BOOLEAN
+UtIsIdInteger (
+    UINT8                   *Target);
+
 UINT8
 UtIsBigEndianMachine (
     void);
diff --git a/src/acpica/source/compiler/aslmessages.c b/src/acpica/source/compiler/aslmessages.c
index c9697645..4dd6422b 100644
--- a/src/acpica/source/compiler/aslmessages.c
+++ b/src/acpica/source/compiler/aslmessages.c
@@ -400,14 +400,16 @@  const char                      *AslTableCompilerMsgs [] =
 /*    ASL_MSG_INVALID_FIELD_NAME */         "Invalid Field Name",
 /*    ASL_MSG_INVALID_HEX_INTEGER */        "Invalid hex integer constant",
 /*    ASL_MSG_OEM_TABLE */                  "OEM table - unknown contents",
-/*    ASL_MSG_RESERVED_VALUE */             "Reserved field",
+/*    ASL_MSG_RESERVED_FIELD */             "Reserved field",
 /*    ASL_MSG_UNKNOWN_LABEL */              "Label is undefined",
 /*    ASL_MSG_UNKNOWN_SUBTABLE */           "Unknown subtable type",
 /*    ASL_MSG_UNKNOWN_TABLE */              "Unknown ACPI table signature",
 /*    ASL_MSG_ZERO_VALUE */                 "Value must be non-zero",
 /*    ASL_MSG_INVALID_LABEL */              "Invalid field label detected",
 /*    ASL_MSG_BUFFER_LIST */                "Invalid buffer initializer list",
-/*    ASL_MSG_ENTRY_LIST */                 "Invalid entry initializer list"
+/*    ASL_MSG_ENTRY_LIST */                 "Invalid entry initializer list",
+/*    ASL_MSG_UNKNOWN_FORMAT */             "Unknown format value",
+/*    ASL_MSG_RESERVED_VALUE */             "Value for field is reserved or unknown",
 };
 
 /* Preprocessor */
diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h
index 1d9f7bec..69c2561b 100644
--- a/src/acpica/source/compiler/aslmessages.h
+++ b/src/acpica/source/compiler/aslmessages.h
@@ -402,7 +402,7 @@  typedef enum
     ASL_MSG_INVALID_FIELD_NAME,
     ASL_MSG_INVALID_HEX_INTEGER,
     ASL_MSG_OEM_TABLE,
-    ASL_MSG_RESERVED_VALUE,
+    ASL_MSG_RESERVED_FIELD,
     ASL_MSG_UNKNOWN_LABEL,
     ASL_MSG_UNKNOWN_SUBTABLE,
     ASL_MSG_UNKNOWN_TABLE,
@@ -410,6 +410,8 @@  typedef enum
     ASL_MSG_INVALID_LABEL,
     ASL_MSG_BUFFER_LIST,
     ASL_MSG_ENTRY_LIST,
+    ASL_MSG_UNKNOWN_FORMAT,
+    ASL_MSG_RESERVED_VALUE,
 
     /* These messages are used by the Preprocessor only */
 
diff --git a/src/acpica/source/compiler/aslutils.c b/src/acpica/source/compiler/aslutils.c
index 5dee45d9..44631957 100644
--- a/src/acpica/source/compiler/aslutils.c
+++ b/src/acpica/source/compiler/aslutils.c
@@ -206,6 +206,46 @@  UtIsBigEndianMachine (
 }
 
 
+/*******************************************************************************
+ *
+ * FUNCTION:    UtIsIdInteger
+ *
+ * PARAMETERS:  Pointer to an ACPI ID (HID, CID) string
+ *
+ * RETURN:      TRUE if string is an integer
+ *              FALSE if string is not an integer
+ *
+ * DESCRIPTION: Determine whether the input ACPI ID string can be converted to
+ *              an integer value.
+ *
+ ******************************************************************************/
+
+BOOLEAN
+UtIsIdInteger (
+    UINT8                   *Target)
+{
+    UINT32                  i;
+
+
+    /* The first three characters of the string must be alphabetic */
+
+    for (i = 0; i < 3; i++)
+    {
+        if (!isalpha ((int) Target[i]))
+        {
+            break;
+        }
+    }
+
+    if (i < 3)
+    {
+        return (TRUE);
+    }
+
+    return (FALSE);
+}
+
+
 /******************************************************************************
  *
  * FUNCTION:    UtQueryForOverwrite
diff --git a/src/acpica/source/compiler/asluuid.c b/src/acpica/source/compiler/asluuid.c
index c8dd4a46..30540acd 100644
--- a/src/acpica/source/compiler/asluuid.c
+++ b/src/acpica/source/compiler/asluuid.c
@@ -212,50 +212,3 @@  AuValidateUuid (
     return (AE_OK);
 }
 
-
-/*******************************************************************************
- *
- * FUNCTION:    AuConvertUuidToString
- *
- * PARAMETERS:  UuidBuffer          - 16-byte UUID buffer
- *              OutString           - 36-byte formatted UUID string
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Convert 16-byte UUID buffer to 36-byte formatted UUID string
- *              OutString must be 37 bytes to include null terminator.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-AuConvertUuidToString (
-    char                    *UuidBuffer,
-    char                    *OutString)
-{
-    UINT32                  i;
-
-
-    if (!UuidBuffer || !OutString)
-    {
-        return (AE_BAD_PARAMETER);
-    }
-
-    for (i = 0; i < UUID_BUFFER_LENGTH; i++)
-    {
-        OutString[AcpiGbl_MapToUuidOffset[i]] =
-            AcpiUtHexToAsciiChar (UuidBuffer[i], 4);
-
-        OutString[AcpiGbl_MapToUuidOffset[i] + 1] =
-            AcpiUtHexToAsciiChar (UuidBuffer[i], 0);
-    }
-
-    /* Insert required hyphens (dashes) */
-
-    OutString[UUID_HYPHEN1_OFFSET] =
-    OutString[UUID_HYPHEN2_OFFSET] =
-    OutString[UUID_HYPHEN3_OFFSET] =
-    OutString[UUID_HYPHEN4_OFFSET] = '-';
-
-    OutString[UUID_STRING_LENGTH] = 0; /* Null terminate */
-    return (AE_OK);
-}
diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h
index f2d00644..4f966808 100644
--- a/src/acpica/source/compiler/dtcompiler.h
+++ b/src/acpica/source/compiler/dtcompiler.h
@@ -673,6 +673,14 @@  ACPI_STATUS
 DtCompilePptt (
     void                    **PFieldList);
 
+ACPI_STATUS
+DtCompilePrmt (
+    void                    **PFieldList);
+
+ACPI_STATUS
+DtCompileRgrt (
+    void                    **PFieldList);
+
 ACPI_STATUS
 DtCompileRsdt (
     void                    **PFieldList);
@@ -701,6 +709,10 @@  ACPI_STATUS
 DtCompileStao (
     void                    **PFieldList);
 
+ACPI_STATUS
+DtCompileSvkl (
+    void                    **PFieldList);
+
 ACPI_STATUS
 DtCompileTcpa (
     void                    **PFieldList);
@@ -743,6 +755,7 @@  DtGetGenericTableInfo (
 
 extern const unsigned char  TemplateAsf[];
 extern const unsigned char  TemplateBoot[];
+extern const unsigned char  TemplateBdat[];
 extern const unsigned char  TemplateBert[];
 extern const unsigned char  TemplateBgrt[];
 extern const unsigned char  TemplateCedt[];
@@ -776,7 +789,9 @@  extern const unsigned char  TemplatePdtt[];
 extern const unsigned char  TemplatePhat[];
 extern const unsigned char  TemplatePmtt[];
 extern const unsigned char  TemplatePptt[];
+extern const unsigned char  TemplatePrmt[];
 extern const unsigned char  TemplateRasf[];
+extern const unsigned char  TemplateRgrt[];
 extern const unsigned char  TemplateRsdt[];
 extern const unsigned char  TemplateS3pt[];
 extern const unsigned char  TemplateSbst[];
@@ -788,6 +803,7 @@  extern const unsigned char  TemplateSpcr[];
 extern const unsigned char  TemplateSpmi[];
 extern const unsigned char  TemplateSrat[];
 extern const unsigned char  TemplateStao[];
+extern const unsigned char  TemplateSvkl[];
 extern const unsigned char  TemplateTcpa[];
 extern const unsigned char  TemplateTpm2[];
 extern const unsigned char  TemplateUefi[];
diff --git a/src/acpica/source/compiler/dtfield.c b/src/acpica/source/compiler/dtfield.c
index ee7788e3..729791d7 100644
--- a/src/acpica/source/compiler/dtfield.c
+++ b/src/acpica/source/compiler/dtfield.c
@@ -434,14 +434,14 @@  DtCompileInteger (
         {
             if (Value != 1)
             {
-                DtError (ASL_WARNING, ASL_MSG_RESERVED_VALUE, Field,
+                DtError (ASL_WARNING, ASL_MSG_RESERVED_FIELD, Field,
                     "Must be one, setting to one");
                 Value = 1;
             }
         }
         else if (Value != 0)
         {
-            DtError (ASL_WARNING, ASL_MSG_RESERVED_VALUE, Field,
+            DtError (ASL_WARNING, ASL_MSG_RESERVED_FIELD, Field,
                 "Must be zero, setting to zero");
             Value = 0;
         }
diff --git a/src/acpica/source/compiler/dtio.c b/src/acpica/source/compiler/dtio.c
index 781b2b8a..e1776f3f 100644
--- a/src/acpica/source/compiler/dtio.c
+++ b/src/acpica/source/compiler/dtio.c
@@ -1086,9 +1086,9 @@  DtDumpSubtableTree (
 {
 
     DbgPrint (ASL_DEBUG_OUTPUT,
-        "[%.04X] %24s %*s%p (%.02X) - (%.02X)\n",
+        "[%.04X] %24s %*s%p (%.02X) - (%.02X)        %.02X\n",
         Subtable->Depth, Subtable->Name, (4 * Subtable->Depth), " ",
-        Subtable, Subtable->Length, Subtable->TotalLength);
+        Subtable, Subtable->Length, Subtable->TotalLength, *Subtable->Buffer);
 }
 
 
@@ -1123,7 +1123,7 @@  DtDumpSubtableList (
     DtWalkTableTree (AslGbl_RootTable, DtDumpSubtableInfo, NULL, NULL);
 
     DbgPrint (ASL_DEBUG_OUTPUT,
-        "\nSubtable Tree: (Depth, Name, Subtable, Length, TotalLength)\n\n");
+        "\nSubtable Tree: (Depth, Name, Subtable, Length, TotalLength, Integer Value)\n\n");
     DtWalkTableTree (AslGbl_RootTable, DtDumpSubtableTree, NULL, NULL);
 
     DbgPrint (ASL_DEBUG_OUTPUT, "\n");
diff --git a/src/acpica/source/compiler/dttable1.c b/src/acpica/source/compiler/dttable1.c
index 458a7174..bf710e31 100644
--- a/src/acpica/source/compiler/dttable1.c
+++ b/src/acpica/source/compiler/dttable1.c
@@ -2058,7 +2058,18 @@  DtCompileIort (
  *
  * RETURN:      Status
  *
- * DESCRIPTION: Compile IVRS.
+ * DESCRIPTION: Compile IVRS. Notes:
+ *              The IVRS is essentially a flat table, with the following
+ *              structure:
+ *              <Main ACPI Table Header>
+ *              <Main subtable - virtualization info>
+ *              <IVHD>
+ *                  <Device Entries>
+ *              ...
+ *              <IVHD>
+ *                  <Device Entries>
+ *              <IVMD>
+ *              ...
  *
  *****************************************************************************/
 
@@ -2069,12 +2080,16 @@  DtCompileIvrs (
     ACPI_STATUS             Status;
     DT_SUBTABLE             *Subtable;
     DT_SUBTABLE             *ParentTable;
+    DT_SUBTABLE             *MainSubtable;
     DT_FIELD                **PFieldList = (DT_FIELD **) List;
     DT_FIELD                *SubtableStart;
-    ACPI_DMTABLE_INFO       *InfoTable;
-    ACPI_IVRS_HEADER        *IvrsHeader;
-    UINT8                   EntryType;
+    ACPI_DMTABLE_INFO       *InfoTable = NULL;
+    UINT8                   SubtableType;
+    UINT8                   Temp64[16];
+    UINT8                   Temp8;
+
 
+    /* Main table */
 
     Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrs,
         &Subtable);
@@ -2085,122 +2100,263 @@  DtCompileIvrs (
 
     ParentTable = DtPeekSubtable ();
     DtInsertSubtable (ParentTable, Subtable);
+    DtPushSubtable (Subtable);
+
+    /* Save a pointer to the main subtable */
+
+    MainSubtable = Subtable;
 
     while (*PFieldList)
     {
         SubtableStart = *PFieldList;
-        Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsHdr,
-            &Subtable);
-        if (ACPI_FAILURE (Status))
-        {
-            return (Status);
-        }
 
-        ParentTable = DtPeekSubtable ();
-        DtInsertSubtable (ParentTable, Subtable);
-        DtPushSubtable (Subtable);
+        /* Compile the SubtableType integer */
 
-        IvrsHeader = ACPI_CAST_PTR (ACPI_IVRS_HEADER, Subtable->Buffer);
+        DtCompileInteger (&SubtableType, *PFieldList, 1, 0);
 
-        switch (IvrsHeader->Type)
+        switch (SubtableType)
         {
+
+        /* Type 10h, IVHD (I/O Virtualization Hardware Definition) */
+
         case ACPI_IVRS_TYPE_HARDWARE1:
 
-            InfoTable = AcpiDmTableInfoIvrs0;
+            InfoTable = AcpiDmTableInfoIvrsHware1;
             break;
 
+        /* Types 11h, 40h, IVHD (I/O Virtualization Hardware Definition) */
+
         case ACPI_IVRS_TYPE_HARDWARE2:
+        case ACPI_IVRS_TYPE_HARDWARE3:
 
-            InfoTable = AcpiDmTableInfoIvrs01;
+            InfoTable = AcpiDmTableInfoIvrsHware23;
             break;
 
+        /* Types 20h, 21h, 22h, IVMD (I/O Virtualization Memory Definition Block) */
+
         case ACPI_IVRS_TYPE_MEMORY1:
         case ACPI_IVRS_TYPE_MEMORY2:
         case ACPI_IVRS_TYPE_MEMORY3:
 
-            InfoTable = AcpiDmTableInfoIvrs1;
+            InfoTable = AcpiDmTableInfoIvrsMemory;
+            break;
+
+        /* 4-byte device entries */
+
+        case ACPI_IVRS_TYPE_PAD4:
+        case ACPI_IVRS_TYPE_ALL:
+        case ACPI_IVRS_TYPE_SELECT:
+        case ACPI_IVRS_TYPE_START:
+        case ACPI_IVRS_TYPE_END:
+
+            InfoTable = AcpiDmTableInfoIvrs4;
+            break;
+
+        /* 8-byte device entries, type A */
+
+        case ACPI_IVRS_TYPE_ALIAS_SELECT:
+        case ACPI_IVRS_TYPE_ALIAS_START:
+
+            InfoTable = AcpiDmTableInfoIvrs8a;
+            break;
+
+        /* 8-byte device entries, type B */
+
+        case ACPI_IVRS_TYPE_EXT_SELECT:
+        case ACPI_IVRS_TYPE_EXT_START:
+
+            InfoTable = AcpiDmTableInfoIvrs8b;
+            break;
+
+        /* 8-byte device entries, type C */
+
+        case ACPI_IVRS_TYPE_SPECIAL:
+
+            InfoTable = AcpiDmTableInfoIvrs8c;
+            break;
+
+        /* Variable device entries, type F0h */
+
+        case ACPI_IVRS_TYPE_HID:
+
+            InfoTable = AcpiDmTableInfoIvrsHid;
             break;
 
         default:
 
-            DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "IVRS");
+            DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart,
+                "IVRS Device Entry");
             return (AE_ERROR);
         }
 
-        Status = DtCompileTable (PFieldList, InfoTable, &Subtable);
+        /* Compile the InfoTable from above */
+
+        Status = DtCompileTable (PFieldList, InfoTable,
+            &Subtable);
         if (ACPI_FAILURE (Status))
         {
             return (Status);
         }
 
         ParentTable = DtPeekSubtable ();
-        DtInsertSubtable (ParentTable, Subtable);
+        if (SubtableType != ACPI_IVRS_TYPE_HARDWARE1 &&
+            SubtableType != ACPI_IVRS_TYPE_HARDWARE2 &&
+            SubtableType != ACPI_IVRS_TYPE_HARDWARE3 &&
+            SubtableType != ACPI_IVRS_TYPE_HID &&
+            SubtableType != ACPI_IVRS_TYPE_MEMORY1 &&
+            SubtableType != ACPI_IVRS_TYPE_MEMORY2 &&
+            SubtableType != ACPI_IVRS_TYPE_MEMORY3)
+        {
+            if (ParentTable)
+                DtInsertSubtable (ParentTable, Subtable);
+        }
 
-        if (IvrsHeader->Type == ACPI_IVRS_TYPE_HARDWARE1 ||
-            IvrsHeader->Type == ACPI_IVRS_TYPE_HARDWARE2)
+        switch (SubtableType)
         {
-            while (*PFieldList &&
-                !strcmp ((*PFieldList)->Name, "Entry Type"))
+        case ACPI_IVRS_TYPE_HARDWARE1:
+        case ACPI_IVRS_TYPE_HARDWARE2:
+        case ACPI_IVRS_TYPE_HARDWARE3:
+        case ACPI_IVRS_TYPE_MEMORY1:
+        case ACPI_IVRS_TYPE_MEMORY2:
+        case ACPI_IVRS_TYPE_MEMORY3:
+
+            /* Insert these IVHDs/IVMDs at the root subtable */
+
+            DtInsertSubtable (MainSubtable, Subtable);
+            DtPushSubtable (Subtable);
+            ParentTable = MainSubtable;
+            break;
+
+        case ACPI_IVRS_TYPE_HID:
+
+            /* Special handling for the HID named device entry (0xF0) */
+
+            if (ParentTable)
+            {
+                DtInsertSubtable (ParentTable, Subtable);
+            }
+
+            /*
+             * Process the HID value. First, get the HID value as a string.
+             */
+            DtCompileOneField ((UINT8 *) &Temp64, *PFieldList, 16, DT_FIELD_TYPE_STRING, 0);
+
+               /*
+                * Determine if the HID is an integer or a string.
+                * An integer is defined to be 32 bits, with the upper 32 bits
+                * set to zero. (from the ACPI Spec): "The HID can be a 32-bit
+                * integer or a character string. If an integer, the lower
+                * 4 bytes of the field contain the integer and the upper
+                * 4 bytes are padded with 0".
+                */
+            if (UtIsIdInteger ((UINT8 *) &Temp64))
             {
-                SubtableStart = *PFieldList;
-                DtCompileInteger (&EntryType, *PFieldList, 1, 0);
+                /* Compile the HID value as an integer */
 
-                switch (EntryType)
+                DtCompileOneField ((UINT8 *) &Temp64, *PFieldList, 8, DT_FIELD_TYPE_INTEGER, 0);
+
+                Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsHidInteger,
+                    &Subtable);
+                if (ACPI_FAILURE (Status))
                 {
-                /* 4-byte device entries */
+                    return (Status);
+                }
+            }
+            else
+            {
+                /* Compile the HID value as a string */
 
-                case ACPI_IVRS_TYPE_PAD4:
-                case ACPI_IVRS_TYPE_ALL:
-                case ACPI_IVRS_TYPE_SELECT:
-                case ACPI_IVRS_TYPE_START:
-                case ACPI_IVRS_TYPE_END:
+                Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsHidString,
+                    &Subtable);
+                if (ACPI_FAILURE (Status))
+                {
+                    return (Status);
+                }
+            }
 
-                    InfoTable = AcpiDmTableInfoIvrs4;
-                    break;
+            DtInsertSubtable (ParentTable, Subtable);
 
-                /* 8-byte entries, type A */
+            /*
+             * Process the CID value. First, get the CID value as a string.
+             */
+            DtCompileOneField ((UINT8 *) &Temp64, *PFieldList, 16, DT_FIELD_TYPE_STRING, 0);
 
-                case ACPI_IVRS_TYPE_ALIAS_SELECT:
-                case ACPI_IVRS_TYPE_ALIAS_START:
+            if (UtIsIdInteger ((UINT8 *) &Temp64))
+            {
+                /* Compile the CID value as an integer */
 
-                    InfoTable = AcpiDmTableInfoIvrs8a;
-                    break;
+                DtCompileOneField ((UINT8 *) &Temp64, *PFieldList, 8, DT_FIELD_TYPE_INTEGER, 0);
 
-                /* 8-byte entries, type B */
+                Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsCidInteger,
+                    &Subtable);
+                if (ACPI_FAILURE (Status))
+                {
+                    return (Status);
+                }
+            }
+            else
+            {
+                /* Compile the CID value as a string */
 
-                case ACPI_IVRS_TYPE_PAD8:
-                case ACPI_IVRS_TYPE_EXT_SELECT:
-                case ACPI_IVRS_TYPE_EXT_START:
+                Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsCidString,
+                    &Subtable);
+                if (ACPI_FAILURE (Status))
+                {
+                    return (Status);
+                }
+            }
 
-                    InfoTable = AcpiDmTableInfoIvrs8b;
-                    break;
+            DtInsertSubtable (ParentTable, Subtable);
 
-                /* 8-byte entries, type C */
+            /*
+             * Process the UID value. First, get and decode the "UID Format" field (Integer).
+             */
+            if (!*PFieldList)
+            {
+                return (AE_OK);
+            }
 
-                case ACPI_IVRS_TYPE_SPECIAL:
+            DtCompileOneField (&Temp8, *PFieldList, 1, DT_FIELD_TYPE_INTEGER, 0);
 
-                    InfoTable = AcpiDmTableInfoIvrs8c;
-                    break;
+            switch (Temp8)
+            {
+            case ACPI_IVRS_UID_NOT_PRESENT:
+                break;
 
-                default:
+            case ACPI_IVRS_UID_IS_INTEGER:
 
-                    DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart,
-                        "IVRS Device Entry");
-                    return (AE_ERROR);
+                Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsUidInteger,
+                    &Subtable);
+                if (ACPI_FAILURE (Status))
+                {
+                    return (Status);
                 }
+                DtInsertSubtable (ParentTable, Subtable);
+                break;
 
-                Status = DtCompileTable (PFieldList, InfoTable,
+            case ACPI_IVRS_UID_IS_STRING:
+
+                Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsUidString,
                     &Subtable);
                 if (ACPI_FAILURE (Status))
                 {
                     return (Status);
                 }
-
                 DtInsertSubtable (ParentTable, Subtable);
+                break;
+
+            default:
+
+                DtFatal (ASL_MSG_UNKNOWN_FORMAT, SubtableStart,
+                    "IVRS Device Entry");
+                return (AE_ERROR);
             }
-        }
 
-        DtPopSubtable ();
+        default:
+
+            /* All other subtable types come through here */
+            break;
+        }
     }
 
     return (AE_OK);
diff --git a/src/acpica/source/compiler/dttable2.c b/src/acpica/source/compiler/dttable2.c
index f6efcf3d..3a0d8a22 100644
--- a/src/acpica/source/compiler/dttable2.c
+++ b/src/acpica/source/compiler/dttable2.c
@@ -1335,6 +1335,118 @@  DtCompilePptt (
 }
 
 
+/******************************************************************************
+ *
+ * FUNCTION:    DtCompilePrmt
+ *
+ * PARAMETERS:  List                - Current field list pointer
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Compile PRMT.
+ *
+ *****************************************************************************/
+
+ACPI_STATUS
+DtCompilePrmt (
+    void                    **List)
+{
+    ACPI_STATUS             Status;
+    ACPI_TABLE_PRMT_HEADER  *PrmtHeader;
+    ACPI_PRMT_MODULE_INFO   *PrmtModuleInfo;
+    DT_SUBTABLE             *Subtable;
+    DT_SUBTABLE             *ParentTable;
+    DT_FIELD                **PFieldList = (DT_FIELD **) List;
+    UINT32                  i, j;
+
+    ParentTable = DtPeekSubtable ();
+
+    /* Compile PRMT subtable header */
+
+    Status = DtCompileTable (PFieldList, AcpiDmTableInfoPrmtHdr,
+        &Subtable);
+    if (ACPI_FAILURE (Status))
+    {
+        return (Status);
+    }
+    DtInsertSubtable (ParentTable, Subtable);
+    PrmtHeader = ACPI_CAST_PTR (ACPI_TABLE_PRMT_HEADER, Subtable->Buffer);
+
+    for (i = 0; i < PrmtHeader->ModuleInfoCount; i++)
+    {
+        Status = DtCompileTable (PFieldList, AcpiDmTableInfoPrmtModule,
+            &Subtable);
+        if (ACPI_FAILURE (Status))
+        {
+            return (Status);
+        }
+        DtInsertSubtable (ParentTable, Subtable);
+        PrmtModuleInfo = ACPI_CAST_PTR (ACPI_PRMT_MODULE_INFO, Subtable->Buffer);
+
+        for (j = 0; j < PrmtModuleInfo->HandlerInfoCount; j++)
+        {
+            Status = DtCompileTable (PFieldList, AcpiDmTableInfoPrmtHandler,
+                &Subtable);
+            if (ACPI_FAILURE (Status))
+            {
+                return (Status);
+            }
+            DtInsertSubtable (ParentTable, Subtable);
+        }
+    }
+
+    return (AE_OK);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    DtCompileRgrt
+ *
+ * PARAMETERS:  List                - Current field list pointer
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Compile RGRT.
+ *
+ *****************************************************************************/
+
+ACPI_STATUS
+DtCompileRgrt (
+    void                    **List)
+{
+    ACPI_STATUS             Status;
+    DT_SUBTABLE             *Subtable;
+    DT_SUBTABLE             *ParentTable;
+    DT_FIELD                **PFieldList = (DT_FIELD **) List;
+
+
+    /* Compile the main table */
+
+    Status = DtCompileTable (PFieldList, AcpiDmTableInfoRgrt,
+        &Subtable);
+    if (ACPI_FAILURE (Status))
+    {
+        return (Status);
+    }
+
+    ParentTable = DtPeekSubtable ();
+    DtInsertSubtable (ParentTable, Subtable);
+
+    /* Compile the "Subtable" -- actually just the binary (PNG) image */
+
+    Status = DtCompileTable (PFieldList, AcpiDmTableInfoRgrt0,
+        &Subtable);
+    if (ACPI_FAILURE (Status))
+    {
+        return (Status);
+    }
+
+    DtInsertSubtable (ParentTable, Subtable);
+    return (AE_OK);
+}
+
+
 /******************************************************************************
  *
  * FUNCTION:    DtCompileRsdt
@@ -2024,6 +2136,63 @@  DtCompileStao (
 }
 
 
+
+/******************************************************************************
+ *
+ * FUNCTION:    DtCompileSvkl
+ *
+ * PARAMETERS:  PFieldList          - Current field list pointer
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Compile SVKL.
+ *
+ * NOTES: SVKL is essentially a flat table, with a small main table and
+ *          a variable number of a single type of subtable.
+ *
+ *****************************************************************************/
+
+ACPI_STATUS
+DtCompileSvkl (
+    void                    **List)
+{
+    DT_FIELD                **PFieldList = (DT_FIELD **) List;
+    DT_SUBTABLE             *Subtable;
+    DT_SUBTABLE             *ParentTable;
+    ACPI_STATUS             Status;
+
+
+    /* Compile the main table */
+
+    Status = DtCompileTable (PFieldList, AcpiDmTableInfoSvkl,
+        &Subtable);
+    if (ACPI_FAILURE (Status))
+    {
+        return (Status);
+    }
+
+    ParentTable = DtPeekSubtable ();
+    DtInsertSubtable (ParentTable, Subtable);
+
+    /* Compile each subtable */
+
+    while (*PFieldList)
+    {
+        Status = DtCompileTable (PFieldList, AcpiDmTableInfoSvkl0,
+            &Subtable);
+        if (ACPI_FAILURE (Status))
+        {
+            return (Status);
+        }
+
+        ParentTable = DtPeekSubtable ();
+        DtInsertSubtable (ParentTable, Subtable);
+    }
+
+    return (AE_OK);
+}
+
+
 /******************************************************************************
  *
  * FUNCTION:    DtCompileTcpa
diff --git a/src/acpica/source/compiler/dttemplate.h b/src/acpica/source/compiler/dttemplate.h
index fbe68ec9..224a6a11 100644
--- a/src/acpica/source/compiler/dttemplate.h
+++ b/src/acpica/source/compiler/dttemplate.h
@@ -174,6 +174,16 @@  const unsigned char TemplateAsf[] =
     0x01,0x00                                 /* 00000070    ".."       */
 };
 
+const unsigned char TemplateBdat[] =
+{
+    0x42,0x44,0x41,0x54,0x30,0x00,0x00,0x00,  /* 00000000    "BDAT0..." */
+    0x01,0xED,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
+    0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65,  /* 00000010    "Template" */
+    0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
+    0x31,0x03,0x21,0x20,0x01,0x08,0x00,0x01,  /* 00000020    "1.! ...." */
+    0xF0,0xDE,0xBC,0x9A,0x78,0x56,0x34,0x12   /* 00000028    "....xV4." */
+};
+
 const unsigned char TemplateBgrt[] =
 {
     0x42,0x47,0x52,0x54,0x38,0x00,0x00,0x00,  /* 00000000    "BGRT8..." */
@@ -794,30 +804,72 @@  const unsigned char TemplateIort[] =
 
 const unsigned char TemplateIvrs[] =
 {
-    0x49,0x56,0x52,0x53,0xBC,0x00,0x00,0x00,  /* 00000000    "IVRS...." */
-    0x01,0x87,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
+    0x49,0x56,0x52,0x53,0x10,0x02,0x00,0x00,  /* 00000000    "IVRS...." */
+    0x02,0x6C,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    ".lINTEL " */
     0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45,  /* 00000010    "TEMPLATE" */
     0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
-    0x28,0x05,0x10,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "(.. ...." */
+    0x31,0x03,0x21,0x20,0x41,0x30,0x20,0x00,  /* 00000020    "1.! A0 ." */
     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000028    "........" */
-    0x10,0x14,0x34,0x00,0x00,0x00,0x00,0x00,  /* 00000030    "..4....." */
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000038    "........" */
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000040    "........" */
-    0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,  /* 00000048    "....@..." */
-    0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,  /* 00000050    "....B..." */
-    0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,  /* 00000058    "....H..." */
-    0x00,0x00,0x00,0x00,0x20,0x08,0x20,0x00,  /* 00000060    ".... . ." */
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000068    "........" */
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000070    "........" */
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000078    "........" */
-    0x00,0x00,0x00,0x00,0x21,0x04,0x20,0x00,  /* 00000080    "....!. ." */
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000088    "........" */
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000090    "........" */
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000098    "........" */
-    0x00,0x00,0x00,0x00,0x10,0x14,0x18,0x00,  /* 000000A0    "........" */
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000A8    "........" */
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000B0    "........" */
-    0x00,0x00,0x00,0x00                       /* 000000B8    "...."     */
+    0x10,0xB0,0x64,0x00,0x02,0x00,0x40,0x00,  /* 00000030    "..d...@." */
+    0x00,0x00,0xF0,0xFD,0x00,0x00,0x00,0x00,  /* 00000038    "........" */
+    0x00,0x00,0x00,0x00,0x6F,0x8F,0x04,0x80,  /* 00000040    "....o..." */
+    0x03,0x08,0x00,0x00,0x01,0x08,0x00,0x00,  /* 00000048    "........" */
+    0x02,0x08,0x00,0x00,0x04,0xFE,0xFF,0x00,  /* 00000050    "........" */
+    0x42,0x00,0xFF,0x00,0x00,0xA5,0x00,0x00,  /* 00000058    "B......." */
+    0x43,0x00,0xFF,0x00,0x00,0xA5,0x00,0x00,  /* 00000060    "C......." */
+    0x46,0x00,0xFF,0x00,0x44,0x33,0x22,0x11,  /* 00000068    "F...D3"." */
+    0x47,0x00,0xFF,0x00,0x44,0x33,0x22,0x11,  /* 00000070    "G...D3"." */
+    0x04,0xFF,0xFF,0x00,0x48,0x00,0x00,0x00,  /* 00000078    "....H..." */
+    0x00,0xA0,0x00,0x02,0x48,0x00,0x00,0xD7,  /* 00000080    "....H..." */
+    0x21,0xA0,0x00,0x01,0x48,0x00,0x00,0x00,  /* 00000088    "!...H..." */
+    0x22,0x01,0x00,0x01,0x11,0xB0,0x48,0x00,  /* 00000090    "".....H." */
+    0x02,0x00,0x40,0x00,0x00,0x00,0xF0,0xFD,  /* 00000098    "..@....." */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000A0    "........" */
+    0x00,0x02,0x04,0x00,0xDE,0x4A,0x25,0x22,  /* 000000A8    ".....J%"" */
+    0xEF,0x73,0x6D,0x20,0x00,0x00,0x00,0x00,  /* 000000B0    ".sm ...." */
+    0x00,0x00,0x00,0x00,0x03,0x08,0x00,0x00,  /* 000000B8    "........" */
+    0x04,0xFE,0xFF,0x00,0x43,0x00,0xFF,0x00,  /* 000000C0    "....C..." */
+    0x00,0xA5,0x00,0x00,0x04,0xFF,0xFF,0x00,  /* 000000C8    "........" */
+    0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,  /* 000000D0    "....H..." */
+    0x00,0xA0,0x00,0x02,0x40,0xB0,0xD4,0x00,  /* 000000D8    "....@..." */
+    0x02,0x00,0x40,0x00,0x00,0x00,0xF0,0xFD,  /* 000000E0    "..@....." */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000E8    "........" */
+    0x00,0x02,0x04,0x00,0xDE,0x4A,0x25,0x22,  /* 000000F0    ".....J%"" */
+    0xEF,0x73,0x6D,0x20,0x00,0x00,0x00,0x00,  /* 000000F8    ".sm ...." */
+    0x00,0x00,0x00,0x00,0x03,0x08,0x00,0x00,  /* 00000100    "........" */
+    0x04,0xFE,0xFF,0x00,0x43,0x00,0xFF,0x00,  /* 00000108    "....C..." */
+    0x00,0xA5,0x00,0x00,0x04,0xFF,0xFF,0x00,  /* 00000110    "........" */
+    0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,  /* 00000118    "....H..." */
+    0x00,0xA0,0x00,0x02,0x48,0x00,0x00,0xD7,  /* 00000120    "....H..." */
+    0x21,0xA0,0x00,0x01,0x48,0x00,0x00,0x00,  /* 00000128    "!...H..." */
+    0x22,0x01,0x00,0x01,0xF0,0xA5,0x00,0x40,  /* 00000130    ""......@" */
+    0x49,0x4E,0x54,0x43,0x30,0x30,0x32,0x30,  /* 00000138    "INTC0020" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000140    "........" */
+    0x02,0x09,0x5C,0x5F,0x53,0x42,0x2E,0x44,  /* 00000148    "..\_SB.D" */
+    0x45,0x56,0x30,0xF0,0xA5,0x00,0x40,0x49,  /* 00000150    "EV0...@I" */
+    0x4E,0x54,0x43,0x30,0x30,0x32,0x30,0x00,  /* 00000158    "NTC0020." */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,  /* 00000160    "........" */
+    0x09,0x5C,0x5F,0x53,0x42,0x2E,0x44,0x45,  /* 00000168    ".\_SB.DE" */
+    0x56,0x31,0xF0,0xA5,0x00,0x40,0x49,0x4E,  /* 00000170    "V1...@IN" */
+    0x54,0x43,0x30,0x30,0x32,0x30,0x00,0x00,  /* 00000178    "TC0020.." */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x09,  /* 00000180    "........" */
+    0x5C,0x5F,0x53,0x42,0x2E,0x44,0x45,0x56,  /* 00000188    "\_SB.DEV" */
+    0x32,0xF0,0xA5,0x00,0x40,0x49,0x4E,0x54,  /* 00000190    "2...@INT" */
+    0x43,0x30,0x30,0x32,0x30,0x00,0x00,0x00,  /* 00000198    "C0020..." */
+    0x00,0x00,0x00,0x00,0x00,0x02,0x09,0x5C,  /* 000001A0    ".......\" */
+    0x5F,0x53,0x42,0x2E,0x44,0x45,0x56,0x33,  /* 000001A8    "_SB.DEV3" */
+    0x20,0x0D,0x20,0x00,0x22,0x11,0x00,0x00,  /* 000001B0    " . ."..." */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001B8    "........" */
+    0xCD,0xAB,0x78,0x56,0x34,0x12,0x00,0x00,  /* 000001C0    "..xV4..." */
+    0xDC,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001C8    "........" */
+    0x21,0x0D,0x20,0x00,0x22,0x11,0x00,0x00,  /* 000001D0    "!. ."..." */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001D8    "........" */
+    0xCD,0xAB,0x78,0x56,0x34,0x12,0x00,0x00,  /* 000001E0    "..xV4..." */
+    0xDC,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001E8    "........" */
+    0x22,0x0D,0x20,0x00,0x22,0x11,0x00,0x00,  /* 000001F0    "". ."..." */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001F8    "........" */
+    0xCD,0xAB,0x78,0x56,0x34,0x12,0x00,0x00,  /* 00000200    "..xV4..." */
+    0xDC,0xFE,0x00,0x00,0x00,0x00,0x00,0x00   /* 00000208    "........" */
 };
 
 const unsigned char TemplateLpit[] =
@@ -1205,6 +1257,97 @@  const unsigned char TemplatePptt[] =
     0x00,0x00                                 /* 00000070    ".."       */
 };
 
+const unsigned char TemplatePrmt[] =
+{
+    0x50,0x52,0x4D,0x54,0xB8,0x02,0x00,0x00,  /* 00000000    "PRMT...." */
+    0x00,0x13,0x4F,0x45,0x4D,0x43,0x41,0x20,  /* 00000008    "..OEMCA " */
+    0x4F,0x45,0x4D,0x43,0x41,0x20,0x20,0x20,  /* 00000010    "OEMCA   " */
+    0x02,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
+    0x17,0x07,0x20,0x20,0xA5,0x61,0x6B,0xB6,  /* 00000020    "..  .ak." */
+    0x01,0xA1,0x46,0xED,0xA6,0xA3,0xCA,0xC1,  /* 00000028    "..F....." */
+    0xC4,0xD1,0x30,0x1E,0x3C,0x00,0x00,0x00,  /* 00000030    "..0.<..." */
+    0x04,0x00,0x00,0x00,0x00,0x00,0xAA,0x00,  /* 00000038    "........" */
+    0xC2,0xB3,0x52,0x16,0xA1,0xA7,0xAC,0x46,  /* 00000040    "..R....F" */
+    0xAF,0x93,0xDD,0x6D,0xEE,0x44,0x66,0x69,  /* 00000048    "...m.Dfi" */
+    0x01,0x00,0x00,0x00,0x03,0x00,0x26,0x00,  /* 00000050    "......&." */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000058    "........" */
+    0x00,0x00,0x00,0x00,0x2C,0x00,0x5F,0xAD,  /* 00000060    "....,._." */
+    0xF2,0xD5,0x47,0xA3,0x3E,0x4D,0x87,0xBC,  /* 00000068    "..G.>M.." */
+    0xC2,0xCE,0x63,0x02,0x9C,0xC8,0x90,0xC2,  /* 00000070    "..c....." */
+    0x5E,0x8A,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000078    "^......." */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000080    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000088    "........" */
+    0x2C,0x00,0xC3,0xAD,0xE7,0xA9,0xD0,0x8C,  /* 00000090    ",......." */
+    0x9A,0x42,0x89,0x15,0x10,0x94,0x6E,0xBD,  /* 00000098    ".B....n." */
+    0xE3,0x18,0xC0,0xC2,0x5E,0x8A,0x00,0x00,  /* 000000A0    "....^..." */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000A8    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000B0    "........" */
+    0x00,0x00,0x00,0x00,0x2C,0x00,0x14,0xC2,  /* 000000B8    "....,..." */
+    0x88,0xB6,0x81,0x40,0xEB,0x4E,0x8D,0x26,  /* 000000C0    "...@.N.&" */
+    0x1E,0xB5,0xA3,0xBC,0xF1,0x1A,0xF0,0xC2,  /* 000000C8    "........" */
+    0x5E,0x8A,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000D0    "^......." */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000D8    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000E0    "........" */
+    0x52,0x00,0xA6,0x58,0x2A,0xDC,0x27,0x59,  /* 000000E8    "R..X*.'Y" */
+    0x76,0x47,0xB9,0x95,0xD1,0x18,0xA2,0x73,  /* 000000F0    "vG.....s" */
+    0x35,0xA2,0x01,0x00,0x00,0x00,0x01,0x00,  /* 000000F8    "5......." */
+    0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000100    "&......." */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x2C,0x00,  /* 00000108    "......,." */
+    0x13,0x2D,0x4F,0x2E,0x40,0x62,0xD0,0x4E,  /* 00000110    ".-O.@b.N" */
+    0xA4,0x01,0xC7,0x23,0xFB,0xDC,0x34,0xE8,  /* 00000118    "...#..4." */
+    0x90,0x32,0x5E,0x8A,0x00,0x00,0x00,0x00,  /* 00000120    ".2^....." */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000128    "........" */
+    0xF8,0x7F,0x71,0x8A,0x00,0x00,0x00,0x00,  /* 00000130    "..q....." */
+    0x00,0x00,0x2E,0x01,0xD7,0x3E,0xF9,0x0E,  /* 00000138    ".....>.." */
+    0xAE,0x14,0x5B,0x42,0x92,0x8F,0xB8,0x5A,  /* 00000140    "..[B...Z" */
+    0x62,0x13,0xB5,0x7E,0x01,0x00,0x00,0x00,  /* 00000148    "b..~...." */
+    0x06,0x00,0x26,0x00,0x00,0x00,0xE0,0x3F,  /* 00000150    "..&....?" */
+    0x71,0x8A,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000158    "q......." */
+    0x2C,0x00,0x3C,0xCD,0x20,0x21,0x8B,0x84,  /* 00000160    ",.<. !.." */
+    0x8F,0x4D,0xAB,0xBB,0x4B,0x74,0xCE,0x64,  /* 00000168    ".M..Kt.d" */
+    0xAC,0x89,0x4C,0xA6,0x5D,0x8A,0x00,0x00,  /* 00000170    "..L.]..." */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000178    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000180    "........" */
+    0x00,0x00,0x00,0x00,0x2C,0x00,0xA7,0x35,  /* 00000188    "....,..5" */
+    0x09,0xEA,0x6B,0x50,0x59,0x41,0xBB,0xBB,  /* 00000190    "..kPYA.." */
+    0x48,0xDE,0xEE,0xCB,0x6F,0x58,0x34,0xA7,  /* 00000198    "H...oX4." */
+    0x5D,0x8A,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001A0    "]......." */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001A8    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001B0    "........" */
+    0x2C,0x00,0xA9,0xBD,0xD1,0x1B,0x9A,0x90,  /* 000001B8    ",......." */
+    0x14,0x46,0x96,0x99,0x25,0xEC,0x0C,0x27,  /* 000001C0    ".F..%..'" */
+    0x83,0xF7,0x94,0xA7,0x5D,0x8A,0x00,0x00,  /* 000001C8    "....]..." */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001D0    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001D8    "........" */
+    0x00,0x00,0x00,0x00,0x2C,0x00,0xE7,0xB4,  /* 000001E0    "....,..." */
+    0x28,0x5D,0x67,0x38,0xEE,0x4A,0xAA,0x09,  /* 000001E8    "(]g8.J.." */
+    0x51,0xFC,0x28,0x2C,0x3B,0x22,0x9C,0xA6,  /* 000001F0    "Q.(,;".." */
+    0x5D,0x8A,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001F8    "]......." */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000200    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000208    "........" */
+    0x2C,0x00,0x02,0xB7,0x64,0x4B,0x2B,0x4D,  /* 00000210    ",...dK+M" */
+    0xFE,0x4D,0xAC,0x5A,0x0B,0x41,0x10,0xA2,  /* 00000218    ".M.Z.A.." */
+    0xCA,0x47,0x48,0xA7,0x5D,0x8A,0x00,0x00,  /* 00000220    ".GH.]..." */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000228    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000230    "........" */
+    0x00,0x00,0x00,0x00,0x2C,0x00,0xDE,0xFD,  /* 00000238    "....,..." */
+    0x0E,0x8A,0xD0,0x78,0xF0,0x45,0xAE,0xA0,  /* 00000240    "...x.E.." */
+    0xC2,0x82,0x45,0xC7,0xE1,0xDB,0x98,0xA7,  /* 00000248    "..E....." */
+    0x5D,0x8A,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000250    "]......." */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000258    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000260    "........" */
+    0x52,0x00,0x2B,0xF4,0x6C,0x5A,0xB4,0x8B,  /* 00000268    "R.+.lZ.." */
+    0x2C,0x47,0xA2,0x33,0x5C,0x4D,0xC4,0x03,  /* 00000270    ",G.3\M.." */
+    0x3D,0xC7,0x01,0x00,0x00,0x00,0x01,0x00,  /* 00000278    "=......." */
+    0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000280    "&......." */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x2C,0x00,  /* 00000288    "......,." */
+    0x81,0x60,0x46,0xE1,0x62,0x75,0x0F,0x43,  /* 00000290    ".`F.bu.C" */
+    0x89,0x6B,0xB0,0xE5,0x23,0xDC,0x33,0x5A,  /* 00000298    ".k..#.3Z" */
+    0x90,0x12,0x5D,0x8A,0x00,0x00,0x00,0x00,  /* 000002A0    "..]....." */
+    0xE0,0x5F,0x71,0x8A,0x00,0x00,0x00,0x00,  /* 000002A8    "._q....." */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00   /* 000002B0    "........" */
+};
+
 const unsigned char TemplateRasf[] =
 {
     0x52,0x41,0x53,0x46,0x30,0x00,0x00,0x00,  /* 00000000    "RASF0..." */
@@ -1215,6 +1358,20 @@  const unsigned char TemplateRasf[] =
     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00   /* 00000028    "........" */
 };
 
+const unsigned char TemplateRgrt[] =
+{
+    0x52,0x47,0x52,0x54,0x50,0x00,0x00,0x00,  /* 00000000    "RGRTP..." */
+    0x01,0x33,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    ".3INTEL " */
+    0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65,  /* 00000010    "Template" */
+    0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
+    0x31,0x03,0x21,0x20,0x01,0x00,0x01,0x00,  /* 00000020    "1.! ...." */
+    0xAA,0x01,0x02,0x03,0x04,0x05,0x06,0x07,  /* 00000028    "........" */
+    0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,  /* 00000030    "........" */
+    0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,  /* 00000038    "........" */
+    0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,  /* 00000040    "........" */
+    0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27   /* 00000048    " !"#$%&'" */
+};
+
 const unsigned char TemplateRsdp[] =
 {
     0x52,0x53,0x44,0x20,0x50,0x54,0x52,0x20,  /* 00000000    "RSD PTR " */
@@ -1475,6 +1632,19 @@  const unsigned char TemplateStao[] =
     0x31,0x2E,0x50,0x54,0x31,0x00             /* 00000078    "1.PT1."   */
 };
 
+const unsigned char TemplateSvkl[] =
+{
+    0x53,0x56,0x4B,0x4C,0x48,0x00,0x00,0x00,  /* 00000000    "SVKLH..." */
+    0x04,0xDB,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
+    0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65,  /* 00000010    "Template" */
+    0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
+    0x31,0x03,0x21,0x20,0x02,0x00,0x00,0x00,  /* 00000020    "1.! ...." */
+    0x00,0x00,0x00,0x00,0x21,0x43,0xAA,0xAA,  /* 00000028    "....!C.." */
+    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 00000030    "....gE#." */
+    0x00,0x00,0x00,0x00,0x21,0x43,0xBB,0xBB,  /* 00000038    "....!C.." */
+    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01   /* 00000040    "....gE#." */
+};
+
 const unsigned char TemplateTcpa[] =
 {
     0x54,0x43,0x50,0x41,0x64,0x00,0x00,0x00,  /* 00000000    "TCPAd..." */
diff --git a/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c
index d69ad2fb..ba454b31 100644
--- a/src/acpica/source/compiler/dtutils.c
+++ b/src/acpica/source/compiler/dtutils.c
@@ -426,6 +426,7 @@  DtGetFieldType (
     case ACPI_DMT_NAME6:
     case ACPI_DMT_NAME8:
     case ACPI_DMT_STRING:
+    case ACPI_DMT_IVRS_UNTERMINATED_STRING:
 
         Type = DT_FIELD_TYPE_STRING;
         break;
@@ -576,11 +577,13 @@  DtGetFieldLength (
     case ACPI_DMT_ACCWIDTH:
     case ACPI_DMT_CEDT:
     case ACPI_DMT_IVRS:
+    case ACPI_DMT_IVRS_DE:
     case ACPI_DMT_GTDT:
     case ACPI_DMT_MADT:
     case ACPI_DMT_PCCT:
     case ACPI_DMT_PMTT:
     case ACPI_DMT_PPTT:
+    case ACPI_DMT_RGRT:
     case ACPI_DMT_SDEV:
     case ACPI_DMT_SRAT:
     case ACPI_DMT_ASF:
@@ -660,6 +663,22 @@  DtGetFieldLength (
         }
         break;
 
+    case ACPI_DMT_IVRS_UNTERMINATED_STRING:
+
+        Value = DtGetFieldValue (Field);
+        if (Value)
+        {
+            ByteLength = strlen (Value);
+        }
+        else
+        {   /* At this point, this is a fatal error */
+
+            sprintf (AslGbl_MsgBuffer, "Expected \"%s\"", Info->Name);
+            DtFatal (ASL_MSG_COMPILER_INTERNAL, NULL, AslGbl_MsgBuffer);
+            return (0);
+        }
+        break;
+
     case ACPI_DMT_GAS:
 
         ByteLength = sizeof (ACPI_GENERIC_ADDRESS);
diff --git a/src/acpica/source/components/executer/exfield.c b/src/acpica/source/components/executer/exfield.c
index 585d21cc..7871e350 100644
--- a/src/acpica/source/components/executer/exfield.c
+++ b/src/acpica/source/components/executer/exfield.c
@@ -295,7 +295,8 @@  AcpiExReadDataFromField (
     else if ((ObjDesc->Common.Type == ACPI_TYPE_LOCAL_REGION_FIELD) &&
         (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS ||
          ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_GSBUS ||
-         ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_IPMI))
+         ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_IPMI  ||
+         ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_PLATFORM_RT))
     {
         /* SMBus, GSBus, IPMI serial */
 
@@ -467,7 +468,8 @@  AcpiExWriteDataToField (
     else if ((ObjDesc->Common.Type == ACPI_TYPE_LOCAL_REGION_FIELD) &&
         (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS ||
          ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_GSBUS ||
-         ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_IPMI))
+         ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_IPMI  ||
+         ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_PLATFORM_RT))
     {
         /* SMBus, GSBus, IPMI serial */
 
diff --git a/src/acpica/source/components/executer/exserial.c b/src/acpica/source/components/executer/exserial.c
index 69ce5316..776409db 100644
--- a/src/acpica/source/components/executer/exserial.c
+++ b/src/acpica/source/components/executer/exserial.c
@@ -353,6 +353,12 @@  AcpiExReadSerialBus (
         Function = ACPI_READ | (AccessorType << 16);
         break;
 
+    case ACPI_ADR_SPACE_PLATFORM_RT:
+
+        BufferLength = ACPI_PRM_INPUT_BUFFER_SIZE;
+        Function = ACPI_READ;
+        break;
+
     default:
         return_ACPI_STATUS (AE_AML_INVALID_SPACE_ID);
     }
@@ -472,6 +478,12 @@  AcpiExWriteSerialBus (
         Function = ACPI_WRITE | (AccessorType << 16);
         break;
 
+    case ACPI_ADR_SPACE_PLATFORM_RT:
+
+        BufferLength = ACPI_PRM_INPUT_BUFFER_SIZE;
+        Function = ACPI_WRITE;
+        break;
+
     default:
         return_ACPI_STATUS (AE_AML_INVALID_SPACE_ID);
     }
diff --git a/src/acpica/source/components/namespace/nsrepair2.c b/src/acpica/source/components/namespace/nsrepair2.c
index d3dcd318..40f0634d 100644
--- a/src/acpica/source/components/namespace/nsrepair2.c
+++ b/src/acpica/source/components/namespace/nsrepair2.c
@@ -565,6 +565,13 @@  AcpiNsRepair_CID (
 
             (*ElementPtr)->Common.ReferenceCount =
                 OriginalRefCount;
+
+            /*
+             * The OriginalElement holds a reference from the package object
+             * that represents _HID. Since a new element was created by _HID,
+             * remove the reference from the _CID package.
+             */
+            AcpiUtRemoveReference (OriginalElement);
         }
 
         ElementPtr++;
diff --git a/src/acpica/source/components/utilities/utdelete.c b/src/acpica/source/components/utilities/utdelete.c
index 2cf71aee..624aa687 100644
--- a/src/acpica/source/components/utilities/utdelete.c
+++ b/src/acpica/source/components/utilities/utdelete.c
@@ -443,6 +443,14 @@  AcpiUtDeleteInternalObj (
         }
         break;
 
+    case ACPI_TYPE_LOCAL_ADDRESS_HANDLER:
+
+        ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS,
+            "***** Address handler %p\n", Object));
+
+        AcpiOsDeleteMutex (Object->AddressSpace.ContextMutex);
+        break;
+
     default:
 
         break;
diff --git a/src/acpica/source/components/utilities/utuuid.c b/src/acpica/source/components/utilities/utuuid.c
index 97ae40be..299353cc 100644
--- a/src/acpica/source/components/utilities/utuuid.c
+++ b/src/acpica/source/components/utilities/utuuid.c
@@ -208,4 +208,52 @@  AcpiUtConvertStringToUuid (
             InString[AcpiGbl_MapToUuidOffset[i] + 1]);
     }
 }
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiUtConvertUuidToString
+ *
+ * PARAMETERS:  UuidBuffer          - 16-byte UUID buffer
+ *              OutString           - 36-byte formatted UUID string
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Convert 16-byte UUID buffer to 36-byte formatted UUID string
+ *              OutString must be 37 bytes to include null terminator.
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiUtConvertUuidToString (
+    char                    *UuidBuffer,
+    char                    *OutString)
+{
+    UINT32                  i;
+
+
+    if (!UuidBuffer || !OutString)
+    {
+        return (AE_BAD_PARAMETER);
+    }
+
+    for (i = 0; i < UUID_BUFFER_LENGTH; i++)
+    {
+        OutString[AcpiGbl_MapToUuidOffset[i]] =
+            AcpiUtHexToAsciiChar (UuidBuffer[i], 4);
+
+        OutString[AcpiGbl_MapToUuidOffset[i] + 1] =
+            AcpiUtHexToAsciiChar (UuidBuffer[i], 0);
+    }
+
+    /* Insert required hyphens (dashes) */
+
+    OutString[UUID_HYPHEN1_OFFSET] =
+    OutString[UUID_HYPHEN2_OFFSET] =
+    OutString[UUID_HYPHEN3_OFFSET] =
+    OutString[UUID_HYPHEN4_OFFSET] = '-';
+
+    OutString[UUID_STRING_LENGTH] = 0; /* Null terminate */
+    return (AE_OK);
+}
 #endif
diff --git a/src/acpica/source/include/acbuffer.h b/src/acpica/source/include/acbuffer.h
index 3c541751..1576afa6 100644
--- a/src/acpica/source/include/acbuffer.h
+++ b/src/acpica/source/include/acbuffer.h
@@ -359,5 +359,14 @@  typedef struct acpi_pld_info
 #define ACPI_PLD_GET_HORIZ_OFFSET(dword)        ACPI_GET_BITS (dword, 16, ACPI_16BIT_MASK)
 #define ACPI_PLD_SET_HORIZ_OFFSET(dword,value)  ACPI_SET_BITS (dword, 16, ACPI_16BIT_MASK, value)   /* Offset 128+16=144, Len 16 */
 
+/* Panel position defined in _PLD section of ACPI Specification 6.3 */
+
+#define ACPI_PLD_PANEL_TOP      0
+#define ACPI_PLD_PANEL_BOTTOM   1
+#define ACPI_PLD_PANEL_LEFT     2
+#define ACPI_PLD_PANEL_RIGHT    3
+#define ACPI_PLD_PANEL_FRONT    4
+#define ACPI_PLD_PANEL_BACK     5
+#define ACPI_PLD_PANEL_UNKNOWN  6
 
 #endif /* ACBUFFER_H */
diff --git a/src/acpica/source/include/acconfig.h b/src/acpica/source/include/acconfig.h
index b320a97e..a5808526 100644
--- a/src/acpica/source/include/acconfig.h
+++ b/src/acpica/source/include/acconfig.h
@@ -333,6 +333,7 @@ 
 #define ACPI_MAX_GSBUS_DATA_SIZE        255
 #define ACPI_MAX_GSBUS_BUFFER_SIZE      ACPI_SERIAL_HEADER_SIZE + ACPI_MAX_GSBUS_DATA_SIZE
 
+#define ACPI_PRM_INPUT_BUFFER_SIZE      26
 
 /* _SxD and _SxW control methods */
 
diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h
index f02f3239..9b584d67 100644
--- a/src/acpica/source/include/acdisasm.h
+++ b/src/acpica/source/include/acdisasm.h
@@ -266,6 +266,8 @@  typedef enum
     ACPI_DMT_HMAT,
     ACPI_DMT_IORTMEM,
     ACPI_DMT_IVRS,
+    ACPI_DMT_IVRS_DE,
+    ACPI_DMT_IVRS_UNTERMINATED_STRING,
     ACPI_DMT_LPIT,
     ACPI_DMT_MADT,
     ACPI_DMT_NFIT,
@@ -274,6 +276,7 @@  typedef enum
     ACPI_DMT_PMTT,
     ACPI_DMT_PMTT_VENDOR,
     ACPI_DMT_PPTT,
+    ACPI_DMT_RGRT,
     ACPI_DMT_SDEI,
     ACPI_DMT_SDEV,
     ACPI_DMT_SLIC,
@@ -365,6 +368,7 @@  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAsf2a[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAsf3[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAsf4[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAsfHdr[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoBdat[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoBoot[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoBert[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoBgrt[];
@@ -465,16 +469,20 @@  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIortHdr3[];
 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        AcpiDmTableInfoIvrsHware1[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsHware23[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsMemory[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs4[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs8a[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs8b[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrs8c[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsCidString[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsCidInteger[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsHid[];
-extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsHid1[];
-extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsHdr[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsUidString[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsUidInteger[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsHidString[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoIvrsHidInteger[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt0[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoMadt1[];
@@ -546,7 +554,12 @@  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPptt1[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPptt1a[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPptt2[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPpttHdr[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPrmtHdr[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPrmtModule[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoPrmtHandler[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoRasf[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoRgrt[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoRgrt0[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoRsdp1[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoRsdp2[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoS3pt[];
@@ -580,6 +593,8 @@  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSrat4[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSrat5[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoStao[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoStaoStr[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSvkl[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoSvkl0[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTcpaHdr[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTcpaClient[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTcpaServer[];
@@ -774,6 +789,14 @@  void
 AcpiDmDumpPptt (
     ACPI_TABLE_HEADER       *Table);
 
+void
+AcpiDmDumpPrmt (
+    ACPI_TABLE_HEADER       *Table);
+
+void
+AcpiDmDumpRgrt (
+    ACPI_TABLE_HEADER       *Table);
+
 UINT32
 AcpiDmDumpRsdp (
     ACPI_TABLE_HEADER       *Table);
@@ -806,6 +829,10 @@  void
 AcpiDmDumpStao (
     ACPI_TABLE_HEADER       *Table);
 
+void
+AcpiDmDumpSvkl (
+    ACPI_TABLE_HEADER       *Table);
+
 void
 AcpiDmDumpTcpa (
     ACPI_TABLE_HEADER       *Table);
diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
index 0733ac41..dc459c9a 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                 0x20210331
+#define ACPI_CA_VERSION                 0x20210604
 
 #include "acconfig.h"
 #include "actypes.h"
diff --git a/src/acpica/source/include/actbinfo.h b/src/acpica/source/include/actbinfo.h
index af10c774..027e6085 100644
--- a/src/acpica/source/include/actbinfo.h
+++ b/src/acpica/source/include/actbinfo.h
@@ -156,6 +156,7 @@ 
 #define ACPI_GAS_OFFSET(f)              (UINT16) ACPI_OFFSET (ACPI_GENERIC_ADDRESS,f)
 #define ACPI_HDR_OFFSET(f)              (UINT16) ACPI_OFFSET (ACPI_TABLE_HEADER,f)
 #define ACPI_RSDP_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_RSDP,f)
+#define ACPI_BDAT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_BDAT,f)
 #define ACPI_BERT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_BERT,f)
 #define ACPI_BGRT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_BGRT,f)
 #define ACPI_BOOT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_BOOT,f)
@@ -183,6 +184,7 @@ 
 #define ACPI_PDTT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_PDTT,f)
 #define ACPI_PMTT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_PMTT,f)
 #define ACPI_RASF_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_RASF,f)
+#define ACPI_RGRT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_RGRT,f)
 #define ACPI_S3PT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_S3PT,f)
 #define ACPI_SBST_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SBST,f)
 #define ACPI_SDEI_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SDEI,f)
@@ -192,6 +194,7 @@ 
 #define ACPI_SPMI_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SPMI,f)
 #define ACPI_SRAT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SRAT,f)
 #define ACPI_STAO_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_STAO,f)
+#define ACPI_SVKL_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_SVKL,f)
 #define ACPI_TCPA_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_HDR,f)
 #define ACPI_TPM2_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_TPM2,f)
 #define ACPI_TPM23_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_TABLE_TPM23,f)
@@ -334,6 +337,9 @@ 
 #define ACPI_PPTT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PPTT_CACHE,f)
 #define ACPI_PPTT1A_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_PPTT_CACHE_V1,f)
 #define ACPI_PPTT2_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PPTT_ID,f)
+#define ACPI_PRMTH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_TABLE_PRMT_HEADER,f)
+#define ACPI_PRMT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PRMT_MODULE_INFO,f)
+#define ACPI_PRMT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_PRMT_HANDLER_INFO,f)
 #define ACPI_S3PTH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_FPDT_HEADER,f)
 #define ACPI_S3PT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_S3PT_RESUME,f)
 #define ACPI_S3PT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_S3PT_SUSPEND,f)
@@ -353,6 +359,7 @@ 
 #define ACPI_SRAT3_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_SRAT_GICC_AFFINITY,f)
 #define ACPI_SRAT4_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_SRAT_GIC_ITS_AFFINITY,f)
 #define ACPI_SRAT5_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_SRAT_GENERIC_AFFINITY,f)
+#define ACPI_SVKL0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_SVKL_KEY,f)
 #define ACPI_TCPA_CLIENT_OFFSET(f)      (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_CLIENT,f)
 #define ACPI_TCPA_SERVER_OFFSET(f)      (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_SERVER,f)
 #define ACPI_TPM2A_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_TPM2_TRAILER,f)
@@ -398,6 +405,8 @@ 
 #define ACPI_IORT6_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_IORT_RMR,f,o)
 #define ACPI_IORTA_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_IORT_MEMORY_ACCESS,f,o)
 #define ACPI_IORTM_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_IORT_ID_MAPPING,f,o)
+#define ACPI_IVRS_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_IVRS_HEADER,f,o)
+#define ACPI_IVRSDE_FLAG_OFFSET(f,o)    ACPI_FLAG_OFFSET (ACPI_IVRS_DE_HEADER,f,o)
 #define ACPI_LPITH_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_LPIT_HEADER,f,o)
 #define ACPI_MADT_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_MADT,f,o)
 #define ACPI_MADT0_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_APIC,f,o)
diff --git a/src/acpica/source/include/actbl1.h b/src/acpica/source/include/actbl1.h
index 437a122b..136ebf12 100644
--- a/src/acpica/source/include/actbl1.h
+++ b/src/acpica/source/include/actbl1.h
@@ -523,9 +523,19 @@  typedef struct acpi_cedt_header
 enum AcpiCedtType
 {
     ACPI_CEDT_TYPE_CHBS                 = 0,
-    ACPI_CEDT_TYPE_RESERVED             = 1
+    ACPI_CEDT_TYPE_CFMWS                = 1,
+    ACPI_CEDT_TYPE_RESERVED             = 2,
 };
 
+/* Values for version field above */
+
+#define ACPI_CEDT_CHBS_VERSION_CXL11    (0)
+#define ACPI_CEDT_CHBS_VERSION_CXL20    (1)
+
+/* Values for length field above */
+
+#define ACPI_CEDT_CHBS_LENGTH_CXL11     (0x2000)
+#define ACPI_CEDT_CHBS_LENGTH_CXL20     (0x10000)
 
 /*
  * CEDT subtables
@@ -545,6 +555,37 @@  typedef struct acpi_cedt_chbs
 } ACPI_CEDT_CHBS;
 
 
+/* 1: CXL Fixed Memory Window Structure */
+
+typedef struct acpi_cedt_cfmws
+{
+    ACPI_CEDT_HEADER        Header;
+    UINT32                  Reserved1;
+    UINT64                  BaseHpa;
+    UINT64                  WindowSize;
+    UINT8                   InterleaveWays;
+    UINT8                   InterleaveArithmetic;
+    UINT16                  Reserved2;
+    UINT32                  Granularity;
+    UINT16                  Restrictions;
+    UINT16                  QtgId;
+    UINT32                  InterleaveTargets[];
+
+} ACPI_CEDT_CFMWS;
+
+/* Values for Interleave Arithmetic field above */
+
+#define ACPI_CEDT_CFMWS_ARITHMETIC_MODULO	(0)
+
+/* Values for Restrictions field above */
+
+#define ACPI_CEDT_CFMWS_RESTRICT_TYPE2		(1)
+#define ACPI_CEDT_CFMWS_RESTRICT_TYPE3		(1<<1)
+#define ACPI_CEDT_CFMWS_RESTRICT_VOLATILE	(1<<2)
+#define ACPI_CEDT_CFMWS_RESTRICT_PMEM		(1<<3)
+#define ACPI_CEDT_CFMWS_RESTRICT_FIXED		(1<<4)
+
+
 /*******************************************************************************
  *
  * CPEP - Corrected Platform Error Polling table (ACPI 4.0)
diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h
index 71c39e86..cb237a6b 100644
--- a/src/acpica/source/include/actbl2.h
+++ b/src/acpica/source/include/actbl2.h
@@ -168,6 +168,7 @@ 
  * file. Useful because they make it more difficult to inadvertently type in
  * the wrong signature.
  */
+#define ACPI_SIG_BDAT           "BDAT"      /* BIOS Data ACPI Table */
 #define ACPI_SIG_IORT           "IORT"      /* IO Remapping Table */
 #define ACPI_SIG_IVRS           "IVRS"      /* I/O Virtualization Reporting Structure */
 #define ACPI_SIG_LPIT           "LPIT"      /* Low Power Idle Table */
@@ -183,11 +184,14 @@ 
 #define ACPI_SIG_PHAT           "PHAT"      /* Platform Health Assessment Table */
 #define ACPI_SIG_PMTT           "PMTT"      /* Platform Memory Topology Table */
 #define ACPI_SIG_PPTT           "PPTT"      /* Processor Properties Topology Table */
+#define ACPI_SIG_PRMT           "PRMT"      /* Platform Runtime Mechanism Table */
 #define ACPI_SIG_RASF           "RASF"      /* RAS Feature table */
+#define ACPI_SIG_RGRT           "RGRT"      /* Regulatory Graphics Resource Table */
 #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 */
+#define ACPI_SIG_SVKL           "SVKL"      /* Storage Volume Key Location Table */
 
 
 /*
@@ -209,6 +213,23 @@ 
  */
 
 
+/*******************************************************************************
+ *
+ * BDAT - BIOS Data ACPI Table
+ *
+ * Conforms to "BIOS Data ACPI Table", Interface Specification v4.0 Draft 5
+ * Nov 2020
+ *
+ ******************************************************************************/
+
+typedef struct acpi_table_bdat
+{
+    ACPI_TABLE_HEADER       Header;
+    ACPI_GENERIC_ADDRESS    Gas;
+
+} ACPI_TABLE_BDAT;
+
+
 /*******************************************************************************
  *
  * IORT - IO Remapping Table
@@ -649,6 +670,11 @@  typedef struct acpi_ivrs_device_hid
 
 } ACPI_IVRS_DEVICE_HID;
 
+/* Values for UidType above */
+
+#define ACPI_IVRS_UID_NOT_PRESENT   0
+#define ACPI_IVRS_UID_IS_INTEGER    1
+#define ACPI_IVRS_UID_IS_STRING     2
 
 /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */
 
@@ -1034,6 +1060,22 @@  typedef struct acpi_madt_multiproc_wakeup
 
 } ACPI_MADT_MULTIPROC_WAKEUP;
 
+#define ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE	2032
+#define ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE	2048
+
+typedef struct acpi_madt_multiproc_wakeup_mailbox
+{
+    UINT16                  Command;
+    UINT16                  Reserved; /* reserved - must be zero */
+    UINT32                  ApicId;
+    UINT64                  WakeupVector;
+    UINT8                   ReservedOs[ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE]; /* reserved for OS use */
+    UINT8                   ReservedFirmware[ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE]; /* reserved for firmware use */
+
+} ACPI_MADT_MULTIPROC_WAKEUP_MAILBOX;
+
+#define ACPI_MP_WAKE_COMMAND_WAKEUP    1
+
 
 /*
  * Common flags fields for MADT subtables
@@ -2100,6 +2142,52 @@  typedef struct acpi_pptt_id
 } ACPI_PPTT_ID;
 
 
+/*******************************************************************************
+ *
+ * PRMT - Platform Runtime Mechanism Table
+ *        Version 1
+ *
+ ******************************************************************************/
+
+typedef struct acpi_table_prmt
+{
+    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
+
+} ACPI_TABLE_PRMT;
+
+typedef struct acpi_table_prmt_header
+{
+    UINT8                   PlatformGuid[16];
+    UINT32                  ModuleInfoOffset;
+    UINT32                  ModuleInfoCount;
+
+} ACPI_TABLE_PRMT_HEADER;
+
+typedef struct acpi_prmt_module_info
+{
+    UINT16                  Revision;
+    UINT16                  Length;
+    UINT8                   ModuleGuid[16];
+    UINT16                  MajorRev;
+    UINT16                  MinorRev;
+    UINT16                  HandlerInfoCount;
+    UINT32                  HandlerInfoOffset;
+    UINT64                  MmioListPointer;
+
+} ACPI_PRMT_MODULE_INFO;
+
+typedef struct acpi_prmt_handler_info
+{
+    UINT16                  Revision;
+    UINT16                  Length;
+    UINT8                   HandlerGuid[16];
+    UINT64                  HandlerAddress;
+    UINT64                  StaticDataBufferAddress;
+    UINT64                  AcpiParamBufferAddress;
+
+} ACPI_PRMT_HANDLER_INFO;
+
+
 /*******************************************************************************
  *
  * RASF - RAS Feature Table (ACPI 5.0)
@@ -2209,6 +2297,36 @@  enum AcpiRasfStatus
 #define ACPI_RASF_STATUS                (0x1F<<3)
 
 
+/*******************************************************************************
+ *
+ * RGRT - Regulatory Graphics Resource Table
+ *        Version 1
+ *
+ * Conforms to "ACPI RGRT" available at:
+ * https://microsoft.github.io/mu/dyn/mu_plus/MsCorePkg/AcpiRGRT/feature_acpi_rgrt/
+ *
+ ******************************************************************************/
+
+typedef struct acpi_table_rgrt
+{
+    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
+    UINT16                  Version;
+    UINT8                   ImageType;
+    UINT8                   Reserved;
+    UINT8                   Image[0];
+
+} ACPI_TABLE_RGRT;
+
+/* ImageType values */
+
+enum AcpiRgrtImageType
+{
+    ACPI_RGRT_TYPE_RESERVED0            = 0,
+    ACPI_RGRT_IMAGE_TYPE_PNG            = 1,
+    ACPI_RGRT_TYPE_RESERVED             = 2     /* 2 and greater are reserved */
+};
+
+
 /*******************************************************************************
  *
  * SBST - Smart Battery Specification Table
@@ -2371,6 +2489,44 @@  typedef struct acpi_sdev_pcie_path
 } ACPI_SDEV_PCIE_PATH;
 
 
+/*******************************************************************************
+ *
+ * SVKL - Storage Volume Key Location Table (ACPI 6.4)
+ *        From: "Guest-Host-Communication Interface (GHCI) for Intel
+ *        Trust Domain Extensions (Intel TDX)".
+ *        Version 1
+ *
+ ******************************************************************************/
+
+typedef struct acpi_table_svkl
+{
+    ACPI_TABLE_HEADER       Header; /* Common ACPI table header */
+    UINT32                  Count;
+
+} ACPI_TABLE_SVKL;
+
+typedef struct acpi_svkl_key
+{
+    UINT16                  Type;
+    UINT16                  Format;
+    UINT32                  Size;
+    UINT64                  Address;
+
+} ACPI_SVKL_KEY;
+
+enum acpi_svkl_type
+{
+    ACPI_SVKL_TYPE_MAIN_STORAGE = 0,
+    ACPI_SVKL_TYPE_RESERVED     = 1 /* 1 and greater are reserved */
+};
+
+enum acpi_svkl_format
+{
+    ACPI_SVKL_FORMAT_RAW_BINARY = 0,
+    ACPI_SVKL_FORMAT_RESERVED   = 1 /* 1 and greater are reserved */
+};
+
+
 /* Reset to default packing */
 
 #pragma pack()
diff --git a/src/acpica/source/include/acutils.h b/src/acpica/source/include/acutils.h
index 4d485422..791b7d9c 100644
--- a/src/acpica/source/include/acutils.h
+++ b/src/acpica/source/include/acutils.h
@@ -1268,6 +1268,11 @@  void
 AcpiUtConvertStringToUuid (
     char                    *InString,
     UINT8                   *UuidBuffer);
+
+ACPI_STATUS
+AcpiUtConvertUuidToString (
+    char                    *UuidBuffer,
+    char                    *OutString);
 #endif
 
 #endif /* _ACUTILS_H */
diff --git a/src/acpica/source/tools/acpiexec/aeinstall.c b/src/acpica/source/tools/acpiexec/aeinstall.c
index e39c683d..1d32443b 100644
--- a/src/acpica/source/tools/acpiexec/aeinstall.c
+++ b/src/acpica/source/tools/acpiexec/aeinstall.c
@@ -216,6 +216,7 @@  static ACPI_ADR_SPACE_TYPE  SpaceIdList[] =
     ACPI_ADR_SPACE_GPIO,
     ACPI_ADR_SPACE_GSBUS,
     ACPI_ADR_SPACE_PLATFORM_COMM,
+    ACPI_ADR_SPACE_PLATFORM_RT,
     ACPI_ADR_SPACE_FIXED_HARDWARE,
     ACPI_ADR_SPACE_USER_DEFINED1,
     ACPI_ADR_SPACE_USER_DEFINED2
diff --git a/src/acpica/source/tools/acpiexec/aeregion.c b/src/acpica/source/tools/acpiexec/aeregion.c
index faae7347..decd17f7 100644
--- a/src/acpica/source/tools/acpiexec/aeregion.c
+++ b/src/acpica/source/tools/acpiexec/aeregion.c
@@ -205,6 +205,7 @@  AeRegionHandler (
     UINT32                  Value1;
     UINT32                  Value2;
     ACPI_RESOURCE           *Resource;
+    char                    Uuid[ACPI_PRM_INPUT_BUFFER_SIZE + 1];
 
 
     ACPI_FUNCTION_NAME (AeRegionHandler);
@@ -446,6 +447,7 @@  AeRegionHandler (
      * default values. Note: ASLTS will depend on these values.
      */
     case ACPI_ADR_SPACE_PLATFORM_COMM: /* ACPI 6.3 */
+
         if (AcpiGbl_DisplayRegionAccess)
         {
             AcpiOsPrintf ("AcpiExec: PCC Write : Addr %.4X Width %X\n",
@@ -457,6 +459,21 @@  AeRegionHandler (
         }
         return (AE_OK);
 
+    case ACPI_ADR_SPACE_PLATFORM_RT:
+
+        AcpiOsPrintf ("Acpiexec: PRM %s invoked\n",
+            (Function & ACPI_IO_MASK) ? "Write" : "Read ");
+
+        if ((Function & ACPI_IO_MASK) == ACPI_WRITE)
+        {
+            AcpiUtConvertUuidToString((char *) Buffer + 10, Uuid);
+            AcpiOsPrintf ("Mode: %u GUID: %s\n", Buffer[0], Uuid);
+        }
+
+        /* Unpack the input buffer and print the contents for debug */
+
+        break;
+
     default:
         break;
     }