git: 395770967c36 - vendor/acpica - Import ACPICA 20210604
Jung-uk Kim
jkim at FreeBSD.org
Sat Jun 5 04:01:56 UTC 2021
The branch vendor/acpica has been updated by jkim:
URL: https://cgit.FreeBSD.org/src/commit/?id=395770967c3664ec744e63fa47acc19670d32f47
commit 395770967c3664ec744e63fa47acc19670d32f47
Author: Jung-uk Kim <jkim at FreeBSD.org>
AuthorDate: 2021-06-05 04:00:36 +0000
Commit: Jung-uk Kim <jkim at FreeBSD.org>
CommitDate: 2021-06-05 04:00:36 +0000
Import ACPICA 20210604
---
changes.txt | 42 +++++
source/common/ahtable.c | 42 ++---
source/common/dmtable.c | 116 ++++++++++++--
source/common/dmtbdump2.c | 230 ++++++++++++++++++++++++---
source/common/dmtbdump3.c | 60 +++++++
source/common/dmtbinfo1.c | 13 ++
source/common/dmtbinfo2.c | 211 +++++++++++++++++++-----
source/common/dmtbinfo3.c | 24 +++
source/compiler/aslcompiler.h | 4 +
source/compiler/aslmessages.c | 6 +-
source/compiler/aslmessages.h | 4 +-
source/compiler/aslutils.c | 40 +++++
source/compiler/asluuid.c | 47 ------
source/compiler/dtcompiler.h | 16 ++
source/compiler/dtfield.c | 4 +-
source/compiler/dtio.c | 6 +-
source/compiler/dttable1.c | 274 +++++++++++++++++++++++++-------
source/compiler/dttable2.c | 169 ++++++++++++++++++++
source/compiler/dttemplate.h | 212 +++++++++++++++++++++---
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/utprint.c | 2 +-
source/components/utilities/utuuid.c | 48 ++++++
source/include/acbuffer.h | 9 ++
source/include/acconfig.h | 1 +
source/include/acdisasm.h | 37 ++++-
source/include/acpixf.h | 2 +-
source/include/actbinfo.h | 9 ++
source/include/actbl1.h | 43 ++++-
source/include/actbl2.h | 156 ++++++++++++++++++
source/include/acutils.h | 5 +
source/tools/acpiexec/aeinstall.c | 1 +
source/tools/acpiexec/aeregion.c | 17 ++
source/tools/acpisrc/astable.c | 9 ++
37 files changed, 1673 insertions(+), 238 deletions(-)
diff --git a/changes.txt b/changes.txt
index 0b71b266a6ba..31b4eaff62fb 100644
--- a/changes.txt
+++ b/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 at 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/source/common/ahtable.c b/source/common/ahtable.c
index e318ddf39189..80f248d2e72a 100644
--- a/source/common/ahtable.c
+++ b/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/source/common/dmtable.c b/source/common/dmtable.c
index ffec889a06de..7a4e87e123a7 100644
--- a/source/common/dmtable.c
+++ b/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/source/common/dmtbdump2.c b/source/common/dmtbdump2.c
index 80d9d459778c..1b3cdf76926a 100644
--- a/source/common/dmtbdump2.c
+++ b/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/source/common/dmtbdump3.c b/source/common/dmtbdump3.c
index 7f559eeef3a6..e81a703b43cc 100644
--- a/source/common/dmtbdump3.c
+++ b/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/source/common/dmtbinfo1.c b/source/common/dmtbinfo1.c
index ea545f53a5a1..fbf3980dec3b 100644
--- a/source/common/dmtbinfo1.c
+++ b/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/source/common/dmtbinfo2.c b/source/common/dmtbinfo2.c
index 9bb4b48c052a..00cf2e4d3755 100644
--- a/source/common/dmtbinfo2.c
+++ b/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) */
*** 2106 LINES SKIPPED ***
More information about the dev-commits-src-all
mailing list