[PATCH 1/2] ACPICA: Update to version 20211217
Colin Ian King
colin.i.king at gmail.com
Sun Jan 30 16:34:18 UTC 2022
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
--
2.34.1
More information about the fwts-devel
mailing list