ACK: [PATCH 1/2] ACPICA: Update to version 20211217
ivanhu
ivan.hu at canonical.com
Mon Feb 14 01:33:28 UTC 2022
On 1/31/22 00:34, Colin Ian King wrote:
> 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/XA2YNYE3AZ67XXHUXVRPITIWCVQD5XHV/
>
> Signed-off-by: Colin Ian King <colin.i.king at gmail.com>
> ---
> src/acpica/source/common/acfileio.c | 11 +-
> src/acpica/source/common/ahtable.c | 3 +
> src/acpica/source/common/dmtable.c | 158 ++++++-
> src/acpica/source/common/dmtbdump.c | 70 +++-
> src/acpica/source/common/dmtbdump1.c | 2 -
> src/acpica/source/common/dmtbdump2.c | 247 +++++++----
> src/acpica/source/common/dmtbinfo.c | 6 +-
> src/acpica/source/common/dmtbinfo2.c | 79 +++-
> src/acpica/source/common/dmtbinfo3.c | 14 +
> src/acpica/source/compiler/aslcache.c | 5 +
> src/acpica/source/compiler/aslfiles.c | 4 +-
> src/acpica/source/compiler/aslmessages.c | 2 +
> src/acpica/source/compiler/aslmessages.h | 2 +
> src/acpica/source/compiler/aslstartup.c | 23 +-
> src/acpica/source/compiler/asluuid.c | 1 -
> src/acpica/source/compiler/dtcompiler.h | 3 +
> src/acpica/source/compiler/dttable.c | 59 ++-
> src/acpica/source/compiler/dttable2.c | 385 +++++++++++++++++-
> src/acpica/source/compiler/dttemplate.h | 93 +++++
> src/acpica/source/compiler/dtutils.c | 11 +
> .../source/components/dispatcher/dsopcode.c | 1 +
> .../source/components/events/evhandler.c | 2 +-
> .../source/components/events/evregion.c | 9 +
> .../source/components/events/evrgnini.c | 58 +++
> .../source/components/executer/exconfig.c | 2 +-
> .../source/components/executer/excreate.c | 1 +
> .../source/components/executer/exfield.c | 4 +-
> .../source/components/executer/exoparg1.c | 2 +-
> .../source/components/executer/exregion.c | 14 +-
> .../source/components/hardware/hwesleep.c | 5 +-
> .../source/components/hardware/hwsleep.c | 7 +-
> .../source/components/hardware/hwxfsleep.c | 2 -
> src/acpica/source/components/tables/tbdata.c | 85 ++--
> src/acpica/source/components/tables/tbfadt.c | 6 +-
> .../source/components/tables/tbinstal.c | 12 +-
> src/acpica/source/components/tables/tbprint.c | 3 +-
> src/acpica/source/components/tables/tbutils.c | 3 +-
> .../source/components/tables/tbxfload.c | 57 ++-
> .../source/components/utilities/utdelete.c | 1 +
> src/acpica/source/include/acdisasm.h | 16 +
> src/acpica/source/include/acevents.h | 7 +
> src/acpica/source/include/acobject.h | 1 +
> src/acpica/source/include/acpixf.h | 10 +-
> src/acpica/source/include/actables.h | 5 +-
> src/acpica/source/include/actbinfo.h | 7 +
> src/acpica/source/include/actbl2.h | 148 +++++--
> src/acpica/source/include/actypes.h | 26 +-
> 47 files changed, 1442 insertions(+), 230 deletions(-)
>
> diff --git a/src/acpica/source/common/acfileio.c b/src/acpica/source/common/acfileio.c
> index 99f89729..3e26ac3f 100644
> --- a/src/acpica/source/common/acfileio.c
> +++ b/src/acpica/source/common/acfileio.c
> @@ -552,10 +552,15 @@ AcValidateTableHeader (
> /* Read a potential table header */
>
> OriginalOffset = ftell (File);
> - fseek (File, TableOffset, SEEK_SET);
> -
> + if (fseek (File, TableOffset, SEEK_SET))
> + {
> + fprintf (stderr, "SEEK error\n");
> + }
> Actual = fread (&TableHeader, 1, sizeof (ACPI_TABLE_HEADER), File);
> - fseek (File, OriginalOffset, SEEK_SET);
> + if (fseek (File, OriginalOffset, SEEK_SET))
> + {
> + fprintf (stderr, "SEEK error\n");
> + }
>
> if (Actual < sizeof (ACPI_TABLE_HEADER))
> {
> diff --git a/src/acpica/source/common/ahtable.c b/src/acpica/source/common/ahtable.c
> index d7ce88a9..def42520 100644
> --- a/src/acpica/source/common/ahtable.c
> +++ b/src/acpica/source/common/ahtable.c
> @@ -200,6 +200,7 @@ AcpiAhGetTableInfo (
> const AH_TABLE AcpiGbl_SupportedTables[] =
> {
> {ACPI_SIG_AEST, "Arm Error Source Table"},
> + {ACPI_SIG_AGDI, "Arm Generic Diagnostic Dump and Reset Device Interface Table"},
> {ACPI_SIG_ASF, "Alert Standard Format Table"},
> {ACPI_SIG_BDAT, "BIOS Data ACPI Table"},
> {ACPI_SIG_BERT, "Boot Error Record Table"},
> @@ -233,6 +234,7 @@ const AH_TABLE AcpiGbl_SupportedTables[] =
> {ACPI_SIG_MSCT, "Maximum System Characteristics Table"},
> {ACPI_SIG_MSDM, "Microsoft Data Management Table"},
> {ACPI_SIG_NFIT, "NVDIMM Firmware Interface Table"},
> + {ACPI_SIG_NHLT, "Non HD Audio Link Table"},
> {ACPI_SIG_PCCT, "Platform Communications Channel Table"},
> {ACPI_SIG_PDTT, "Platform Debug Trigger Table"},
> {ACPI_SIG_PHAT, "Platform Health Assessment Table"},
> @@ -256,6 +258,7 @@ const AH_TABLE AcpiGbl_SupportedTables[] =
> {ACPI_SIG_STAO, "Status Override Table"},
> {ACPI_SIG_SVKL, "Storage Volume Key Location Table"},
> {ACPI_SIG_TCPA, "Trusted Computing Platform Alliance Table"},
> + {ACPI_SIG_TDEL, "TD-Event Log 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"},
> diff --git a/src/acpica/source/common/dmtable.c b/src/acpica/source/common/dmtable.c
> index dff1c613..3137132a 100644
> --- a/src/acpica/source/common/dmtable.c
> +++ b/src/acpica/source/common/dmtable.c
> @@ -167,10 +167,11 @@ AcpiAhGetTableInfo (
>
> /* Common format strings for commented values */
>
> -#define UINT8_FORMAT "%2.2X [%s]\n"
> -#define UINT16_FORMAT "%4.4X [%s]\n"
> -#define UINT32_FORMAT "%8.8X [%s]\n"
> -#define STRING_FORMAT "[%s]\n"
> +#define UINT8_FORMAT "%2.2X [%s]\n"
> +#define UINT8_FORMAT_NO_NEWLINE "%2.2X [%s]"
> +#define UINT16_FORMAT "%4.4X [%s]\n"
> +#define UINT32_FORMAT "%8.8X [%s]\n"
> +#define STRING_FORMAT "[%s]\n"
>
> /* These tables map a subtable type to a description string */
>
> @@ -437,6 +438,50 @@ static const char *AcpiDmNhltDirectionNames[] =
> "Unknown Direction" /* Reserved */
> };
>
> +static const char *AcpiDmNhltMicTypeNames[] =
> +{
> + "Omnidirectional", /* ACPI_NHLT_MIC_OMNIDIRECTIONAL */
> + "Subcardioid", /* ACPI_NHLT_MIC_SUBCARDIOID */
> + "Cardioid", /* ACPI_NHLT_MIC_CARDIOID */
> + "SuperCardioid", /* ACPI_NHLT_MIC_SUPER_CARDIOID */
> + "HyperCardioid", /* ACPI_NHLT_MIC_HYPER_CARDIOID */
> + "8 Shaped", /* ACPI_NHLT_MIC_8_SHAPED */
> + "Reserved Mic Type", /* Reserved */
> + "Vendor Defined", /* ACPI_NHLT_MIC_VENDOR_DEFINED */
> + "Unknown Mic Type" /* ACPI_NHLT_MIC_RESERVED */
> +};
> +
> +static const char *AcpiDmNhltMicPositionNames[] =
> +{
> + "Top", /* ACPI_NHLT_MIC_POSITION_TOP */
> + "Bottom", /* ACPI_NHLT_MIC_POSITION_BOTTOM */
> + "Left", /* ACPI_NHLT_MIC_POSITION_LEFT */
> + "Right", /* ACPI_NHLT_MIC_POSITION_RIGHT */
> + "Front", /* ACPI_NHLT_MIC_POSITION_FRONT */
> + "Back", /* ACPI_NHLT_MIC_POSITION_BACK */
> + "Unknown Mic Position" /* 6 and above are reserved */
> +};
> +
> +static const char *AcpiDmNhltMicArrayTypeNames[] =
> +{
> + "Unknown Array Type", /* ACPI_NHLT_ARRAY_TYPE_RESERVED */
> + "Small Linear 2-element", /* ACPI_NHLT_SMALL_LINEAR_2ELEMENT */
> + "Big Linear 2-element", /* ACPI_NHLT_BIG_LINEAR_2ELEMENT */
> + "Linear 4-element 1st Geometry", /* ACPI_NHLT_FIRST_GEOMETRY_LINEAR_4ELEMENT */
> + "Planar L-shaped 4-element", /* ACPI_NHLT_PLANAR_LSHAPED_4ELEMENT */
> + "Linear 4-element 2nd Geometry", /* ACPI_NHLT_SECOND_GEOMETRY_LINEAR_4ELEMENT */
> + "Vendor Defined" /* ACPI_NHLT_VENDOR_DEFINED */
> +};
> +
> +static const char *AcpiDmNhltConfigTypeNames[] =
> +{
> + "Generic Type", /* ACPI_NHLT_CONFIG_TYPE_GENERIC */
> + "Microphone Array", /* ACPI_NHLT_CONFIG_TYPE_MIC_ARRAY */
> + "Reserved", /* ACPI_NHLT_CONFIG_TYPE_RESERVED */
> + "Render Feedback", /* ACPI_NHLT_CONFIG_TYPE_RENDER_FEEDBACK */
> + "Unknown Config Type" /* ACPI_NHLT_CONFIG_TYPE_RESERVED */
> +};
> +
> static const char *AcpiDmPcctSubnames[] =
> {
> "Generic Communications Subspace", /* ACPI_PCCT_TYPE_GENERIC_SUBSPACE */
> @@ -604,6 +649,7 @@ static const char *AcpiDmGasAccessWidth[] =
> const ACPI_DMTABLE_DATA AcpiDmTableData[] =
> {
> {ACPI_SIG_AEST, NULL, AcpiDmDumpAest, DtCompileAest, TemplateAest},
> + {ACPI_SIG_AGDI, AcpiDmTableInfoAgdi, NULL, NULL, TemplateAgdi},
> {ACPI_SIG_ASF, NULL, AcpiDmDumpAsf, DtCompileAsf, TemplateAsf},
> {ACPI_SIG_BDAT, AcpiDmTableInfoBdat, NULL, NULL, TemplateBdat},
> {ACPI_SIG_BERT, AcpiDmTableInfoBert, NULL, NULL, TemplateBert},
> @@ -635,7 +681,7 @@ const ACPI_DMTABLE_DATA AcpiDmTableData[] =
> {ACPI_SIG_MSCT, NULL, AcpiDmDumpMsct, DtCompileMsct, TemplateMsct},
> {ACPI_SIG_MSDM, NULL, AcpiDmDumpSlic, DtCompileSlic, TemplateMsdm},
> {ACPI_SIG_NFIT, AcpiDmTableInfoNfit, AcpiDmDumpNfit, DtCompileNfit, TemplateNfit},
> - {ACPI_SIG_NHLT, AcpiDmTableInfoNhlt, AcpiDmDumpNhlt, NULL, NULL},
> + {ACPI_SIG_NHLT, AcpiDmTableInfoNhlt, AcpiDmDumpNhlt, DtCompileNhlt, TemplateNhlt},
> {ACPI_SIG_PCCT, AcpiDmTableInfoPcct, AcpiDmDumpPcct, DtCompilePcct, TemplatePcct},
> {ACPI_SIG_PDTT, AcpiDmTableInfoPdtt, AcpiDmDumpPdtt, DtCompilePdtt, TemplatePdtt},
> {ACPI_SIG_PHAT, NULL, AcpiDmDumpPhat, DtCompilePhat, TemplatePhat},
> @@ -657,6 +703,7 @@ const ACPI_DMTABLE_DATA AcpiDmTableData[] =
> {ACPI_SIG_STAO, NULL, AcpiDmDumpStao, DtCompileStao, TemplateStao},
> {ACPI_SIG_SVKL, AcpiDmTableInfoSvkl, AcpiDmDumpSvkl, DtCompileSvkl, TemplateSvkl},
> {ACPI_SIG_TCPA, NULL, AcpiDmDumpTcpa, DtCompileTcpa, TemplateTcpa},
> + {ACPI_SIG_TDEL, AcpiDmTableInfoTdel, NULL, NULL, TemplateTdel},
> {ACPI_SIG_TPM2, AcpiDmTableInfoTpm2, AcpiDmDumpTpm2, DtCompileTpm2, TemplateTpm2},
> {ACPI_SIG_UEFI, AcpiDmTableInfoUefi, NULL, DtCompileUefi, TemplateUefi},
> {ACPI_SIG_VIOT, AcpiDmTableInfoViot, AcpiDmDumpViot, DtCompileViot, TemplateViot},
> @@ -795,7 +842,8 @@ AcpiDmDumpDataTable (
> return;
> }
> }
> - else if (ACPI_VALIDATE_RSDP_SIG (Table->Signature))
> + else if (ACPI_VALIDATE_RSDP_SIG (ACPI_CAST_PTR (ACPI_TABLE_RSDP,
> + Table)->Signature))
> {
> Length = AcpiDmDumpRsdp (Table);
> }
> @@ -1040,7 +1088,7 @@ AcpiDmDumpTable (
>
> /* Check for beyond subtable end or (worse) beyond EOT */
>
> - if (SubtableLength && (Info->Offset >= SubtableLength))
> + if (SubtableLength && (Info->Offset > SubtableLength))
> {
> AcpiOsPrintf (
> "/**** ACPI subtable terminates early (Len %u) - "
> @@ -1074,6 +1122,10 @@ AcpiDmDumpTable (
> case ACPI_DMT_MADT:
> case ACPI_DMT_NHLT1:
> case ACPI_DMT_NHLT1a:
> + case ACPI_DMT_NHLT1b:
> + case ACPI_DMT_NHLT1c:
> + case ACPI_DMT_NHLT1d:
> + case ACPI_DMT_NHLT1f:
> case ACPI_DMT_PCCT:
> case ACPI_DMT_PMTT:
> case ACPI_DMT_PPTT:
> @@ -1102,6 +1154,7 @@ AcpiDmDumpTable (
> case ACPI_DMT_HEST:
> case ACPI_DMT_HMAT:
> case ACPI_DMT_NFIT:
> + case ACPI_DMT_NHLT1e:
> case ACPI_DMT_PHAT:
>
> ByteLength = 2;
> @@ -1848,6 +1901,95 @@ AcpiDmDumpTable (
> AcpiDmNhltDirectionNames[Temp8]);
> break;
>
> + case ACPI_DMT_NHLT1b:
> +
> + /* NHLT microphone type */
> +
> + Temp8 = *Target;
> + if (Temp8 > ACPI_NHLT_MIC_RESERVED)
> + {
> + Temp8 = ACPI_NHLT_MIC_RESERVED;
> + }
> +
> + AcpiOsPrintf (UINT8_FORMAT, *Target,
> + AcpiDmNhltMicTypeNames[Temp8]);
> + break;
> +
> + case ACPI_DMT_NHLT1c:
> +
> + /* NHLT microphone position */
> +
> + Temp8 = *Target;
> + if (Temp8 > ACPI_NHLT_MIC_POSITION_RESERVED)
> + {
> + Temp8 = ACPI_NHLT_MIC_POSITION_RESERVED;
> + }
> +
> + AcpiOsPrintf (UINT8_FORMAT, *Target,
> + AcpiDmNhltMicPositionNames[Temp8]);
> + break;
> +
> + case ACPI_DMT_NHLT1d:
> +
> + /* NHLT microphone array type */
> +
> + Temp8 = *Target & ACPI_NHLT_ARRAY_TYPE_MASK;
> + if (Temp8 < ACPI_NHLT_ARRAY_TYPE_RESERVED)
> + {
> + Temp8 = ACPI_NHLT_ARRAY_TYPE_RESERVED;
> + }
> +
> + AcpiOsPrintf (UINT8_FORMAT_NO_NEWLINE, *Target,
> + AcpiDmNhltMicArrayTypeNames[Temp8 - ACPI_NHLT_ARRAY_TYPE_RESERVED]);
> +
> + Temp8 = *Target;
> + if (Temp8 & ACPI_NHLT_MIC_SNR_SENSITIVITY_EXT)
> + {
> + AcpiOsPrintf (" [%s]", "SNR and Sensitivity");
> + }
> +
> + AcpiOsPrintf ("\n");
> + break;
> +
> + case ACPI_DMT_NHLT1e:
> +
> + /* NHLT Endpoint Device ID */
> +
> + Temp16 = ACPI_GET16 (Target);
> + if (Temp16 == 0xAE20)
> + {
> + Name = "PDM DMIC";
> + }
> + else if (Temp16 == 0xAE30)
> + {
> + Name = "BT Sideband";
> + }
> + else if (Temp16 == 0xAE34)
> + {
> + Name = "I2S/TDM Codecs";
> + }
> + else
> + {
> + Name = "Unknown Device ID";
> + }
> +
> + AcpiOsPrintf (UINT16_FORMAT, Temp16, Name);
> + break;
> +
> + case ACPI_DMT_NHLT1f:
> +
> + /* NHLT ConfigType field */
> +
> + Temp8 = *Target;
> + if (Temp8 > ACPI_NHLT_CONFIG_TYPE_RESERVED)
> + {
> + Temp8 = ACPI_NHLT_CONFIG_TYPE_RESERVED;
> + }
> +
> + AcpiOsPrintf (UINT8_FORMAT, *Target,
> + AcpiDmNhltConfigTypeNames[Temp8]);
> + break;
> +
> case ACPI_DMT_PCCT:
>
> /* PCCT subtable types */
> @@ -1929,7 +2071,7 @@ AcpiDmDumpTable (
> break;
> }
>
> - AcpiDmDumpBuffer (Target, 0, ByteLength, 0, NULL);
> + AcpiDmDumpBuffer (Target, 0, ByteLength, CurrentOffset, NULL);
> break;
>
> case ACPI_DMT_RGRT:
> diff --git a/src/acpica/source/common/dmtbdump.c b/src/acpica/source/common/dmtbdump.c
> index abeb06fa..86c90d67 100644
> --- a/src/acpica/source/common/dmtbdump.c
> +++ b/src/acpica/source/common/dmtbdump.c
> @@ -195,7 +195,9 @@ AcpiDmDumpBuffer (
> char *Header)
> {
> UINT8 *Buffer;
> + UINT8 BufChar;
> UINT32 i;
> + UINT32 j;
>
>
> if (!Length)
> @@ -208,20 +210,72 @@ AcpiDmDumpBuffer (
>
> while (i < Length)
> {
> - if (!(i % 16))
> + if ((Length > 16) && (i != 0))
> {
> - /* Insert a backslash - line continuation character */
> + if ((Length - i) < 16)
> + AcpiOsPrintf ("\n/* %3.3Xh %4.4u %3u */ ", AbsoluteOffset, AbsoluteOffset, Length - i);
> + else
> + AcpiOsPrintf ("\n/* %3.3Xh %4.4u 16 */ ", AbsoluteOffset, AbsoluteOffset);
> + }
> + AbsoluteOffset += 16;
> +
> + /* Emit the raw data bytes*/
>
> - if (Length > 16)
> + for (j = 0; j < 16; j++)
> + {
> + if (i + j >= Length)
> {
> - AcpiOsPrintf ("\\\n ");
> + /* Dump fill spaces */
> +
> + AcpiOsPrintf ("%*s", (48 - (3 * (Length -i))), " ");
> + break;
> }
> + AcpiOsPrintf ("%.02X ", Buffer[(ACPI_SIZE) i + j]);
> + }
> +
> + /* Emit the ASCII equivalent to the raw data bytes */
> +
> + for (j = 0; j < 16; j++)
> + {
> + if (i + j >= Length)
> + {
> + AcpiOsPrintf (" */\\\n");
> + return;
> + }
> +
> + /*
> + * Add comment characters so rest of line is ignored when
> + * compiled
> + */
> + if (j == 0)
> + {
> + AcpiOsPrintf ("/* ");
> + }
> +
> + BufChar = Buffer[(ACPI_SIZE) i + j];
> + if (isprint (BufChar))
> + {
> + AcpiOsPrintf ("%c", BufChar);
> + }
> + else
> + {
> + AcpiOsPrintf (".");
> + }
> + }
> +
> + /* Done with that line. */
> + /* Close the comment and insert a backslash - line continuation character */
> +
> + if (Length > 16)
> + {
> + AcpiOsPrintf (" */\\");
> + }
> + else
> + {
> + AcpiOsPrintf (" */\\");
> }
>
> - AcpiOsPrintf ("%.02X ", *Buffer);
> - i++;
> - Buffer++;
> - AbsoluteOffset++;
> + i += 16; /* Point to next line */
> }
>
> AcpiOsPrintf ("\n");
> diff --git a/src/acpica/source/common/dmtbdump1.c b/src/acpica/source/common/dmtbdump1.c
> index 3a97af46..fd5e2fd9 100644
> --- a/src/acpica/source/common/dmtbdump1.c
> +++ b/src/acpica/source/common/dmtbdump1.c
> @@ -296,8 +296,6 @@ AcpiDmDumpAest (
> case ACPI_AEST_GENERIC_RESOURCE:
> InfoTable = AcpiDmTableInfoAestGenRsrc;
> Length = sizeof (ACPI_AEST_PROCESSOR_GENERIC);
> - AcpiOsPrintf ("Generic Resource Type (%X) is not supported at this time\n",
> - ProcessorSubtable->ResourceType);
> break;
>
> /* Error case below */
> diff --git a/src/acpica/source/common/dmtbdump2.c b/src/acpica/source/common/dmtbdump2.c
> index 118b96ee..04f7139f 100644
> --- a/src/acpica/source/common/dmtbdump2.c
> +++ b/src/acpica/source/common/dmtbdump2.c
> @@ -1494,19 +1494,21 @@ AcpiDmDumpNhlt (
> UINT32 CapabilitiesSize;
> UINT32 i;
> UINT32 j;
> - UINT32 k;
> UINT32 EndpointEndOffset;
> UINT8 ConfigType = 0;
> UINT8 ArrayType;
> + UINT8 MicrophoneCount;
> + ACPI_NHLT_VENDOR_MIC_COUNT *MicCount;
> ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_A *DevSpecific;
> ACPI_NHLT_FORMATS_CONFIG *FormatsConfig;
> ACPI_NHLT_LINUX_SPECIFIC_COUNT *Count;
> ACPI_NHLT_LINUX_SPECIFIC_DATA *LinuxData;
> + ACPI_NHLT_LINUX_SPECIFIC_DATA_B *LinuxDataB;
>
>
> /* Main table */
>
> - AcpiOsPrintf ("/* Main table */\n");
> + AcpiOsPrintf (" /* Main table */\n");
>
> Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoNhlt);
> if (ACPI_FAILURE (Status))
> @@ -1532,52 +1534,59 @@ AcpiDmDumpNhlt (
> /* Do the Endpoint Descriptor table */
>
> Subtable = ACPI_ADD_PTR (ACPI_NHLT_ENDPOINT, Table, Offset);
> +
> + /* Check for endpoint descriptor length beyond end-of-table */
> +
> if (Subtable->DescriptorLength > TableLength)
> {
> Offset += 1;
> - AcpiOsPrintf ("\n/* Endpoint Descriptor Length larger than"
> + AcpiOsPrintf ("\n /* Endpoint Descriptor Length larger than"
> " table size: %X, table %X, adjusting table offset (+1) */\n",
> Subtable->DescriptorLength, TableLength);
>
> Subtable = ACPI_ADD_PTR (ACPI_NHLT_ENDPOINT, Table, Offset);
> }
>
> - AcpiOsPrintf ("\n/* Endpoint Descriptor #%u */\n", i+1);
> + AcpiOsPrintf ("\n /* Endpoint Descriptor #%u */\n", i+1);
> Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
> Subtable->DescriptorLength, AcpiDmTableInfoNhlt0);
> if (ACPI_FAILURE (Status))
> {
> return;
> }
> +
> EndpointEndOffset = Subtable->DescriptorLength + Offset;
>
> /* Check for endpoint descriptor beyond end-of-table */
>
> if (Subtable->DescriptorLength > TableLength)
> {
> - AcpiOsPrintf ("\n/* Endpoint Descriptor Length larger than table size: %X, table %X */\n",
> + AcpiOsPrintf ("\n /* Endpoint Descriptor Length larger than table size: %X, table %X */\n",
> Subtable->DescriptorLength, TableLength);
> }
> +
> Offset += sizeof (ACPI_NHLT_ENDPOINT);
> Subtable = ACPI_ADD_PTR (ACPI_NHLT_ENDPOINT, Table, Offset);
>
> /* Do the Device Specific table */
>
> - AcpiOsPrintf ("\n/* Endpoint Device_Specific_Config table */\n");
> + AcpiOsPrintf ("\n /* Endpoint Device_Specific_Config table */\n");
> DevSpecific = ACPI_CAST_PTR (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_A, Subtable);
> CapabilitiesSize = DevSpecific->CapabilitiesSize;
> + Status = AcpiDmDumpTable (TableLength, Offset, DevSpecific,
> + sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_B), AcpiDmTableInfoNhlt5b);
> + if (ACPI_FAILURE (Status))
> + {
> + return;
> + }
> +
> + ArrayType = 0;
>
> /* Different subtables based upon capabilities_size */
>
> switch (CapabilitiesSize)
> {
> case 0:
> - Status = AcpiDmDumpTable (TableLength, Offset, DevSpecific,
> - sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_B), AcpiDmTableInfoNhlt5b);
> - if (ACPI_FAILURE (Status))
> - {
> - return;
> - }
> Offset += sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_B);
> break;
>
> @@ -1602,6 +1611,9 @@ AcpiDmDumpNhlt (
> break;
>
> case 3:
> + default:
> + /* Extract the ConfigType and ArrayType */
> +
> ConfigType = DevSpecific->ConfigType;
> ArrayType = DevSpecific->ArrayType;
>
> @@ -1614,56 +1626,113 @@ AcpiDmDumpNhlt (
>
> /* Capabilities Size == 3 */
> Offset += sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_A);
> + break;
>
> - /* Check for a vendor-defined mic array */
> + case 7:
> + ConfigType = DevSpecific->ConfigType;
> + Subtable = ACPI_ADD_PTR (ACPI_NHLT_ENDPOINT, Table, Offset);
> + DevSpecific = ACPI_CAST_PTR (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_A, Subtable);
>
> - if ((ConfigType == ACPI_NHLT_TYPE_MIC_ARRAY) && ((ArrayType & ARRAY_TYPE_MASK) == VENDOR_DEFINED))
> + AcpiOsPrintf ("\n /* Render Feedback Device-Specific table */\n");
> + Status = AcpiDmDumpTable (TableLength, Offset, DevSpecific,
> + sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG), AcpiDmTableInfoNhlt5);
> + if (ACPI_FAILURE (Status))
> {
> - /* Vendor-defined microphone array */
> + return;
> + }
>
> - AcpiOsPrintf ("\n/* Vendor-defined microphone array */\n");
> + /* Capabilities Size = 7 */
> + Offset += sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG);
> +
> + if (ConfigType == ACPI_NHLT_CONFIG_TYPE_RENDER_FEEDBACK)
> + {
> + Subtable = ACPI_ADD_PTR (ACPI_NHLT_ENDPOINT, Table, Offset);
> + DevSpecific = ACPI_CAST_PTR (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_A, Subtable);
>
> Status = AcpiDmDumpTable (TableLength, Offset, DevSpecific,
> - sizeof (ACPI_NHLT_VENDOR_MIC_CONFIG), AcpiDmTableInfoNhlt6);
> + sizeof (ACPI_NHLT_RENDER_FEEDBACK_DEVICE_SPECIFIC_CONFIG), AcpiDmTableInfoNhlt6b);
> if (ACPI_FAILURE (Status))
> {
> return;
> }
> - Offset += sizeof (ACPI_NHLT_VENDOR_MIC_CONFIG);
> + Offset += sizeof (ACPI_NHLT_RENDER_FEEDBACK_DEVICE_SPECIFIC_CONFIG);
> }
> break;
> + }
>
> - default:
> - Status = AcpiDmDumpTable (TableLength, Offset, DevSpecific,
> - sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_B), AcpiDmTableInfoNhlt5b);
> - if (ACPI_FAILURE (Status))
> - {
> - return;
> - }
> + /* Check for a vendor-defined mic array */
>
> - Offset += sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_B);
> - Status = AcpiDmDumpTable (TableLength, Offset, DevSpecific,
> - CapabilitiesSize, AcpiDmTableInfoNhlt3a);
> - if (ACPI_FAILURE (Status))
> + if (ConfigType == ACPI_NHLT_CONFIG_TYPE_MIC_ARRAY)
> + {
> + if ((ArrayType & ACPI_NHLT_ARRAY_TYPE_MASK) == ACPI_NHLT_VENDOR_DEFINED)
> {
> - return;
> + /* Vendor-defined microphone array; get the microphone count first */
> +
> + AcpiOsPrintf ("\n /* Vendor-defined microphone count */\n");
> + MicCount = ACPI_ADD_PTR (ACPI_NHLT_VENDOR_MIC_COUNT, Table, Offset);
> + MicrophoneCount = MicCount->MicrophoneCount;
> +
> + Status = AcpiDmDumpTable (TableLength, Offset, MicCount,
> + sizeof (ACPI_NHLT_VENDOR_MIC_COUNT), AcpiDmTableInfoNhlt6a);
> + Offset += sizeof (ACPI_NHLT_VENDOR_MIC_COUNT);
> + if (ACPI_FAILURE (Status))
> + {
> + return;
> + }
> +
> + /* Get the vendor microphone config structure(s) */
> +
> + for (j = 0; j < MicrophoneCount; j++)
> + {
> + AcpiOsPrintf ("\n /* Vendor-defined microphone array #%u*/\n", j+1);
> + DevSpecific = ACPI_ADD_PTR (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_A, Table, Offset);
> +
> + Status = AcpiDmDumpTable (TableLength, Offset, DevSpecific,
> + sizeof (ACPI_NHLT_VENDOR_MIC_CONFIG), AcpiDmTableInfoNhlt6);
> + if (ACPI_FAILURE (Status))
> + {
> + return;
> + }
> +
> + Offset += sizeof (ACPI_NHLT_VENDOR_MIC_CONFIG);
> + }
> +
> + /* Check for Microphone SNR and sensitivity extension */
> +
> + if ((ArrayType & ACPI_NHLT_ARRAY_TYPE_EXT_MASK) == ACPI_NHLT_MIC_SNR_SENSITIVITY_EXT)
> + {
> + AcpiOsPrintf ("\n /* Microphone SNR and sensitivity array */\n");
> + DevSpecific = ACPI_ADD_PTR (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_A, Table, Offset);
> +
> + Status = AcpiDmDumpTable (TableLength, Offset, DevSpecific,
> + sizeof (ACPI_NHLT_MIC_SNR_SENSITIVITY_EXTENSION), AcpiDmTableInfoNhlt9);
> + if (ACPI_FAILURE (Status))
> + {
> + return;
> + }
> +
> + Offset += sizeof (ACPI_NHLT_MIC_SNR_SENSITIVITY_EXTENSION);
> + }
> }
> - Offset += CapabilitiesSize;
> - break;
> }
>
> - /* Do the Formats_Config table */
> + /* Do the Formats_Config table - starts with the FormatsCount field */
>
> FormatsConfig = ACPI_ADD_PTR (ACPI_NHLT_FORMATS_CONFIG, Table, Offset);
> FormatsCount = FormatsConfig->FormatsCount;
>
> - AcpiOsPrintf ("\n/* Formats_Config table */\n");
> + AcpiOsPrintf ("\n /* Formats_Config table */\n");
>
> - Status = AcpiDmDumpTable (TableLength, Offset, FormatsConfig,
> - sizeof (ACPI_NHLT_FORMATS_CONFIG), AcpiDmTableInfoNhlt4);
> - if (ACPI_FAILURE (Status))
> + /* Dump the FormatsCount value */
> +
> + if (FormatsCount > 0)
> {
> - return;
> + Status = AcpiDmDumpTable (TableLength, Offset, FormatsConfig,
> + sizeof (ACPI_NHLT_FORMATS_CONFIG), AcpiDmTableInfoNhlt4);
> + if (ACPI_FAILURE (Status))
> + {
> + return;
> + }
> }
> Offset += sizeof (ACPI_NHLT_FORMATS_CONFIG);
>
> @@ -1676,36 +1745,43 @@ AcpiDmDumpNhlt (
>
> /* Do the Wave_extensible struct */
>
> - AcpiOsPrintf ("\n/* Wave_Format_Extensible table #%u */\n", j+1);
> + AcpiOsPrintf ("\n /* Wave_Format_Extensible table #%u */\n", j+1);
> Status = AcpiDmDumpTable (TableLength, Offset, FormatSubtable,
> sizeof (ACPI_NHLT_FORMAT_CONFIG), AcpiDmTableInfoNhlt3);
> if (ACPI_FAILURE (Status))
> {
> return;
> }
> - Offset += sizeof (ACPI_NHLT_WAVE_EXTENSIBLE);
>
> - /* Do the Capabilities array */
> + Offset += sizeof (ACPI_NHLT_FORMAT_CONFIG);
>
> - Offset += sizeof (UINT32);
> - AcpiOsPrintf ("\n/* Specific_Config table #%u */\n", j+1);
> - FormatSubtable = ACPI_ADD_PTR (ACPI_NHLT_FORMAT_CONFIG, Table, Offset);
> - Status = AcpiDmDumpTable (TableLength, Offset, FormatSubtable,
> - CapabilitiesSize, AcpiDmTableInfoNhlt3a);
> - if (ACPI_FAILURE (Status))
> + if (CapabilitiesSize > 0)
> {
> - return;
> + FormatSubtable = ACPI_ADD_PTR (ACPI_NHLT_FORMAT_CONFIG, Table, Offset);
> + /* Do the Capabilities array (of bytes) */
> +
> + AcpiOsPrintf ("\n /* Specific_Config table #%u */\n", j+1);
> + FormatSubtable = ACPI_ADD_PTR (ACPI_NHLT_FORMAT_CONFIG, Table, Offset);
> + Status = AcpiDmDumpTable (TableLength, Offset, FormatSubtable,
> + CapabilitiesSize, AcpiDmTableInfoNhlt3a);
> + if (ACPI_FAILURE (Status))
> + {
> + return;
> + }
> +
> + Offset += CapabilitiesSize; // + sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_B);
> }
> - Offset += CapabilitiesSize;
> - }
> +
> + } /* for (j = 0; j < FormatsCount; j++) */
>
> /*
> - * If we are not done with the Endpoint(s) yet, then there must be
> - * some Linux-specific structure(s) yet to be processed.
> + * If we are not done with the current Endpoint yet, then there must be
> + * some Linux-specific structure(s) yet to be processed. First, get
> + * the count of such structure(s).
> */
> if (Offset < EndpointEndOffset)
> {
> - AcpiOsPrintf ("\n");
> + AcpiOsPrintf ("\n /* Linux-specific structures (not part of NHLT spec) */\n");
> Count = ACPI_ADD_PTR (ACPI_NHLT_LINUX_SPECIFIC_COUNT, Table, Offset);
> Status = AcpiDmDumpTable (TableLength, Offset, Count,
> sizeof (ACPI_NHLT_LINUX_SPECIFIC_COUNT), AcpiDmTableInfoNhlt7);
> @@ -1715,14 +1791,32 @@ AcpiDmDumpNhlt (
> }
> Offset += sizeof (ACPI_NHLT_LINUX_SPECIFIC_COUNT);
>
> + if (Count->StructureCount > 1)
> + {
> + /*
> + * We currently cannot disassemble more than one
> + * Linux-Specific section, because we have no way of
> + * knowing whether the "Specific Data" part is present.
> + */
> + Count->StructureCount = 1;
> + fprintf (stderr, "%s %s\n", "Feature not supported:",
> + "Cannot disassemble more than one Linux-Specific structure");
> + return;
> + }
> +
> /* Variable number of linux-specific structures */
>
> - for (k = 0; k < Count->StructureCount; k++)
> + for (j = 0; j < Count->StructureCount; j++)
> {
> LinuxData = ACPI_ADD_PTR (ACPI_NHLT_LINUX_SPECIFIC_DATA, Table, Offset);
> + AcpiOsPrintf ("\n /* Linux-specific structure #%u (not part of NHLT spec) */\n", j+1);
>
> - AcpiOsPrintf ("\n/* Linux-specific structure #%u */\n", k+1);
> -
> + /*
> + * Dump the following Linux-specific fields:
> + * 1) Device ID
> + * 2) Device Instance ID
> + * 3) Device Port ID
> + */
> Status = AcpiDmDumpTable (TableLength, Offset, LinuxData,
> sizeof (ACPI_NHLT_LINUX_SPECIFIC_DATA), AcpiDmTableInfoNhlt7a);
> if (ACPI_FAILURE (Status))
> @@ -1731,28 +1825,43 @@ AcpiDmDumpNhlt (
> }
>
> Offset += sizeof (ACPI_NHLT_LINUX_SPECIFIC_DATA);
> - }
>
> - /* Should be at the end of the Endpoint structure. Skip any extra bytes */
> + /*
> + * Check that the current offset is not beyond the end of
> + * this endpoint descriptor. If it is not, we assume that
> + * the "Specific Data" field is present and valid. Note:
> + * This does not seem to be documented anywhere.
> + */
> + if (Offset < EndpointEndOffset)
> + {
> + /* Dump the linux-specific "Specific Data" field */
>
> - if (Offset < EndpointEndOffset)
> - {
> - AcpiOsPrintf ("\n/* Endpoint descriptor ended before endpoint size was reached. "
> - "skipped %X input bytes, current offset: %X, Endpoint End Offset: %X */\n",
> - EndpointEndOffset - Offset, Offset, EndpointEndOffset);
> - AcpiUtDumpBuffer (((UINT8 *)Table)+Offset,
> - EndpointEndOffset - Offset, DB_BYTE_DISPLAY, Offset);
> - Offset = EndpointEndOffset;
> + LinuxDataB = ACPI_ADD_PTR (ACPI_NHLT_LINUX_SPECIFIC_DATA_B, Table, Offset);
> + Status = AcpiDmDumpTable (TableLength, Offset, LinuxDataB,
> + sizeof (ACPI_NHLT_LINUX_SPECIFIC_DATA_B), AcpiDmTableInfoNhlt7b);
> + if (ACPI_FAILURE (Status))
> + {
> + return;
> + }
> +
> + Offset += sizeof (ACPI_NHLT_LINUX_SPECIFIC_DATA_B);
> + }
> }
> +
> + /* Should be at the end of the Endpoint structure. */
> }
> - }
>
> - /* Emit the table terminator (if present) */
> + } /* for (i = 0; i < EndpointCount; i++) */
> +
>
> + /*
> + * Done with all of the Endpoint Descriptors, Emit the table terminator
> + * (if such a legacy structure is present -- not in NHLT specification)
> + */
> if (Offset == TableLength - sizeof (ACPI_NHLT_TABLE_TERMINATOR))
> {
> LinuxData = ACPI_ADD_PTR (ACPI_NHLT_LINUX_SPECIFIC_DATA, Table, Offset);
> - AcpiOsPrintf ("\n/* Table terminator structure */\n");
> + AcpiOsPrintf ("\n /* Table terminator structure (not part of NHLT spec) */\n");
>
> Status = AcpiDmDumpTable (TableLength, Offset, LinuxData,
> sizeof (ACPI_NHLT_TABLE_TERMINATOR), AcpiDmTableInfoNhlt8);
> diff --git a/src/acpica/source/common/dmtbinfo.c b/src/acpica/source/common/dmtbinfo.c
> index 347f9d36..7d812315 100644
> --- a/src/acpica/source/common/dmtbinfo.c
> +++ b/src/acpica/source/common/dmtbinfo.c
> @@ -292,7 +292,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoFacs[] =
> ACPI_DMTABLE_INFO AcpiDmTableInfoFadt1[] =
> {
> {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Facs), "FACS Address", 0},
> - {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Dsdt), "DSDT Address", DT_NON_ZERO},
> + {ACPI_DMT_UINT32, ACPI_FADT_OFFSET (Dsdt), "DSDT Address", 0},
> {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (Model), "Model", 0},
> {ACPI_DMT_FADTPM, ACPI_FADT_OFFSET (PreferredProfile), "PM Profile", 0},
> {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (SciInterrupt), "SCI Interrupt", 0},
> @@ -408,7 +408,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoFadt3[] =
> ACPI_DMT_TERMINATOR
> };
>
> -/* ACPI 5.0 Extensions (FADT version 5) */
> +/* Extensions for FADT version 5 */
>
> ACPI_DMTABLE_INFO AcpiDmTableInfoFadt5[] =
> {
> @@ -417,7 +417,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoFadt5[] =
> ACPI_DMT_TERMINATOR
> };
>
> -/* ACPI 6.0 Extensions (FADT version 6) */
> +/* Extensions for FADT version 6 */
>
> ACPI_DMTABLE_INFO AcpiDmTableInfoFadt6[] =
> {
> diff --git a/src/acpica/source/common/dmtbinfo2.c b/src/acpica/source/common/dmtbinfo2.c
> index 4cbe112e..ab1b2634 100644
> --- a/src/acpica/source/common/dmtbinfo2.c
> +++ b/src/acpica/source/common/dmtbinfo2.c
> @@ -188,6 +188,25 @@
> * Remaining tables are not consumed directly by the ACPICA subsystem
> */
>
> +/*******************************************************************************
> + *
> + * AGDI - Arm Generic Diagnostic Dump and Reset Device Interface
> + *
> + * Conforms to "ACPI for Arm Components 1.1, Platform Design Document"
> + * ARM DEN0093 v1.1
> + *
> + ******************************************************************************/
> +
> +ACPI_DMTABLE_INFO AcpiDmTableInfoAgdi[] =
> +{
> + {ACPI_DMT_UINT8, ACPI_AGDI_OFFSET (Flags), "Flags (decoded below)", 0},
> + {ACPI_DMT_FLAG0, ACPI_AGDI_FLAG_OFFSET (Flags, 0), "Signalling mode", 0},
> + {ACPI_DMT_UINT24, ACPI_AGDI_OFFSET (Reserved[0]), "Reserved", 0},
> + {ACPI_DMT_UINT32, ACPI_AGDI_OFFSET (SdeiEvent), "SdeiEvent", 0},
> + {ACPI_DMT_UINT32, ACPI_AGDI_OFFSET (Gsiv), "Gsiv", 0},
> + ACPI_DMT_TERMINATOR
> +};
> +
>
> /*******************************************************************************
> *
> @@ -1217,7 +1236,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt0[] =
> {ACPI_DMT_NHLT1, ACPI_NHLT0_OFFSET (LinkType), "Link Type", 0},
> {ACPI_DMT_UINT8, ACPI_NHLT0_OFFSET (InstanceId), "Instance Id", 0},
> {ACPI_DMT_UINT16, ACPI_NHLT0_OFFSET (VendorId), "Vendor Id", 0},
> - {ACPI_DMT_UINT16, ACPI_NHLT0_OFFSET (DeviceId), "Device Id", 0},
> + {ACPI_DMT_NHLT1e, ACPI_NHLT0_OFFSET (DeviceId), "Device Id", 0},
> {ACPI_DMT_UINT16, ACPI_NHLT0_OFFSET (RevisionId), "Revision Id", 0},
> {ACPI_DMT_UINT32, ACPI_NHLT0_OFFSET (SubsystemId), "Subsystem Id", 0},
> {ACPI_DMT_UINT8, ACPI_NHLT0_OFFSET (DeviceType), "Device Type", 0},
> @@ -1230,9 +1249,9 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt0[] =
>
> ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt1[] =
> {
> - {ACPI_DMT_UINT32, ACPI_NHLT1_OFFSET (CapabilitiesSize), "Capabilities Size", DT_LENGTH},
> + {ACPI_DMT_UINT32, ACPI_NHLT1_OFFSET (CapabilitiesSize), "Capabilities Size", 0},
> {ACPI_DMT_UINT8, ACPI_NHLT1_OFFSET (VirtualSlot), "Virtual Slot", 0},
> - {ACPI_DMT_UINT8, ACPI_NHLT1_OFFSET (ConfigType), "Config Type", 0},
> + {ACPI_DMT_NHLT1f, ACPI_NHLT1_OFFSET (ConfigType), "Config Type", 0},
> ACPI_DMT_TERMINATOR
> };
>
> @@ -1253,7 +1272,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt2[] =
> ACPI_DMT_TERMINATOR
> };
>
> -/* Format Config */
> +/* Format Config (wave_format_extensible structure) */
>
> ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt3[] =
> {
> @@ -1267,7 +1286,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt3[] =
> {ACPI_DMT_UINT16, ACPI_NHLT3_OFFSET (Format.ValidBitsPerSample), "Valid Bits Per Sample", 0},
> {ACPI_DMT_UINT32, ACPI_NHLT3_OFFSET (Format.ChannelMask), "Channel Mask", 0},
> {ACPI_DMT_UUID, ACPI_NHLT3_OFFSET (Format.SubFormatGuid), "SubFormat GUID", 0},
> - {ACPI_DMT_UINT32, ACPI_NHLT3_OFFSET (CapabilitySize), "Capabilities Length", DT_LENGTH},
> + {ACPI_DMT_UINT32, ACPI_NHLT3_OFFSET (CapabilitySize), "Capabilities Length", 0},
> ACPI_DMT_TERMINATOR
> };
>
> @@ -1281,7 +1300,6 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt3a[] =
> ACPI_DMT_TERMINATOR
> };
>
> -
> /* Formats Config */
>
> ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt4[] =
> @@ -1294,9 +1312,8 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt4[] =
>
> ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt5[] =
> {
> - {ACPI_DMT_UINT32, ACPI_NHLT5_OFFSET (CapabilitiesSize), "Capabilities Size", DT_LENGTH},
> {ACPI_DMT_UINT8, ACPI_NHLT5_OFFSET (VirtualSlot), "Virtual Slot", 0},
> - {ACPI_DMT_UINT8, ACPI_NHLT5_OFFSET (ConfigType), "Config Type", 0},
> + {ACPI_DMT_NHLT1f, ACPI_NHLT5_OFFSET (ConfigType), "Config Type", 0},
> ACPI_DMT_TERMINATOR
> };
>
> @@ -1304,10 +1321,9 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt5[] =
>
> ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt5a[] =
> {
> - {ACPI_DMT_UINT32, ACPI_NHLT5A_OFFSET (CapabilitiesSize), "Capabilities Size", DT_LENGTH},
> {ACPI_DMT_UINT8, ACPI_NHLT5A_OFFSET (VirtualSlot), "Virtual Slot", 0},
> - {ACPI_DMT_UINT8, ACPI_NHLT5A_OFFSET (ConfigType), "Config Type", 0},
> - {ACPI_DMT_UINT8, ACPI_NHLT5A_OFFSET (ArrayType), "Array Type", 0},
> + {ACPI_DMT_NHLT1f, ACPI_NHLT5A_OFFSET (ConfigType), "Config Type", 0},
> + {ACPI_DMT_NHLT1d, ACPI_NHLT5A_OFFSET (ArrayType), "Array Type", 0},
> ACPI_DMT_TERMINATOR
> };
>
> @@ -1315,7 +1331,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt5a[] =
>
> ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt5b[] =
> {
> - {ACPI_DMT_UINT32, ACPI_NHLT5B_OFFSET (CapabilitiesSize), "Capabilities Size", DT_LENGTH},
> + {ACPI_DMT_UINT32, ACPI_NHLT5B_OFFSET (CapabilitiesSize), "Capabilities Size", 0},
> ACPI_DMT_TERMINATOR
> };
>
> @@ -1323,17 +1339,32 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt5b[] =
>
> ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt5c[] =
> {
> - {ACPI_DMT_UINT32, ACPI_NHLT5C_OFFSET (CapabilitiesSize), "Capabilities Size", DT_LENGTH},
> {ACPI_DMT_UINT8, ACPI_NHLT5C_OFFSET (VirtualSlot), "Virtual Slot", 0},
> ACPI_DMT_TERMINATOR
> };
>
> /* Microphone array Config */
>
> +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt6a[] =
> +{
> + {ACPI_DMT_UINT8, ACPI_NHLT6A_OFFSET (MicrophoneCount), "Microphone Count", 0},
> + ACPI_DMT_TERMINATOR
> +};
> +
> +/* Render Feedback Device Config, CapabilitiesSize == 7 */
> +
> +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt6b[] =
> +{
> + {ACPI_DMT_UINT8, ACPI_NHLT6B_OFFSET (FeedbackVirtualSlot), "Feedback Virtual Slot", 0},
> + {ACPI_DMT_UINT16, ACPI_NHLT6B_OFFSET (FeedbackChannels), "Feedback Channels", 0},
> + {ACPI_DMT_UINT16, ACPI_NHLT6B_OFFSET (FeedbackValidBitsPerSample),"Valid Bits Per Sample", 0},
> + ACPI_DMT_TERMINATOR
> +};
> +
> ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt6[] =
> {
> - {ACPI_DMT_UINT8, ACPI_NHLT6_OFFSET (Type), "Type", 0},
> - {ACPI_DMT_UINT8, ACPI_NHLT6_OFFSET (Panel), "Panel", 0},
> + {ACPI_DMT_NHLT1b, ACPI_NHLT6_OFFSET (Type), "Type", 0},
> + {ACPI_DMT_NHLT1c, ACPI_NHLT6_OFFSET (Panel), "Panel", 0},
> {ACPI_DMT_UINT16, ACPI_NHLT6_OFFSET (SpeakerPositionDistance), "Speaker Position Distance", 0},
> {ACPI_DMT_UINT16, ACPI_NHLT6_OFFSET (HorizontalOffset), "Horizontal Offset", 0},
> {ACPI_DMT_UINT16, ACPI_NHLT6_OFFSET (VerticalOffset), "Vertical Offset", 0},
> @@ -1352,7 +1383,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt6[] =
>
> ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt7[] =
> {
> - {ACPI_DMT_UINT8, ACPI_NHLT7_OFFSET (StructureCount), "Linux-specific struct count", 0},
> + {ACPI_DMT_UINT8, ACPI_NHLT7_OFFSET (StructureCount), "Linux-specific Count", 0},
> ACPI_DMT_TERMINATOR
> };
>
> @@ -1363,7 +1394,12 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt7a[] =
> {ACPI_DMT_BUF16, ACPI_NHLT7A_OFFSET (DeviceId), "Device ID", 0},
> {ACPI_DMT_UINT8, ACPI_NHLT7A_OFFSET (DeviceInstanceId), "Device Instance ID", 0},
> {ACPI_DMT_UINT8, ACPI_NHLT7A_OFFSET (DevicePortId), "Device Port ID", 0},
> - {ACPI_DMT_BUF18, ACPI_NHLT7A_OFFSET (Filler), "Specific Data", 0},
> + ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt7b[] =
> +{
> + {ACPI_DMT_BUF18, ACPI_NHLT7B_OFFSET (SpecificData), "Specific Data", 0},
> ACPI_DMT_TERMINATOR
> };
>
> @@ -1376,6 +1412,15 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt8[] =
> ACPI_DMT_TERMINATOR
> };
>
> +/* Sensitivity Extension */
> +
> +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt9[] =
> +{
> + {ACPI_DMT_UINT32, ACPI_NHLT9_OFFSET (SNR), "Signal-to-noise ratio", 0},
> + {ACPI_DMT_UINT32, ACPI_NHLT9_OFFSET (Sensitivity), "Mic Sensitivity", 0},
> + ACPI_DMT_TERMINATOR
> +};
> +
>
> /*******************************************************************************
> *
> diff --git a/src/acpica/source/common/dmtbinfo3.c b/src/acpica/source/common/dmtbinfo3.c
> index 12e1be4c..6bdaf676 100644
> --- a/src/acpica/source/common/dmtbinfo3.c
> +++ b/src/acpica/source/common/dmtbinfo3.c
> @@ -491,6 +491,20 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaServer[] =
> };
>
>
> +/*******************************************************************************
> + *
> + * TDEL - TD-Event Log Table
> + *
> + ******************************************************************************/
> +
> +ACPI_DMTABLE_INFO AcpiDmTableInfoTdel[] =
> +{
> + {ACPI_DMT_UINT32, ACPI_TDEL_OFFSET (Reserved), "Reserved", 0},
> + {ACPI_DMT_UINT64, ACPI_TDEL_OFFSET (LogAreaMinimumLength), "Log Area Minimum Length", 0},
> + {ACPI_DMT_UINT64, ACPI_TDEL_OFFSET (LogAreaStartAddress), "Log Area Start Address", 0},
> + ACPI_DMT_TERMINATOR
> +};
> +
> /*******************************************************************************
> *
> * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table
> diff --git a/src/acpica/source/compiler/aslcache.c b/src/acpica/source/compiler/aslcache.c
> index 51e6f4c4..05ae19b7 100644
> --- a/src/acpica/source/compiler/aslcache.c
> +++ b/src/acpica/source/compiler/aslcache.c
> @@ -183,6 +183,11 @@ UtLocalCacheCalloc (
> UINT32 CacheSize = ASL_STRING_CACHE_SIZE;
>
>
> +#ifdef ACPI_MISALIGNMENT_NOT_SUPPORTED
> + /* Used for objects other than strings, so keep allocations aligned */
> + Length = ACPI_ROUND_UP_TO_NATIVE_WORD (Length);
> +#endif
> +
> if (Length > CacheSize)
> {
> CacheSize = Length;
> diff --git a/src/acpica/source/compiler/aslfiles.c b/src/acpica/source/compiler/aslfiles.c
> index a93417c6..14403d3d 100644
> --- a/src/acpica/source/compiler/aslfiles.c
> +++ b/src/acpica/source/compiler/aslfiles.c
> @@ -835,8 +835,8 @@ ErrorExit:
> * RETURN: Status
> *
> * DESCRIPTION: Open the specified input file, and save the directory path to
> - * the file so that include files can be opened in
> - * the same directory.
> + * the file so that include files can be opened in the same
> + * directory. NOTE: File is opened in text mode.
> *
> ******************************************************************************/
>
> diff --git a/src/acpica/source/compiler/aslmessages.c b/src/acpica/source/compiler/aslmessages.c
> index 4dd6422b..ca50d281 100644
> --- a/src/acpica/source/compiler/aslmessages.c
> +++ b/src/acpica/source/compiler/aslmessages.c
> @@ -410,6 +410,8 @@ const char *AslTableCompilerMsgs [] =
> /* 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",
> +/* ASL_MSG_TWO_ZERO_VALUES */ "32-bit DSDT Address and 64-bit X_DSDT Address cannot both be zero",
> +/* ASL_MSG_BAD_PARSE_TREE */ "Parse tree appears to be ill-defined"
> };
>
> /* Preprocessor */
> diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h
> index 69c2561b..0e9fefd4 100644
> --- a/src/acpica/source/compiler/aslmessages.h
> +++ b/src/acpica/source/compiler/aslmessages.h
> @@ -412,6 +412,8 @@ typedef enum
> ASL_MSG_ENTRY_LIST,
> ASL_MSG_UNKNOWN_FORMAT,
> ASL_MSG_RESERVED_VALUE,
> + ASL_MSG_TWO_ZERO_VALUES,
> + ASL_MSG_BAD_PARSE_TREE,
>
> /* These messages are used by the Preprocessor only */
>
> diff --git a/src/acpica/source/compiler/aslstartup.c b/src/acpica/source/compiler/aslstartup.c
> index 97881e14..3954388c 100644
> --- a/src/acpica/source/compiler/aslstartup.c
> +++ b/src/acpica/source/compiler/aslstartup.c
> @@ -293,9 +293,17 @@ AslDetectSourceFileType (
> goto Cleanup;
> }
>
> - /* We have some sort of binary table, check for valid ACPI table */
> -
> - fseek (Info->Handle, 0, SEEK_SET);
> + /*
> + * We have some sort of binary table; reopen in binary mode, then
> + * check for valid ACPI table
> + */
> + fclose (Info->Handle);
> + Info->Handle = fopen (Info->Filename, "rb");
> + if (!Info->Handle)
> + {
> + fprintf (stderr, "Could not open input file %s\n",
> + Info->Filename);
> + }
>
> Status = AcValidateTableHeader (Info->Handle, 0);
> if (ACPI_SUCCESS (Status))
> @@ -446,8 +454,9 @@ AslDoOneFile (
> UtConvertBackslashes (AslGbl_Files[ASL_FILE_INPUT].Filename);
>
> /*
> - * Open the input file. Here, this should be an ASCII source file,
> - * either an ASL file or a Data Table file
> + * Open the input file. Here, this could be an ASCII source file,
> + * either an ASL file or a Data Table file, or a binary AML file
> + * or binary data table file (For disassembly).
> */
> Status = FlOpenInputFile (AslGbl_Files[ASL_FILE_INPUT].Filename);
> if (ACPI_FAILURE (Status))
> @@ -458,8 +467,6 @@ AslDoOneFile (
>
> FileNode = FlGetCurrentFileNode();
>
> - FileNode->OriginalInputFileSize = FlGetFileSize (ASL_FILE_INPUT);
> -
> /* Determine input file type */
>
> AslGbl_FileType = AslDetectSourceFileType (&AslGbl_Files[ASL_FILE_INPUT]);
> @@ -469,6 +476,8 @@ AslDoOneFile (
> return (AE_ERROR);
> }
>
> + FileNode->OriginalInputFileSize = FlGetFileSize (ASL_FILE_INPUT);
> +
> /*
> * If -p not specified, we will use the input filename as the
> * output filename prefix
> diff --git a/src/acpica/source/compiler/asluuid.c b/src/acpica/source/compiler/asluuid.c
> index 30540acd..def35c92 100644
> --- a/src/acpica/source/compiler/asluuid.c
> +++ b/src/acpica/source/compiler/asluuid.c
> @@ -211,4 +211,3 @@ AuValidateUuid (
>
> return (AE_OK);
> }
> -
> diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h
> index 614a686f..d9c92ce2 100644
> --- a/src/acpica/source/compiler/dtcompiler.h
> +++ b/src/acpica/source/compiler/dtcompiler.h
> @@ -762,6 +762,7 @@ DtGetGenericTableInfo (
> /* ACPI Table templates */
>
> extern const unsigned char TemplateAest[];
> +extern const unsigned char TemplateAgdi[];
> extern const unsigned char TemplateAsf[];
> extern const unsigned char TemplateBoot[];
> extern const unsigned char TemplateBdat[];
> @@ -793,6 +794,7 @@ extern const unsigned char TemplateMpst[];
> extern const unsigned char TemplateMsct[];
> extern const unsigned char TemplateMsdm[];
> extern const unsigned char TemplateNfit[];
> +extern const unsigned char TemplateNhlt[];
> extern const unsigned char TemplatePcct[];
> extern const unsigned char TemplatePdtt[];
> extern const unsigned char TemplatePhat[];
> @@ -814,6 +816,7 @@ extern const unsigned char TemplateSrat[];
> extern const unsigned char TemplateStao[];
> extern const unsigned char TemplateSvkl[];
> extern const unsigned char TemplateTcpa[];
> +extern const unsigned char TemplateTdel[];
> extern const unsigned char TemplateTpm2[];
> extern const unsigned char TemplateUefi[];
> extern const unsigned char TemplateViot[];
> diff --git a/src/acpica/source/compiler/dttable.c b/src/acpica/source/compiler/dttable.c
> index 702c83ee..fb3f26f1 100644
> --- a/src/acpica/source/compiler/dttable.c
> +++ b/src/acpica/source/compiler/dttable.c
> @@ -223,10 +223,12 @@ DtCompileRsdp (
> *
> * RETURN: Status
> *
> - * DESCRIPTION: Compile FADT.
> + * DESCRIPTION: Compile FADT (signature FACP).
> *
> *****************************************************************************/
>
> +#define ACPI_XDSDT_LOCATION_IN_LIST 11
> +
> ACPI_STATUS
> DtCompileFadt (
> void **List)
> @@ -235,10 +237,17 @@ DtCompileFadt (
> DT_SUBTABLE *Subtable;
> DT_SUBTABLE *ParentTable;
> DT_FIELD **PFieldList = (DT_FIELD **) List;
> - ACPI_TABLE_HEADER *Table;
> + DT_FIELD *DsdtFieldList;
> + ACPI_TABLE_FADT *Table;
> UINT8 Revision;
> + UINT32 DsdtAddress;
> + UINT64 X_DsdtAddress;
> + UINT32 i;
> +
>
> + /* Get the table revision and 32-bit DSDT Address definition */
>
> + DsdtFieldList = (*PFieldList)->Next;
> Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt1,
> &Subtable);
> if (ACPI_FAILURE (Status))
> @@ -249,8 +258,16 @@ DtCompileFadt (
> ParentTable = DtPeekSubtable ();
> DtInsertSubtable (ParentTable, Subtable);
>
> - Table = ACPI_CAST_PTR (ACPI_TABLE_HEADER, ParentTable->Buffer);
> - Revision = Table->Revision;
> + Table = ACPI_CAST_PTR (ACPI_TABLE_FADT, ParentTable->Buffer);
> + Revision = Table->Header.Revision;
> + DsdtAddress = Table->Dsdt;
> +
> + /* FADT version 1 has only 32-bit addresses - error if DSDT address is NULL */
> +
> + if ((Revision == 1) && (!DsdtAddress))
> + {
> + DtError (ASL_ERROR, ASL_MSG_ZERO_VALUE, DsdtFieldList, NULL);
> + }
>
> if (Revision == 2)
> {
> @@ -263,8 +280,24 @@ DtCompileFadt (
>
> DtInsertSubtable (ParentTable, Subtable);
> }
> - else if (Revision >= 2)
> +
> + else if (Revision > 2)
> {
> + /*
> + * Rev 3 and greater have 64-bit addresses (as well as 32-bit).
> + * Get the 64-bit DSDT (X_DSDT) Address definition. Note: This
> + * appears at field list offset 11 within AcpiDmTableInfoFadt3.
> + */
> + DsdtFieldList = *PFieldList;
> + for (i = 0; i < ACPI_XDSDT_LOCATION_IN_LIST; i++)
> + {
> + DsdtFieldList = DsdtFieldList->Next;
> + if (!DsdtFieldList)
> + {
> + return (ASL_MSG_BAD_PARSE_TREE);
> + }
> + }
> +
> Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt3,
> &Subtable);
> if (ACPI_FAILURE (Status))
> @@ -274,6 +307,20 @@ DtCompileFadt (
>
> DtInsertSubtable (ParentTable, Subtable);
>
> + Table = ACPI_CAST_PTR (ACPI_TABLE_FADT, ParentTable->Buffer);
> + X_DsdtAddress = Table->XDsdt;
> +
> + /*
> + * Error if both the 32-bit DSDT address and the
> + * 64-bit X_DSDT address are zero.
> + */
> + if ((!X_DsdtAddress) && (!DsdtAddress))
> + {
> + DtError (ASL_ERROR, ASL_MSG_TWO_ZERO_VALUES, DsdtFieldList, NULL);
> + }
> +
> + /* Fields specific to FADT Revision 5 (appended to previous) */
> +
> if (Revision >= 5)
> {
> Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt5,
> @@ -286,6 +333,8 @@ DtCompileFadt (
> DtInsertSubtable (ParentTable, Subtable);
> }
>
> + /* Fields specific to FADT Revision 6 (appended to previous) */
> +
> if (Revision >= 6)
> {
> Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt6,
> diff --git a/src/acpica/source/compiler/dttable2.c b/src/acpica/source/compiler/dttable2.c
> index b9445122..85406361 100644
> --- a/src/acpica/source/compiler/dttable2.c
> +++ b/src/acpica/source/compiler/dttable2.c
> @@ -781,6 +781,390 @@ DtCompileNfit (
> }
>
>
> +/******************************************************************************
> + *
> + * FUNCTION: DtCompileNhlt
> + *
> + * PARAMETERS: List - Current field list pointer
> + *
> + * RETURN: Status
> + *
> + * DESCRIPTION: Compile NHLT.
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +DtCompileNhlt (
> + void **List)
> +{
> + ACPI_STATUS Status;
> + UINT32 EndpointCount;
> + UINT32 MicrophoneCount;
> + UINT32 FormatsCount;
> + DT_SUBTABLE *Subtable;
> + DT_SUBTABLE *ParentTable;
> + DT_FIELD **PFieldList = (DT_FIELD **) List;
> + UINT32 CapabilitiesSize;
> + UINT8 ArrayType;
> + UINT8 ConfigType;
> + UINT8 LinuxSpecificCount;
> + UINT32 i;
> + UINT32 j;
> + ACPI_TABLE_NHLT_ENDPOINT_COUNT *MainTable;
> + ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_A *DevSpecific;
> + ACPI_NHLT_VENDOR_MIC_COUNT *MicCount;
> + ACPI_NHLT_FORMATS_CONFIG *FormatsConfig;
> + ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_D *ConfigSpecific;
> + ACPI_NHLT_LINUX_SPECIFIC_COUNT *LinuxSpecific;
> +
> +
> + /* Main table */
> +
> + Status = DtCompileTable (PFieldList, AcpiDmTableInfoNhlt,
> + &Subtable);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> +
> + /* Get the Endpoint Descriptor count */
> +
> + ParentTable = DtPeekSubtable ();
> + DtInsertSubtable (ParentTable, Subtable);
> + DtPushSubtable (Subtable);
> +
> + MainTable = ACPI_CAST_PTR (ACPI_TABLE_NHLT_ENDPOINT_COUNT, Subtable->Buffer);
> + EndpointCount = MainTable->EndpointCount;
> +
> + /* Subtables */
> +
> + while (*PFieldList)
> + {
> + /* Variable number of Endpoint descriptors */
> +
> + for (i = 0; i < EndpointCount; i++)
> + {
> + /* Do the Endpoint Descriptor */
> +
> + Status = DtCompileTable (PFieldList, AcpiDmTableInfoNhlt0,
> + &Subtable);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> +
> + ParentTable = DtPeekSubtable ();
> + DtInsertSubtable (ParentTable, Subtable);
> + DtPushSubtable (Subtable);
> +
> + /* Do the Device Specific table */
> +
> + Status = DtCompileTable (PFieldList, AcpiDmTableInfoNhlt5b,
> + &Subtable);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> +
> + ParentTable = DtPeekSubtable ();
> + DtInsertSubtable (ParentTable, Subtable);
> + DtPushSubtable (Subtable);
> +
> + DevSpecific = ACPI_CAST_PTR (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_A, Subtable->Buffer);
> + CapabilitiesSize = DevSpecific->CapabilitiesSize;
> +
> + ArrayType = 0;
> + ConfigType = 0;
> +
> + switch (CapabilitiesSize)
> + {
> + case 0:
> + break;
> +
> + case 1:
> +
> + Status = DtCompileTable (PFieldList, AcpiDmTableInfoNhlt5c,
> + &Subtable);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> +
> + ParentTable = DtPeekSubtable ();
> + DtInsertSubtable (ParentTable, Subtable);
> + break;
> +
> + case 2:
> +
> + Status = DtCompileTable (PFieldList, AcpiDmTableInfoNhlt5,
> + &Subtable);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> +
> + ParentTable = DtPeekSubtable ();
> + DtInsertSubtable (ParentTable, Subtable);
> + break;
> +
> + case 3:
> +
> + Status = DtCompileTable (PFieldList, AcpiDmTableInfoNhlt5a,
> + &Subtable);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> +
> + ParentTable = DtPeekSubtable ();
> + DtInsertSubtable (ParentTable, Subtable);
> +
> + ConfigSpecific = ACPI_CAST_PTR (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_D, Subtable->Buffer);
> + ArrayType = ConfigSpecific->ArrayType;
> + ConfigType = ConfigSpecific->ConfigType;
> + break;
> +
> + case 7:
> +
> + Status = DtCompileTable (PFieldList, AcpiDmTableInfoNhlt5,
> + &Subtable);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> +
> + ParentTable = DtPeekSubtable ();
> + DtInsertSubtable (ParentTable, Subtable);
> +
> + Status = DtCompileTable (PFieldList, AcpiDmTableInfoNhlt6b,
> + &Subtable);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> +
> + ParentTable = DtPeekSubtable ();
> + DtInsertSubtable (ParentTable, Subtable);
> +
> + ConfigSpecific = ACPI_CAST_PTR (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_D, Subtable->Buffer);
> + ArrayType = ConfigSpecific->ArrayType;
> + ConfigType = ConfigSpecific->ConfigType;
> + break;
> +
> + default:
> +
> + Status = DtCompileTable (PFieldList, AcpiDmTableInfoNhlt5a,
> + &Subtable);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> +
> + ParentTable = DtPeekSubtable ();
> + DtInsertSubtable (ParentTable, Subtable);
> +
> + ConfigSpecific = ACPI_CAST_PTR (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_D, Subtable->Buffer);
> + ArrayType = ConfigSpecific->ArrayType;
> + ConfigType = ConfigSpecific->ConfigType;
> + break;
> +
> + } /* switch (CapabilitiesSize) */
> +
> + if (CapabilitiesSize >= 3)
> + {
> + /* Check for a vendor-defined mic array */
> +
> + if (ConfigType == ACPI_NHLT_CONFIG_TYPE_MIC_ARRAY)
> + {
> + if ((ArrayType & ACPI_NHLT_ARRAY_TYPE_MASK) == ACPI_NHLT_VENDOR_DEFINED)
> + {
> + /* Get the microphone count */
> +
> + Status = DtCompileTable (PFieldList, AcpiDmTableInfoNhlt6a,
> + &Subtable);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> +
> + MicCount = ACPI_CAST_PTR (ACPI_NHLT_VENDOR_MIC_COUNT, Subtable->Buffer);
> + MicrophoneCount = MicCount->MicrophoneCount;
> +
> + ParentTable = DtPeekSubtable ();
> + DtInsertSubtable (ParentTable, Subtable);
> +
> + /* Variable number of microphones */
> +
> + for (j = 0; j < MicrophoneCount; j++)
> + {
> + Status = DtCompileTable (PFieldList, AcpiDmTableInfoNhlt6,
> + &Subtable);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> +
> + ParentTable = DtPeekSubtable ();
> + DtInsertSubtable (ParentTable, Subtable);
> + }
> +
> + /* Do the MIC_SNR_SENSITIVITY_EXTENSION, if present */
> +
> + if (ArrayType & ACPI_NHLT_ARRAY_TYPE_EXT_MASK)
> + {
> + Status = DtCompileTable (PFieldList, AcpiDmTableInfoNhlt9,
> + &Subtable);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> +
> + ParentTable = DtPeekSubtable ();
> + DtInsertSubtable (ParentTable, Subtable);
> + }
> + }
> + }
> + }
> +
> + /* Get the formats count */
> +
> + DtPopSubtable ();
> + Status = DtCompileTable (PFieldList, AcpiDmTableInfoNhlt4,
> + &Subtable);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> +
> + ParentTable = DtPeekSubtable ();
> + DtInsertSubtable (ParentTable, Subtable);
> +
> + FormatsConfig = ACPI_CAST_PTR (ACPI_NHLT_FORMATS_CONFIG, Subtable->Buffer);
> + FormatsCount = FormatsConfig->FormatsCount;
> +
> + /* Variable number of wave_format_extensible structs */
> +
> + for (j = 0; j < FormatsCount; j++)
> + {
> + /* Do the main wave_format_extensible structure */
> +
> + Status = DtCompileTable (PFieldList, AcpiDmTableInfoNhlt3,
> + &Subtable);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> +
> + ParentTable = DtPeekSubtable ();
> + DtInsertSubtable (ParentTable, Subtable);
> + DtPushSubtable (Subtable);
> +
> + /* Do the capabilities list */
> +
> + Status = DtCompileTable (PFieldList, AcpiDmTableInfoNhlt3a,
> + &Subtable);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> +
> + DtPopSubtable ();
> + ParentTable = DtPeekSubtable ();
> + DtInsertSubtable (ParentTable, Subtable);
> +
> + } /* for (j = 0; j < FormatsCount; j++) */
> +
> + /*
> + * If we are not done with the current Endpoint yet, then there must be
> + * some Linux-specific structure(s) yet to be processed. First, get
> + * the count of such structure(s).
> + */
> + if (*PFieldList && (strcmp ((const char *) (*PFieldList)->Name, "Descriptor Length")))
> + {
> + /* Get the count of Linux-specific structures */
> +
> + Status = DtCompileTable (PFieldList, AcpiDmTableInfoNhlt7,
> + &Subtable);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> +
> + ParentTable = DtPeekSubtable ();
> + DtInsertSubtable (ParentTable, Subtable);
> +
> + LinuxSpecific = ACPI_CAST_PTR (ACPI_NHLT_LINUX_SPECIFIC_COUNT, Subtable->Buffer);
> + LinuxSpecificCount = LinuxSpecific->StructureCount;
> +
> + for (j = 0; j < LinuxSpecificCount; j++)
> + {
> + /*
> + * Compile the following Linux-specific fields:
> + * 1) Device ID
> + * 2) Device Instance ID
> + * 3) Device Port ID
> + */
> + Status = DtCompileTable (PFieldList, AcpiDmTableInfoNhlt7a,
> + &Subtable);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> +
> + ParentTable = DtPeekSubtable ();
> + DtInsertSubtable (ParentTable, Subtable);
> +
> + /*
> + * To have a valid Linux-specific "Specific Data" at this
> + * point, we need:
> + * 1) The next field must be named "Specific Data"
> + */
> + if (!strcmp ((const char *) (*PFieldList)->Name, "Specific Data"))
> + {
> + /* Compile the "Specific Data" field */
> +
> + Status = DtCompileTable (PFieldList, AcpiDmTableInfoNhlt7b,
> + &Subtable);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> +
> + ParentTable = DtPeekSubtable ();
> + DtInsertSubtable (ParentTable, Subtable);
> + }
> +
> + } /* for (j = 0; j < LinuxSpecificCount; j++) */
> + }
> +
> + DtPopSubtable ();
> +
> + } /* for (i = 0; i < EndpointCount; i++) */
> +
> + /*
> + * All Endpoint Descriptors are completed.
> + * Do the table terminator structure (not in NHLT spec, optional)
> + */
> + if (*PFieldList && (strcmp ((const char *) (*PFieldList)->Name, "Descriptor Length")))
> + {
> + Status = DtCompileTable (PFieldList, AcpiDmTableInfoNhlt8,
> + &Subtable);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> +
> + ParentTable = DtPeekSubtable ();
> + DtInsertSubtable (ParentTable, Subtable);
> + }
> +
> + return (AE_OK);
> + }
> +
> + return (AE_OK);
> +}
> +
> +
> /******************************************************************************
> *
> * FUNCTION: DtCompilePcct
> @@ -2141,7 +2525,6 @@ DtCompileStao (
> }
>
>
> -
> /******************************************************************************
> *
> * FUNCTION: DtCompileSvkl
> diff --git a/src/acpica/source/compiler/dttemplate.h b/src/acpica/source/compiler/dttemplate.h
> index 24c8c6f9..e9272f3a 100644
> --- a/src/acpica/source/compiler/dttemplate.h
> +++ b/src/acpica/source/compiler/dttemplate.h
> @@ -249,6 +249,16 @@ const unsigned char TemplateAest[] =
> 0x56,0x00,0x00,0x00 /* 000002C8 "V..." */
> };
>
> +const unsigned char TemplateAgdi[] =
> +{
> + 0x41,0x47,0x44,0x49,0x30,0x00,0x00,0x00, /* 00000000 "AGDI0..." */
> + 0x01,0xE4,0x41,0x4D,0x50,0x45,0x52,0x45, /* 00000008 "..AMPERE" */
> + 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */
> + 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
> + 0x05,0x01,0x21,0x20,0x00,0x00,0x00,0x00, /* 00000020 "..! ...." */
> + 0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00 /* 00000028 "... at ...." */
> +};
> +
> const unsigned char TemplateAsf[] =
> {
> 0x41,0x53,0x46,0x21,0x72,0x00,0x00,0x00, /* 00000000 "ASF!r..." */
> @@ -1185,6 +1195,78 @@ const unsigned char TemplateNfit[] =
> 0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00 /* 00000180 "........" */
> };
>
> +const unsigned char TemplateNhlt[] =
> +{
> + 0x4E,0x48,0x4C,0x54,0x1E,0x02,0x00,0x00, /* 00000000 "NHLT...." */
> + 0x01,0xF7,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */
> + 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */
> + 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
> + 0x30,0x09,0x21,0x20,0x04,0xAD,0x00,0x00, /* 00000020 "0.! ...." */
> + 0x00,0x02,0x06,0x07,0x00,0x30,0xAE,0x09, /* 00000028 ".....0.." */
> + 0x00,0x0A,0x00,0x00,0x00,0x02,0x03,0x0D, /* 00000030 "........" */
> + 0x38,0x00,0x00,0x00,0xCC,0x01,0x1F,0x02, /* 00000038 "8......." */
> + 0x04,0x00,0x13,0x00,0x09,0x00,0x11,0x00, /* 00000040 "........" */
> + 0x04,0x20,0x07,0x00,0x09,0x00,0x18,0x00, /* 00000048 ". ......" */
> + 0x22,0x00,0x11,0x00,0x15,0x00,0x05,0x03, /* 00000050 ""......." */
> + 0x13,0x00,0x09,0x00,0x11,0x00,0x04,0x20, /* 00000058 "....... " */
> + 0x07,0x00,0x09,0x00,0x18,0x00,0x22,0x00, /* 00000060 "......"." */
> + 0x11,0x00,0x15,0x00,0xAA,0xAA,0x99,0x99, /* 00000068 "........" */
> + 0x78,0x56,0x34,0x12,0x02,0xFE,0xFF,0x78, /* 00000070 "xV4....x" */
> + 0x56,0x44,0x33,0x00,0x00,0x66,0x55,0x00, /* 00000078 "VD3..fU." */
> + 0x00,0x00,0x80,0x16,0x00,0x32,0x00,0x04, /* 00000080 ".....2.." */
> + 0x00,0x99,0x99,0x88,0x88,0x6E,0x88,0x9F, /* 00000088 ".....n.." */
> + 0xA6,0xEB,0x6C,0x94,0x45,0xA4,0x1F,0x7B, /* 00000090 "..l.E..{" */
> + 0x5D,0xCE,0x24,0xC5,0x53,0x02,0x00,0x00, /* 00000098 "].$.S..." */
> + 0x00,0x30,0x40,0xFE,0xFF,0x78,0x56,0x44, /* 000000A0 ".0 at ..xVD" */
> + 0x33,0x00,0x00,0x66,0x55,0x00,0x00,0x00, /* 000000A8 "3..fU..." */
> + 0x80,0x16,0x00,0x32,0x00,0x04,0x00,0x99, /* 000000B0 "...2...." */
> + 0x99,0x88,0x88,0x6E,0x88,0x9F,0xA6,0xEB, /* 000000B8 "...n...." */
> + 0x6C,0x94,0x45,0xA4,0x1F,0x7B,0x5D,0xCE, /* 000000C0 "l.E..{]." */
> + 0x24,0xC5,0x53,0x03,0x00,0x00,0x00,0x50, /* 000000C8 "$.S....P" */
> + 0x60,0x70,0x48,0x00,0x00,0x00,0x05,0x06, /* 000000D0 "`pH....." */
> + 0x07,0x00,0x34,0xAE,0x09,0x00,0x0A,0x00, /* 000000D8 "..4....." */
> + 0x00,0x00,0x02,0x00,0x0D,0x02,0x00,0x00, /* 000000E0 "........" */
> + 0x00,0xCC,0x00,0x01,0xFE,0xFF,0x78,0x56, /* 000000E8 "......xV" */
> + 0x44,0x33,0x00,0x00,0x66,0x55,0x00,0x00, /* 000000F0 "D3..fU.." */
> + 0x00,0x80,0x16,0x00,0x32,0x00,0x04,0x00, /* 000000F8 "....2..." */
> + 0x99,0x99,0x88,0x88,0x6E,0x88,0x9F,0xA6, /* 00000100 "....n..." */
> + 0xEB,0x6C,0x94,0x45,0xA4,0x1F,0x7B,0x5D, /* 00000108 ".l.E..{]" */
> + 0xCE,0x24,0xC5,0x53,0x02,0x00,0x00,0x00, /* 00000110 ".$.S...." */
> + 0x70,0x80,0x80,0x00,0x00,0x00,0x02,0x06, /* 00000118 "p......." */
> + 0x07,0x00,0x30,0xAE,0x09,0x00,0x0A,0x00, /* 00000120 "..0....." */
> + 0x00,0x00,0x02,0x03,0x0D,0x07,0x00,0x00, /* 00000128 "........" */
> + 0x00,0xCC,0x03,0x09,0x34,0x12,0x28,0x01, /* 00000130 "....4.(." */
> + 0x02,0xFE,0xFF,0x78,0x56,0x44,0x33,0x00, /* 00000138 "...xVD3." */
> + 0x00,0x66,0x55,0x00,0x00,0x00,0x80,0x16, /* 00000140 ".fU....." */
> + 0x00,0x32,0x00,0x04,0x00,0x99,0x99,0x88, /* 00000148 ".2......" */
> + 0x88,0x6E,0x88,0x9F,0xA6,0xEB,0x6C,0x94, /* 00000150 ".n....l." */
> + 0x45,0xA4,0x1F,0x7B,0x5D,0xCE,0x24,0xC5, /* 00000158 "E..{].$." */
> + 0x53,0x04,0x00,0x00,0x00,0x70,0x80,0x90, /* 00000160 "S....p.." */
> + 0xA0,0xFE,0xFF,0x78,0x56,0x44,0x33,0x00, /* 00000168 "...xVD3." */
> + 0x00,0x66,0x55,0x00,0x00,0x00,0x80,0x16, /* 00000170 ".fU....." */
> + 0x00,0x32,0x00,0x04,0x00,0x99,0x99,0x88, /* 00000178 ".2......" */
> + 0x88,0x6E,0x88,0x9F,0xA6,0xEB,0x6C,0x94, /* 00000180 ".n....l." */
> + 0x45,0xA4,0x1F,0x7B,0x5D,0xCE,0x24,0xC5, /* 00000188 "E..{].$." */
> + 0x53,0x05,0x00,0x00,0x00,0x70,0x80,0x90, /* 00000190 "S....p.." */
> + 0xA0,0xB0,0x7C,0x00,0x00,0x00,0x05,0x06, /* 00000198 "..|....." */
> + 0x07,0x00,0x34,0xAE,0x09,0x00,0x0A,0x00, /* 000001A0 "..4....." */
> + 0x00,0x00,0x02,0x00,0x0D,0x02,0x00,0x00, /* 000001A8 "........" */
> + 0x00,0xCC,0x00,0x01,0xFE,0xFF,0x78,0x56, /* 000001B0 "......xV" */
> + 0x44,0x33,0x00,0x00,0x66,0x55,0x00,0x00, /* 000001B8 "D3..fU.." */
> + 0x00,0x80,0x16,0x00,0x32,0x00,0x04,0x00, /* 000001C0 "....2..." */
> + 0x99,0x99,0x88,0x88,0x6E,0x88,0x9F,0xA6, /* 000001C8 "....n..." */
> + 0xEB,0x6C,0x94,0x45,0xA4,0x1F,0x7B,0x5D, /* 000001D0 ".l.E..{]" */
> + 0xCE,0x24,0xC5,0x53,0x11,0x00,0x00,0x00, /* 000001D8 ".$.S...." */
> + 0x00,0x01,0x32,0x03,0x04,0x05,0x06,0x37, /* 000001E0 "..2....7" */
> + 0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x3F, /* 000001E8 ".......?" */
> + 0x0A,0x01,0x00,0x01,0x32,0x03,0x04,0x05, /* 000001F0 "....2..." */
> + 0x06,0x37,0x08,0x09,0x0A,0x0B,0x0C,0x0D, /* 000001F8 ".7......" */
> + 0x0E,0x3F,0x44,0x9A,0x00,0x01,0x32,0x03, /* 00000200 ".?D...2." */
> + 0x04,0x05,0x06,0x37,0x08,0x09,0x0A,0x0B, /* 00000208 "...7...." */
> + 0x0C,0x0D,0x0E,0x3F,0x0A,0x0B,0x04,0x00, /* 00000210 "...?...." */
> + 0x00,0x00,0xEF,0xBE,0xAD,0xDE /* 00000218 "......" */
> +};
> +
> const unsigned char TemplatePcct[] =
> {
> 0x50,0x43,0x43,0x54,0xAE,0x02,0x00,0x00, /* 00000000 "PCCT...." */
> @@ -1756,6 +1838,17 @@ const unsigned char TemplateTcpa[] =
> 0x01,0x01,0x01,0x01 /* 00000060 "...." */
> };
>
> +const unsigned char TemplateTdel[] =
> +{
> + 0x54,0x44,0x45,0x4C,0x38,0x00,0x00,0x00, /* 00000000 "TDEL8..." */
> + 0x04,0x1C,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */
> + 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */
> + 0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
> + 0x30,0x09,0x21,0x20,0x00,0x00,0x00,0x00, /* 00000020 "0.! ...." */
> + 0xEF,0xCD,0xAB,0x78,0x56,0x34,0x12,0x00, /* 00000028 "...xV4.." */
> + 0x78,0x56,0x34,0x12,0xEF,0xCD,0xAB,0x00 /* 00000030 "xV4....." */
> +};
> +
> const unsigned char TemplateTpm2[] =
> {
> 0x54,0x50,0x4D,0x32,0x4C,0x00,0x00,0x00, /* 00000000 "TPM2L..." */
> diff --git a/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c
> index 52180fb3..2342ace3 100644
> --- a/src/acpica/source/compiler/dtutils.c
> +++ b/src/acpica/source/compiler/dtutils.c
> @@ -437,6 +437,7 @@ DtGetFieldType (
> case ACPI_DMT_BUF10:
> case ACPI_DMT_BUF12:
> case ACPI_DMT_BUF16:
> + case ACPI_DMT_BUF18:
> case ACPI_DMT_BUF128:
> case ACPI_DMT_PCI_PATH:
> case ACPI_DMT_PMTT_VENDOR:
> @@ -583,6 +584,10 @@ DtGetFieldLength (
> case ACPI_DMT_MADT:
> case ACPI_DMT_NHLT1:
> case ACPI_DMT_NHLT1a:
> + case ACPI_DMT_NHLT1b:
> + case ACPI_DMT_NHLT1c:
> + case ACPI_DMT_NHLT1d:
> + case ACPI_DMT_NHLT1f:
> case ACPI_DMT_PCCT:
> case ACPI_DMT_PMTT:
> case ACPI_DMT_PPTT:
> @@ -611,6 +616,7 @@ DtGetFieldLength (
> case ACPI_DMT_HEST:
> case ACPI_DMT_HMAT:
> case ACPI_DMT_NFIT:
> + case ACPI_DMT_NHLT1e:
> case ACPI_DMT_PCI_PATH:
> case ACPI_DMT_PHAT:
>
> @@ -737,6 +743,11 @@ DtGetFieldLength (
> ByteLength = 16;
> break;
>
> + case ACPI_DMT_BUF18:
> +
> + ByteLength = 18;
> + break;
> +
> case ACPI_DMT_BUF128:
>
> ByteLength = 128;
> diff --git a/src/acpica/source/components/dispatcher/dsopcode.c b/src/acpica/source/components/dispatcher/dsopcode.c
> index 153cd89a..579421fa 100644
> --- a/src/acpica/source/components/dispatcher/dsopcode.c
> +++ b/src/acpica/source/components/dispatcher/dsopcode.c
> @@ -707,6 +707,7 @@ AcpiDsEvalTableRegionOperands (
>
> ObjDesc->Region.Address = ACPI_PTR_TO_PHYSADDR (Table);
> ObjDesc->Region.Length = Table->Length;
> + ObjDesc->Region.Pointer = Table;
>
> ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "RgnObj %p Addr %8.8X%8.8X Len %X\n",
> ObjDesc, ACPI_FORMAT_UINT64 (ObjDesc->Region.Address),
> diff --git a/src/acpica/source/components/events/evhandler.c b/src/acpica/source/components/events/evhandler.c
> index 39171014..763b294e 100644
> --- a/src/acpica/source/components/events/evhandler.c
> +++ b/src/acpica/source/components/events/evhandler.c
> @@ -563,7 +563,7 @@ AcpiEvInstallSpaceHandler (
> case ACPI_ADR_SPACE_DATA_TABLE:
>
> Handler = AcpiExDataTableSpaceHandler;
> - Setup = NULL;
> + Setup = AcpiEvDataTableRegionSetup;
> break;
>
> default:
> diff --git a/src/acpica/source/components/events/evregion.c b/src/acpica/source/components/events/evregion.c
> index 2624cd65..6c73bc80 100644
> --- a/src/acpica/source/components/events/evregion.c
> +++ b/src/acpica/source/components/events/evregion.c
> @@ -320,6 +320,15 @@ AcpiEvAddressSpaceDispatch (
> return_ACPI_STATUS (AE_NOT_EXIST);
> }
>
> + if (RegionObj->Region.SpaceId == ACPI_ADR_SPACE_PLATFORM_COMM)
> + {
> + ACPI_PCC_INFO *Ctx = HandlerDesc->AddressSpace.Context;
> +
> + Ctx->InternalBuffer = FieldObj->Field.InternalPccBuffer;
> + Ctx->Length = (UINT16) RegionObj->Region.Length;
> + Ctx->SubspaceId = (UINT8) RegionObj->Region.Address;
> + }
> +
> /*
> * We must exit the interpreter because the region setup will
> * potentially execute control methods (for example, the _REG method
> diff --git a/src/acpica/source/components/events/evrgnini.c b/src/acpica/source/components/events/evrgnini.c
> index 9327d8f7..6959ff98 100644
> --- a/src/acpica/source/components/events/evrgnini.c
> +++ b/src/acpica/source/components/events/evrgnini.c
> @@ -599,6 +599,64 @@ AcpiEvCmosRegionSetup (
> }
>
>
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiEvDataTableRegionSetup
> + *
> + * PARAMETERS: Handle - Region we are interested in
> + * Function - Start or stop
> + * HandlerContext - Address space handler context
> + * RegionContext - Region specific context
> + *
> + * RETURN: Status
> + *
> + * DESCRIPTION: Setup a DataTableRegion
> + *
> + * MUTEX: Assumes namespace is not locked
> + *
> + ******************************************************************************/
> +
> +ACPI_STATUS
> +AcpiEvDataTableRegionSetup (
> + ACPI_HANDLE Handle,
> + UINT32 Function,
> + void *HandlerContext,
> + void **RegionContext)
> +{
> + ACPI_OPERAND_OBJECT *RegionDesc = (ACPI_OPERAND_OBJECT *) Handle;
> + ACPI_DATA_TABLE_MAPPING *LocalRegionContext;
> +
> +
> + ACPI_FUNCTION_TRACE (EvDataTableRegionSetup);
> +
> +
> + if (Function == ACPI_REGION_DEACTIVATE)
> + {
> + if (*RegionContext)
> + {
> + ACPI_FREE (*RegionContext);
> + *RegionContext = NULL;
> + }
> + return_ACPI_STATUS (AE_OK);
> + }
> +
> + /* Create a new context */
> +
> + LocalRegionContext = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_DATA_TABLE_MAPPING));
> + if (!(LocalRegionContext))
> + {
> + return_ACPI_STATUS (AE_NO_MEMORY);
> + }
> +
> + /* Save the data table pointer for use in the handler */
> +
> + LocalRegionContext->Pointer = RegionDesc->Region.Pointer;
> +
> + *RegionContext = LocalRegionContext;
> + return_ACPI_STATUS (AE_OK);
> +}
> +
> +
> /*******************************************************************************
> *
> * FUNCTION: AcpiEvDefaultRegionSetup
> diff --git a/src/acpica/source/components/executer/exconfig.c b/src/acpica/source/components/executer/exconfig.c
> index 301e8830..ff26ade7 100644
> --- a/src/acpica/source/components/executer/exconfig.c
> +++ b/src/acpica/source/components/executer/exconfig.c
> @@ -596,7 +596,7 @@ AcpiExLoadOp (
> ACPI_INFO (("Dynamic OEM Table Load:"));
> AcpiExExitInterpreter ();
> Status = AcpiTbInstallAndLoadTable (ACPI_PTR_TO_PHYSADDR (Table),
> - ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL, TRUE, &TableIndex);
> + ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL, Table, TRUE, &TableIndex);
> AcpiExEnterInterpreter ();
> if (ACPI_FAILURE (Status))
> {
> diff --git a/src/acpica/source/components/executer/excreate.c b/src/acpica/source/components/executer/excreate.c
> index 8afae43c..18a3af2f 100644
> --- a/src/acpica/source/components/executer/excreate.c
> +++ b/src/acpica/source/components/executer/excreate.c
> @@ -451,6 +451,7 @@ AcpiExCreateRegion (
> ObjDesc->Region.SpaceId = SpaceId;
> ObjDesc->Region.Address = 0;
> ObjDesc->Region.Length = 0;
> + ObjDesc->Region.Pointer = NULL;
> ObjDesc->Region.Node = Node;
> ObjDesc->Region.Handler = NULL;
> ObjDesc->Common.Flags &=
> diff --git a/src/acpica/source/components/executer/exfield.c b/src/acpica/source/components/executer/exfield.c
> index 7871e350..b33ab5b3 100644
> --- a/src/acpica/source/components/executer/exfield.c
> +++ b/src/acpica/source/components/executer/exfield.c
> @@ -492,9 +492,7 @@ AcpiExWriteDataToField (
> ObjDesc->Field.BaseByteOffset,
> SourceDesc->Buffer.Pointer, DataLength);
>
> - if ((ObjDesc->Field.RegionObj->Region.Address == PCC_MASTER_SUBSPACE &&
> - MASTER_SUBSPACE_COMMAND (ObjDesc->Field.BaseByteOffset)) ||
> - GENERIC_SUBSPACE_COMMAND (ObjDesc->Field.BaseByteOffset))
> + if (MASTER_SUBSPACE_COMMAND (ObjDesc->Field.BaseByteOffset))
> {
> /* Perform the write */
>
> diff --git a/src/acpica/source/components/executer/exoparg1.c b/src/acpica/source/components/executer/exoparg1.c
> index bf40b697..424e1e99 100644
> --- a/src/acpica/source/components/executer/exoparg1.c
> +++ b/src/acpica/source/components/executer/exoparg1.c
> @@ -1193,7 +1193,7 @@ AcpiExOpcode_1A_0T_1R (
> WalkState, ReturnDesc, &TempDesc);
> if (ACPI_FAILURE (Status))
> {
> - goto Cleanup;
> + return_ACPI_STATUS (Status);
> }
>
> ReturnDesc = TempDesc;
> diff --git a/src/acpica/source/components/executer/exregion.c b/src/acpica/source/components/executer/exregion.c
> index 2f49eb0a..cd1fa2eb 100644
> --- a/src/acpica/source/components/executer/exregion.c
> +++ b/src/acpica/source/components/executer/exregion.c
> @@ -692,9 +692,17 @@ AcpiExDataTableSpaceHandler (
> void *HandlerContext,
> void *RegionContext)
> {
> + ACPI_DATA_TABLE_MAPPING *Mapping;
> + char *Pointer;
> +
> +
> ACPI_FUNCTION_TRACE (ExDataTableSpaceHandler);
>
>
> + Mapping = (ACPI_DATA_TABLE_MAPPING *) RegionContext;
> + Pointer = ACPI_CAST_PTR (char, Mapping->Pointer) +
> + (Address - ACPI_PTR_TO_PHYSADDR (Mapping->Pointer));
> +
> /*
> * Perform the memory read or write. The BitWidth was already
> * validated.
> @@ -703,14 +711,12 @@ AcpiExDataTableSpaceHandler (
> {
> case ACPI_READ:
>
> - memcpy (ACPI_CAST_PTR (char, Value), ACPI_PHYSADDR_TO_PTR (Address),
> - ACPI_DIV_8 (BitWidth));
> + memcpy (ACPI_CAST_PTR (char, Value), Pointer, ACPI_DIV_8 (BitWidth));
> break;
>
> case ACPI_WRITE:
>
> - memcpy (ACPI_PHYSADDR_TO_PTR (Address), ACPI_CAST_PTR (char, Value),
> - ACPI_DIV_8 (BitWidth));
> + memcpy (Pointer, ACPI_CAST_PTR (char, Value), ACPI_DIV_8 (BitWidth));
> break;
>
> default:
> diff --git a/src/acpica/source/components/hardware/hwesleep.c b/src/acpica/source/components/hardware/hwesleep.c
> index e8db4d26..19463e5a 100644
> --- a/src/acpica/source/components/hardware/hwesleep.c
> +++ b/src/acpica/source/components/hardware/hwesleep.c
> @@ -261,7 +261,10 @@ AcpiHwExtendedSleep (
>
> /* Flush caches, as per ACPI specification */
>
> - ACPI_FLUSH_CPU_CACHE ();
> + if (SleepState < ACPI_STATE_S4)
> + {
> + ACPI_FLUSH_CPU_CACHE ();
> + }
>
> Status = AcpiOsEnterSleep (SleepState, SleepControl, 0);
> if (Status == AE_CTRL_TERMINATE)
> diff --git a/src/acpica/source/components/hardware/hwsleep.c b/src/acpica/source/components/hardware/hwsleep.c
> index 2b857d97..4d581da3 100644
> --- a/src/acpica/source/components/hardware/hwsleep.c
> +++ b/src/acpica/source/components/hardware/hwsleep.c
> @@ -262,7 +262,10 @@ AcpiHwLegacySleep (
>
> /* Flush caches, as per ACPI specification */
>
> - ACPI_FLUSH_CPU_CACHE ();
> + if (SleepState < ACPI_STATE_S4)
> + {
> + ACPI_FLUSH_CPU_CACHE ();
> + }
>
> Status = AcpiOsEnterSleep (SleepState, Pm1aControl, Pm1bControl);
> if (Status == AE_CTRL_TERMINATE)
> @@ -376,7 +379,7 @@ AcpiHwLegacyWakePrep (
>
> Pm1aControl |= (AcpiGbl_SleepTypeAS0 <<
> SleepTypeRegInfo->BitPosition);
> - Pm1aControl |= (AcpiGbl_SleepTypeBS0 <<
> + Pm1bControl |= (AcpiGbl_SleepTypeBS0 <<
> SleepTypeRegInfo->BitPosition);
>
> /* Write the control registers and ignore any errors */
> diff --git a/src/acpica/source/components/hardware/hwxfsleep.c b/src/acpica/source/components/hardware/hwxfsleep.c
> index f1a1344c..106dea0d 100644
> --- a/src/acpica/source/components/hardware/hwxfsleep.c
> +++ b/src/acpica/source/components/hardware/hwxfsleep.c
> @@ -353,8 +353,6 @@ AcpiEnterSleepStateS4bios (
> return_ACPI_STATUS (Status);
> }
>
> - ACPI_FLUSH_CPU_CACHE ();
> -
> Status = AcpiHwWritePort (AcpiGbl_FADT.SmiCommand,
> (UINT32) AcpiGbl_FADT.S4BiosRequest, 8);
> if (ACPI_FAILURE (Status))
> diff --git a/src/acpica/source/components/tables/tbdata.c b/src/acpica/source/components/tables/tbdata.c
> index 522234d9..6f3f7113 100644
> --- a/src/acpica/source/components/tables/tbdata.c
> +++ b/src/acpica/source/components/tables/tbdata.c
> @@ -243,14 +243,28 @@ AcpiTbInitTableDescriptor (
> {
>
> /*
> - * Initialize the table descriptor. Set the pointer to NULL, since the
> - * table is not fully mapped at this time.
> + * Initialize the table descriptor. Set the pointer to NULL for external
> + * tables, since the table is not fully mapped at this time.
> */
> memset (TableDesc, 0, sizeof (ACPI_TABLE_DESC));
> TableDesc->Address = Address;
> TableDesc->Length = Table->Length;
> TableDesc->Flags = Flags;
> ACPI_MOVE_32_TO_32 (TableDesc->Signature.Ascii, Table->Signature);
> +
> + switch (TableDesc->Flags & ACPI_TABLE_ORIGIN_MASK)
> + {
> + case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL:
> + case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL:
> +
> + TableDesc->Pointer = Table;
> + break;
> +
> + case ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL:
> + default:
> +
> + break;
> + }
> }
>
>
> @@ -290,8 +304,7 @@ AcpiTbAcquireTable (
> case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL:
> case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL:
>
> - Table = ACPI_CAST_PTR (ACPI_TABLE_HEADER,
> - ACPI_PHYSADDR_TO_PTR (TableDesc->Address));
> + Table = TableDesc->Pointer;
> break;
>
> default:
> @@ -359,6 +372,8 @@ AcpiTbReleaseTable (
> * PARAMETERS: TableDesc - Table descriptor to be acquired
> * Address - Address of the table
> * Flags - Allocation flags of the table
> + * Table - Pointer to the table (required for virtual
> + * origins, optional for physical)
> *
> * RETURN: Status
> *
> @@ -373,9 +388,10 @@ ACPI_STATUS
> AcpiTbAcquireTempTable (
> ACPI_TABLE_DESC *TableDesc,
> ACPI_PHYSICAL_ADDRESS Address,
> - UINT8 Flags)
> + UINT8 Flags,
> + ACPI_TABLE_HEADER *Table)
> {
> - ACPI_TABLE_HEADER *TableHeader;
> + BOOLEAN MappedTable = FALSE;
>
>
> switch (Flags & ACPI_TABLE_ORIGIN_MASK)
> @@ -384,37 +400,43 @@ AcpiTbAcquireTempTable (
>
> /* Get the length of the full table from the header */
>
> - TableHeader = AcpiOsMapMemory (Address, sizeof (ACPI_TABLE_HEADER));
> - if (!TableHeader)
> + if (!Table)
> {
> - return (AE_NO_MEMORY);
> + Table = AcpiOsMapMemory (Address, sizeof (ACPI_TABLE_HEADER));
> + if (!Table)
> + {
> + return (AE_NO_MEMORY);
> + }
> +
> + MappedTable = TRUE;
> }
>
> - AcpiTbInitTableDescriptor (TableDesc, Address, Flags, TableHeader);
> - AcpiOsUnmapMemory (TableHeader, sizeof (ACPI_TABLE_HEADER));
> - return (AE_OK);
> + break;
>
> case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL:
> case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL:
>
> - TableHeader = ACPI_CAST_PTR (ACPI_TABLE_HEADER,
> - ACPI_PHYSADDR_TO_PTR (Address));
> - if (!TableHeader)
> + if (!Table)
> {
> - return (AE_NO_MEMORY);
> + return (AE_BAD_PARAMETER);
> }
>
> - AcpiTbInitTableDescriptor (TableDesc, Address, Flags, TableHeader);
> - return (AE_OK);
> + break;
>
> default:
>
> - break;
> + /* Table is not valid yet */
> +
> + return (AE_NO_MEMORY);
> }
>
> - /* Table is not valid yet */
> + AcpiTbInitTableDescriptor (TableDesc, Address, Flags, Table);
> + if (MappedTable)
> + {
> + AcpiOsUnmapMemory (Table, sizeof (ACPI_TABLE_HEADER));
> + }
>
> - return (AE_NO_MEMORY);
> + return (AE_OK);
> }
>
>
> @@ -513,7 +535,20 @@ AcpiTbInvalidateTable (
>
> AcpiTbReleaseTable (TableDesc->Pointer, TableDesc->Length,
> TableDesc->Flags);
> - TableDesc->Pointer = NULL;
> +
> + switch (TableDesc->Flags & ACPI_TABLE_ORIGIN_MASK)
> + {
> + case ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL:
> +
> + TableDesc->Pointer = NULL;
> + break;
> +
> + case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL:
> + case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL:
> + default:
> +
> + break;
> + }
>
> return_VOID;
> }
> @@ -1219,6 +1254,9 @@ AcpiTbLoadTable (
> *
> * PARAMETERS: Address - Physical address of the table
> * Flags - Allocation flags of the table
> + * Table - Pointer to the table (required for
> + * virtual origins, optional for
> + * physical)
> * Override - Whether override should be performed
> * TableIndex - Where table index is returned
> *
> @@ -1232,6 +1270,7 @@ ACPI_STATUS
> AcpiTbInstallAndLoadTable (
> ACPI_PHYSICAL_ADDRESS Address,
> UINT8 Flags,
> + ACPI_TABLE_HEADER *Table,
> BOOLEAN Override,
> UINT32 *TableIndex)
> {
> @@ -1244,7 +1283,7 @@ AcpiTbInstallAndLoadTable (
>
> /* Install the table and load it into the namespace */
>
> - Status = AcpiTbInstallStandardTable (Address, Flags, TRUE,
> + Status = AcpiTbInstallStandardTable (Address, Flags, Table, TRUE,
> Override, &i);
> if (ACPI_FAILURE (Status))
> {
> diff --git a/src/acpica/source/components/tables/tbfadt.c b/src/acpica/source/components/tables/tbfadt.c
> index 8196e7af..ff00c2f2 100644
> --- a/src/acpica/source/components/tables/tbfadt.c
> +++ b/src/acpica/source/components/tables/tbfadt.c
> @@ -486,7 +486,7 @@ AcpiTbParseFadt (
>
> AcpiTbInstallStandardTable (
> (ACPI_PHYSICAL_ADDRESS) AcpiGbl_FADT.XDsdt,
> - ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, FALSE, TRUE,
> + ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, NULL, FALSE, TRUE,
> &AcpiGbl_DsdtIndex);
>
> /* If Hardware Reduced flag is set, there is no FACS */
> @@ -497,14 +497,14 @@ AcpiTbParseFadt (
> {
> AcpiTbInstallStandardTable (
> (ACPI_PHYSICAL_ADDRESS) AcpiGbl_FADT.Facs,
> - ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, FALSE, TRUE,
> + ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, NULL, FALSE, TRUE,
> &AcpiGbl_FacsIndex);
> }
> if (AcpiGbl_FADT.XFacs)
> {
> AcpiTbInstallStandardTable (
> (ACPI_PHYSICAL_ADDRESS) AcpiGbl_FADT.XFacs,
> - ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, FALSE, TRUE,
> + ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, NULL, FALSE, TRUE,
> &AcpiGbl_XFacsIndex);
> }
> }
> diff --git a/src/acpica/source/components/tables/tbinstal.c b/src/acpica/source/components/tables/tbinstal.c
> index dcbb2a74..f628b460 100644
> --- a/src/acpica/source/components/tables/tbinstal.c
> +++ b/src/acpica/source/components/tables/tbinstal.c
> @@ -227,6 +227,8 @@ AcpiTbInstallTableWithOverride (
> * PARAMETERS: Address - Address of the table (might be a virtual
> * address depending on the TableFlags)
> * Flags - Flags for the table
> + * Table - Pointer to the table (required for virtual
> + * origins, optional for physical)
> * Reload - Whether reload should be performed
> * Override - Whether override should be performed
> * TableIndex - Where the table index is returned
> @@ -245,6 +247,7 @@ ACPI_STATUS
> AcpiTbInstallStandardTable (
> ACPI_PHYSICAL_ADDRESS Address,
> UINT8 Flags,
> + ACPI_TABLE_HEADER *Table,
> BOOLEAN Reload,
> BOOLEAN Override,
> UINT32 *TableIndex)
> @@ -259,7 +262,7 @@ AcpiTbInstallStandardTable (
>
> /* Acquire a temporary table descriptor for validation */
>
> - Status = AcpiTbAcquireTempTable (&NewTableDesc, Address, Flags);
> + Status = AcpiTbAcquireTempTable (&NewTableDesc, Address, Flags, Table);
> if (ACPI_FAILURE (Status))
> {
> ACPI_ERROR ((AE_INFO,
> @@ -369,7 +372,7 @@ AcpiTbOverrideTable (
> if (ACPI_SUCCESS (Status) && Table)
> {
> AcpiTbAcquireTempTable (&NewTableDesc, ACPI_PTR_TO_PHYSADDR (Table),
> - ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL);
> + ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL, Table);
> ACPI_ERROR_ONLY (OverrideType = "Logical");
> goto FinishOverride;
> }
> @@ -381,7 +384,7 @@ AcpiTbOverrideTable (
> if (ACPI_SUCCESS (Status) && Address && Length)
> {
> AcpiTbAcquireTempTable (&NewTableDesc, Address,
> - ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL);
> + ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, NULL);
> ACPI_ERROR_ONLY (OverrideType = "Physical");
> goto FinishOverride;
> }
> @@ -457,7 +460,8 @@ AcpiTbUninstallTable (
> if ((TableDesc->Flags & ACPI_TABLE_ORIGIN_MASK) ==
> ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL)
> {
> - ACPI_FREE (ACPI_PHYSADDR_TO_PTR (TableDesc->Address));
> + ACPI_FREE (TableDesc->Pointer);
> + TableDesc->Pointer = NULL;
> }
>
> TableDesc->Address = ACPI_PTR_TO_PHYSADDR (NULL);
> diff --git a/src/acpica/source/components/tables/tbprint.c b/src/acpica/source/components/tables/tbprint.c
> index 392ff95a..5985abdb 100644
> --- a/src/acpica/source/components/tables/tbprint.c
> +++ b/src/acpica/source/components/tables/tbprint.c
> @@ -261,7 +261,8 @@ AcpiTbPrintTableHeader (
> Header->Signature, ACPI_FORMAT_UINT64 (Address),
> Header->Length));
> }
> - else if (ACPI_VALIDATE_RSDP_SIG (Header->Signature))
> + else if (ACPI_VALIDATE_RSDP_SIG (ACPI_CAST_PTR (ACPI_TABLE_RSDP,
> + Header)->Signature))
> {
> /* RSDP has no common fields */
>
> diff --git a/src/acpica/source/components/tables/tbutils.c b/src/acpica/source/components/tables/tbutils.c
> index 6316f258..76d8ef3b 100644
> --- a/src/acpica/source/components/tables/tbutils.c
> +++ b/src/acpica/source/components/tables/tbutils.c
> @@ -500,7 +500,8 @@ AcpiTbParseRootTable (
> }
>
> Status = AcpiTbInstallStandardTable (Address,
> - ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, FALSE, TRUE, &TableIndex);
> + ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, NULL, FALSE, TRUE,
> + &TableIndex);
>
> if (ACPI_SUCCESS (Status) &&
> ACPI_COMPARE_NAMESEG (
> diff --git a/src/acpica/source/components/tables/tbxfload.c b/src/acpica/source/components/tables/tbxfload.c
> index 046487ba..9e90c91b 100644
> --- a/src/acpica/source/components/tables/tbxfload.c
> +++ b/src/acpica/source/components/tables/tbxfload.c
> @@ -396,9 +396,7 @@ UnlockAndExit:
> *
> * FUNCTION: AcpiInstallTable
> *
> - * PARAMETERS: Address - Address of the ACPI table to be installed.
> - * Physical - Whether the address is a physical table
> - * address or not
> + * PARAMETERS: Table - Pointer to the ACPI table to be installed.
> *
> * RETURN: Status
> *
> @@ -410,28 +408,17 @@ UnlockAndExit:
>
> ACPI_STATUS ACPI_INIT_FUNCTION
> AcpiInstallTable (
> - ACPI_PHYSICAL_ADDRESS Address,
> - BOOLEAN Physical)
> + ACPI_TABLE_HEADER *Table)
> {
> ACPI_STATUS Status;
> - UINT8 Flags;
> UINT32 TableIndex;
>
>
> ACPI_FUNCTION_TRACE (AcpiInstallTable);
>
>
> - if (Physical)
> - {
> - Flags = ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL;
> - }
> - else
> - {
> - Flags = ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL;
> - }
> -
> - Status = AcpiTbInstallStandardTable (Address, Flags,
> - FALSE, FALSE, &TableIndex);
> + Status = AcpiTbInstallStandardTable (ACPI_PTR_TO_PHYSADDR (Table),
> + ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL, Table, FALSE, FALSE, &TableIndex);
>
> return_ACPI_STATUS (Status);
> }
> @@ -439,6 +426,40 @@ AcpiInstallTable (
> ACPI_EXPORT_SYMBOL_INIT (AcpiInstallTable)
>
>
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiInstallPhysicalTable
> + *
> + * PARAMETERS: Address - Address of the ACPI table to be installed.
> + *
> + * RETURN: Status
> + *
> + * DESCRIPTION: Dynamically install an ACPI table.
> + * Note: This function should only be invoked after
> + * AcpiInitializeTables() and before AcpiLoadTables().
> + *
> + ******************************************************************************/
> +
> +ACPI_STATUS ACPI_INIT_FUNCTION
> +AcpiInstallPhysicalTable (
> + ACPI_PHYSICAL_ADDRESS Address)
> +{
> + ACPI_STATUS Status;
> + UINT32 TableIndex;
> +
> +
> + ACPI_FUNCTION_TRACE (AcpiInstallPhysicalTable);
> +
> +
> + Status = AcpiTbInstallStandardTable (Address,
> + ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, NULL, FALSE, FALSE, &TableIndex);
> +
> + return_ACPI_STATUS (Status);
> +}
> +
> +ACPI_EXPORT_SYMBOL_INIT (AcpiInstallPhysicalTable)
> +
> +
> /*******************************************************************************
> *
> * FUNCTION: AcpiLoadTable
> @@ -481,7 +502,7 @@ AcpiLoadTable (
>
> ACPI_INFO (("Host-directed Dynamic ACPI Table Load:"));
> Status = AcpiTbInstallAndLoadTable (ACPI_PTR_TO_PHYSADDR (Table),
> - ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL, FALSE, &TableIndex);
> + ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL, Table, FALSE, &TableIndex);
> if (TableIdx)
> {
> *TableIdx = TableIndex;
> diff --git a/src/acpica/source/components/utilities/utdelete.c b/src/acpica/source/components/utilities/utdelete.c
> index 624aa687..de114cb6 100644
> --- a/src/acpica/source/components/utilities/utdelete.c
> +++ b/src/acpica/source/components/utilities/utdelete.c
> @@ -594,6 +594,7 @@ AcpiUtUpdateRefCount (
> ACPI_WARNING ((AE_INFO,
> "Obj %p, Reference Count is already zero, cannot decrement\n",
> Object));
> + return;
> }
>
> ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ALLOCATIONS,
> diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h
> index 6e162d6a..17d70d4e 100644
> --- a/src/acpica/source/include/acdisasm.h
> +++ b/src/acpica/source/include/acdisasm.h
> @@ -257,6 +257,7 @@ typedef enum
> ACPI_DMT_AEST_RES,
> ACPI_DMT_AEST_XFACE,
> ACPI_DMT_AEST_XRUPT,
> + ACPI_DMT_AGDI,
> ACPI_DMT_ASF,
> ACPI_DMT_CEDT,
> ACPI_DMT_DMAR,
> @@ -280,6 +281,11 @@ typedef enum
> ACPI_DMT_NFIT,
> ACPI_DMT_NHLT1,
> ACPI_DMT_NHLT1a,
> + ACPI_DMT_NHLT1b,
> + ACPI_DMT_NHLT1c,
> + ACPI_DMT_NHLT1d,
> + ACPI_DMT_NHLT1e,
> + ACPI_DMT_NHLT1f,
> ACPI_DMT_PCCT,
> ACPI_DMT_PHAT,
> ACPI_DMT_PMTT,
> @@ -381,6 +387,7 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestVendorError[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestGicError[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestXface[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestXrupt[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAgdi[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoAsf0[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoAsf1[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoAsf1a[];
> @@ -559,9 +566,13 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt5a[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt5b[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt5c[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt6[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt6a[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt6b[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt7[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt7a[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt7b[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt8[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt9[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoPhatHdr[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoPhat0[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoPhat0a[];
> @@ -635,6 +646,7 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoSvkl0[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaHdr[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaClient[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaServer[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoTdel[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoTpm2[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoTpm2a[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoTpm211[];
> @@ -882,6 +894,10 @@ void
> AcpiDmDumpTcpa (
> ACPI_TABLE_HEADER *Table);
>
> +void
> +AcpiDmDumpTdel (
> + ACPI_TABLE_HEADER *Table);
> +
> void
> AcpiDmDumpTpm2 (
> ACPI_TABLE_HEADER *Table);
> diff --git a/src/acpica/source/include/acevents.h b/src/acpica/source/include/acevents.h
> index 77475ac9..dda14495 100644
> --- a/src/acpica/source/include/acevents.h
> +++ b/src/acpica/source/include/acevents.h
> @@ -457,6 +457,13 @@ AcpiEvPciBarRegionSetup (
> void *HandlerContext,
> void **RegionContext);
>
> +ACPI_STATUS
> +AcpiEvDataTableRegionSetup (
> + ACPI_HANDLE Handle,
> + UINT32 Function,
> + void *HandlerContext,
> + void **RegionContext);
> +
> ACPI_STATUS
> AcpiEvDefaultRegionSetup (
> ACPI_HANDLE Handle,
> diff --git a/src/acpica/source/include/acobject.h b/src/acpica/source/include/acobject.h
> index e7d9f1c9..51a397f2 100644
> --- a/src/acpica/source/include/acobject.h
> +++ b/src/acpica/source/include/acobject.h
> @@ -313,6 +313,7 @@ typedef struct acpi_object_region
> union acpi_operand_object *Next;
> ACPI_PHYSICAL_ADDRESS Address;
> UINT32 Length;
> + void *Pointer; /* Only for data table regions */
>
> } ACPI_OBJECT_REGION;
>
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index 7f4b31ee..c07d0de2 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 0x20210930
> +#define ACPI_CA_VERSION 0x20211217
>
> #include "acconfig.h"
> #include "actypes.h"
> @@ -658,8 +658,12 @@ AcpiDecodePldBuffer (
> ACPI_EXTERNAL_RETURN_STATUS (
> ACPI_STATUS ACPI_INIT_FUNCTION
> AcpiInstallTable (
> - ACPI_PHYSICAL_ADDRESS Address,
> - BOOLEAN Physical))
> + ACPI_TABLE_HEADER *Table))
> +
> +ACPI_EXTERNAL_RETURN_STATUS (
> +ACPI_STATUS ACPI_INIT_FUNCTION
> +AcpiInstallPhysicalTable (
> + ACPI_PHYSICAL_ADDRESS Address))
>
> ACPI_EXTERNAL_RETURN_STATUS (
> ACPI_STATUS
> diff --git a/src/acpica/source/include/actables.h b/src/acpica/source/include/actables.h
> index 038085c8..d0845643 100644
> --- a/src/acpica/source/include/actables.h
> +++ b/src/acpica/source/include/actables.h
> @@ -193,7 +193,8 @@ ACPI_STATUS
> AcpiTbAcquireTempTable (
> ACPI_TABLE_DESC *TableDesc,
> ACPI_PHYSICAL_ADDRESS Address,
> - UINT8 Flags);
> + UINT8 Flags,
> + ACPI_TABLE_HEADER *Table);
>
> void
> AcpiTbReleaseTempTable (
> @@ -279,6 +280,7 @@ ACPI_STATUS
> AcpiTbInstallStandardTable (
> ACPI_PHYSICAL_ADDRESS Address,
> UINT8 Flags,
> + ACPI_TABLE_HEADER *Table,
> BOOLEAN Reload,
> BOOLEAN Override,
> UINT32 *TableIndex);
> @@ -296,6 +298,7 @@ ACPI_STATUS
> AcpiTbInstallAndLoadTable (
> ACPI_PHYSICAL_ADDRESS Address,
> UINT8 Flags,
> + ACPI_TABLE_HEADER *Table,
> BOOLEAN Override,
> UINT32 *TableIndex);
>
> diff --git a/src/acpica/source/include/actbinfo.h b/src/acpica/source/include/actbinfo.h
> index 8a9ff736..7402d97b 100644
> --- a/src/acpica/source/include/actbinfo.h
> +++ b/src/acpica/source/include/actbinfo.h
> @@ -152,6 +152,7 @@
> /*
> * Macros used to generate offsets to specific table fields
> */
> +#define ACPI_AGDI_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_AGDI,f)
> #define ACPI_FACS_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_FACS,f)
> #define ACPI_GAS_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GENERIC_ADDRESS,f)
> #define ACPI_HDR_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_HEADER,f)
> @@ -197,6 +198,7 @@
> #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_TDEL_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TDEL,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)
> #define ACPI_UEFI_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_UEFI,f)
> @@ -339,9 +341,13 @@
> #define ACPI_NHLT5B_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_B,f)
> #define ACPI_NHLT5C_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_C,f)
> #define ACPI_NHLT6_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_VENDOR_MIC_CONFIG,f)
> +#define ACPI_NHLT6A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_VENDOR_MIC_COUNT,f)
> +#define ACPI_NHLT6B_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_RENDER_FEEDBACK_DEVICE_SPECIFIC_CONFIG,f)
> #define ACPI_NHLT7_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_LINUX_SPECIFIC_COUNT,f)
> #define ACPI_NHLT7A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_LINUX_SPECIFIC_DATA,f)
> +#define ACPI_NHLT7B_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_LINUX_SPECIFIC_DATA_B,f)
> #define ACPI_NHLT8_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_TABLE_TERMINATOR,f)
> +#define ACPI_NHLT9_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_MIC_SNR_SENSITIVITY_EXTENSION,f)
> #define ACPI_PCCT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_SUBSPACE,f)
> #define ACPI_PCCT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_HW_REDUCED,f)
> #define ACPI_PCCT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_HW_REDUCED_TYPE2,f)
> @@ -408,6 +414,7 @@
> #define ACPI_AEST0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_AEST_PROCESSOR,f,o)
> #define ACPI_AEST0D_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_AEST_NODE_INTERFACE,f,o)
> #define ACPI_AEST0E_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_AEST_NODE_INTERRUPT,f,o)
> +#define ACPI_AGDI_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_AGDI,f,o)
> #define ACPI_BGRT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_BGRT,f,o)
> #define ACPI_DRTM_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_DRTM,f,o)
> #define ACPI_DRTM1a_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_DRTM_RESOURCE,f,o)
> diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h
> index 0c80aae2..eaa2e243 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_AGDI "AGDI" /* Arm Generic Diagnostic Dump and Reset Device Interface */
> #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 */
> @@ -192,6 +193,7 @@
> #define ACPI_SIG_SDEI "SDEI" /* Software Delegated Exception Interface Table */
> #define ACPI_SIG_SDEV "SDEV" /* Secure Devices table */
> #define ACPI_SIG_SVKL "SVKL" /* Storage Volume Key Location Table */
> +#define ACPI_SIG_TDEL "TDEL" /* TD Event Log Table */
>
>
> /*
> @@ -309,7 +311,7 @@ typedef struct acpi_aest_processor_tlb
>
> typedef struct acpi_aest_processor_generic
> {
> - UINT8 *Resource;
> + UINT32 Resource;
>
> } ACPI_AEST_PROCESSOR_GENERIC;
>
> @@ -400,6 +402,28 @@ typedef struct acpi_aest_node_interrupt
> #define ACPI_AEST_XRUPT_RESERVED 2 /* 2 and above are reserved */
>
>
> +/*******************************************************************************
> + * AGDI - Arm Generic Diagnostic Dump and Reset Device Interface
> + *
> + * Conforms to "ACPI for Arm Components 1.1, Platform Design Document"
> + * ARM DEN0093 v1.1
> + *
> + ******************************************************************************/
> +typedef struct acpi_table_agdi
> +{
> + ACPI_TABLE_HEADER Header; /* Common ACPI table header */
> + UINT8 Flags;
> + UINT8 Reserved[3];
> + UINT32 SdeiEvent;
> + UINT32 Gsiv;
> +
> +} ACPI_TABLE_AGDI;
> +
> +/* Mask for Flags field above */
> +
> +#define ACPI_AGDI_SIGNALING_MODE (1)
> +
> +
> /*******************************************************************************
> *
> * BDAT - BIOS Data ACPI Table
> @@ -1796,6 +1820,12 @@ typedef struct acpi_table_nhlt
>
> } ACPI_TABLE_NHLT;
>
> +typedef struct acpi_table_nhlt_endpoint_count
> +{
> + UINT8 EndpointCount;
> +
> +} ACPI_TABLE_NHLT_ENDPOINT_COUNT;
> +
> typedef struct acpi_nhlt_endpoint
> {
> UINT32 DescriptorLength;
> @@ -1852,6 +1882,8 @@ typedef struct acpi_nhlt_endpoint
> #define ACPI_NHLT_DIR_RENDER_FEEDBACK 3
> #define ACPI_NHLT_DIR_RESERVED 4 /* 4 and above are reserved */
>
> +/* Capabilities = 2 */
> +
> typedef struct acpi_nhlt_device_specific_config
> {
> UINT32 CapabilitiesSize;
> @@ -1860,6 +1892,8 @@ typedef struct acpi_nhlt_device_specific_config
>
> } ACPI_NHLT_DEVICE_SPECIFIC_CONFIG;
>
> +/* Capabilities = 3 */
> +
> typedef struct acpi_nhlt_device_specific_config_a
> {
> UINT32 CapabilitiesSize;
> @@ -1869,14 +1903,24 @@ typedef struct acpi_nhlt_device_specific_config_a
>
> } ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_A;
>
> -/* Values for Config Type above */
> +/* Capabilities = 3 */
> +
> +typedef struct acpi_nhlt_device_specific_config_d
> +{
> + UINT8 VirtualSlot;
> + UINT8 ConfigType;
> + UINT8 ArrayType;
>
> -#define ACPI_NHLT_TYPE_MIC_ARRAY 0x01
> -#define ACPI_NHLT_TYPE_GENERIC 0x00
> +} ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_D;
>
> -/* Mask for Extension field of ArrayType */
> +/* Values for Config Type above */
> +
> +#define ACPI_NHLT_CONFIG_TYPE_GENERIC 0x00
> +#define ACPI_NHLT_CONFIG_TYPE_MIC_ARRAY 0x01
> +#define ACPI_NHLT_CONFIG_TYPE_RENDER_FEEDBACK 0x03
> +#define ACPI_NHLT_CONFIG_TYPE_RESERVED 0x04 /* 4 and above are reserved */
>
> -#define ACPI_NHLT_ARRAY_TYPE_MASK 0x10
> +/* Capabilities = 0 */
>
> typedef struct acpi_nhlt_device_specific_config_b
> {
> @@ -1884,6 +1928,8 @@ typedef struct acpi_nhlt_device_specific_config_b
>
> } ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_B;
>
> +/* Capabilities = 1 */
> +
> typedef struct acpi_nhlt_device_specific_config_c
> {
> UINT32 CapabilitiesSize;
> @@ -1891,6 +1937,13 @@ typedef struct acpi_nhlt_device_specific_config_c
>
> } ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_C;
>
> +typedef struct acpi_nhlt_render_device_specific_config
> +{
> + UINT32 CapabilitiesSize;
> + UINT8 VirtualSlot;
> +
> +} ACPI_NHLT_RENDER_DEVICE_SPECIFIC_CONFIG;
> +
> typedef struct acpi_nhlt_wave_extensible
> {
> UINT16 FormatTag;
> @@ -1963,18 +2016,24 @@ typedef struct acpi_nhlt_mic_device_specific_config
>
> /* Values for ArrayTypeExt above */
>
> -#define SMALL_LINEAR_2ELEMENT 0x0A
> -#define BIG_LINEAR_2ELEMENT 0x0B
> -#define FIRST_GEOMETRY_LINEAR_4ELEMENT 0x0C
> -#define PLANAR_LSHAPED_4ELEMENT 0x0D
> -#define SECOND_GEOMETRY_LINEAR_4ELEMENT 0x0E
> -#define VENDOR_DEFINED 0x0F
> -#define ARRAY_TYPE_MASK 0x0F
> -#define ARRAY_TYPE_EXT_MASK 0x10
> +#define ACPI_NHLT_ARRAY_TYPE_RESERVED 0x09 // 9 and below are reserved
> +#define ACPI_NHLT_SMALL_LINEAR_2ELEMENT 0x0A
> +#define ACPI_NHLT_BIG_LINEAR_2ELEMENT 0x0B
> +#define ACPI_NHLT_FIRST_GEOMETRY_LINEAR_4ELEMENT 0x0C
> +#define ACPI_NHLT_PLANAR_LSHAPED_4ELEMENT 0x0D
> +#define ACPI_NHLT_SECOND_GEOMETRY_LINEAR_4ELEMENT 0x0E
> +#define ACPI_NHLT_VENDOR_DEFINED 0x0F
> +#define ACPI_NHLT_ARRAY_TYPE_MASK 0x0F
> +#define ACPI_NHLT_ARRAY_TYPE_EXT_MASK 0x10
> +
> +#define ACPI_NHLT_NO_EXTENSION 0x0
> +#define ACPI_NHLT_MIC_SNR_SENSITIVITY_EXT (1<<4)
>
> -#define NO_EXTENSION 0x0
> -#define MIC_SNR_SENSITIVITY_EXT 0x1
> +typedef struct acpi_nhlt_vendor_mic_count
> +{
> + UINT8 MicrophoneCount;
>
> +} ACPI_NHLT_VENDOR_MIC_COUNT;
>
> typedef struct acpi_nhlt_vendor_mic_config
> {
> @@ -1996,22 +2055,25 @@ typedef struct acpi_nhlt_vendor_mic_config
>
> /* Values for Type field above */
>
> -#define MIC_OMNIDIRECTIONAL 0
> -#define MIC_SUBCARDIOID 1
> -#define MIC_CARDIOID 2
> -#define MIC_SUPER_CARDIOID 3
> -#define MIC_HYPER_CARDIOID 4
> -#define MIC_8_SHAPED 5
> -#define MIC_VENDOR_DEFINED 7
> +#define ACPI_NHLT_MIC_OMNIDIRECTIONAL 0
> +#define ACPI_NHLT_MIC_SUBCARDIOID 1
> +#define ACPI_NHLT_MIC_CARDIOID 2
> +#define ACPI_NHLT_MIC_SUPER_CARDIOID 3
> +#define ACPI_NHLT_MIC_HYPER_CARDIOID 4
> +#define ACPI_NHLT_MIC_8_SHAPED 5
> +#define ACPI_NHLT_MIC_RESERVED6 6 // 6 is reserved
> +#define ACPI_NHLT_MIC_VENDOR_DEFINED 7
> +#define ACPI_NHLT_MIC_RESERVED 8 // 8 and above are reserved
>
> /* Values for Panel field above */
>
> -#define MIC_TOP 0
> -#define MIC_BOTTOM 1
> -#define MIC_LEFT 2
> -#define MIC_RIGHT 3
> -#define MIC_FRONT 4
> -#define MIC_REAR 5
> +#define ACPI_NHLT_MIC_POSITION_TOP 0
> +#define ACPI_NHLT_MIC_POSITION_BOTTOM 1
> +#define ACPI_NHLT_MIC_POSITION_LEFT 2
> +#define ACPI_NHLT_MIC_POSITION_RIGHT 3
> +#define ACPI_NHLT_MIC_POSITION_FRONT 4
> +#define ACPI_NHLT_MIC_POSITION_BACK 5
> +#define ACPI_NHLT_MIC_POSITION_RESERVED 6 // 6 and above are reserved
>
> typedef struct acpi_nhlt_vendor_mic_device_specific_config
> {
> @@ -2030,9 +2092,10 @@ typedef struct acpi_nhlt_mic_snr_sensitivity_extension
>
> } ACPI_NHLT_MIC_SNR_SENSITIVITY_EXTENSION;
>
> +/* Render device with feedback */
> +
> typedef struct acpi_nhlt_render_feedback_device_specific_config
> {
> - ACPI_NHLT_DEVICE_SPECIFIC_CONFIG DeviceConfig;
> UINT8 FeedbackVirtualSlot; // Render slot in case of capture
> UINT16 FeedbackChannels; // Informative only
> UINT16 FeedbackValidBitsPerSample;
> @@ -2052,10 +2115,15 @@ typedef struct acpi_nhlt_linux_specific_data
> UINT8 DeviceId[16];
> UINT8 DeviceInstanceId;
> UINT8 DevicePortId;
> - UINT8 Filler[18];
>
> } ACPI_NHLT_LINUX_SPECIFIC_DATA;
>
> +typedef struct acpi_nhlt_linux_specific_data_b
> +{
> + UINT8 SpecificData[18];
> +
> +} ACPI_NHLT_LINUX_SPECIFIC_DATA_B;
> +
> typedef struct acpi_nhlt_table_terminator
> {
> UINT32 TerminatorValue;
> @@ -3008,6 +3076,24 @@ enum acpi_svkl_format
> };
>
>
> +/*******************************************************************************
> + *
> + * TDEL - TD-Event Log
> + * From: "Guest-Host-Communication Interface (GHCI) for Intel
> + * Trust Domain Extensions (Intel TDX)".
> + * September 2020
> + *
> + ******************************************************************************/
> +
> +typedef struct acpi_table_tdel
> +{
> + ACPI_TABLE_HEADER Header; /* Common ACPI table header */
> + UINT32 Reserved;
> + UINT64 LogAreaMinimumLength;
> + UINT64 LogAreaStartAddress;
> +
> +} ACPI_TABLE_TDEL;
> +
> /* Reset to default packing */
>
> #pragma pack()
> diff --git a/src/acpica/source/include/actypes.h b/src/acpica/source/include/actypes.h
> index 5138342c..6805b48f 100644
> --- a/src/acpica/source/include/actypes.h
> +++ b/src/acpica/source/include/actypes.h
> @@ -660,7 +660,6 @@ typedef UINT64 ACPI_INTEGER;
> #define ACPI_TO_POINTER(i) ACPI_CAST_PTR (void, (ACPI_SIZE) (i))
> #define ACPI_TO_INTEGER(p) ACPI_PTR_DIFF (p, (void *) 0)
> #define ACPI_OFFSET(d, f) ACPI_PTR_DIFF (&(((d *) 0)->f), (void *) 0)
> -#define ACPI_PHYSADDR_TO_PTR(i) ACPI_TO_POINTER(i)
> #define ACPI_PTR_TO_PHYSADDR(i) ACPI_TO_INTEGER(i)
>
> /* Optimizations for 4-character (32-bit) ACPI_NAME manipulation */
> @@ -687,9 +686,14 @@ typedef UINT64 ACPI_INTEGER;
> * Can be used with AccessSize field of ACPI_GENERIC_ADDRESS and
> * ACPI_RESOURCE_GENERIC_REGISTER.
> */
> -#define ACPI_ACCESS_BIT_WIDTH(AccessSize) (1 << ((AccessSize) + 2))
> -#define ACPI_ACCESS_BYTE_WIDTH(AccessSize) (1 << ((AccessSize) - 1))
> -
> +#define ACPI_ACCESS_BIT_SHIFT 2
> +#define ACPI_ACCESS_BYTE_SHIFT -1
> +#define ACPI_ACCESS_BIT_MAX (31 - ACPI_ACCESS_BIT_SHIFT)
> +#define ACPI_ACCESS_BYTE_MAX (31 - ACPI_ACCESS_BYTE_SHIFT)
> +#define ACPI_ACCESS_BIT_DEFAULT (8 - ACPI_ACCESS_BIT_SHIFT)
> +#define ACPI_ACCESS_BYTE_DEFAULT (8 - ACPI_ACCESS_BYTE_SHIFT)
> +#define ACPI_ACCESS_BIT_WIDTH(size) (1 << ((size) + ACPI_ACCESS_BIT_SHIFT))
> +#define ACPI_ACCESS_BYTE_WIDTH(size) (1 << ((size) + ACPI_ACCESS_BYTE_SHIFT))
>
> /*******************************************************************************
> *
> @@ -1319,6 +1323,14 @@ typedef struct acpi_connection_info
>
> } ACPI_CONNECTION_INFO;
>
> +/* Special Context data for PCC Opregion (ACPI 6.3) */
> +
> +typedef struct acpi_pcc_info {
> + UINT8 SubspaceId;
> + UINT16 Length;
> + UINT8 *InternalBuffer;
> +} ACPI_PCC_INFO;
> +
>
> typedef
> ACPI_STATUS (*ACPI_ADR_SPACE_SETUP) (
> @@ -1458,6 +1470,12 @@ typedef struct acpi_mem_space_context
>
> } ACPI_MEM_SPACE_CONTEXT;
>
> +typedef struct acpi_data_table_space_context
> +{
> + void *Pointer;
> +
> +} ACPI_DATA_TABLE_MAPPING;
> +
>
> /*
> * ACPI_MEMORY_LIST is used only if the ACPICA local cache is enabled
Acked-by: Ivan Hu <ivan.hu at canonical.com>
More information about the fwts-devel
mailing list