Date: Sat, 5 Jun 2021 04:01:55 GMT From: Jung-uk Kim <jkim@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org Subject: git: 395770967c36 - vendor/acpica - Import ACPICA 20210604 Message-ID: <202106050401.15541tua015246@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
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@FreeBSD.org> AuthorDate: 2021-06-05 04:00:36 +0000 Commit: Jung-uk Kim <jkim@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@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 ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202106050401.15541tua015246>