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