Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 5 Jun 2021 05:59:28 GMT
From:      Jung-uk Kim <jkim@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 1970d6930394 - main - Import ACPICA 20210604
Message-ID:  <202106050559.1555xSBH063964@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by jkim:

URL: https://cgit.FreeBSD.org/src/commit/?id=1970d69303946116e6c88ab5b903ae4b65efddc5

commit 1970d69303946116e6c88ab5b903ae4b65efddc5
Author:     Jung-uk Kim <jkim@FreeBSD.org>
AuthorDate: 2021-06-05 04:00:36 +0000
Commit:     Jung-uk Kim <jkim@FreeBSD.org>
CommitDate: 2021-06-05 05:58:00 +0000

    Import ACPICA 20210604
    
    (cherry picked from commit 395770967c3664ec744e63fa47acc19670d32f47)
---
 sys/contrib/dev/acpica/changes.txt                 |  42 ++++
 sys/contrib/dev/acpica/common/ahtable.c            |  42 ++--
 sys/contrib/dev/acpica/common/dmtable.c            | 116 ++++++++-
 sys/contrib/dev/acpica/common/dmtbdump2.c          | 230 +++++++++++++++--
 sys/contrib/dev/acpica/common/dmtbdump3.c          |  60 +++++
 sys/contrib/dev/acpica/common/dmtbinfo1.c          |  13 +
 sys/contrib/dev/acpica/common/dmtbinfo2.c          | 211 +++++++++++++---
 sys/contrib/dev/acpica/common/dmtbinfo3.c          |  24 ++
 sys/contrib/dev/acpica/compiler/aslcompiler.h      |   4 +
 sys/contrib/dev/acpica/compiler/aslmessages.c      |   6 +-
 sys/contrib/dev/acpica/compiler/aslmessages.h      |   4 +-
 sys/contrib/dev/acpica/compiler/aslutils.c         |  40 +++
 sys/contrib/dev/acpica/compiler/asluuid.c          |  47 ----
 sys/contrib/dev/acpica/compiler/dtcompiler.h       |  16 ++
 sys/contrib/dev/acpica/compiler/dtfield.c          |   4 +-
 sys/contrib/dev/acpica/compiler/dtio.c             |   6 +-
 sys/contrib/dev/acpica/compiler/dttable1.c         | 274 ++++++++++++++++-----
 sys/contrib/dev/acpica/compiler/dttable2.c         | 169 +++++++++++++
 sys/contrib/dev/acpica/compiler/dttemplate.h       | 212 ++++++++++++++--
 sys/contrib/dev/acpica/compiler/dtutils.c          |  19 ++
 .../dev/acpica/components/executer/exfield.c       |   6 +-
 .../dev/acpica/components/executer/exserial.c      |  12 +
 .../dev/acpica/components/namespace/nsrepair2.c    |   7 +
 .../dev/acpica/components/utilities/utdelete.c     |   8 +
 .../dev/acpica/components/utilities/utuuid.c       |  48 ++++
 sys/contrib/dev/acpica/include/acbuffer.h          |   9 +
 sys/contrib/dev/acpica/include/acconfig.h          |   1 +
 sys/contrib/dev/acpica/include/acdisasm.h          |  37 ++-
 sys/contrib/dev/acpica/include/acpixf.h            |   2 +-
 sys/contrib/dev/acpica/include/actbinfo.h          |   9 +
 sys/contrib/dev/acpica/include/actbl1.h            |  43 +++-
 sys/contrib/dev/acpica/include/actbl2.h            | 156 ++++++++++++
 sys/contrib/dev/acpica/include/acutils.h           |   5 +
 33 files changed, 1645 insertions(+), 237 deletions(-)

diff --git a/sys/contrib/dev/acpica/changes.txt b/sys/contrib/dev/acpica/changes.txt
index 0b71b266a6ba..31b4eaff62fb 100644
--- a/sys/contrib/dev/acpica/changes.txt
+++ b/sys/contrib/dev/acpica/changes.txt
@@ -1,3 +1,45 @@
+----------------------------------------
+04 June 2021. Summary of changes for version 20210604:
+
+1) ACPICA kernel-resident subsystem:
+
+Cleaned up (delete) the context mutex during local address handler object 
+deletion.
+
+Fixed a memory leak caused by the _CID repair function.
+
+Added support for PlatformRtMechanism OperationRegion handler. Adds a new 
+utility function, AcpiUtConvertUuidToString. Writing a buffer to a 
+PlatformRtMechanism fieldunit invokes a bidirectional transaction. The 
+input buffer contains 26 bytes containing 9 bytes of status, a command 
+byte and a 16-byte UUID. This change will simply pass this incoming 
+buffer to a handler registered by the OS.
+
+2) iASL Compiler/Disassembler and ACPICA tools:
+
+Added full support for the PRMT ACPI table (Platform Runtime Mechanism 
+Table). Includes support in the iASL compiler, the disassembler, and the 
+template generator.
+
+Added full support for the BDAT (BIOS Data ACPI Table) ACPI table.
+
+Added full support for the RGRT (Regulatory Graphics Resource Table) ACPI 
+table.
+
+Added full support for the SVKL (Storage Volume Key Location Table) ACPI 
+table. Header file support from Kuppuswamy Sathyanarayanan 
+<sathyanarayanan.kuppuswamy@linux.intel.com>.
+
+Completed full support for the IVRS (I/O Virtualization Reporting 
+Structure) ACPI table. Added compiler support for IVRS, updated 
+disassembler support. Adds a new utility, UtIsIdInteger, to determine if 
+a HID/CID is an integer or a string.
+
+Headers: Added more structs to the CEDT table: CXL fixed memory window 
+structure.
+
+ACPI 6.4: MADT: added Multiprocessor Wakeup Mailbox Structure.
+
 ----------------------------------------
 31 March 2021. Summary of changes for version 20210331:
 
diff --git a/sys/contrib/dev/acpica/common/ahtable.c b/sys/contrib/dev/acpica/common/ahtable.c
index 3d3eee5b41b4..b1da441deda4 100644
--- a/sys/contrib/dev/acpica/common/ahtable.c
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/common/dmtable.c b/sys/contrib/dev/acpica/common/dmtable.c
index 6f34e82c1b62..cc72fa0512a8 100644
--- a/sys/contrib/dev/acpica/common/dmtable.c
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/common/dmtbdump2.c b/sys/contrib/dev/acpica/common/dmtbdump2.c
index e3ab39b53078..a13e77e5c03b 100644
--- a/sys/contrib/dev/acpica/common/dmtbdump2.c
+++ b/sys/contrib/dev/acpica/common/dmtbdump2.c
@@ -153,6 +153,7 @@
 #include <contrib/dev/acpica/include/accommon.h>
 #include <contrib/dev/acpica/include/acdisasm.h>
 #include <contrib/dev/acpica/include/actables.h>
+#include <contrib/dev/acpica/compiler/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/sys/contrib/dev/acpica/common/dmtbdump3.c b/sys/contrib/dev/acpica/common/dmtbdump3.c
index 6f3b8f17e039..38404bc3317c 100644
--- a/sys/contrib/dev/acpica/common/dmtbdump3.c
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/common/dmtbinfo1.c b/sys/contrib/dev/acpica/common/dmtbinfo1.c
index 1e4eb0542d71..a6c46e55bf0a 100644
--- a/sys/contrib/dev/acpica/common/dmtbinfo1.c
+++ b/sys/contrib/dev/acpica/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/sys/contrib/dev/acpica/common/dmtbinfo2.c b/sys/contrib/dev/acpica/common/dmtbinfo2.c
index b51acd654997..3eb4e44902d3 100644
--- a/sys/contrib/dev/acpica/common/dmtbinfo2.c
+++ b/sys/contrib/dev/acpica/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[] =
 {
*** 1983 LINES SKIPPED ***



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202106050559.1555xSBH063964>