Message ID | 20210730164108.91712-1-colin.king@canonical.com |
---|---|
State | Accepted |
Headers | show |
Series | ACPICA: Update to version 20210730 | expand |
On 2021-07-30 10:41 a.m., Colin King wrote: > From: Colin Ian King <colin.king@canonical.com> > > Changes in this release of ACPICA are detailed at the following > link on the ACPICA developer mailing list: > > https://lists.acpica.org/hyperkitty/list/devel@acpica.org/thread/Q3CD3QGSIHEHGK7E5NXYE3E2L6JCZXVE/ > > Signed-off-by: Colin Ian King <colin.king@canonical.com> > --- > src/acpica/source/common/adisasm.c | 2 +- > src/acpica/source/common/ahtable.c | 1 + > src/acpica/source/common/dmtable.c | 147 ++++++++++++ > src/acpica/source/common/dmtbdump1.c | 219 ++++++++++++++++++ > src/acpica/source/common/dmtbdump3.c | 14 +- > src/acpica/source/common/dmtbinfo1.c | 138 +++++++++++ > src/acpica/source/common/dmtbinfo3.c | 3 +- > src/acpica/source/compiler/aslmethod.c | 83 ++++++- > src/acpica/source/compiler/aslutils.c | 6 +- > src/acpica/source/compiler/dtcompiler.h | 5 + > src/acpica/source/compiler/dtfield.c | 4 +- > src/acpica/source/compiler/dttable1.c | 217 +++++++++++++++++ > src/acpica/source/compiler/dttable2.c | 26 ++- > src/acpica/source/compiler/dttemplate.h | 94 ++++++++ > src/acpica/source/compiler/dtutils.c | 10 +- > .../source/components/dispatcher/dswexec.c | 2 +- > src/acpica/source/include/acdisasm.h | 22 ++ > src/acpica/source/include/acnames.h | 1 + > src/acpica/source/include/acoutput.h | 2 +- > src/acpica/source/include/acpixf.h | 2 +- > src/acpica/source/include/actbinfo.h | 15 ++ > src/acpica/source/include/actbl1.h | 16 +- > src/acpica/source/include/actbl2.h | 194 ++++++++++++++++ > src/acpica/source/include/actbl3.h | 6 + > 24 files changed, 1200 insertions(+), 29 deletions(-) > > diff --git a/src/acpica/source/common/adisasm.c b/src/acpica/source/common/adisasm.c > index 27a175a6..f549bd5a 100644 > --- a/src/acpica/source/common/adisasm.c > +++ b/src/acpica/source/common/adisasm.c > @@ -478,7 +478,7 @@ AdDisassembleOneTable ( > AcpiOsPrintf (" * ACPI Data Table [%4.4s]\n *\n", > Table->Signature); > AcpiOsPrintf (" * Format: [HexOffset DecimalOffset ByteLength] " > - "FieldName : FieldValue\n */\n\n"); > + "FieldName : FieldValue (in hex)\n */\n\n"); > > AcpiDmDumpDataTable (Table); > fprintf (stderr, "Acpi Data Table [%4.4s] decoded\n", > diff --git a/src/acpica/source/common/ahtable.c b/src/acpica/source/common/ahtable.c > index 80f248d2..d7ce88a9 100644 > --- a/src/acpica/source/common/ahtable.c > +++ b/src/acpica/source/common/ahtable.c > @@ -199,6 +199,7 @@ AcpiAhGetTableInfo ( > */ > const AH_TABLE AcpiGbl_SupportedTables[] = > { > + {ACPI_SIG_AEST, "Arm Error Source Table"}, > {ACPI_SIG_ASF, "Alert Standard Format Table"}, > {ACPI_SIG_BDAT, "BIOS Data ACPI Table"}, > {ACPI_SIG_BERT, "Boot Error Record Table"}, > diff --git a/src/acpica/source/common/dmtable.c b/src/acpica/source/common/dmtable.c > index 7a4e87e1..1fa9ba16 100644 > --- a/src/acpica/source/common/dmtable.c > +++ b/src/acpica/source/common/dmtable.c > @@ -174,6 +174,55 @@ AcpiAhGetTableInfo ( > > /* These tables map a subtable type to a description string */ > > +static const char *AcpiDmAestResourceNames[] = > +{ > + "Cache Resource", > + "TLB Resource", > + "Generic Resource", > + "Unknown Resource Type" /* Reserved */ > +}; > + > +static const char *AcpiDmAestSubnames[] = > +{ > + "Processor Error Node", > + "Memory Error Node", > + "SMMU Error Node", > + "Vendor-defined Error Node", > + "GIC Error Node", > + "Unknown Subtable Type" /* Reserved */ > +}; > + > +static const char *AcpiDmAestCacheNames[] = > +{ > + "Data Cache", > + "Instruction Cache", > + "Unified Cache", > + "Unknown Cache Type" /* Reserved */ > +}; > + > +static const char *AcpiDmAestGicNames[] = > +{ > + "GIC CPU", > + "GIC Distributor", > + "GIC Redistributor", > + "GIC ITS", > + "Unknown GIC Interface Type" /* Reserved */ > +}; > + > +static const char *AcpiDmAestXfaceNames[] = > +{ > + "System Register Interface", > + "Memory Mapped Interface", > + "Unknown Interface Type" /* Reserved */ > +}; > + > +static const char *AcpiDmAestXruptNames[] = > +{ > + "Fault Handling Interrupt", > + "Error Recovery Interrupt", > + "Unknown Interrupt Type" /* Reserved */ > +}; > + > static const char *AcpiDmAsfSubnames[] = > { > "ASF Information", > @@ -533,6 +582,7 @@ static const char *AcpiDmGasAccessWidth[] = > > const ACPI_DMTABLE_DATA AcpiDmTableData[] = > { > + {ACPI_SIG_AEST, NULL, AcpiDmDumpAest, DtCompileAest, TemplateAest}, > {ACPI_SIG_ASF, NULL, AcpiDmDumpAsf, DtCompileAsf, TemplateAsf}, > {ACPI_SIG_BDAT, AcpiDmTableInfoBdat, NULL, NULL, TemplateBdat}, > {ACPI_SIG_BERT, AcpiDmTableInfoBert, NULL, NULL, TemplateBert}, > @@ -1006,6 +1056,10 @@ AcpiDmDumpTable ( > case ACPI_DMT_RGRT: > case ACPI_DMT_SDEV: > case ACPI_DMT_SRAT: > + case ACPI_DMT_AEST: > + case ACPI_DMT_AEST_RES: > + case ACPI_DMT_AEST_XFACE: > + case ACPI_DMT_AEST_XRUPT: > case ACPI_DMT_ASF: > case ACPI_DMT_HESTNTYP: > case ACPI_DMT_FADTPM: > @@ -1035,6 +1089,8 @@ AcpiDmDumpTable ( > break; > > case ACPI_DMT_UINT32: > + case ACPI_DMT_AEST_CACHE: > + case ACPI_DMT_AEST_GIC: > case ACPI_DMT_NAME4: > case ACPI_DMT_SIG: > case ACPI_DMT_LPIT: > @@ -1087,6 +1143,12 @@ AcpiDmDumpTable ( > ByteLength = 128; > break; > > + case ACPI_DMT_WPBT_UNICODE: > + > + ByteLength = SubtableLength; > + CurrentOffset = sizeof (ACPI_TABLE_WPBT); > + break; > + > case ACPI_DMT_UNICODE: > case ACPI_DMT_BUFFER: > case ACPI_DMT_RAW_BUFFER: > @@ -1418,6 +1480,90 @@ AcpiDmDumpTable ( > LastOutputBlankLine = TRUE; > break; > > + case ACPI_DMT_AEST: > + > + /* AEST subtable types */ > + > + Temp8 = *Target; > + if (Temp8 > ACPI_AEST_NODE_TYPE_RESERVED) > + { > + Temp8 = ACPI_AEST_NODE_TYPE_RESERVED; > + } > + > + AcpiOsPrintf (UINT8_FORMAT, *Target, > + AcpiDmAestSubnames[Temp8]); > + break; > + > + case ACPI_DMT_AEST_CACHE: > + > + /* AEST cache resource subtable */ > + > + Temp32 = *Target; > + if (Temp32 > ACPI_AEST_CACHE_RESERVED) > + { > + Temp32 = ACPI_AEST_CACHE_RESERVED; > + } > + > + AcpiOsPrintf (UINT32_FORMAT, *Target, > + AcpiDmAestCacheNames[Temp32]); > + break; > + > + case ACPI_DMT_AEST_GIC: > + > + /* AEST GIC error subtable */ > + > + Temp32 = *Target; > + if (Temp32 > ACPI_AEST_GIC_RESERVED) > + { > + Temp32 = ACPI_AEST_GIC_RESERVED; > + } > + > + AcpiOsPrintf (UINT32_FORMAT, *Target, > + AcpiDmAestGicNames[Temp32]); > + break; > + > + case ACPI_DMT_AEST_RES: > + > + /* AEST resource type subtable */ > + > + Temp8 = *Target; > + if (Temp8 > ACPI_AEST_RESOURCE_RESERVED) > + { > + Temp8 = ACPI_AEST_RESOURCE_RESERVED; > + } > + > + AcpiOsPrintf (UINT8_FORMAT, *Target, > + AcpiDmAestResourceNames[Temp8]); > + break; > + > + case ACPI_DMT_AEST_XFACE: > + > + /* AEST interface structure types */ > + > + Temp8 = *Target; > + if (Temp8 > ACPI_AEST_XFACE_RESERVED) > + { > + Temp8 = ACPI_AEST_XFACE_RESERVED; > + } > + > + AcpiOsPrintf (UINT8_FORMAT, *Target, > + AcpiDmAestXfaceNames[Temp8]); > + break; > + > + case ACPI_DMT_AEST_XRUPT: > + > + /* AEST interrupt structure types */ > + > + Temp8 = *Target; > + if (Temp8 > ACPI_AEST_XRUPT_RESERVED) > + { > + Temp8 = ACPI_AEST_XRUPT_RESERVED; > + } > + > + AcpiOsPrintf (UINT8_FORMAT, *Target, > + AcpiDmAestXruptNames[Temp8]); > + break; > + > case ACPI_DMT_ASF: > > /* ASF subtable types */ > @@ -1704,6 +1850,7 @@ AcpiDmDumpTable ( > break; > > case ACPI_DMT_UNICODE: > + case ACPI_DMT_WPBT_UNICODE: > > if (ByteLength == 0) > { > diff --git a/src/acpica/source/common/dmtbdump1.c b/src/acpica/source/common/dmtbdump1.c > index 8fc53acf..3a97af46 100644 > --- a/src/acpica/source/common/dmtbdump1.c > +++ b/src/acpica/source/common/dmtbdump1.c > @@ -160,6 +160,225 @@ > ACPI_MODULE_NAME ("dmtbdump1") > > > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpAest > + * > + * PARAMETERS: Table - A AEST table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a AEST table > + * > + * NOTE: Assumes the following table structure: > + * For all AEST Error Nodes: > + * 1) An AEST Error Node, followed immediately by: > + * 2) Any node-specific data > + * 3) An Interface Structure (one) > + * 4) A list (array) of Interrupt Structures > + * > + * AEST - ARM Error Source table. Conforms to: > + * ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document Sep 2020 > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpAest ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + UINT32 Offset = sizeof (ACPI_TABLE_HEADER); > + ACPI_AEST_HEADER *Subtable; > + ACPI_AEST_HEADER *NodeHeader; > + ACPI_AEST_PROCESSOR *ProcessorSubtable; > + ACPI_DMTABLE_INFO *InfoTable; > + ACPI_SIZE Length; > + UINT8 Type; > + > + > + /* Very small, generic main table. AEST consists of mostly subtables */ > + > + while (Offset < Table->Length) > + { > + NodeHeader = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset); > + > + /* Dump the common error node (subtable) header */ > + > + Status = AcpiDmDumpTable (Table->Length, Offset, NodeHeader, > + NodeHeader->Length, AcpiDmTableInfoAestHdr); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + Type = NodeHeader->Type; > + > + /* Setup the node-specific subtable based on the header Type field */ > + > + switch (Type) > + { > + case ACPI_AEST_PROCESSOR_ERROR_NODE: > + InfoTable = AcpiDmTableInfoAestProcError; > + Length = sizeof (ACPI_AEST_PROCESSOR); > + break; > + > + case ACPI_AEST_MEMORY_ERROR_NODE: > + InfoTable = AcpiDmTableInfoAestMemError; > + Length = sizeof (ACPI_AEST_MEMORY); > + break; > + > + case ACPI_AEST_SMMU_ERROR_NODE: > + InfoTable = AcpiDmTableInfoAestSmmuError; > + Length = sizeof (ACPI_AEST_SMMU); > + break; > + > + case ACPI_AEST_VENDOR_ERROR_NODE: > + InfoTable = AcpiDmTableInfoAestVendorError; > + Length = sizeof (ACPI_AEST_VENDOR); > + break; > + > + case ACPI_AEST_GIC_ERROR_NODE: > + InfoTable = AcpiDmTableInfoAestGicError; > + Length = sizeof (ACPI_AEST_GIC); > + break; > + > + /* Error case below */ > + default: > + > + AcpiOsPrintf ("\n**** Unknown AEST Error Subtable type 0x%X\n", > + Type); > + return; > + } > + > + /* Point past the common header (to the node-specific data) */ > + > + Offset += sizeof (ACPI_AEST_HEADER); > + Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset); > + AcpiOsPrintf ("\n"); > + > + /* Dump the node-specific subtable */ > + > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Length, > + InfoTable); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + AcpiOsPrintf ("\n"); > + > + if (Type == ACPI_AEST_PROCESSOR_ERROR_NODE) > + { > + /* > + * Special handling for PROCESSOR_ERROR_NODE subtables > + * (to handle the Resource Substructure via the ResourceType > + * field). > + */ > + > + /* Point past the node-specific data */ > + > + Offset += Length; > + ProcessorSubtable = ACPI_CAST_PTR (ACPI_AEST_PROCESSOR, Subtable); > + > + switch (ProcessorSubtable->ResourceType) > + { > + /* Setup the Resource Substructure subtable */ > + > + case ACPI_AEST_CACHE_RESOURCE: > + InfoTable = AcpiDmTableInfoAestCacheRsrc; > + Length = sizeof (ACPI_AEST_PROCESSOR_CACHE); > + break; > + > + case ACPI_AEST_TLB_RESOURCE: > + InfoTable = AcpiDmTableInfoAestTlbRsrc; > + Length = sizeof (ACPI_AEST_PROCESSOR_TLB); > + break; > + > + 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 */ > + default: > + AcpiOsPrintf ("\n**** Unknown AEST Processor Resource type 0x%X\n", > + ProcessorSubtable->ResourceType); > + return; > + } > + > + ProcessorSubtable = ACPI_ADD_PTR (ACPI_AEST_PROCESSOR, Table, > + Offset); > + > + /* Dump the resource substructure subtable */ > + > + Status = AcpiDmDumpTable (Table->Length, Offset, ProcessorSubtable, > + Length, InfoTable); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + AcpiOsPrintf ("\n"); > + } > + > + /* Point past the resource substructure or the node-specific data */ > + > + Offset += Length; > + > + /* Dump the interface structure, required to be present */ > + > + Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset); > + if (Subtable->Type >= ACPI_AEST_XFACE_RESERVED) > + { > + AcpiOsPrintf ("\n**** Unknown AEST Node Interface type 0x%X\n", > + Subtable->Type); > + return; > + } > + > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > + sizeof (ACPI_AEST_NODE_INTERFACE), AcpiDmTableInfoAestXface); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Point past the interface structure */ > + > + AcpiOsPrintf ("\n"); > + Offset += sizeof (ACPI_AEST_NODE_INTERFACE); > + > + /* Dump the entire interrupt structure array, if present */ > + > + if (NodeHeader->NodeInterruptOffset) > + { > + Length = NodeHeader->NodeInterruptCount; > + Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset); > + > + while (Length) > + { > + /* Dump the interrupt structure */ > + > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > + sizeof (ACPI_AEST_NODE_INTERRUPT), > + AcpiDmTableInfoAestXrupt); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Point to the next interrupt structure */ > + > + Offset += sizeof (ACPI_AEST_NODE_INTERRUPT); > + Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset); > + Length--; > + AcpiOsPrintf ("\n"); > + } > + } > + } > +} > + > + > /******************************************************************************* > * > * FUNCTION: AcpiDmDumpAsf > diff --git a/src/acpica/source/common/dmtbdump3.c b/src/acpica/source/common/dmtbdump3.c > index e81a703b..981a51e0 100644 > --- a/src/acpica/source/common/dmtbdump3.c > +++ b/src/acpica/source/common/dmtbdump3.c > @@ -681,7 +681,7 @@ AcpiDmDumpViot ( > ACPI_TABLE_VIOT *Viot; > ACPI_VIOT_HEADER *ViotHeader; > UINT16 Length; > - UINT16 Offset; > + UINT32 Offset; > ACPI_DMTABLE_INFO *InfoTable; > > /* Main table */ > @@ -833,13 +833,12 @@ AcpiDmDumpWpbt ( > { > ACPI_STATUS Status; > ACPI_TABLE_WPBT *Subtable; > - UINT32 Length = Table->Length; > UINT16 ArgumentsLength; > > > /* Dump the main table */ > > - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoWpbt); > + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoWpbt); > if (ACPI_FAILURE (Status)) > { > return; > @@ -850,8 +849,11 @@ AcpiDmDumpWpbt ( > Subtable = ACPI_CAST_PTR (ACPI_TABLE_WPBT, Table); > ArgumentsLength = Subtable->ArgumentsLength; > > - /* Dump the arguments buffer */ > + /* Dump the arguments buffer if present */ > > - (void) AcpiDmDumpTable (Table->Length, 0, Table, ArgumentsLength, > - AcpiDmTableInfoWpbt0); > + if (ArgumentsLength) > + { > + (void) AcpiDmDumpTable (Table->Length, 0, Table, ArgumentsLength, > + AcpiDmTableInfoWpbt0); > + } > } > diff --git a/src/acpica/source/common/dmtbinfo1.c b/src/acpica/source/common/dmtbinfo1.c > index fbf3980d..b30cafa9 100644 > --- a/src/acpica/source/common/dmtbinfo1.c > +++ b/src/acpica/source/common/dmtbinfo1.c > @@ -191,6 +191,144 @@ > */ > > > +/******************************************************************************* > + * > + * AEST - ARM Error Source table. Conforms to: > + * ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document Sep 2020 > + * > + ******************************************************************************/ > + > +/* Common Subtable header (one per Subtable) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAestHdr[] = > +{ > + {ACPI_DMT_AEST, ACPI_AESTH_OFFSET (Type), "Subtable Type", 0}, > + {ACPI_DMT_UINT16, ACPI_AESTH_OFFSET (Length), "Length", DT_LENGTH}, > + {ACPI_DMT_UINT8, ACPI_AESTH_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_AESTH_OFFSET (NodeSpecificOffset), "Node Specific Offset", 0}, > + {ACPI_DMT_UINT32, ACPI_AESTH_OFFSET (NodeInterfaceOffset), "Node Interface Offset", 0}, > + {ACPI_DMT_UINT32, ACPI_AESTH_OFFSET (NodeInterruptOffset), "Node Interrupt Array Offset", 0}, > + {ACPI_DMT_UINT32, ACPI_AESTH_OFFSET (NodeInterruptCount), "Node Interrupt Array Count", 0}, > + {ACPI_DMT_UINT64, ACPI_AESTH_OFFSET (TimestampRate), "Timestamp Rate", 0}, > + {ACPI_DMT_UINT64, ACPI_AESTH_OFFSET (Reserved1), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_AESTH_OFFSET (ErrorInjectionRate), "Error Injection Rate", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* > + * AEST subtables (nodes) > + */ > + > +/* 0: Processor Error */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAestProcError[] = > +{ > + {ACPI_DMT_UINT32, ACPI_AEST0_OFFSET (ProcessorId), "Processor ID", 0}, > + {ACPI_DMT_AEST_RES, ACPI_AEST0_OFFSET (ResourceType), "Resource Type", 0}, > + {ACPI_DMT_UINT8, ACPI_AEST0_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT8, ACPI_AEST0_OFFSET (Flags), "Flags (decoded Below)", 0}, > + {ACPI_DMT_FLAG0, ACPI_AEST0_FLAG_OFFSET (Flags, 0), "Global", 0}, > + {ACPI_DMT_FLAG1, ACPI_AEST0_FLAG_OFFSET (Flags, 0), "Shared", 0}, > + {ACPI_DMT_UINT8, ACPI_AEST0_OFFSET (Revision), "Revision", 0}, > + {ACPI_DMT_UINT64, ACPI_AEST0_OFFSET (ProcessorAffinity), "Processor Affinity Structure", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 0RT: Processor Cache Resource */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAestCacheRsrc[] = > +{ > + {ACPI_DMT_UINT32, ACPI_AEST0A_OFFSET (CacheReference), "Cache Reference", 0}, > + {ACPI_DMT_UINT32, ACPI_AEST0A_OFFSET (Reserved), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 1RT: ProcessorTLB Resource */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAestTlbRsrc[] = > +{ > + {ACPI_DMT_UINT32, ACPI_AEST0B_OFFSET (TlbLevel), "TLB Level", 0}, > + {ACPI_DMT_UINT32, ACPI_AEST0B_OFFSET (Reserved), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 2RT: Processor Generic Resource */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAestGenRsrc[] = > +{ > + {ACPI_DMT_RAW_BUFFER, 0, "Resource", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 1: Memory Error */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAestMemError[] = > +{ > + {ACPI_DMT_UINT32, ACPI_AEST1_OFFSET (SratProximityDomain), "Srat Proximity Domain", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 2: Smmu Error */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAestSmmuError[] = > +{ > + {ACPI_DMT_UINT32, ACPI_AEST2_OFFSET (IortNodeReference), "Iort Node Reference", 0}, > + {ACPI_DMT_UINT32, ACPI_AEST2_OFFSET (SubcomponentReference), "Subcomponent Reference", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 3: Vendor Defined */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAestVendorError[] = > +{ > + {ACPI_DMT_UINT32, ACPI_AEST3_OFFSET (AcpiHid), "ACPI HID", 0}, > + {ACPI_DMT_UINT32, ACPI_AEST3_OFFSET (AcpiUid), "ACPI UID", 0}, > + {ACPI_DMT_BUF16, ACPI_AEST3_OFFSET (VendorSpecificData), "Vendor Specific Data", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 4: Gic Error */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAestGicError[] = > +{ > + {ACPI_DMT_AEST_GIC, ACPI_AEST4_OFFSET (InterfaceType), "GIC Interface Type", 0}, > + {ACPI_DMT_UINT32, ACPI_AEST4_OFFSET (InstanceId), "Instance ID", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* AestXface: Node Interface Structure */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAestXface[] = > +{ > + {ACPI_DMT_AEST_XFACE, ACPI_AEST0D_OFFSET (Type), "Interface Type", 0}, > + {ACPI_DMT_UINT24, ACPI_AEST0D_OFFSET (Reserved[0]), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_AEST0D_OFFSET (Flags), "Flags (decoded below)", 0}, > + {ACPI_DMT_FLAG0, ACPI_AEST0D_FLAG_OFFSET (Flags, 0), "Shared Interface", 0}, > + {ACPI_DMT_FLAG1, ACPI_AEST0D_FLAG_OFFSET (Flags, 0), "Clear MISCx Registers", 0}, > + {ACPI_DMT_UINT64, ACPI_AEST0D_OFFSET (Address), "Address", 0}, > + {ACPI_DMT_UINT32, ACPI_AEST0D_OFFSET (ErrorRecordIndex), "Error Record Index", 0}, > + {ACPI_DMT_UINT32, ACPI_AEST0D_OFFSET (ErrorRecordCount), "Error Record Count", 0}, > + {ACPI_DMT_UINT64, ACPI_AEST0D_OFFSET (ErrorRecordImplemented),"Error Record Implemented", 0}, > + {ACPI_DMT_UINT64, ACPI_AEST0D_OFFSET (ErrorStatusReporting), "Error Status Reporting", 0}, > + {ACPI_DMT_UINT64, ACPI_AEST0D_OFFSET (AddressingMode), "Addressing Mode", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* AestXrupt: Node Interrupt Structure */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAestXrupt[] = > +{ > + {ACPI_DMT_AEST_XRUPT, ACPI_AEST0E_OFFSET (Type), "Interrupt Type", 0}, > + {ACPI_DMT_UINT16, ACPI_AEST0E_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT8, ACPI_AEST0E_OFFSET (Flags), "Flags (decoded below)", 0}, > + {ACPI_DMT_FLAG0, ACPI_AEST0E_FLAG_OFFSET (Flags, 0), "Level Triggered", 0}, > + {ACPI_DMT_UINT32, ACPI_AEST0E_OFFSET (Gsiv), "Gsiv", 0}, > + {ACPI_DMT_UINT8, ACPI_AEST0E_OFFSET (IortId), "IortId", 0}, > + {ACPI_DMT_UINT24, ACPI_AEST0E_OFFSET (Reserved1[0]), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > /******************************************************************************* > * > * ASF - Alert Standard Format table (Signature "ASF!") > diff --git a/src/acpica/source/common/dmtbinfo3.c b/src/acpica/source/common/dmtbinfo3.c > index b0435019..e573676a 100644 > --- a/src/acpica/source/common/dmtbinfo3.c > +++ b/src/acpica/source/common/dmtbinfo3.c > @@ -759,7 +759,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt[] = > > ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt0[] = > { > - {ACPI_DMT_UNICODE, sizeof (ACPI_TABLE_WPBT), "Command-line Arguments", 0}, > + {ACPI_DMT_WPBT_UNICODE, ACPI_WPBT2_OFFSET (UnicodeString), "Command-line Arguments", DT_DESCRIBES_OPTIONAL}, > ACPI_DMT_TERMINATOR > }; > > @@ -834,6 +834,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoGeneric[][2] = > ACPI_DM_GENERIC_ENTRY (ACPI_DMT_STRING, "String"), > ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UNICODE, "Unicode"), > ACPI_DM_GENERIC_ENTRY (ACPI_DMT_BUFFER, "Buffer"), > + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_BUF16, "BUF16"), > ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UUID, "GUID"), > ACPI_DM_GENERIC_ENTRY (ACPI_DMT_STRING, "DevicePath"), > ACPI_DM_GENERIC_ENTRY (ACPI_DMT_LABEL, "Label"), > diff --git a/src/acpica/source/compiler/aslmethod.c b/src/acpica/source/compiler/aslmethod.c > index e9aa7f2d..5bec65e8 100644 > --- a/src/acpica/source/compiler/aslmethod.c > +++ b/src/acpica/source/compiler/aslmethod.c > @@ -205,6 +205,10 @@ MtMethodAnalysisWalkBegin ( > UINT8 ActualArgs = 0; > BOOLEAN HidExists; > BOOLEAN AdrExists; > + BOOLEAN PrsExists; > + BOOLEAN CrsExists; > + BOOLEAN SrsExists; > + BOOLEAN DisExists; > > > /* Build cross-reference output file if requested */ > @@ -536,8 +540,8 @@ MtMethodAnalysisWalkBegin ( > > if (!HidExists && !AdrExists) > { > - AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > - "Device object requires a _HID or _ADR in same scope"); > + AslError (ASL_ERROR, ASL_MSG_MISSING_DEPENDENCY, Op, > + "Device object requires a _HID or _ADR"); > } > else if (HidExists && AdrExists) > { > @@ -549,6 +553,81 @@ MtMethodAnalysisWalkBegin ( > AslError (ASL_WARNING, ASL_MSG_MULTIPLE_TYPES, Op, > "Device object requires either a _HID or _ADR, but not both"); > } > + > + /* > + * Check usage of _CRS, _DIS, _PRS, and _SRS objects (July 2021). > + * > + * Under the Device Object: > + * > + * 1) If _DIS is present, must have a _CRS, _PRS, and _SRS > + * 2) If _PRS is present, must have a _CRS and _SRS > + * 3) If _SRS is present, must have a _CRS and _PRS > + */ > + CrsExists = ApFindNameInDeviceTree (METHOD_NAME__CRS, Op); > + DisExists = ApFindNameInDeviceTree (METHOD_NAME__DIS, Op); > + PrsExists = ApFindNameInDeviceTree (METHOD_NAME__PRS, Op); > + SrsExists = ApFindNameInDeviceTree (METHOD_NAME__SRS, Op); > + > + /* 1) If _DIS is present, must have a _CRS, _PRS, and _SRS */ > + > + if (DisExists) > + { > + if (!CrsExists) > + { > + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > + "_DIS is missing a _CRS, requires a _CRS, _PRS, and a _SRS"); > + } > + > + if (!PrsExists) > + { > + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > + "_DIS is missing a _PRS, requires a _CRS, _PRS, and a _SRS"); > + } > + > + if (!SrsExists) > + { > + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > + "_DIS is missing a _SRS, requires a _CRS, _PRS, and a _SRS"); > + } > + } > + > + /* 2) If _PRS is present, must have a _CRS and _SRS */ > + > + if (PrsExists) > + { > + if (!CrsExists) > + { > + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > + "_PRS is missing a _CRS, requires a _CRS and a _SRS"); > + } > + > + if (!SrsExists) > + { > + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > + "_PRS is missing a _SRS, requires a _CRS and a _SRS"); > + } > + } > + > + /* 3) If _SRS is present, must have a _CRS and _PRS */ > + > + if (SrsExists) > + { > + if (!CrsExists) > + { > + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > + "_SRS is missing a _CRS, requires a _CRS and a _PRS"); > + } > + if (!PrsExists) > + { > + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > + "_SRS is missing a _PRS, requires a _CRS and a _PRS"); > + } > + if (!DisExists) > + { > + AslError (ASL_REMARK, ASL_MSG_MISSING_DEPENDENCY, Op, > + "_SRS is missing a _DIS"); > + } > + } > break; > > case PARSEOP_EVENT: > diff --git a/src/acpica/source/compiler/aslutils.c b/src/acpica/source/compiler/aslutils.c > index 44631957..c4325c3b 100644 > --- a/src/acpica/source/compiler/aslutils.c > +++ b/src/acpica/source/compiler/aslutils.c > @@ -434,18 +434,20 @@ UtDisplaySupportedTables ( > > > printf ("\nACPI tables supported by iASL version %8.8X:\n" > - " (Compiler, Disassembler, Template Generator)\n\n", > + " (Compiler, Disassembler, Template Generator)\n", > ACPI_CA_VERSION); > > /* All ACPI tables with the common table header */ > > - printf ("\n Supported ACPI tables:\n"); > + printf ("\nKnown/Supported ACPI tables:\n"); > for (TableData = AcpiGbl_SupportedTables, i = 1; > TableData->Signature; TableData++, i++) > { > printf ("%8u) %s %s\n", i, > TableData->Signature, TableData->Description); > } > + > + printf ("\nTotal %u ACPI tables\n\n", i-1); > } > > > diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h > index 4f966808..6d3dbefa 100644 > --- a/src/acpica/source/compiler/dtcompiler.h > +++ b/src/acpica/source/compiler/dtcompiler.h > @@ -565,6 +565,10 @@ ACPI_STATUS > DtCompileRsdp ( > DT_FIELD **PFieldList); > > +ACPI_STATUS > +DtCompileAest ( > + void **PFieldList); > + > ACPI_STATUS > DtCompileAsf ( > void **PFieldList); > @@ -753,6 +757,7 @@ DtGetGenericTableInfo ( > > /* ACPI Table templates */ > > +extern const unsigned char TemplateAest[]; > extern const unsigned char TemplateAsf[]; > extern const unsigned char TemplateBoot[]; > extern const unsigned char TemplateBdat[]; > diff --git a/src/acpica/source/compiler/dtfield.c b/src/acpica/source/compiler/dtfield.c > index 729791d7..f4c71147 100644 > --- a/src/acpica/source/compiler/dtfield.c > +++ b/src/acpica/source/compiler/dtfield.c > @@ -434,14 +434,14 @@ DtCompileInteger ( > { > if (Value != 1) > { > - DtError (ASL_WARNING, ASL_MSG_RESERVED_FIELD, Field, > + DtError (ASL_ERROR, ASL_MSG_RESERVED_FIELD, Field, > "Must be one, setting to one"); > Value = 1; > } > } > else if (Value != 0) > { > - DtError (ASL_WARNING, ASL_MSG_RESERVED_FIELD, Field, > + DtError (ASL_ERROR, ASL_MSG_RESERVED_FIELD, Field, > "Must be zero, setting to zero"); > Value = 0; > } > diff --git a/src/acpica/source/compiler/dttable1.c b/src/acpica/source/compiler/dttable1.c > index bf710e31..2e6a8569 100644 > --- a/src/acpica/source/compiler/dttable1.c > +++ b/src/acpica/source/compiler/dttable1.c > @@ -170,6 +170,223 @@ static ACPI_DMTABLE_INFO TableInfoDmarPciPath[] = > }; > > > +/****************************************************************************** > + * > + * FUNCTION: DtCompileAest > + * > + * PARAMETERS: List - Current field list pointer > + * > + * RETURN: Status > + * > + * DESCRIPTION: Compile AEST. > + * > + * NOTE: Assumes the following table structure: > + * For all AEST Error Nodes: > + * 1) An AEST Error Node, followed immediately by: > + * 2) Any node-specific data > + * 3) An Interface Structure (one) > + * 4) A list (array) of Interrupt Structures, the count as specified > + * in the NodeInterruptCount field of the Error Node header. > + * > + * AEST - ARM Error Source table. Conforms to: > + * ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document Sep 2020 > + * > + *****************************************************************************/ > + > +ACPI_STATUS > +DtCompileAest ( > + void **List) > +{ > + ACPI_AEST_HEADER *ErrorNodeHeader; > + ACPI_AEST_PROCESSOR *AestProcessor; > + DT_SUBTABLE *Subtable; > + DT_SUBTABLE *ParentTable; > + ACPI_DMTABLE_INFO *InfoTable; > + ACPI_STATUS Status; > + UINT32 i; > + UINT32 Offset; > + DT_FIELD **PFieldList = (DT_FIELD **) List; > + > + > + while (*PFieldList) > + { > + /* Compile the common error node header */ > + > + Status = DtCompileTable (PFieldList, AcpiDmTableInfoAestHdr, > + &Subtable); > + if (ACPI_FAILURE (Status)) > + { > + return (Status); > + } > + > + ParentTable = DtPeekSubtable (); > + DtInsertSubtable (ParentTable, Subtable); > + > + /* Everything past the error node header will be a subtable */ > + > + DtPushSubtable (Subtable); > + > + /* > + * Compile the node-specific structure (Based on the error > + * node header Type field) > + */ > + ErrorNodeHeader = ACPI_CAST_PTR (ACPI_AEST_HEADER, Subtable->Buffer); > + > + /* Point past the common error node header */ > + > + Offset = sizeof (ACPI_AEST_HEADER); > + ErrorNodeHeader->NodeSpecificOffset = Offset; > + > + /* Decode the error node type */ > + > + switch (ErrorNodeHeader->Type) > + { > + case ACPI_AEST_PROCESSOR_ERROR_NODE: > + > + InfoTable = AcpiDmTableInfoAestProcError; > + break; > + > + case ACPI_AEST_MEMORY_ERROR_NODE: > + > + InfoTable = AcpiDmTableInfoAestMemError; > + break; > + > + case ACPI_AEST_SMMU_ERROR_NODE: > + > + InfoTable = AcpiDmTableInfoAestSmmuError; > + break; > + > + case ACPI_AEST_VENDOR_ERROR_NODE: > + > + InfoTable = AcpiDmTableInfoAestVendorError; > + break; > + > + case ACPI_AEST_GIC_ERROR_NODE: > + > + InfoTable = AcpiDmTableInfoAestGicError; > + break; > + > + /* Error case below */ > + default: > + AcpiOsPrintf ("Unknown AEST Subtable Type: %X\n", > + ErrorNodeHeader->Type); > + return (AE_ERROR); > + } > + > + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); > + if (ACPI_FAILURE (Status)) > + { > + return (Status); > + } > + > + /* Point past the node-specific structure */ > + > + Offset += Subtable->Length; > + ErrorNodeHeader->NodeInterfaceOffset = Offset; > + > + ParentTable = DtPeekSubtable (); > + DtInsertSubtable (ParentTable, Subtable); > + > + /* Compile any additional node-specific substructures */ > + > + if (ErrorNodeHeader->Type == ACPI_AEST_PROCESSOR_ERROR_NODE) > + { > + /* > + * Special handling for PROCESSOR_ERROR_NODE subtables > + * (to handle the Resource Substructure via the ResourceType > + * field). > + */ > + AestProcessor = ACPI_CAST_PTR (ACPI_AEST_PROCESSOR, > + Subtable->Buffer); > + > + switch (AestProcessor->ResourceType) > + { > + case ACPI_AEST_CACHE_RESOURCE: > + > + InfoTable = AcpiDmTableInfoAestCacheRsrc; > + break; > + > + case ACPI_AEST_TLB_RESOURCE: > + > + InfoTable = AcpiDmTableInfoAestTlbRsrc; > + break; > + > + case ACPI_AEST_GENERIC_RESOURCE: > + > + InfoTable = AcpiDmTableInfoAestGenRsrc; > + AcpiOsPrintf ("Generic Resource Type (%X) is not supported at this time\n", > + AestProcessor->ResourceType); > + return (AE_ERROR); > + > + /* Error case below */ > + default: > + AcpiOsPrintf ("Unknown AEST Processor Resource Type: %X\n", > + AestProcessor->ResourceType); > + return (AE_ERROR); > + } > + > + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); > + if (ACPI_FAILURE (Status)) > + { > + return (Status); > + } > + > + /* Point past the resource substructure subtable */ > + > + Offset += Subtable->Length; > + ErrorNodeHeader->NodeInterfaceOffset = Offset; > + > + ParentTable = DtPeekSubtable (); > + DtInsertSubtable (ParentTable, Subtable); > + } > + > + /* Compile the (required) node interface structure */ > + > + Status = DtCompileTable (PFieldList, AcpiDmTableInfoAestXface, > + &Subtable); > + if (ACPI_FAILURE (Status)) > + { > + return (Status); > + } > + > + ErrorNodeHeader->NodeInterruptOffset = 0; > + ParentTable = DtPeekSubtable (); > + DtInsertSubtable (ParentTable, Subtable); > + > + /* Compile each of the node interrupt structures */ > + > + if (ErrorNodeHeader->NodeInterruptCount) > + { > + /* Point to the first interrupt structure */ > + > + Offset += Subtable->Length; > + ErrorNodeHeader->NodeInterruptOffset = Offset; > + } > + > + /* Compile each of the interrupt structures */ > + > + for (i = 0; i < ErrorNodeHeader->NodeInterruptCount; i++) > + { > + Status = DtCompileTable (PFieldList, AcpiDmTableInfoAestXrupt, > + &Subtable); > + if (ACPI_FAILURE (Status)) > + { > + return (Status); > + } > + > + ParentTable = DtPeekSubtable (); > + DtInsertSubtable (ParentTable, Subtable); > + } > + > + /* Prepare for the next AEST Error node */ > + > + DtPopSubtable (); > + } > + > + return (AE_OK); > +} > + > + > /****************************************************************************** > * > * FUNCTION: DtCompileAsf > diff --git a/src/acpica/source/compiler/dttable2.c b/src/acpica/source/compiler/dttable2.c > index 3a0d8a22..fb41ac87 100644 > --- a/src/acpica/source/compiler/dttable2.c > +++ b/src/acpica/source/compiler/dttable2.c > @@ -2678,13 +2678,11 @@ DtCompileWpbt ( > DT_SUBTABLE *ParentTable; > ACPI_TABLE_WPBT *Table; > ACPI_STATUS Status; > - UINT16 Length; > > > /* Compile the main table */ > > - Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt, > - &Subtable); > + Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -2692,11 +2690,23 @@ DtCompileWpbt ( > > ParentTable = DtPeekSubtable (); > DtInsertSubtable (ParentTable, Subtable); > + Table = ACPI_CAST_PTR (ACPI_TABLE_WPBT, ParentTable->Buffer); > + > + /* > + * Exit now if there are no arguments specified. This is indicated by: > + * The "Command-line Arguments" field has not been specified (if specified, > + * it will be the last field in the field list -- after the main table). > + * Set the Argument Length in the main table to zero. > + */ > + if (!*PFieldList) > + { > + Table->ArgumentsLength = 0; > + return (AE_OK); > + } > > /* Compile the argument list subtable */ > > - Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt0, > - &Subtable); > + Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt0, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -2704,11 +2714,7 @@ DtCompileWpbt ( > > /* Extract the length of the Arguments buffer, insert into main table */ > > - Length = (UINT16) Subtable->TotalLength; > - Table = ACPI_CAST_PTR (ACPI_TABLE_WPBT, ParentTable->Buffer); > - Table->ArgumentsLength = Length; > - > - ParentTable = DtPeekSubtable (); > + Table->ArgumentsLength = (UINT16) Subtable->TotalLength; > DtInsertSubtable (ParentTable, Subtable); > return (AE_OK); > } > diff --git a/src/acpica/source/compiler/dttemplate.h b/src/acpica/source/compiler/dttemplate.h > index 224a6a11..24c8c6f9 100644 > --- a/src/acpica/source/compiler/dttemplate.h > +++ b/src/acpica/source/compiler/dttemplate.h > @@ -155,6 +155,100 @@ > > /* Templates for ACPI data tables */ > > +const unsigned char TemplateAest[] = > +{ > + 0x41,0x45,0x53,0x54,0xCC,0x02,0x00,0x00, /* 00000000 "AEST...." */ > + 0x01,0x2A,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 ".*INTEL " */ > + 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ > + 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ > + 0x04,0x06,0x21,0x20,0x00,0x80,0x00,0x00, /* 00000020 "..! ...." */ > + 0x2C,0x00,0x00,0x00,0x44,0x00,0x00,0x00, /* 00000028 ",...D..." */ > + 0x74,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000030 "t......." */ > + 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 00000038 "....gE#." */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000048 "........" */ > + 0xCD,0xFE,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000050 "........" */ > + 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 00000058 "....gE#." */ > + 0x33,0x33,0x22,0x22,0x00,0x00,0x00,0x00, /* 00000060 "33""...." */ > + 0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, /* 00000068 "........" */ > + 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 00000070 "....gE#." */ > + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000078 "........" */ > + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000088 "........" */ > + 0x11,0x11,0x11,0x01,0x00,0x00,0x00,0x00, /* 00000090 "........" */ > + 0x01,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x78, /* 00000098 ".......x" */ > + 0x56,0x00,0x00,0x00,0x00,0x74,0x00,0x00, /* 000000A0 "V....t.." */ > + 0x2C,0x00,0x00,0x00,0x44,0x00,0x00,0x00, /* 000000A8 ",...D..." */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B0 "........" */ > + 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 000000B8 "....gE#." */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000C0 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000C8 "........" */ > + 0x11,0x11,0x00,0x00,0x01,0x00,0x01,0x00, /* 000000D0 "........" */ > + 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 000000D8 "....gE#." */ > + 0x67,0x67,0x67,0x67,0x00,0x00,0x00,0x00, /* 000000E0 "gggg...." */ > + 0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, /* 000000E8 "........" */ > + 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 000000F0 "....gE#." */ > + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000000F8 "........" */ > + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000100 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000108 "........" */ > + 0x11,0x11,0x11,0x01,0x00,0x00,0x00,0x00, /* 00000110 "........" */ > + 0x01,0x60,0x00,0x00,0x2C,0x00,0x00,0x00, /* 00000118 ".`..,..." */ > + 0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000120 "0......." */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000128 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000130 "........" */ > + 0x00,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89, /* 00000138 "........" */ > + 0x67,0x45,0x23,0x01,0xAA,0xAA,0x00,0x00, /* 00000140 "gE#....." */ > + 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000148 "........" */ > + 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 00000150 "....gE#." */ > + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000158 "........" */ > + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000160 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000168 "........" */ > + 0x11,0x11,0x11,0x01,0x00,0x00,0x00,0x00, /* 00000170 "........" */ > + 0x02,0x64,0x00,0x00,0x2C,0x00,0x00,0x00, /* 00000178 ".d..,..." */ > + 0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000180 "4......." */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000188 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000190 "........" */ > + 0x00,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89, /* 00000198 "........" */ > + 0x67,0x45,0x23,0x01,0x55,0x55,0x55,0x55, /* 000001A0 "gE#.UUUU" */ > + 0x66,0x66,0x66,0x66,0x01,0x00,0x00,0x00, /* 000001A8 "ffff...." */ > + 0x03,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89, /* 000001B0 "........" */ > + 0x67,0x45,0x23,0x01,0x00,0x00,0x00,0x00, /* 000001B8 "gE#....." */ > + 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000001C0 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001C8 "........" */ > + 0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x01, /* 000001D0 "........" */ > + 0x00,0x00,0x00,0x00,0x03,0x74,0x00,0x00, /* 000001D8 ".....t.." */ > + 0x2C,0x00,0x00,0x00,0x44,0x00,0x00,0x00, /* 000001E0 ",...D..." */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001E8 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001F0 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001F8 "........" */ > + 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 00000200 "....gE#." */ > + 0x33,0x33,0x33,0x33,0x44,0x44,0x44,0x44, /* 00000208 "3333DDDD" */ > + 0x12,0x23,0x34,0x45,0x56,0x67,0x78,0x89, /* 00000210 ".#4EVgx." */ > + 0x9A,0xAB,0xBC,0xCD,0xDE,0xEF,0xFF,0x55, /* 00000218 ".......U" */ > + 0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, /* 00000220 "........" */ > + 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 00000228 "....gE#." */ > + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000230 "........" */ > + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000238 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000240 "........" */ > + 0x11,0x11,0x11,0x01,0x00,0x00,0x00,0x00, /* 00000248 "........" */ > + 0x04,0x7C,0x00,0x00,0x2C,0x00,0x00,0x00, /* 00000250 ".|..,..." */ > + 0x34,0x00,0x00,0x00,0x64,0x00,0x00,0x00, /* 00000258 "4...d..." */ > + 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000260 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000268 "........" */ > + 0x00,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89, /* 00000270 "........" */ > + 0x67,0x45,0x23,0x01,0x03,0x00,0x00,0x00, /* 00000278 "gE#....." */ > + 0x88,0x88,0x77,0x77,0x00,0x00,0x00,0x00, /* 00000280 "..ww...." */ > + 0x03,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89, /* 00000288 "........" */ > + 0x67,0x45,0x23,0x01,0x00,0x00,0x00,0x00, /* 00000290 "gE#....." */ > + 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000298 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000002A0 "........" */ > + 0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x01, /* 000002A8 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000002B0 "........" */ > + 0xBB,0xBB,0xAA,0xAA,0xCC,0x00,0x00,0x00, /* 000002B8 "........" */ > + 0x01,0x00,0x00,0x01,0xEF,0xCD,0xAB,0x78, /* 000002C0 ".......x" */ > + 0x56,0x00,0x00,0x00 /* 000002C8 "V..." */ > +}; > + > const unsigned char TemplateAsf[] = > { > 0x41,0x53,0x46,0x21,0x72,0x00,0x00,0x00, /* 00000000 "ASF!r..." */ > diff --git a/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c > index ba454b31..7d706da6 100644 > --- a/src/acpica/source/compiler/dtutils.c > +++ b/src/acpica/source/compiler/dtutils.c > @@ -452,6 +452,7 @@ DtGetFieldType ( > break; > > case ACPI_DMT_UNICODE: > + case ACPI_DMT_WPBT_UNICODE: > > Type = DT_FIELD_TYPE_UNICODE; > break; > @@ -586,6 +587,10 @@ DtGetFieldLength ( > case ACPI_DMT_RGRT: > case ACPI_DMT_SDEV: > case ACPI_DMT_SRAT: > + case ACPI_DMT_AEST: > + case ACPI_DMT_AEST_RES: > + case ACPI_DMT_AEST_XFACE: > + case ACPI_DMT_AEST_XRUPT: > case ACPI_DMT_ASF: > case ACPI_DMT_HESTNTYP: > case ACPI_DMT_FADTPM: > @@ -616,6 +621,8 @@ DtGetFieldLength ( > break; > > case ACPI_DMT_UINT32: > + case ACPI_DMT_AEST_CACHE: > + case ACPI_DMT_AEST_GIC: > case ACPI_DMT_NAME4: > case ACPI_DMT_SIG: > case ACPI_DMT_LPIT: > @@ -734,12 +741,13 @@ DtGetFieldLength ( > break; > > case ACPI_DMT_UNICODE: > + case ACPI_DMT_WPBT_UNICODE: > > Value = DtGetFieldValue (Field); > > /* TBD: error if Value is NULL? (as below?) */ > > - ByteLength = (strlen (Value) + 1) * sizeof(UINT16); > + ByteLength = (strlen (Value) + 1) * sizeof (UINT16); > break; > > default: > diff --git a/src/acpica/source/components/dispatcher/dswexec.c b/src/acpica/source/components/dispatcher/dswexec.c > index addc06e1..636067bf 100644 > --- a/src/acpica/source/components/dispatcher/dswexec.c > +++ b/src/acpica/source/components/dispatcher/dswexec.c > @@ -737,7 +737,7 @@ AcpiDsExecEndOp ( > if (ACPI_SUCCESS (Status)) > { > Status = AcpiExWriteDataToField (ObjDesc, Op->Common.Node->Object, NULL); > - if ACPI_FAILURE (Status) > + if (ACPI_FAILURE (Status)) > { > ACPI_EXCEPTION ((AE_INFO, Status, "While writing to buffer field")); > } > diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h > index 9b584d67..839c0edd 100644 > --- a/src/acpica/source/include/acdisasm.h > +++ b/src/acpica/source/include/acdisasm.h > @@ -250,6 +250,12 @@ typedef enum > > /* Types that are specific to particular ACPI tables */ > > + ACPI_DMT_AEST, > + ACPI_DMT_AEST_CACHE, > + ACPI_DMT_AEST_GIC, > + ACPI_DMT_AEST_RES, > + ACPI_DMT_AEST_XFACE, > + ACPI_DMT_AEST_XRUPT, > ACPI_DMT_ASF, > ACPI_DMT_CEDT, > ACPI_DMT_DMAR, > @@ -283,6 +289,7 @@ typedef enum > ACPI_DMT_SRAT, > ACPI_DMT_TPM2, > ACPI_DMT_VIOT, > + ACPI_DMT_WPBT_UNICODE, > > /* Special opcodes */ > > @@ -360,6 +367,17 @@ extern const char *AcpiGbl_AccessTypes[]; > extern const char *AcpiGbl_UpdateRules[]; > extern const char *AcpiGbl_MatchOps[]; > > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestHdr[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestProcError[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestCacheRsrc[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestTlbRsrc[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestGenRsrc[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestMemError[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestSmmuError[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestVendorError[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestGicError[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestXface[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestXrupt[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoAsf0[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoAsf1[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoAsf1a[]; > @@ -681,6 +699,10 @@ AcpiDmDumpUnicode ( > UINT32 BufferOffset, > UINT32 ByteLength); > > +void > +AcpiDmDumpAest ( > + ACPI_TABLE_HEADER *Table); > + > void > AcpiDmDumpAsf ( > ACPI_TABLE_HEADER *Table); > diff --git a/src/acpica/source/include/acnames.h b/src/acpica/source/include/acnames.h > index 5e762906..9075ca74 100644 > --- a/src/acpica/source/include/acnames.h > +++ b/src/acpica/source/include/acnames.h > @@ -162,6 +162,7 @@ > #define METHOD_NAME__CLS "_CLS" > #define METHOD_NAME__CRS "_CRS" > #define METHOD_NAME__DDN "_DDN" > +#define METHOD_NAME__DIS "_DIS" > #define METHOD_NAME__DMA "_DMA" > #define METHOD_NAME__HID "_HID" > #define METHOD_NAME__INI "_INI" > diff --git a/src/acpica/source/include/acoutput.h b/src/acpica/source/include/acoutput.h > index 46774ad0..b72c9a94 100644 > --- a/src/acpica/source/include/acoutput.h > +++ b/src/acpica/source/include/acoutput.h > @@ -561,7 +561,7 @@ > /* Conditional execution */ > > #define ACPI_DEBUG_EXEC(a) a > -#define ACPI_DEBUG_ONLY_MEMBERS(a) a; > +#define ACPI_DEBUG_ONLY_MEMBERS(a) a > #define _VERBOSE_STRUCTURES > > > diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h > index dc459c9a..7610f2e3 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 0x20210604 > +#define ACPI_CA_VERSION 0x20210730 > > #include "acconfig.h" > #include "actypes.h" > diff --git a/src/acpica/source/include/actbinfo.h b/src/acpica/source/include/actbinfo.h > index 027e6085..f2a1a48c 100644 > --- a/src/acpica/source/include/actbinfo.h > +++ b/src/acpica/source/include/actbinfo.h > @@ -205,11 +205,23 @@ > #define ACPI_WDDT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WDDT,f) > #define ACPI_WDRT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WDRT,f) > #define ACPI_WPBT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WPBT,f) > +#define ACPI_WPBT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_WPBT_UNICODE,f) > #define ACPI_WSMT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WSMT,f) > #define ACPI_XENV_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_XENV,f) > > /* Subtables */ > > +#define ACPI_AESTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_HEADER,f) > +#define ACPI_AEST0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_PROCESSOR,f) > +#define ACPI_AEST0A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_PROCESSOR_CACHE,f) > +#define ACPI_AEST0B_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_PROCESSOR_TLB,f) > +#define ACPI_AEST0C_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_PROCESSOR_GENERIC,f) > +#define ACPI_AEST1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_MEMORY,f) > +#define ACPI_AEST2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_SMMU,f) > +#define ACPI_AEST3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_VENDOR,f) > +#define ACPI_AEST4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_GIC,f) > +#define ACPI_AEST0D_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_NODE_INTERFACE,f) > +#define ACPI_AEST0E_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_NODE_INTERRUPT,f) > #define ACPI_ASF0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_INFO,f) > #define ACPI_ASF1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_ALERT,f) > #define ACPI_ASF1a_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_ALERT_DATA,f) > @@ -379,6 +391,9 @@ > > /* Flags */ > > +#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_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/actbl1.h b/src/acpica/source/include/actbl1.h > index 136ebf12..09e68293 100644 > --- a/src/acpica/source/include/actbl1.h > +++ b/src/acpica/source/include/actbl1.h > @@ -168,6 +168,7 @@ > * file. Useful because they make it more difficult to inadvertently type in > * the wrong signature. > */ > +#define ACPI_SIG_AEST "AEST" /* Arm Error Source Table */ > #define ACPI_SIG_ASF "ASF!" /* Alert Standard Format table */ > #define ACPI_SIG_BERT "BERT" /* Boot Error Record Table */ > #define ACPI_SIG_BGRT "BGRT" /* Boot Graphics Resource Table */ > @@ -701,7 +702,7 @@ typedef struct acpi_csrt_descriptor > * DBG2 - Debug Port Table 2 > * Version 0 (Both main table and subtables) > * > - * Conforms to "Microsoft Debug Port Table 2 (DBG2)", December 10, 2015 > + * Conforms to "Microsoft Debug Port Table 2 (DBG2)", September 21, 2020 > * > ******************************************************************************/ > > @@ -758,11 +759,24 @@ typedef struct acpi_dbg2_device > > #define ACPI_DBG2_16550_COMPATIBLE 0x0000 > #define ACPI_DBG2_16550_SUBSET 0x0001 > +#define ACPI_DBG2_MAX311XE_SPI 0x0002 > #define ACPI_DBG2_ARM_PL011 0x0003 > +#define ACPI_DBG2_MSM8X60 0x0004 > +#define ACPI_DBG2_16550_NVIDIA 0x0005 > +#define ACPI_DBG2_TI_OMAP 0x0006 > +#define ACPI_DBG2_APM88XXXX 0x0008 > +#define ACPI_DBG2_MSM8974 0x0009 > +#define ACPI_DBG2_SAM5250 0x000A > +#define ACPI_DBG2_INTEL_USIF 0x000B > +#define ACPI_DBG2_IMX6 0x000C > #define ACPI_DBG2_ARM_SBSA_32BIT 0x000D > #define ACPI_DBG2_ARM_SBSA_GENERIC 0x000E > #define ACPI_DBG2_ARM_DCC 0x000F > #define ACPI_DBG2_BCM2835 0x0010 > +#define ACPI_DBG2_SDM845_1_8432MHZ 0x0011 > +#define ACPI_DBG2_16550_WITH_GAS 0x0012 > +#define ACPI_DBG2_SDM845_7_372MHZ 0x0013 > +#define ACPI_DBG2_INTEL_LPSS 0x0014 > > #define ACPI_DBG2_1394_STANDARD 0x0000 > > diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h > index cb237a6b..58c1570c 100644 > --- a/src/acpica/source/include/actbl2.h > +++ b/src/acpica/source/include/actbl2.h > @@ -213,6 +213,193 @@ > */ > > > +/******************************************************************************* > + * > + * AEST - Arm Error Source Table > + * > + * Conforms to: ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document > + * September 2020. > + * > + ******************************************************************************/ > + > +typedef struct acpi_table_aest > +{ > + ACPI_TABLE_HEADER Header; > + void *NodeArray[]; > + > +} ACPI_TABLE_AEST; > + > +/* Common Subtable header - one per Node Structure (Subtable) */ > + > +typedef struct acpi_aest_hdr > +{ > + UINT8 Type; > + UINT16 Length; > + UINT8 Reserved; > + UINT32 NodeSpecificOffset; > + UINT32 NodeInterfaceOffset; > + UINT32 NodeInterruptOffset; > + UINT32 NodeInterruptCount; > + UINT64 TimestampRate; > + UINT64 Reserved1; > + UINT64 ErrorInjectionRate; > + > +} ACPI_AEST_HEADER; > + > +/* Values for Type above */ > + > +#define ACPI_AEST_PROCESSOR_ERROR_NODE 0 > +#define ACPI_AEST_MEMORY_ERROR_NODE 1 > +#define ACPI_AEST_SMMU_ERROR_NODE 2 > +#define ACPI_AEST_VENDOR_ERROR_NODE 3 > +#define ACPI_AEST_GIC_ERROR_NODE 4 > +#define ACPI_AEST_NODE_TYPE_RESERVED 5 /* 5 and above are reserved */ > + > + > +/* > + * AEST subtables (Error nodes) > + */ > + > +/* 0: Processor Error */ > + > +typedef struct acpi_aest_processor > +{ > + UINT32 ProcessorId; > + UINT8 ResourceType; > + UINT8 Reserved; > + UINT8 Flags; > + UINT8 Revision; > + UINT64 ProcessorAffinity; > + > +} ACPI_AEST_PROCESSOR; > + > +/* Values for ResourceType above, related structs below */ > + > +#define ACPI_AEST_CACHE_RESOURCE 0 > +#define ACPI_AEST_TLB_RESOURCE 1 > +#define ACPI_AEST_GENERIC_RESOURCE 2 > +#define ACPI_AEST_RESOURCE_RESERVED 3 /* 3 and above are reserved */ > + > +/* 0R: Processor Cache Resource Substructure */ > + > +typedef struct acpi_aest_processor_cache > +{ > + UINT32 CacheReference; > + UINT32 Reserved; > + > +} ACPI_AEST_PROCESSOR_CACHE; > + > +/* Values for CacheType above */ > + > +#define ACPI_AEST_CACHE_DATA 0 > +#define ACPI_AEST_CACHE_INSTRUCTION 1 > +#define ACPI_AEST_CACHE_UNIFIED 2 > +#define ACPI_AEST_CACHE_RESERVED 3 /* 3 and above are reserved */ > + > +/* 1R: Processor TLB Resource Substructure */ > + > +typedef struct acpi_aest_processor_tlb > +{ > + UINT32 TlbLevel; > + UINT32 Reserved; > + > +} ACPI_AEST_PROCESSOR_TLB; > + > +/* 2R: Processor Generic Resource Substructure */ > + > +typedef struct acpi_aest_processor_generic > +{ > + UINT8 *Resource; > + > +} ACPI_AEST_PROCESSOR_GENERIC; > + > +/* 1: Memory Error */ > + > +typedef struct acpi_aest_memory > +{ > + UINT32 SratProximityDomain; > + > +} ACPI_AEST_MEMORY; > + > +/* 2: Smmu Error */ > + > +typedef struct acpi_aest_smmu > +{ > + UINT32 IortNodeReference; > + UINT32 SubcomponentReference; > + > +} ACPI_AEST_SMMU; > + > +/* 3: Vendor Defined */ > + > +typedef struct acpi_aest_vendor > +{ > + UINT32 AcpiHid; > + UINT32 AcpiUid; > + UINT8 VendorSpecificData[16]; > + > +} ACPI_AEST_VENDOR; > + > +/* 4: Gic Error */ > + > +typedef struct acpi_aest_gic > +{ > + UINT32 InterfaceType; > + UINT32 InstanceId; > + > +} ACPI_AEST_GIC; > + > +/* Values for InterfaceType above */ > + > +#define ACPI_AEST_GIC_CPU 0 > +#define ACPI_AEST_GIC_DISTRIBUTOR 1 > +#define ACPI_AEST_GIC_REDISTRIBUTOR 2 > +#define ACPI_AEST_GIC_ITS 3 > +#define ACPI_AEST_GIC_RESERVED 4 /* 4 and above are reserved */ > + > + > +/* Node Interface Structure */ > + > +typedef struct acpi_aest_node_interface > +{ > + UINT8 Type; > + UINT8 Reserved[3]; > + UINT32 Flags; > + UINT64 Address; > + UINT32 ErrorRecordIndex; > + UINT32 ErrorRecordCount; > + UINT64 ErrorRecordImplemented; > + UINT64 ErrorStatusReporting; > + UINT64 AddressingMode; > + > +} ACPI_AEST_NODE_INTERFACE; > + > +/* Values for Type field above */ > + > +#define ACPI_AEST_NODE_SYSTEM_REGISTER 0 > +#define ACPI_AEST_NODE_MEMORY_MAPPED 1 > +#define ACPI_AEST_XFACE_RESERVED 2 /* 2 and above are reserved */ > + > +/* Node Interrupt Structure */ > + > +typedef struct acpi_aest_node_interrupt > +{ > + UINT8 Type; > + UINT8 Reserved[2]; > + UINT8 Flags; > + UINT32 Gsiv; > + UINT8 IortId; > + UINT8 Reserved1[3]; > + > +} ACPI_AEST_NODE_INTERRUPT; > + > +/* Values for Type field above */ > + > +#define ACPI_AEST_NODE_FAULT_HANDLING 0 > +#define ACPI_AEST_NODE_ERROR_RECOVERY 1 > +#define ACPI_AEST_XRUPT_RESERVED 2 /* 2 and above are reserved */ > + > + > /******************************************************************************* > * > * BDAT - BIOS Data ACPI Table > @@ -2163,6 +2350,13 @@ typedef struct acpi_table_prmt_header > > } ACPI_TABLE_PRMT_HEADER; > > +typedef struct acpi_prmt_module_header > +{ > + UINT16 Revision; > + UINT16 Length; > + > +} ACPI_PRMT_MODULE_HEADER; > + > typedef struct acpi_prmt_module_info > { > UINT16 Revision; > diff --git a/src/acpica/source/include/actbl3.h b/src/acpica/source/include/actbl3.h > index d4260a1d..d0f7025f 100644 > --- a/src/acpica/source/include/actbl3.h > +++ b/src/acpica/source/include/actbl3.h > @@ -955,6 +955,12 @@ typedef struct acpi_table_wpbt > > } ACPI_TABLE_WPBT; > > +typedef struct acpi_wpbt_unicode > +{ > + UINT16 *UnicodeString; > + > +} ACPI_WPBT_UNICODE; > + > > /******************************************************************************* > * > Acked-by: Alex Hung <alex.hung@canonical.com>
On 7/31/21 12:41 AM, Colin King wrote: > From: Colin Ian King <colin.king@canonical.com> > > Changes in this release of ACPICA are detailed at the following > link on the ACPICA developer mailing list: > > https://lists.acpica.org/hyperkitty/list/devel@acpica.org/thread/Q3CD3QGSIHEHGK7E5NXYE3E2L6JCZXVE/ > > Signed-off-by: Colin Ian King <colin.king@canonical.com> > --- > src/acpica/source/common/adisasm.c | 2 +- > src/acpica/source/common/ahtable.c | 1 + > src/acpica/source/common/dmtable.c | 147 ++++++++++++ > src/acpica/source/common/dmtbdump1.c | 219 ++++++++++++++++++ > src/acpica/source/common/dmtbdump3.c | 14 +- > src/acpica/source/common/dmtbinfo1.c | 138 +++++++++++ > src/acpica/source/common/dmtbinfo3.c | 3 +- > src/acpica/source/compiler/aslmethod.c | 83 ++++++- > src/acpica/source/compiler/aslutils.c | 6 +- > src/acpica/source/compiler/dtcompiler.h | 5 + > src/acpica/source/compiler/dtfield.c | 4 +- > src/acpica/source/compiler/dttable1.c | 217 +++++++++++++++++ > src/acpica/source/compiler/dttable2.c | 26 ++- > src/acpica/source/compiler/dttemplate.h | 94 ++++++++ > src/acpica/source/compiler/dtutils.c | 10 +- > .../source/components/dispatcher/dswexec.c | 2 +- > src/acpica/source/include/acdisasm.h | 22 ++ > src/acpica/source/include/acnames.h | 1 + > src/acpica/source/include/acoutput.h | 2 +- > src/acpica/source/include/acpixf.h | 2 +- > src/acpica/source/include/actbinfo.h | 15 ++ > src/acpica/source/include/actbl1.h | 16 +- > src/acpica/source/include/actbl2.h | 194 ++++++++++++++++ > src/acpica/source/include/actbl3.h | 6 + > 24 files changed, 1200 insertions(+), 29 deletions(-) > > diff --git a/src/acpica/source/common/adisasm.c b/src/acpica/source/common/adisasm.c > index 27a175a6..f549bd5a 100644 > --- a/src/acpica/source/common/adisasm.c > +++ b/src/acpica/source/common/adisasm.c > @@ -478,7 +478,7 @@ AdDisassembleOneTable ( > AcpiOsPrintf (" * ACPI Data Table [%4.4s]\n *\n", > Table->Signature); > AcpiOsPrintf (" * Format: [HexOffset DecimalOffset ByteLength] " > - "FieldName : FieldValue\n */\n\n"); > + "FieldName : FieldValue (in hex)\n */\n\n"); > > AcpiDmDumpDataTable (Table); > fprintf (stderr, "Acpi Data Table [%4.4s] decoded\n", > diff --git a/src/acpica/source/common/ahtable.c b/src/acpica/source/common/ahtable.c > index 80f248d2..d7ce88a9 100644 > --- a/src/acpica/source/common/ahtable.c > +++ b/src/acpica/source/common/ahtable.c > @@ -199,6 +199,7 @@ AcpiAhGetTableInfo ( > */ > const AH_TABLE AcpiGbl_SupportedTables[] = > { > + {ACPI_SIG_AEST, "Arm Error Source Table"}, > {ACPI_SIG_ASF, "Alert Standard Format Table"}, > {ACPI_SIG_BDAT, "BIOS Data ACPI Table"}, > {ACPI_SIG_BERT, "Boot Error Record Table"}, > diff --git a/src/acpica/source/common/dmtable.c b/src/acpica/source/common/dmtable.c > index 7a4e87e1..1fa9ba16 100644 > --- a/src/acpica/source/common/dmtable.c > +++ b/src/acpica/source/common/dmtable.c > @@ -174,6 +174,55 @@ AcpiAhGetTableInfo ( > > /* These tables map a subtable type to a description string */ > > +static const char *AcpiDmAestResourceNames[] = > +{ > + "Cache Resource", > + "TLB Resource", > + "Generic Resource", > + "Unknown Resource Type" /* Reserved */ > +}; > + > +static const char *AcpiDmAestSubnames[] = > +{ > + "Processor Error Node", > + "Memory Error Node", > + "SMMU Error Node", > + "Vendor-defined Error Node", > + "GIC Error Node", > + "Unknown Subtable Type" /* Reserved */ > +}; > + > +static const char *AcpiDmAestCacheNames[] = > +{ > + "Data Cache", > + "Instruction Cache", > + "Unified Cache", > + "Unknown Cache Type" /* Reserved */ > +}; > + > +static const char *AcpiDmAestGicNames[] = > +{ > + "GIC CPU", > + "GIC Distributor", > + "GIC Redistributor", > + "GIC ITS", > + "Unknown GIC Interface Type" /* Reserved */ > +}; > + > +static const char *AcpiDmAestXfaceNames[] = > +{ > + "System Register Interface", > + "Memory Mapped Interface", > + "Unknown Interface Type" /* Reserved */ > +}; > + > +static const char *AcpiDmAestXruptNames[] = > +{ > + "Fault Handling Interrupt", > + "Error Recovery Interrupt", > + "Unknown Interrupt Type" /* Reserved */ > +}; > + > static const char *AcpiDmAsfSubnames[] = > { > "ASF Information", > @@ -533,6 +582,7 @@ static const char *AcpiDmGasAccessWidth[] = > > const ACPI_DMTABLE_DATA AcpiDmTableData[] = > { > + {ACPI_SIG_AEST, NULL, AcpiDmDumpAest, DtCompileAest, TemplateAest}, > {ACPI_SIG_ASF, NULL, AcpiDmDumpAsf, DtCompileAsf, TemplateAsf}, > {ACPI_SIG_BDAT, AcpiDmTableInfoBdat, NULL, NULL, TemplateBdat}, > {ACPI_SIG_BERT, AcpiDmTableInfoBert, NULL, NULL, TemplateBert}, > @@ -1006,6 +1056,10 @@ AcpiDmDumpTable ( > case ACPI_DMT_RGRT: > case ACPI_DMT_SDEV: > case ACPI_DMT_SRAT: > + case ACPI_DMT_AEST: > + case ACPI_DMT_AEST_RES: > + case ACPI_DMT_AEST_XFACE: > + case ACPI_DMT_AEST_XRUPT: > case ACPI_DMT_ASF: > case ACPI_DMT_HESTNTYP: > case ACPI_DMT_FADTPM: > @@ -1035,6 +1089,8 @@ AcpiDmDumpTable ( > break; > > case ACPI_DMT_UINT32: > + case ACPI_DMT_AEST_CACHE: > + case ACPI_DMT_AEST_GIC: > case ACPI_DMT_NAME4: > case ACPI_DMT_SIG: > case ACPI_DMT_LPIT: > @@ -1087,6 +1143,12 @@ AcpiDmDumpTable ( > ByteLength = 128; > break; > > + case ACPI_DMT_WPBT_UNICODE: > + > + ByteLength = SubtableLength; > + CurrentOffset = sizeof (ACPI_TABLE_WPBT); > + break; > + > case ACPI_DMT_UNICODE: > case ACPI_DMT_BUFFER: > case ACPI_DMT_RAW_BUFFER: > @@ -1418,6 +1480,90 @@ AcpiDmDumpTable ( > LastOutputBlankLine = TRUE; > break; > > + case ACPI_DMT_AEST: > + > + /* AEST subtable types */ > + > + Temp8 = *Target; > + if (Temp8 > ACPI_AEST_NODE_TYPE_RESERVED) > + { > + Temp8 = ACPI_AEST_NODE_TYPE_RESERVED; > + } > + > + AcpiOsPrintf (UINT8_FORMAT, *Target, > + AcpiDmAestSubnames[Temp8]); > + break; > + > + case ACPI_DMT_AEST_CACHE: > + > + /* AEST cache resource subtable */ > + > + Temp32 = *Target; > + if (Temp32 > ACPI_AEST_CACHE_RESERVED) > + { > + Temp32 = ACPI_AEST_CACHE_RESERVED; > + } > + > + AcpiOsPrintf (UINT32_FORMAT, *Target, > + AcpiDmAestCacheNames[Temp32]); > + break; > + > + case ACPI_DMT_AEST_GIC: > + > + /* AEST GIC error subtable */ > + > + Temp32 = *Target; > + if (Temp32 > ACPI_AEST_GIC_RESERVED) > + { > + Temp32 = ACPI_AEST_GIC_RESERVED; > + } > + > + AcpiOsPrintf (UINT32_FORMAT, *Target, > + AcpiDmAestGicNames[Temp32]); > + break; > + > + case ACPI_DMT_AEST_RES: > + > + /* AEST resource type subtable */ > + > + Temp8 = *Target; > + if (Temp8 > ACPI_AEST_RESOURCE_RESERVED) > + { > + Temp8 = ACPI_AEST_RESOURCE_RESERVED; > + } > + > + AcpiOsPrintf (UINT8_FORMAT, *Target, > + AcpiDmAestResourceNames[Temp8]); > + break; > + > + case ACPI_DMT_AEST_XFACE: > + > + /* AEST interface structure types */ > + > + Temp8 = *Target; > + if (Temp8 > ACPI_AEST_XFACE_RESERVED) > + { > + Temp8 = ACPI_AEST_XFACE_RESERVED; > + } > + > + AcpiOsPrintf (UINT8_FORMAT, *Target, > + AcpiDmAestXfaceNames[Temp8]); > + break; > + > + case ACPI_DMT_AEST_XRUPT: > + > + /* AEST interrupt structure types */ > + > + Temp8 = *Target; > + if (Temp8 > ACPI_AEST_XRUPT_RESERVED) > + { > + Temp8 = ACPI_AEST_XRUPT_RESERVED; > + } > + > + AcpiOsPrintf (UINT8_FORMAT, *Target, > + AcpiDmAestXruptNames[Temp8]); > + break; > + > case ACPI_DMT_ASF: > > /* ASF subtable types */ > @@ -1704,6 +1850,7 @@ AcpiDmDumpTable ( > break; > > case ACPI_DMT_UNICODE: > + case ACPI_DMT_WPBT_UNICODE: > > if (ByteLength == 0) > { > diff --git a/src/acpica/source/common/dmtbdump1.c b/src/acpica/source/common/dmtbdump1.c > index 8fc53acf..3a97af46 100644 > --- a/src/acpica/source/common/dmtbdump1.c > +++ b/src/acpica/source/common/dmtbdump1.c > @@ -160,6 +160,225 @@ > ACPI_MODULE_NAME ("dmtbdump1") > > > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpAest > + * > + * PARAMETERS: Table - A AEST table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a AEST table > + * > + * NOTE: Assumes the following table structure: > + * For all AEST Error Nodes: > + * 1) An AEST Error Node, followed immediately by: > + * 2) Any node-specific data > + * 3) An Interface Structure (one) > + * 4) A list (array) of Interrupt Structures > + * > + * AEST - ARM Error Source table. Conforms to: > + * ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document Sep 2020 > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpAest ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + UINT32 Offset = sizeof (ACPI_TABLE_HEADER); > + ACPI_AEST_HEADER *Subtable; > + ACPI_AEST_HEADER *NodeHeader; > + ACPI_AEST_PROCESSOR *ProcessorSubtable; > + ACPI_DMTABLE_INFO *InfoTable; > + ACPI_SIZE Length; > + UINT8 Type; > + > + > + /* Very small, generic main table. AEST consists of mostly subtables */ > + > + while (Offset < Table->Length) > + { > + NodeHeader = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset); > + > + /* Dump the common error node (subtable) header */ > + > + Status = AcpiDmDumpTable (Table->Length, Offset, NodeHeader, > + NodeHeader->Length, AcpiDmTableInfoAestHdr); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + Type = NodeHeader->Type; > + > + /* Setup the node-specific subtable based on the header Type field */ > + > + switch (Type) > + { > + case ACPI_AEST_PROCESSOR_ERROR_NODE: > + InfoTable = AcpiDmTableInfoAestProcError; > + Length = sizeof (ACPI_AEST_PROCESSOR); > + break; > + > + case ACPI_AEST_MEMORY_ERROR_NODE: > + InfoTable = AcpiDmTableInfoAestMemError; > + Length = sizeof (ACPI_AEST_MEMORY); > + break; > + > + case ACPI_AEST_SMMU_ERROR_NODE: > + InfoTable = AcpiDmTableInfoAestSmmuError; > + Length = sizeof (ACPI_AEST_SMMU); > + break; > + > + case ACPI_AEST_VENDOR_ERROR_NODE: > + InfoTable = AcpiDmTableInfoAestVendorError; > + Length = sizeof (ACPI_AEST_VENDOR); > + break; > + > + case ACPI_AEST_GIC_ERROR_NODE: > + InfoTable = AcpiDmTableInfoAestGicError; > + Length = sizeof (ACPI_AEST_GIC); > + break; > + > + /* Error case below */ > + default: > + > + AcpiOsPrintf ("\n**** Unknown AEST Error Subtable type 0x%X\n", > + Type); > + return; > + } > + > + /* Point past the common header (to the node-specific data) */ > + > + Offset += sizeof (ACPI_AEST_HEADER); > + Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset); > + AcpiOsPrintf ("\n"); > + > + /* Dump the node-specific subtable */ > + > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Length, > + InfoTable); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + AcpiOsPrintf ("\n"); > + > + if (Type == ACPI_AEST_PROCESSOR_ERROR_NODE) > + { > + /* > + * Special handling for PROCESSOR_ERROR_NODE subtables > + * (to handle the Resource Substructure via the ResourceType > + * field). > + */ > + > + /* Point past the node-specific data */ > + > + Offset += Length; > + ProcessorSubtable = ACPI_CAST_PTR (ACPI_AEST_PROCESSOR, Subtable); > + > + switch (ProcessorSubtable->ResourceType) > + { > + /* Setup the Resource Substructure subtable */ > + > + case ACPI_AEST_CACHE_RESOURCE: > + InfoTable = AcpiDmTableInfoAestCacheRsrc; > + Length = sizeof (ACPI_AEST_PROCESSOR_CACHE); > + break; > + > + case ACPI_AEST_TLB_RESOURCE: > + InfoTable = AcpiDmTableInfoAestTlbRsrc; > + Length = sizeof (ACPI_AEST_PROCESSOR_TLB); > + break; > + > + 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 */ > + default: > + AcpiOsPrintf ("\n**** Unknown AEST Processor Resource type 0x%X\n", > + ProcessorSubtable->ResourceType); > + return; > + } > + > + ProcessorSubtable = ACPI_ADD_PTR (ACPI_AEST_PROCESSOR, Table, > + Offset); > + > + /* Dump the resource substructure subtable */ > + > + Status = AcpiDmDumpTable (Table->Length, Offset, ProcessorSubtable, > + Length, InfoTable); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + AcpiOsPrintf ("\n"); > + } > + > + /* Point past the resource substructure or the node-specific data */ > + > + Offset += Length; > + > + /* Dump the interface structure, required to be present */ > + > + Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset); > + if (Subtable->Type >= ACPI_AEST_XFACE_RESERVED) > + { > + AcpiOsPrintf ("\n**** Unknown AEST Node Interface type 0x%X\n", > + Subtable->Type); > + return; > + } > + > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > + sizeof (ACPI_AEST_NODE_INTERFACE), AcpiDmTableInfoAestXface); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Point past the interface structure */ > + > + AcpiOsPrintf ("\n"); > + Offset += sizeof (ACPI_AEST_NODE_INTERFACE); > + > + /* Dump the entire interrupt structure array, if present */ > + > + if (NodeHeader->NodeInterruptOffset) > + { > + Length = NodeHeader->NodeInterruptCount; > + Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset); > + > + while (Length) > + { > + /* Dump the interrupt structure */ > + > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > + sizeof (ACPI_AEST_NODE_INTERRUPT), > + AcpiDmTableInfoAestXrupt); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Point to the next interrupt structure */ > + > + Offset += sizeof (ACPI_AEST_NODE_INTERRUPT); > + Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset); > + Length--; > + AcpiOsPrintf ("\n"); > + } > + } > + } > +} > + > + > /******************************************************************************* > * > * FUNCTION: AcpiDmDumpAsf > diff --git a/src/acpica/source/common/dmtbdump3.c b/src/acpica/source/common/dmtbdump3.c > index e81a703b..981a51e0 100644 > --- a/src/acpica/source/common/dmtbdump3.c > +++ b/src/acpica/source/common/dmtbdump3.c > @@ -681,7 +681,7 @@ AcpiDmDumpViot ( > ACPI_TABLE_VIOT *Viot; > ACPI_VIOT_HEADER *ViotHeader; > UINT16 Length; > - UINT16 Offset; > + UINT32 Offset; > ACPI_DMTABLE_INFO *InfoTable; > > /* Main table */ > @@ -833,13 +833,12 @@ AcpiDmDumpWpbt ( > { > ACPI_STATUS Status; > ACPI_TABLE_WPBT *Subtable; > - UINT32 Length = Table->Length; > UINT16 ArgumentsLength; > > > /* Dump the main table */ > > - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoWpbt); > + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoWpbt); > if (ACPI_FAILURE (Status)) > { > return; > @@ -850,8 +849,11 @@ AcpiDmDumpWpbt ( > Subtable = ACPI_CAST_PTR (ACPI_TABLE_WPBT, Table); > ArgumentsLength = Subtable->ArgumentsLength; > > - /* Dump the arguments buffer */ > + /* Dump the arguments buffer if present */ > > - (void) AcpiDmDumpTable (Table->Length, 0, Table, ArgumentsLength, > - AcpiDmTableInfoWpbt0); > + if (ArgumentsLength) > + { > + (void) AcpiDmDumpTable (Table->Length, 0, Table, ArgumentsLength, > + AcpiDmTableInfoWpbt0); > + } > } > diff --git a/src/acpica/source/common/dmtbinfo1.c b/src/acpica/source/common/dmtbinfo1.c > index fbf3980d..b30cafa9 100644 > --- a/src/acpica/source/common/dmtbinfo1.c > +++ b/src/acpica/source/common/dmtbinfo1.c > @@ -191,6 +191,144 @@ > */ > > > +/******************************************************************************* > + * > + * AEST - ARM Error Source table. Conforms to: > + * ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document Sep 2020 > + * > + ******************************************************************************/ > + > +/* Common Subtable header (one per Subtable) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAestHdr[] = > +{ > + {ACPI_DMT_AEST, ACPI_AESTH_OFFSET (Type), "Subtable Type", 0}, > + {ACPI_DMT_UINT16, ACPI_AESTH_OFFSET (Length), "Length", DT_LENGTH}, > + {ACPI_DMT_UINT8, ACPI_AESTH_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_AESTH_OFFSET (NodeSpecificOffset), "Node Specific Offset", 0}, > + {ACPI_DMT_UINT32, ACPI_AESTH_OFFSET (NodeInterfaceOffset), "Node Interface Offset", 0}, > + {ACPI_DMT_UINT32, ACPI_AESTH_OFFSET (NodeInterruptOffset), "Node Interrupt Array Offset", 0}, > + {ACPI_DMT_UINT32, ACPI_AESTH_OFFSET (NodeInterruptCount), "Node Interrupt Array Count", 0}, > + {ACPI_DMT_UINT64, ACPI_AESTH_OFFSET (TimestampRate), "Timestamp Rate", 0}, > + {ACPI_DMT_UINT64, ACPI_AESTH_OFFSET (Reserved1), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_AESTH_OFFSET (ErrorInjectionRate), "Error Injection Rate", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* > + * AEST subtables (nodes) > + */ > + > +/* 0: Processor Error */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAestProcError[] = > +{ > + {ACPI_DMT_UINT32, ACPI_AEST0_OFFSET (ProcessorId), "Processor ID", 0}, > + {ACPI_DMT_AEST_RES, ACPI_AEST0_OFFSET (ResourceType), "Resource Type", 0}, > + {ACPI_DMT_UINT8, ACPI_AEST0_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT8, ACPI_AEST0_OFFSET (Flags), "Flags (decoded Below)", 0}, > + {ACPI_DMT_FLAG0, ACPI_AEST0_FLAG_OFFSET (Flags, 0), "Global", 0}, > + {ACPI_DMT_FLAG1, ACPI_AEST0_FLAG_OFFSET (Flags, 0), "Shared", 0}, > + {ACPI_DMT_UINT8, ACPI_AEST0_OFFSET (Revision), "Revision", 0}, > + {ACPI_DMT_UINT64, ACPI_AEST0_OFFSET (ProcessorAffinity), "Processor Affinity Structure", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 0RT: Processor Cache Resource */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAestCacheRsrc[] = > +{ > + {ACPI_DMT_UINT32, ACPI_AEST0A_OFFSET (CacheReference), "Cache Reference", 0}, > + {ACPI_DMT_UINT32, ACPI_AEST0A_OFFSET (Reserved), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 1RT: ProcessorTLB Resource */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAestTlbRsrc[] = > +{ > + {ACPI_DMT_UINT32, ACPI_AEST0B_OFFSET (TlbLevel), "TLB Level", 0}, > + {ACPI_DMT_UINT32, ACPI_AEST0B_OFFSET (Reserved), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 2RT: Processor Generic Resource */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAestGenRsrc[] = > +{ > + {ACPI_DMT_RAW_BUFFER, 0, "Resource", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 1: Memory Error */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAestMemError[] = > +{ > + {ACPI_DMT_UINT32, ACPI_AEST1_OFFSET (SratProximityDomain), "Srat Proximity Domain", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 2: Smmu Error */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAestSmmuError[] = > +{ > + {ACPI_DMT_UINT32, ACPI_AEST2_OFFSET (IortNodeReference), "Iort Node Reference", 0}, > + {ACPI_DMT_UINT32, ACPI_AEST2_OFFSET (SubcomponentReference), "Subcomponent Reference", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 3: Vendor Defined */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAestVendorError[] = > +{ > + {ACPI_DMT_UINT32, ACPI_AEST3_OFFSET (AcpiHid), "ACPI HID", 0}, > + {ACPI_DMT_UINT32, ACPI_AEST3_OFFSET (AcpiUid), "ACPI UID", 0}, > + {ACPI_DMT_BUF16, ACPI_AEST3_OFFSET (VendorSpecificData), "Vendor Specific Data", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 4: Gic Error */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAestGicError[] = > +{ > + {ACPI_DMT_AEST_GIC, ACPI_AEST4_OFFSET (InterfaceType), "GIC Interface Type", 0}, > + {ACPI_DMT_UINT32, ACPI_AEST4_OFFSET (InstanceId), "Instance ID", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* AestXface: Node Interface Structure */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAestXface[] = > +{ > + {ACPI_DMT_AEST_XFACE, ACPI_AEST0D_OFFSET (Type), "Interface Type", 0}, > + {ACPI_DMT_UINT24, ACPI_AEST0D_OFFSET (Reserved[0]), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_AEST0D_OFFSET (Flags), "Flags (decoded below)", 0}, > + {ACPI_DMT_FLAG0, ACPI_AEST0D_FLAG_OFFSET (Flags, 0), "Shared Interface", 0}, > + {ACPI_DMT_FLAG1, ACPI_AEST0D_FLAG_OFFSET (Flags, 0), "Clear MISCx Registers", 0}, > + {ACPI_DMT_UINT64, ACPI_AEST0D_OFFSET (Address), "Address", 0}, > + {ACPI_DMT_UINT32, ACPI_AEST0D_OFFSET (ErrorRecordIndex), "Error Record Index", 0}, > + {ACPI_DMT_UINT32, ACPI_AEST0D_OFFSET (ErrorRecordCount), "Error Record Count", 0}, > + {ACPI_DMT_UINT64, ACPI_AEST0D_OFFSET (ErrorRecordImplemented),"Error Record Implemented", 0}, > + {ACPI_DMT_UINT64, ACPI_AEST0D_OFFSET (ErrorStatusReporting), "Error Status Reporting", 0}, > + {ACPI_DMT_UINT64, ACPI_AEST0D_OFFSET (AddressingMode), "Addressing Mode", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* AestXrupt: Node Interrupt Structure */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAestXrupt[] = > +{ > + {ACPI_DMT_AEST_XRUPT, ACPI_AEST0E_OFFSET (Type), "Interrupt Type", 0}, > + {ACPI_DMT_UINT16, ACPI_AEST0E_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT8, ACPI_AEST0E_OFFSET (Flags), "Flags (decoded below)", 0}, > + {ACPI_DMT_FLAG0, ACPI_AEST0E_FLAG_OFFSET (Flags, 0), "Level Triggered", 0}, > + {ACPI_DMT_UINT32, ACPI_AEST0E_OFFSET (Gsiv), "Gsiv", 0}, > + {ACPI_DMT_UINT8, ACPI_AEST0E_OFFSET (IortId), "IortId", 0}, > + {ACPI_DMT_UINT24, ACPI_AEST0E_OFFSET (Reserved1[0]), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > /******************************************************************************* > * > * ASF - Alert Standard Format table (Signature "ASF!") > diff --git a/src/acpica/source/common/dmtbinfo3.c b/src/acpica/source/common/dmtbinfo3.c > index b0435019..e573676a 100644 > --- a/src/acpica/source/common/dmtbinfo3.c > +++ b/src/acpica/source/common/dmtbinfo3.c > @@ -759,7 +759,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt[] = > > ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt0[] = > { > - {ACPI_DMT_UNICODE, sizeof (ACPI_TABLE_WPBT), "Command-line Arguments", 0}, > + {ACPI_DMT_WPBT_UNICODE, ACPI_WPBT2_OFFSET (UnicodeString), "Command-line Arguments", DT_DESCRIBES_OPTIONAL}, > ACPI_DMT_TERMINATOR > }; > > @@ -834,6 +834,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoGeneric[][2] = > ACPI_DM_GENERIC_ENTRY (ACPI_DMT_STRING, "String"), > ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UNICODE, "Unicode"), > ACPI_DM_GENERIC_ENTRY (ACPI_DMT_BUFFER, "Buffer"), > + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_BUF16, "BUF16"), > ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UUID, "GUID"), > ACPI_DM_GENERIC_ENTRY (ACPI_DMT_STRING, "DevicePath"), > ACPI_DM_GENERIC_ENTRY (ACPI_DMT_LABEL, "Label"), > diff --git a/src/acpica/source/compiler/aslmethod.c b/src/acpica/source/compiler/aslmethod.c > index e9aa7f2d..5bec65e8 100644 > --- a/src/acpica/source/compiler/aslmethod.c > +++ b/src/acpica/source/compiler/aslmethod.c > @@ -205,6 +205,10 @@ MtMethodAnalysisWalkBegin ( > UINT8 ActualArgs = 0; > BOOLEAN HidExists; > BOOLEAN AdrExists; > + BOOLEAN PrsExists; > + BOOLEAN CrsExists; > + BOOLEAN SrsExists; > + BOOLEAN DisExists; > > > /* Build cross-reference output file if requested */ > @@ -536,8 +540,8 @@ MtMethodAnalysisWalkBegin ( > > if (!HidExists && !AdrExists) > { > - AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > - "Device object requires a _HID or _ADR in same scope"); > + AslError (ASL_ERROR, ASL_MSG_MISSING_DEPENDENCY, Op, > + "Device object requires a _HID or _ADR"); > } > else if (HidExists && AdrExists) > { > @@ -549,6 +553,81 @@ MtMethodAnalysisWalkBegin ( > AslError (ASL_WARNING, ASL_MSG_MULTIPLE_TYPES, Op, > "Device object requires either a _HID or _ADR, but not both"); > } > + > + /* > + * Check usage of _CRS, _DIS, _PRS, and _SRS objects (July 2021). > + * > + * Under the Device Object: > + * > + * 1) If _DIS is present, must have a _CRS, _PRS, and _SRS > + * 2) If _PRS is present, must have a _CRS and _SRS > + * 3) If _SRS is present, must have a _CRS and _PRS > + */ > + CrsExists = ApFindNameInDeviceTree (METHOD_NAME__CRS, Op); > + DisExists = ApFindNameInDeviceTree (METHOD_NAME__DIS, Op); > + PrsExists = ApFindNameInDeviceTree (METHOD_NAME__PRS, Op); > + SrsExists = ApFindNameInDeviceTree (METHOD_NAME__SRS, Op); > + > + /* 1) If _DIS is present, must have a _CRS, _PRS, and _SRS */ > + > + if (DisExists) > + { > + if (!CrsExists) > + { > + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > + "_DIS is missing a _CRS, requires a _CRS, _PRS, and a _SRS"); > + } > + > + if (!PrsExists) > + { > + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > + "_DIS is missing a _PRS, requires a _CRS, _PRS, and a _SRS"); > + } > + > + if (!SrsExists) > + { > + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > + "_DIS is missing a _SRS, requires a _CRS, _PRS, and a _SRS"); > + } > + } > + > + /* 2) If _PRS is present, must have a _CRS and _SRS */ > + > + if (PrsExists) > + { > + if (!CrsExists) > + { > + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > + "_PRS is missing a _CRS, requires a _CRS and a _SRS"); > + } > + > + if (!SrsExists) > + { > + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > + "_PRS is missing a _SRS, requires a _CRS and a _SRS"); > + } > + } > + > + /* 3) If _SRS is present, must have a _CRS and _PRS */ > + > + if (SrsExists) > + { > + if (!CrsExists) > + { > + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > + "_SRS is missing a _CRS, requires a _CRS and a _PRS"); > + } > + if (!PrsExists) > + { > + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > + "_SRS is missing a _PRS, requires a _CRS and a _PRS"); > + } > + if (!DisExists) > + { > + AslError (ASL_REMARK, ASL_MSG_MISSING_DEPENDENCY, Op, > + "_SRS is missing a _DIS"); > + } > + } > break; > > case PARSEOP_EVENT: > diff --git a/src/acpica/source/compiler/aslutils.c b/src/acpica/source/compiler/aslutils.c > index 44631957..c4325c3b 100644 > --- a/src/acpica/source/compiler/aslutils.c > +++ b/src/acpica/source/compiler/aslutils.c > @@ -434,18 +434,20 @@ UtDisplaySupportedTables ( > > > printf ("\nACPI tables supported by iASL version %8.8X:\n" > - " (Compiler, Disassembler, Template Generator)\n\n", > + " (Compiler, Disassembler, Template Generator)\n", > ACPI_CA_VERSION); > > /* All ACPI tables with the common table header */ > > - printf ("\n Supported ACPI tables:\n"); > + printf ("\nKnown/Supported ACPI tables:\n"); > for (TableData = AcpiGbl_SupportedTables, i = 1; > TableData->Signature; TableData++, i++) > { > printf ("%8u) %s %s\n", i, > TableData->Signature, TableData->Description); > } > + > + printf ("\nTotal %u ACPI tables\n\n", i-1); > } > > > diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h > index 4f966808..6d3dbefa 100644 > --- a/src/acpica/source/compiler/dtcompiler.h > +++ b/src/acpica/source/compiler/dtcompiler.h > @@ -565,6 +565,10 @@ ACPI_STATUS > DtCompileRsdp ( > DT_FIELD **PFieldList); > > +ACPI_STATUS > +DtCompileAest ( > + void **PFieldList); > + > ACPI_STATUS > DtCompileAsf ( > void **PFieldList); > @@ -753,6 +757,7 @@ DtGetGenericTableInfo ( > > /* ACPI Table templates */ > > +extern const unsigned char TemplateAest[]; > extern const unsigned char TemplateAsf[]; > extern const unsigned char TemplateBoot[]; > extern const unsigned char TemplateBdat[]; > diff --git a/src/acpica/source/compiler/dtfield.c b/src/acpica/source/compiler/dtfield.c > index 729791d7..f4c71147 100644 > --- a/src/acpica/source/compiler/dtfield.c > +++ b/src/acpica/source/compiler/dtfield.c > @@ -434,14 +434,14 @@ DtCompileInteger ( > { > if (Value != 1) > { > - DtError (ASL_WARNING, ASL_MSG_RESERVED_FIELD, Field, > + DtError (ASL_ERROR, ASL_MSG_RESERVED_FIELD, Field, > "Must be one, setting to one"); > Value = 1; > } > } > else if (Value != 0) > { > - DtError (ASL_WARNING, ASL_MSG_RESERVED_FIELD, Field, > + DtError (ASL_ERROR, ASL_MSG_RESERVED_FIELD, Field, > "Must be zero, setting to zero"); > Value = 0; > } > diff --git a/src/acpica/source/compiler/dttable1.c b/src/acpica/source/compiler/dttable1.c > index bf710e31..2e6a8569 100644 > --- a/src/acpica/source/compiler/dttable1.c > +++ b/src/acpica/source/compiler/dttable1.c > @@ -170,6 +170,223 @@ static ACPI_DMTABLE_INFO TableInfoDmarPciPath[] = > }; > > > +/****************************************************************************** > + * > + * FUNCTION: DtCompileAest > + * > + * PARAMETERS: List - Current field list pointer > + * > + * RETURN: Status > + * > + * DESCRIPTION: Compile AEST. > + * > + * NOTE: Assumes the following table structure: > + * For all AEST Error Nodes: > + * 1) An AEST Error Node, followed immediately by: > + * 2) Any node-specific data > + * 3) An Interface Structure (one) > + * 4) A list (array) of Interrupt Structures, the count as specified > + * in the NodeInterruptCount field of the Error Node header. > + * > + * AEST - ARM Error Source table. Conforms to: > + * ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document Sep 2020 > + * > + *****************************************************************************/ > + > +ACPI_STATUS > +DtCompileAest ( > + void **List) > +{ > + ACPI_AEST_HEADER *ErrorNodeHeader; > + ACPI_AEST_PROCESSOR *AestProcessor; > + DT_SUBTABLE *Subtable; > + DT_SUBTABLE *ParentTable; > + ACPI_DMTABLE_INFO *InfoTable; > + ACPI_STATUS Status; > + UINT32 i; > + UINT32 Offset; > + DT_FIELD **PFieldList = (DT_FIELD **) List; > + > + > + while (*PFieldList) > + { > + /* Compile the common error node header */ > + > + Status = DtCompileTable (PFieldList, AcpiDmTableInfoAestHdr, > + &Subtable); > + if (ACPI_FAILURE (Status)) > + { > + return (Status); > + } > + > + ParentTable = DtPeekSubtable (); > + DtInsertSubtable (ParentTable, Subtable); > + > + /* Everything past the error node header will be a subtable */ > + > + DtPushSubtable (Subtable); > + > + /* > + * Compile the node-specific structure (Based on the error > + * node header Type field) > + */ > + ErrorNodeHeader = ACPI_CAST_PTR (ACPI_AEST_HEADER, Subtable->Buffer); > + > + /* Point past the common error node header */ > + > + Offset = sizeof (ACPI_AEST_HEADER); > + ErrorNodeHeader->NodeSpecificOffset = Offset; > + > + /* Decode the error node type */ > + > + switch (ErrorNodeHeader->Type) > + { > + case ACPI_AEST_PROCESSOR_ERROR_NODE: > + > + InfoTable = AcpiDmTableInfoAestProcError; > + break; > + > + case ACPI_AEST_MEMORY_ERROR_NODE: > + > + InfoTable = AcpiDmTableInfoAestMemError; > + break; > + > + case ACPI_AEST_SMMU_ERROR_NODE: > + > + InfoTable = AcpiDmTableInfoAestSmmuError; > + break; > + > + case ACPI_AEST_VENDOR_ERROR_NODE: > + > + InfoTable = AcpiDmTableInfoAestVendorError; > + break; > + > + case ACPI_AEST_GIC_ERROR_NODE: > + > + InfoTable = AcpiDmTableInfoAestGicError; > + break; > + > + /* Error case below */ > + default: > + AcpiOsPrintf ("Unknown AEST Subtable Type: %X\n", > + ErrorNodeHeader->Type); > + return (AE_ERROR); > + } > + > + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); > + if (ACPI_FAILURE (Status)) > + { > + return (Status); > + } > + > + /* Point past the node-specific structure */ > + > + Offset += Subtable->Length; > + ErrorNodeHeader->NodeInterfaceOffset = Offset; > + > + ParentTable = DtPeekSubtable (); > + DtInsertSubtable (ParentTable, Subtable); > + > + /* Compile any additional node-specific substructures */ > + > + if (ErrorNodeHeader->Type == ACPI_AEST_PROCESSOR_ERROR_NODE) > + { > + /* > + * Special handling for PROCESSOR_ERROR_NODE subtables > + * (to handle the Resource Substructure via the ResourceType > + * field). > + */ > + AestProcessor = ACPI_CAST_PTR (ACPI_AEST_PROCESSOR, > + Subtable->Buffer); > + > + switch (AestProcessor->ResourceType) > + { > + case ACPI_AEST_CACHE_RESOURCE: > + > + InfoTable = AcpiDmTableInfoAestCacheRsrc; > + break; > + > + case ACPI_AEST_TLB_RESOURCE: > + > + InfoTable = AcpiDmTableInfoAestTlbRsrc; > + break; > + > + case ACPI_AEST_GENERIC_RESOURCE: > + > + InfoTable = AcpiDmTableInfoAestGenRsrc; > + AcpiOsPrintf ("Generic Resource Type (%X) is not supported at this time\n", > + AestProcessor->ResourceType); > + return (AE_ERROR); > + > + /* Error case below */ > + default: > + AcpiOsPrintf ("Unknown AEST Processor Resource Type: %X\n", > + AestProcessor->ResourceType); > + return (AE_ERROR); > + } > + > + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); > + if (ACPI_FAILURE (Status)) > + { > + return (Status); > + } > + > + /* Point past the resource substructure subtable */ > + > + Offset += Subtable->Length; > + ErrorNodeHeader->NodeInterfaceOffset = Offset; > + > + ParentTable = DtPeekSubtable (); > + DtInsertSubtable (ParentTable, Subtable); > + } > + > + /* Compile the (required) node interface structure */ > + > + Status = DtCompileTable (PFieldList, AcpiDmTableInfoAestXface, > + &Subtable); > + if (ACPI_FAILURE (Status)) > + { > + return (Status); > + } > + > + ErrorNodeHeader->NodeInterruptOffset = 0; > + ParentTable = DtPeekSubtable (); > + DtInsertSubtable (ParentTable, Subtable); > + > + /* Compile each of the node interrupt structures */ > + > + if (ErrorNodeHeader->NodeInterruptCount) > + { > + /* Point to the first interrupt structure */ > + > + Offset += Subtable->Length; > + ErrorNodeHeader->NodeInterruptOffset = Offset; > + } > + > + /* Compile each of the interrupt structures */ > + > + for (i = 0; i < ErrorNodeHeader->NodeInterruptCount; i++) > + { > + Status = DtCompileTable (PFieldList, AcpiDmTableInfoAestXrupt, > + &Subtable); > + if (ACPI_FAILURE (Status)) > + { > + return (Status); > + } > + > + ParentTable = DtPeekSubtable (); > + DtInsertSubtable (ParentTable, Subtable); > + } > + > + /* Prepare for the next AEST Error node */ > + > + DtPopSubtable (); > + } > + > + return (AE_OK); > +} > + > + > /****************************************************************************** > * > * FUNCTION: DtCompileAsf > diff --git a/src/acpica/source/compiler/dttable2.c b/src/acpica/source/compiler/dttable2.c > index 3a0d8a22..fb41ac87 100644 > --- a/src/acpica/source/compiler/dttable2.c > +++ b/src/acpica/source/compiler/dttable2.c > @@ -2678,13 +2678,11 @@ DtCompileWpbt ( > DT_SUBTABLE *ParentTable; > ACPI_TABLE_WPBT *Table; > ACPI_STATUS Status; > - UINT16 Length; > > > /* Compile the main table */ > > - Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt, > - &Subtable); > + Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -2692,11 +2690,23 @@ DtCompileWpbt ( > > ParentTable = DtPeekSubtable (); > DtInsertSubtable (ParentTable, Subtable); > + Table = ACPI_CAST_PTR (ACPI_TABLE_WPBT, ParentTable->Buffer); > + > + /* > + * Exit now if there are no arguments specified. This is indicated by: > + * The "Command-line Arguments" field has not been specified (if specified, > + * it will be the last field in the field list -- after the main table). > + * Set the Argument Length in the main table to zero. > + */ > + if (!*PFieldList) > + { > + Table->ArgumentsLength = 0; > + return (AE_OK); > + } > > /* Compile the argument list subtable */ > > - Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt0, > - &Subtable); > + Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt0, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -2704,11 +2714,7 @@ DtCompileWpbt ( > > /* Extract the length of the Arguments buffer, insert into main table */ > > - Length = (UINT16) Subtable->TotalLength; > - Table = ACPI_CAST_PTR (ACPI_TABLE_WPBT, ParentTable->Buffer); > - Table->ArgumentsLength = Length; > - > - ParentTable = DtPeekSubtable (); > + Table->ArgumentsLength = (UINT16) Subtable->TotalLength; > DtInsertSubtable (ParentTable, Subtable); > return (AE_OK); > } > diff --git a/src/acpica/source/compiler/dttemplate.h b/src/acpica/source/compiler/dttemplate.h > index 224a6a11..24c8c6f9 100644 > --- a/src/acpica/source/compiler/dttemplate.h > +++ b/src/acpica/source/compiler/dttemplate.h > @@ -155,6 +155,100 @@ > > /* Templates for ACPI data tables */ > > +const unsigned char TemplateAest[] = > +{ > + 0x41,0x45,0x53,0x54,0xCC,0x02,0x00,0x00, /* 00000000 "AEST...." */ > + 0x01,0x2A,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 ".*INTEL " */ > + 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ > + 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ > + 0x04,0x06,0x21,0x20,0x00,0x80,0x00,0x00, /* 00000020 "..! ...." */ > + 0x2C,0x00,0x00,0x00,0x44,0x00,0x00,0x00, /* 00000028 ",...D..." */ > + 0x74,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000030 "t......." */ > + 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 00000038 "....gE#." */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000048 "........" */ > + 0xCD,0xFE,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000050 "........" */ > + 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 00000058 "....gE#." */ > + 0x33,0x33,0x22,0x22,0x00,0x00,0x00,0x00, /* 00000060 "33""...." */ > + 0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, /* 00000068 "........" */ > + 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 00000070 "....gE#." */ > + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000078 "........" */ > + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000088 "........" */ > + 0x11,0x11,0x11,0x01,0x00,0x00,0x00,0x00, /* 00000090 "........" */ > + 0x01,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x78, /* 00000098 ".......x" */ > + 0x56,0x00,0x00,0x00,0x00,0x74,0x00,0x00, /* 000000A0 "V....t.." */ > + 0x2C,0x00,0x00,0x00,0x44,0x00,0x00,0x00, /* 000000A8 ",...D..." */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B0 "........" */ > + 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 000000B8 "....gE#." */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000C0 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000C8 "........" */ > + 0x11,0x11,0x00,0x00,0x01,0x00,0x01,0x00, /* 000000D0 "........" */ > + 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 000000D8 "....gE#." */ > + 0x67,0x67,0x67,0x67,0x00,0x00,0x00,0x00, /* 000000E0 "gggg...." */ > + 0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, /* 000000E8 "........" */ > + 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 000000F0 "....gE#." */ > + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000000F8 "........" */ > + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000100 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000108 "........" */ > + 0x11,0x11,0x11,0x01,0x00,0x00,0x00,0x00, /* 00000110 "........" */ > + 0x01,0x60,0x00,0x00,0x2C,0x00,0x00,0x00, /* 00000118 ".`..,..." */ > + 0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000120 "0......." */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000128 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000130 "........" */ > + 0x00,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89, /* 00000138 "........" */ > + 0x67,0x45,0x23,0x01,0xAA,0xAA,0x00,0x00, /* 00000140 "gE#....." */ > + 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000148 "........" */ > + 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 00000150 "....gE#." */ > + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000158 "........" */ > + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000160 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000168 "........" */ > + 0x11,0x11,0x11,0x01,0x00,0x00,0x00,0x00, /* 00000170 "........" */ > + 0x02,0x64,0x00,0x00,0x2C,0x00,0x00,0x00, /* 00000178 ".d..,..." */ > + 0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000180 "4......." */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000188 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000190 "........" */ > + 0x00,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89, /* 00000198 "........" */ > + 0x67,0x45,0x23,0x01,0x55,0x55,0x55,0x55, /* 000001A0 "gE#.UUUU" */ > + 0x66,0x66,0x66,0x66,0x01,0x00,0x00,0x00, /* 000001A8 "ffff...." */ > + 0x03,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89, /* 000001B0 "........" */ > + 0x67,0x45,0x23,0x01,0x00,0x00,0x00,0x00, /* 000001B8 "gE#....." */ > + 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000001C0 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001C8 "........" */ > + 0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x01, /* 000001D0 "........" */ > + 0x00,0x00,0x00,0x00,0x03,0x74,0x00,0x00, /* 000001D8 ".....t.." */ > + 0x2C,0x00,0x00,0x00,0x44,0x00,0x00,0x00, /* 000001E0 ",...D..." */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001E8 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001F0 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001F8 "........" */ > + 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 00000200 "....gE#." */ > + 0x33,0x33,0x33,0x33,0x44,0x44,0x44,0x44, /* 00000208 "3333DDDD" */ > + 0x12,0x23,0x34,0x45,0x56,0x67,0x78,0x89, /* 00000210 ".#4EVgx." */ > + 0x9A,0xAB,0xBC,0xCD,0xDE,0xEF,0xFF,0x55, /* 00000218 ".......U" */ > + 0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, /* 00000220 "........" */ > + 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 00000228 "....gE#." */ > + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000230 "........" */ > + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000238 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000240 "........" */ > + 0x11,0x11,0x11,0x01,0x00,0x00,0x00,0x00, /* 00000248 "........" */ > + 0x04,0x7C,0x00,0x00,0x2C,0x00,0x00,0x00, /* 00000250 ".|..,..." */ > + 0x34,0x00,0x00,0x00,0x64,0x00,0x00,0x00, /* 00000258 "4...d..." */ > + 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000260 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000268 "........" */ > + 0x00,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89, /* 00000270 "........" */ > + 0x67,0x45,0x23,0x01,0x03,0x00,0x00,0x00, /* 00000278 "gE#....." */ > + 0x88,0x88,0x77,0x77,0x00,0x00,0x00,0x00, /* 00000280 "..ww...." */ > + 0x03,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89, /* 00000288 "........" */ > + 0x67,0x45,0x23,0x01,0x00,0x00,0x00,0x00, /* 00000290 "gE#....." */ > + 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000298 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000002A0 "........" */ > + 0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x01, /* 000002A8 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000002B0 "........" */ > + 0xBB,0xBB,0xAA,0xAA,0xCC,0x00,0x00,0x00, /* 000002B8 "........" */ > + 0x01,0x00,0x00,0x01,0xEF,0xCD,0xAB,0x78, /* 000002C0 ".......x" */ > + 0x56,0x00,0x00,0x00 /* 000002C8 "V..." */ > +}; > + > const unsigned char TemplateAsf[] = > { > 0x41,0x53,0x46,0x21,0x72,0x00,0x00,0x00, /* 00000000 "ASF!r..." */ > diff --git a/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c > index ba454b31..7d706da6 100644 > --- a/src/acpica/source/compiler/dtutils.c > +++ b/src/acpica/source/compiler/dtutils.c > @@ -452,6 +452,7 @@ DtGetFieldType ( > break; > > case ACPI_DMT_UNICODE: > + case ACPI_DMT_WPBT_UNICODE: > > Type = DT_FIELD_TYPE_UNICODE; > break; > @@ -586,6 +587,10 @@ DtGetFieldLength ( > case ACPI_DMT_RGRT: > case ACPI_DMT_SDEV: > case ACPI_DMT_SRAT: > + case ACPI_DMT_AEST: > + case ACPI_DMT_AEST_RES: > + case ACPI_DMT_AEST_XFACE: > + case ACPI_DMT_AEST_XRUPT: > case ACPI_DMT_ASF: > case ACPI_DMT_HESTNTYP: > case ACPI_DMT_FADTPM: > @@ -616,6 +621,8 @@ DtGetFieldLength ( > break; > > case ACPI_DMT_UINT32: > + case ACPI_DMT_AEST_CACHE: > + case ACPI_DMT_AEST_GIC: > case ACPI_DMT_NAME4: > case ACPI_DMT_SIG: > case ACPI_DMT_LPIT: > @@ -734,12 +741,13 @@ DtGetFieldLength ( > break; > > case ACPI_DMT_UNICODE: > + case ACPI_DMT_WPBT_UNICODE: > > Value = DtGetFieldValue (Field); > > /* TBD: error if Value is NULL? (as below?) */ > > - ByteLength = (strlen (Value) + 1) * sizeof(UINT16); > + ByteLength = (strlen (Value) + 1) * sizeof (UINT16); > break; > > default: > diff --git a/src/acpica/source/components/dispatcher/dswexec.c b/src/acpica/source/components/dispatcher/dswexec.c > index addc06e1..636067bf 100644 > --- a/src/acpica/source/components/dispatcher/dswexec.c > +++ b/src/acpica/source/components/dispatcher/dswexec.c > @@ -737,7 +737,7 @@ AcpiDsExecEndOp ( > if (ACPI_SUCCESS (Status)) > { > Status = AcpiExWriteDataToField (ObjDesc, Op->Common.Node->Object, NULL); > - if ACPI_FAILURE (Status) > + if (ACPI_FAILURE (Status)) > { > ACPI_EXCEPTION ((AE_INFO, Status, "While writing to buffer field")); > } > diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h > index 9b584d67..839c0edd 100644 > --- a/src/acpica/source/include/acdisasm.h > +++ b/src/acpica/source/include/acdisasm.h > @@ -250,6 +250,12 @@ typedef enum > > /* Types that are specific to particular ACPI tables */ > > + ACPI_DMT_AEST, > + ACPI_DMT_AEST_CACHE, > + ACPI_DMT_AEST_GIC, > + ACPI_DMT_AEST_RES, > + ACPI_DMT_AEST_XFACE, > + ACPI_DMT_AEST_XRUPT, > ACPI_DMT_ASF, > ACPI_DMT_CEDT, > ACPI_DMT_DMAR, > @@ -283,6 +289,7 @@ typedef enum > ACPI_DMT_SRAT, > ACPI_DMT_TPM2, > ACPI_DMT_VIOT, > + ACPI_DMT_WPBT_UNICODE, > > /* Special opcodes */ > > @@ -360,6 +367,17 @@ extern const char *AcpiGbl_AccessTypes[]; > extern const char *AcpiGbl_UpdateRules[]; > extern const char *AcpiGbl_MatchOps[]; > > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestHdr[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestProcError[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestCacheRsrc[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestTlbRsrc[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestGenRsrc[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestMemError[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestSmmuError[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestVendorError[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestGicError[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestXface[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestXrupt[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoAsf0[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoAsf1[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoAsf1a[]; > @@ -681,6 +699,10 @@ AcpiDmDumpUnicode ( > UINT32 BufferOffset, > UINT32 ByteLength); > > +void > +AcpiDmDumpAest ( > + ACPI_TABLE_HEADER *Table); > + > void > AcpiDmDumpAsf ( > ACPI_TABLE_HEADER *Table); > diff --git a/src/acpica/source/include/acnames.h b/src/acpica/source/include/acnames.h > index 5e762906..9075ca74 100644 > --- a/src/acpica/source/include/acnames.h > +++ b/src/acpica/source/include/acnames.h > @@ -162,6 +162,7 @@ > #define METHOD_NAME__CLS "_CLS" > #define METHOD_NAME__CRS "_CRS" > #define METHOD_NAME__DDN "_DDN" > +#define METHOD_NAME__DIS "_DIS" > #define METHOD_NAME__DMA "_DMA" > #define METHOD_NAME__HID "_HID" > #define METHOD_NAME__INI "_INI" > diff --git a/src/acpica/source/include/acoutput.h b/src/acpica/source/include/acoutput.h > index 46774ad0..b72c9a94 100644 > --- a/src/acpica/source/include/acoutput.h > +++ b/src/acpica/source/include/acoutput.h > @@ -561,7 +561,7 @@ > /* Conditional execution */ > > #define ACPI_DEBUG_EXEC(a) a > -#define ACPI_DEBUG_ONLY_MEMBERS(a) a; > +#define ACPI_DEBUG_ONLY_MEMBERS(a) a > #define _VERBOSE_STRUCTURES > > > diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h > index dc459c9a..7610f2e3 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 0x20210604 > +#define ACPI_CA_VERSION 0x20210730 > > #include "acconfig.h" > #include "actypes.h" > diff --git a/src/acpica/source/include/actbinfo.h b/src/acpica/source/include/actbinfo.h > index 027e6085..f2a1a48c 100644 > --- a/src/acpica/source/include/actbinfo.h > +++ b/src/acpica/source/include/actbinfo.h > @@ -205,11 +205,23 @@ > #define ACPI_WDDT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WDDT,f) > #define ACPI_WDRT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WDRT,f) > #define ACPI_WPBT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WPBT,f) > +#define ACPI_WPBT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_WPBT_UNICODE,f) > #define ACPI_WSMT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WSMT,f) > #define ACPI_XENV_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_XENV,f) > > /* Subtables */ > > +#define ACPI_AESTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_HEADER,f) > +#define ACPI_AEST0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_PROCESSOR,f) > +#define ACPI_AEST0A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_PROCESSOR_CACHE,f) > +#define ACPI_AEST0B_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_PROCESSOR_TLB,f) > +#define ACPI_AEST0C_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_PROCESSOR_GENERIC,f) > +#define ACPI_AEST1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_MEMORY,f) > +#define ACPI_AEST2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_SMMU,f) > +#define ACPI_AEST3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_VENDOR,f) > +#define ACPI_AEST4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_GIC,f) > +#define ACPI_AEST0D_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_NODE_INTERFACE,f) > +#define ACPI_AEST0E_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_NODE_INTERRUPT,f) > #define ACPI_ASF0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_INFO,f) > #define ACPI_ASF1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_ALERT,f) > #define ACPI_ASF1a_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_ALERT_DATA,f) > @@ -379,6 +391,9 @@ > > /* Flags */ > > +#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_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/actbl1.h b/src/acpica/source/include/actbl1.h > index 136ebf12..09e68293 100644 > --- a/src/acpica/source/include/actbl1.h > +++ b/src/acpica/source/include/actbl1.h > @@ -168,6 +168,7 @@ > * file. Useful because they make it more difficult to inadvertently type in > * the wrong signature. > */ > +#define ACPI_SIG_AEST "AEST" /* Arm Error Source Table */ > #define ACPI_SIG_ASF "ASF!" /* Alert Standard Format table */ > #define ACPI_SIG_BERT "BERT" /* Boot Error Record Table */ > #define ACPI_SIG_BGRT "BGRT" /* Boot Graphics Resource Table */ > @@ -701,7 +702,7 @@ typedef struct acpi_csrt_descriptor > * DBG2 - Debug Port Table 2 > * Version 0 (Both main table and subtables) > * > - * Conforms to "Microsoft Debug Port Table 2 (DBG2)", December 10, 2015 > + * Conforms to "Microsoft Debug Port Table 2 (DBG2)", September 21, 2020 > * > ******************************************************************************/ > > @@ -758,11 +759,24 @@ typedef struct acpi_dbg2_device > > #define ACPI_DBG2_16550_COMPATIBLE 0x0000 > #define ACPI_DBG2_16550_SUBSET 0x0001 > +#define ACPI_DBG2_MAX311XE_SPI 0x0002 > #define ACPI_DBG2_ARM_PL011 0x0003 > +#define ACPI_DBG2_MSM8X60 0x0004 > +#define ACPI_DBG2_16550_NVIDIA 0x0005 > +#define ACPI_DBG2_TI_OMAP 0x0006 > +#define ACPI_DBG2_APM88XXXX 0x0008 > +#define ACPI_DBG2_MSM8974 0x0009 > +#define ACPI_DBG2_SAM5250 0x000A > +#define ACPI_DBG2_INTEL_USIF 0x000B > +#define ACPI_DBG2_IMX6 0x000C > #define ACPI_DBG2_ARM_SBSA_32BIT 0x000D > #define ACPI_DBG2_ARM_SBSA_GENERIC 0x000E > #define ACPI_DBG2_ARM_DCC 0x000F > #define ACPI_DBG2_BCM2835 0x0010 > +#define ACPI_DBG2_SDM845_1_8432MHZ 0x0011 > +#define ACPI_DBG2_16550_WITH_GAS 0x0012 > +#define ACPI_DBG2_SDM845_7_372MHZ 0x0013 > +#define ACPI_DBG2_INTEL_LPSS 0x0014 > > #define ACPI_DBG2_1394_STANDARD 0x0000 > > diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h > index cb237a6b..58c1570c 100644 > --- a/src/acpica/source/include/actbl2.h > +++ b/src/acpica/source/include/actbl2.h > @@ -213,6 +213,193 @@ > */ > > > +/******************************************************************************* > + * > + * AEST - Arm Error Source Table > + * > + * Conforms to: ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document > + * September 2020. > + * > + ******************************************************************************/ > + > +typedef struct acpi_table_aest > +{ > + ACPI_TABLE_HEADER Header; > + void *NodeArray[]; > + > +} ACPI_TABLE_AEST; > + > +/* Common Subtable header - one per Node Structure (Subtable) */ > + > +typedef struct acpi_aest_hdr > +{ > + UINT8 Type; > + UINT16 Length; > + UINT8 Reserved; > + UINT32 NodeSpecificOffset; > + UINT32 NodeInterfaceOffset; > + UINT32 NodeInterruptOffset; > + UINT32 NodeInterruptCount; > + UINT64 TimestampRate; > + UINT64 Reserved1; > + UINT64 ErrorInjectionRate; > + > +} ACPI_AEST_HEADER; > + > +/* Values for Type above */ > + > +#define ACPI_AEST_PROCESSOR_ERROR_NODE 0 > +#define ACPI_AEST_MEMORY_ERROR_NODE 1 > +#define ACPI_AEST_SMMU_ERROR_NODE 2 > +#define ACPI_AEST_VENDOR_ERROR_NODE 3 > +#define ACPI_AEST_GIC_ERROR_NODE 4 > +#define ACPI_AEST_NODE_TYPE_RESERVED 5 /* 5 and above are reserved */ > + > + > +/* > + * AEST subtables (Error nodes) > + */ > + > +/* 0: Processor Error */ > + > +typedef struct acpi_aest_processor > +{ > + UINT32 ProcessorId; > + UINT8 ResourceType; > + UINT8 Reserved; > + UINT8 Flags; > + UINT8 Revision; > + UINT64 ProcessorAffinity; > + > +} ACPI_AEST_PROCESSOR; > + > +/* Values for ResourceType above, related structs below */ > + > +#define ACPI_AEST_CACHE_RESOURCE 0 > +#define ACPI_AEST_TLB_RESOURCE 1 > +#define ACPI_AEST_GENERIC_RESOURCE 2 > +#define ACPI_AEST_RESOURCE_RESERVED 3 /* 3 and above are reserved */ > + > +/* 0R: Processor Cache Resource Substructure */ > + > +typedef struct acpi_aest_processor_cache > +{ > + UINT32 CacheReference; > + UINT32 Reserved; > + > +} ACPI_AEST_PROCESSOR_CACHE; > + > +/* Values for CacheType above */ > + > +#define ACPI_AEST_CACHE_DATA 0 > +#define ACPI_AEST_CACHE_INSTRUCTION 1 > +#define ACPI_AEST_CACHE_UNIFIED 2 > +#define ACPI_AEST_CACHE_RESERVED 3 /* 3 and above are reserved */ > + > +/* 1R: Processor TLB Resource Substructure */ > + > +typedef struct acpi_aest_processor_tlb > +{ > + UINT32 TlbLevel; > + UINT32 Reserved; > + > +} ACPI_AEST_PROCESSOR_TLB; > + > +/* 2R: Processor Generic Resource Substructure */ > + > +typedef struct acpi_aest_processor_generic > +{ > + UINT8 *Resource; > + > +} ACPI_AEST_PROCESSOR_GENERIC; > + > +/* 1: Memory Error */ > + > +typedef struct acpi_aest_memory > +{ > + UINT32 SratProximityDomain; > + > +} ACPI_AEST_MEMORY; > + > +/* 2: Smmu Error */ > + > +typedef struct acpi_aest_smmu > +{ > + UINT32 IortNodeReference; > + UINT32 SubcomponentReference; > + > +} ACPI_AEST_SMMU; > + > +/* 3: Vendor Defined */ > + > +typedef struct acpi_aest_vendor > +{ > + UINT32 AcpiHid; > + UINT32 AcpiUid; > + UINT8 VendorSpecificData[16]; > + > +} ACPI_AEST_VENDOR; > + > +/* 4: Gic Error */ > + > +typedef struct acpi_aest_gic > +{ > + UINT32 InterfaceType; > + UINT32 InstanceId; > + > +} ACPI_AEST_GIC; > + > +/* Values for InterfaceType above */ > + > +#define ACPI_AEST_GIC_CPU 0 > +#define ACPI_AEST_GIC_DISTRIBUTOR 1 > +#define ACPI_AEST_GIC_REDISTRIBUTOR 2 > +#define ACPI_AEST_GIC_ITS 3 > +#define ACPI_AEST_GIC_RESERVED 4 /* 4 and above are reserved */ > + > + > +/* Node Interface Structure */ > + > +typedef struct acpi_aest_node_interface > +{ > + UINT8 Type; > + UINT8 Reserved[3]; > + UINT32 Flags; > + UINT64 Address; > + UINT32 ErrorRecordIndex; > + UINT32 ErrorRecordCount; > + UINT64 ErrorRecordImplemented; > + UINT64 ErrorStatusReporting; > + UINT64 AddressingMode; > + > +} ACPI_AEST_NODE_INTERFACE; > + > +/* Values for Type field above */ > + > +#define ACPI_AEST_NODE_SYSTEM_REGISTER 0 > +#define ACPI_AEST_NODE_MEMORY_MAPPED 1 > +#define ACPI_AEST_XFACE_RESERVED 2 /* 2 and above are reserved */ > + > +/* Node Interrupt Structure */ > + > +typedef struct acpi_aest_node_interrupt > +{ > + UINT8 Type; > + UINT8 Reserved[2]; > + UINT8 Flags; > + UINT32 Gsiv; > + UINT8 IortId; > + UINT8 Reserved1[3]; > + > +} ACPI_AEST_NODE_INTERRUPT; > + > +/* Values for Type field above */ > + > +#define ACPI_AEST_NODE_FAULT_HANDLING 0 > +#define ACPI_AEST_NODE_ERROR_RECOVERY 1 > +#define ACPI_AEST_XRUPT_RESERVED 2 /* 2 and above are reserved */ > + > + > /******************************************************************************* > * > * BDAT - BIOS Data ACPI Table > @@ -2163,6 +2350,13 @@ typedef struct acpi_table_prmt_header > > } ACPI_TABLE_PRMT_HEADER; > > +typedef struct acpi_prmt_module_header > +{ > + UINT16 Revision; > + UINT16 Length; > + > +} ACPI_PRMT_MODULE_HEADER; > + > typedef struct acpi_prmt_module_info > { > UINT16 Revision; > diff --git a/src/acpica/source/include/actbl3.h b/src/acpica/source/include/actbl3.h > index d4260a1d..d0f7025f 100644 > --- a/src/acpica/source/include/actbl3.h > +++ b/src/acpica/source/include/actbl3.h > @@ -955,6 +955,12 @@ typedef struct acpi_table_wpbt > > } ACPI_TABLE_WPBT; > > +typedef struct acpi_wpbt_unicode > +{ > + UINT16 *UnicodeString; > + > +} ACPI_WPBT_UNICODE; > + > > /******************************************************************************* > * > Acked-by: Ivan Hu <ivan.hu@canonical.com>
diff --git a/src/acpica/source/common/adisasm.c b/src/acpica/source/common/adisasm.c index 27a175a6..f549bd5a 100644 --- a/src/acpica/source/common/adisasm.c +++ b/src/acpica/source/common/adisasm.c @@ -478,7 +478,7 @@ AdDisassembleOneTable ( AcpiOsPrintf (" * ACPI Data Table [%4.4s]\n *\n", Table->Signature); AcpiOsPrintf (" * Format: [HexOffset DecimalOffset ByteLength] " - "FieldName : FieldValue\n */\n\n"); + "FieldName : FieldValue (in hex)\n */\n\n"); AcpiDmDumpDataTable (Table); fprintf (stderr, "Acpi Data Table [%4.4s] decoded\n", diff --git a/src/acpica/source/common/ahtable.c b/src/acpica/source/common/ahtable.c index 80f248d2..d7ce88a9 100644 --- a/src/acpica/source/common/ahtable.c +++ b/src/acpica/source/common/ahtable.c @@ -199,6 +199,7 @@ AcpiAhGetTableInfo ( */ const AH_TABLE AcpiGbl_SupportedTables[] = { + {ACPI_SIG_AEST, "Arm Error Source Table"}, {ACPI_SIG_ASF, "Alert Standard Format Table"}, {ACPI_SIG_BDAT, "BIOS Data ACPI Table"}, {ACPI_SIG_BERT, "Boot Error Record Table"}, diff --git a/src/acpica/source/common/dmtable.c b/src/acpica/source/common/dmtable.c index 7a4e87e1..1fa9ba16 100644 --- a/src/acpica/source/common/dmtable.c +++ b/src/acpica/source/common/dmtable.c @@ -174,6 +174,55 @@ AcpiAhGetTableInfo ( /* These tables map a subtable type to a description string */ +static const char *AcpiDmAestResourceNames[] = +{ + "Cache Resource", + "TLB Resource", + "Generic Resource", + "Unknown Resource Type" /* Reserved */ +}; + +static const char *AcpiDmAestSubnames[] = +{ + "Processor Error Node", + "Memory Error Node", + "SMMU Error Node", + "Vendor-defined Error Node", + "GIC Error Node", + "Unknown Subtable Type" /* Reserved */ +}; + +static const char *AcpiDmAestCacheNames[] = +{ + "Data Cache", + "Instruction Cache", + "Unified Cache", + "Unknown Cache Type" /* Reserved */ +}; + +static const char *AcpiDmAestGicNames[] = +{ + "GIC CPU", + "GIC Distributor", + "GIC Redistributor", + "GIC ITS", + "Unknown GIC Interface Type" /* Reserved */ +}; + +static const char *AcpiDmAestXfaceNames[] = +{ + "System Register Interface", + "Memory Mapped Interface", + "Unknown Interface Type" /* Reserved */ +}; + +static const char *AcpiDmAestXruptNames[] = +{ + "Fault Handling Interrupt", + "Error Recovery Interrupt", + "Unknown Interrupt Type" /* Reserved */ +}; + static const char *AcpiDmAsfSubnames[] = { "ASF Information", @@ -533,6 +582,7 @@ static const char *AcpiDmGasAccessWidth[] = const ACPI_DMTABLE_DATA AcpiDmTableData[] = { + {ACPI_SIG_AEST, NULL, AcpiDmDumpAest, DtCompileAest, TemplateAest}, {ACPI_SIG_ASF, NULL, AcpiDmDumpAsf, DtCompileAsf, TemplateAsf}, {ACPI_SIG_BDAT, AcpiDmTableInfoBdat, NULL, NULL, TemplateBdat}, {ACPI_SIG_BERT, AcpiDmTableInfoBert, NULL, NULL, TemplateBert}, @@ -1006,6 +1056,10 @@ AcpiDmDumpTable ( case ACPI_DMT_RGRT: case ACPI_DMT_SDEV: case ACPI_DMT_SRAT: + case ACPI_DMT_AEST: + case ACPI_DMT_AEST_RES: + case ACPI_DMT_AEST_XFACE: + case ACPI_DMT_AEST_XRUPT: case ACPI_DMT_ASF: case ACPI_DMT_HESTNTYP: case ACPI_DMT_FADTPM: @@ -1035,6 +1089,8 @@ AcpiDmDumpTable ( break; case ACPI_DMT_UINT32: + case ACPI_DMT_AEST_CACHE: + case ACPI_DMT_AEST_GIC: case ACPI_DMT_NAME4: case ACPI_DMT_SIG: case ACPI_DMT_LPIT: @@ -1087,6 +1143,12 @@ AcpiDmDumpTable ( ByteLength = 128; break; + case ACPI_DMT_WPBT_UNICODE: + + ByteLength = SubtableLength; + CurrentOffset = sizeof (ACPI_TABLE_WPBT); + break; + case ACPI_DMT_UNICODE: case ACPI_DMT_BUFFER: case ACPI_DMT_RAW_BUFFER: @@ -1418,6 +1480,90 @@ AcpiDmDumpTable ( LastOutputBlankLine = TRUE; break; + case ACPI_DMT_AEST: + + /* AEST subtable types */ + + Temp8 = *Target; + if (Temp8 > ACPI_AEST_NODE_TYPE_RESERVED) + { + Temp8 = ACPI_AEST_NODE_TYPE_RESERVED; + } + + AcpiOsPrintf (UINT8_FORMAT, *Target, + AcpiDmAestSubnames[Temp8]); + break; + + case ACPI_DMT_AEST_CACHE: + + /* AEST cache resource subtable */ + + Temp32 = *Target; + if (Temp32 > ACPI_AEST_CACHE_RESERVED) + { + Temp32 = ACPI_AEST_CACHE_RESERVED; + } + + AcpiOsPrintf (UINT32_FORMAT, *Target, + AcpiDmAestCacheNames[Temp32]); + break; + + case ACPI_DMT_AEST_GIC: + + /* AEST GIC error subtable */ + + Temp32 = *Target; + if (Temp32 > ACPI_AEST_GIC_RESERVED) + { + Temp32 = ACPI_AEST_GIC_RESERVED; + } + + AcpiOsPrintf (UINT32_FORMAT, *Target, + AcpiDmAestGicNames[Temp32]); + break; + + case ACPI_DMT_AEST_RES: + + /* AEST resource type subtable */ + + Temp8 = *Target; + if (Temp8 > ACPI_AEST_RESOURCE_RESERVED) + { + Temp8 = ACPI_AEST_RESOURCE_RESERVED; + } + + AcpiOsPrintf (UINT8_FORMAT, *Target, + AcpiDmAestResourceNames[Temp8]); + break; + + case ACPI_DMT_AEST_XFACE: + + /* AEST interface structure types */ + + Temp8 = *Target; + if (Temp8 > ACPI_AEST_XFACE_RESERVED) + { + Temp8 = ACPI_AEST_XFACE_RESERVED; + } + + AcpiOsPrintf (UINT8_FORMAT, *Target, + AcpiDmAestXfaceNames[Temp8]); + break; + + case ACPI_DMT_AEST_XRUPT: + + /* AEST interrupt structure types */ + + Temp8 = *Target; + if (Temp8 > ACPI_AEST_XRUPT_RESERVED) + { + Temp8 = ACPI_AEST_XRUPT_RESERVED; + } + + AcpiOsPrintf (UINT8_FORMAT, *Target, + AcpiDmAestXruptNames[Temp8]); + break; + case ACPI_DMT_ASF: /* ASF subtable types */ @@ -1704,6 +1850,7 @@ AcpiDmDumpTable ( break; case ACPI_DMT_UNICODE: + case ACPI_DMT_WPBT_UNICODE: if (ByteLength == 0) { diff --git a/src/acpica/source/common/dmtbdump1.c b/src/acpica/source/common/dmtbdump1.c index 8fc53acf..3a97af46 100644 --- a/src/acpica/source/common/dmtbdump1.c +++ b/src/acpica/source/common/dmtbdump1.c @@ -160,6 +160,225 @@ ACPI_MODULE_NAME ("dmtbdump1") +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpAest + * + * PARAMETERS: Table - A AEST table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a AEST table + * + * NOTE: Assumes the following table structure: + * For all AEST Error Nodes: + * 1) An AEST Error Node, followed immediately by: + * 2) Any node-specific data + * 3) An Interface Structure (one) + * 4) A list (array) of Interrupt Structures + * + * AEST - ARM Error Source table. Conforms to: + * ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document Sep 2020 + * + ******************************************************************************/ + +void +AcpiDmDumpAest ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + UINT32 Offset = sizeof (ACPI_TABLE_HEADER); + ACPI_AEST_HEADER *Subtable; + ACPI_AEST_HEADER *NodeHeader; + ACPI_AEST_PROCESSOR *ProcessorSubtable; + ACPI_DMTABLE_INFO *InfoTable; + ACPI_SIZE Length; + UINT8 Type; + + + /* Very small, generic main table. AEST consists of mostly subtables */ + + while (Offset < Table->Length) + { + NodeHeader = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset); + + /* Dump the common error node (subtable) header */ + + Status = AcpiDmDumpTable (Table->Length, Offset, NodeHeader, + NodeHeader->Length, AcpiDmTableInfoAestHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + Type = NodeHeader->Type; + + /* Setup the node-specific subtable based on the header Type field */ + + switch (Type) + { + case ACPI_AEST_PROCESSOR_ERROR_NODE: + InfoTable = AcpiDmTableInfoAestProcError; + Length = sizeof (ACPI_AEST_PROCESSOR); + break; + + case ACPI_AEST_MEMORY_ERROR_NODE: + InfoTable = AcpiDmTableInfoAestMemError; + Length = sizeof (ACPI_AEST_MEMORY); + break; + + case ACPI_AEST_SMMU_ERROR_NODE: + InfoTable = AcpiDmTableInfoAestSmmuError; + Length = sizeof (ACPI_AEST_SMMU); + break; + + case ACPI_AEST_VENDOR_ERROR_NODE: + InfoTable = AcpiDmTableInfoAestVendorError; + Length = sizeof (ACPI_AEST_VENDOR); + break; + + case ACPI_AEST_GIC_ERROR_NODE: + InfoTable = AcpiDmTableInfoAestGicError; + Length = sizeof (ACPI_AEST_GIC); + break; + + /* Error case below */ + default: + + AcpiOsPrintf ("\n**** Unknown AEST Error Subtable type 0x%X\n", + Type); + return; + } + + /* Point past the common header (to the node-specific data) */ + + Offset += sizeof (ACPI_AEST_HEADER); + Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset); + AcpiOsPrintf ("\n"); + + /* Dump the node-specific subtable */ + + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Length, + InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + AcpiOsPrintf ("\n"); + + if (Type == ACPI_AEST_PROCESSOR_ERROR_NODE) + { + /* + * Special handling for PROCESSOR_ERROR_NODE subtables + * (to handle the Resource Substructure via the ResourceType + * field). + */ + + /* Point past the node-specific data */ + + Offset += Length; + ProcessorSubtable = ACPI_CAST_PTR (ACPI_AEST_PROCESSOR, Subtable); + + switch (ProcessorSubtable->ResourceType) + { + /* Setup the Resource Substructure subtable */ + + case ACPI_AEST_CACHE_RESOURCE: + InfoTable = AcpiDmTableInfoAestCacheRsrc; + Length = sizeof (ACPI_AEST_PROCESSOR_CACHE); + break; + + case ACPI_AEST_TLB_RESOURCE: + InfoTable = AcpiDmTableInfoAestTlbRsrc; + Length = sizeof (ACPI_AEST_PROCESSOR_TLB); + break; + + 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 */ + default: + AcpiOsPrintf ("\n**** Unknown AEST Processor Resource type 0x%X\n", + ProcessorSubtable->ResourceType); + return; + } + + ProcessorSubtable = ACPI_ADD_PTR (ACPI_AEST_PROCESSOR, Table, + Offset); + + /* Dump the resource substructure subtable */ + + Status = AcpiDmDumpTable (Table->Length, Offset, ProcessorSubtable, + Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + + AcpiOsPrintf ("\n"); + } + + /* Point past the resource substructure or the node-specific data */ + + Offset += Length; + + /* Dump the interface structure, required to be present */ + + Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset); + if (Subtable->Type >= ACPI_AEST_XFACE_RESERVED) + { + AcpiOsPrintf ("\n**** Unknown AEST Node Interface type 0x%X\n", + Subtable->Type); + return; + } + + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + sizeof (ACPI_AEST_NODE_INTERFACE), AcpiDmTableInfoAestXface); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point past the interface structure */ + + AcpiOsPrintf ("\n"); + Offset += sizeof (ACPI_AEST_NODE_INTERFACE); + + /* Dump the entire interrupt structure array, if present */ + + if (NodeHeader->NodeInterruptOffset) + { + Length = NodeHeader->NodeInterruptCount; + Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset); + + while (Length) + { + /* Dump the interrupt structure */ + + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + sizeof (ACPI_AEST_NODE_INTERRUPT), + AcpiDmTableInfoAestXrupt); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point to the next interrupt structure */ + + Offset += sizeof (ACPI_AEST_NODE_INTERRUPT); + Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset); + Length--; + AcpiOsPrintf ("\n"); + } + } + } +} + + /******************************************************************************* * * FUNCTION: AcpiDmDumpAsf diff --git a/src/acpica/source/common/dmtbdump3.c b/src/acpica/source/common/dmtbdump3.c index e81a703b..981a51e0 100644 --- a/src/acpica/source/common/dmtbdump3.c +++ b/src/acpica/source/common/dmtbdump3.c @@ -681,7 +681,7 @@ AcpiDmDumpViot ( ACPI_TABLE_VIOT *Viot; ACPI_VIOT_HEADER *ViotHeader; UINT16 Length; - UINT16 Offset; + UINT32 Offset; ACPI_DMTABLE_INFO *InfoTable; /* Main table */ @@ -833,13 +833,12 @@ AcpiDmDumpWpbt ( { ACPI_STATUS Status; ACPI_TABLE_WPBT *Subtable; - UINT32 Length = Table->Length; UINT16 ArgumentsLength; /* Dump the main table */ - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoWpbt); + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoWpbt); if (ACPI_FAILURE (Status)) { return; @@ -850,8 +849,11 @@ AcpiDmDumpWpbt ( Subtable = ACPI_CAST_PTR (ACPI_TABLE_WPBT, Table); ArgumentsLength = Subtable->ArgumentsLength; - /* Dump the arguments buffer */ + /* Dump the arguments buffer if present */ - (void) AcpiDmDumpTable (Table->Length, 0, Table, ArgumentsLength, - AcpiDmTableInfoWpbt0); + if (ArgumentsLength) + { + (void) AcpiDmDumpTable (Table->Length, 0, Table, ArgumentsLength, + AcpiDmTableInfoWpbt0); + } } diff --git a/src/acpica/source/common/dmtbinfo1.c b/src/acpica/source/common/dmtbinfo1.c index fbf3980d..b30cafa9 100644 --- a/src/acpica/source/common/dmtbinfo1.c +++ b/src/acpica/source/common/dmtbinfo1.c @@ -191,6 +191,144 @@ */ +/******************************************************************************* + * + * AEST - ARM Error Source table. Conforms to: + * ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document Sep 2020 + * + ******************************************************************************/ + +/* Common Subtable header (one per Subtable) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoAestHdr[] = +{ + {ACPI_DMT_AEST, ACPI_AESTH_OFFSET (Type), "Subtable Type", 0}, + {ACPI_DMT_UINT16, ACPI_AESTH_OFFSET (Length), "Length", DT_LENGTH}, + {ACPI_DMT_UINT8, ACPI_AESTH_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_AESTH_OFFSET (NodeSpecificOffset), "Node Specific Offset", 0}, + {ACPI_DMT_UINT32, ACPI_AESTH_OFFSET (NodeInterfaceOffset), "Node Interface Offset", 0}, + {ACPI_DMT_UINT32, ACPI_AESTH_OFFSET (NodeInterruptOffset), "Node Interrupt Array Offset", 0}, + {ACPI_DMT_UINT32, ACPI_AESTH_OFFSET (NodeInterruptCount), "Node Interrupt Array Count", 0}, + {ACPI_DMT_UINT64, ACPI_AESTH_OFFSET (TimestampRate), "Timestamp Rate", 0}, + {ACPI_DMT_UINT64, ACPI_AESTH_OFFSET (Reserved1), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_AESTH_OFFSET (ErrorInjectionRate), "Error Injection Rate", 0}, + ACPI_DMT_TERMINATOR +}; + +/* + * AEST subtables (nodes) + */ + +/* 0: Processor Error */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoAestProcError[] = +{ + {ACPI_DMT_UINT32, ACPI_AEST0_OFFSET (ProcessorId), "Processor ID", 0}, + {ACPI_DMT_AEST_RES, ACPI_AEST0_OFFSET (ResourceType), "Resource Type", 0}, + {ACPI_DMT_UINT8, ACPI_AEST0_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT8, ACPI_AEST0_OFFSET (Flags), "Flags (decoded Below)", 0}, + {ACPI_DMT_FLAG0, ACPI_AEST0_FLAG_OFFSET (Flags, 0), "Global", 0}, + {ACPI_DMT_FLAG1, ACPI_AEST0_FLAG_OFFSET (Flags, 0), "Shared", 0}, + {ACPI_DMT_UINT8, ACPI_AEST0_OFFSET (Revision), "Revision", 0}, + {ACPI_DMT_UINT64, ACPI_AEST0_OFFSET (ProcessorAffinity), "Processor Affinity Structure", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 0RT: Processor Cache Resource */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoAestCacheRsrc[] = +{ + {ACPI_DMT_UINT32, ACPI_AEST0A_OFFSET (CacheReference), "Cache Reference", 0}, + {ACPI_DMT_UINT32, ACPI_AEST0A_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 1RT: ProcessorTLB Resource */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoAestTlbRsrc[] = +{ + {ACPI_DMT_UINT32, ACPI_AEST0B_OFFSET (TlbLevel), "TLB Level", 0}, + {ACPI_DMT_UINT32, ACPI_AEST0B_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 2RT: Processor Generic Resource */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoAestGenRsrc[] = +{ + {ACPI_DMT_RAW_BUFFER, 0, "Resource", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 1: Memory Error */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoAestMemError[] = +{ + {ACPI_DMT_UINT32, ACPI_AEST1_OFFSET (SratProximityDomain), "Srat Proximity Domain", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 2: Smmu Error */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoAestSmmuError[] = +{ + {ACPI_DMT_UINT32, ACPI_AEST2_OFFSET (IortNodeReference), "Iort Node Reference", 0}, + {ACPI_DMT_UINT32, ACPI_AEST2_OFFSET (SubcomponentReference), "Subcomponent Reference", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 3: Vendor Defined */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoAestVendorError[] = +{ + {ACPI_DMT_UINT32, ACPI_AEST3_OFFSET (AcpiHid), "ACPI HID", 0}, + {ACPI_DMT_UINT32, ACPI_AEST3_OFFSET (AcpiUid), "ACPI UID", 0}, + {ACPI_DMT_BUF16, ACPI_AEST3_OFFSET (VendorSpecificData), "Vendor Specific Data", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 4: Gic Error */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoAestGicError[] = +{ + {ACPI_DMT_AEST_GIC, ACPI_AEST4_OFFSET (InterfaceType), "GIC Interface Type", 0}, + {ACPI_DMT_UINT32, ACPI_AEST4_OFFSET (InstanceId), "Instance ID", 0}, + ACPI_DMT_TERMINATOR +}; + +/* AestXface: Node Interface Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoAestXface[] = +{ + {ACPI_DMT_AEST_XFACE, ACPI_AEST0D_OFFSET (Type), "Interface Type", 0}, + {ACPI_DMT_UINT24, ACPI_AEST0D_OFFSET (Reserved[0]), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_AEST0D_OFFSET (Flags), "Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_AEST0D_FLAG_OFFSET (Flags, 0), "Shared Interface", 0}, + {ACPI_DMT_FLAG1, ACPI_AEST0D_FLAG_OFFSET (Flags, 0), "Clear MISCx Registers", 0}, + {ACPI_DMT_UINT64, ACPI_AEST0D_OFFSET (Address), "Address", 0}, + {ACPI_DMT_UINT32, ACPI_AEST0D_OFFSET (ErrorRecordIndex), "Error Record Index", 0}, + {ACPI_DMT_UINT32, ACPI_AEST0D_OFFSET (ErrorRecordCount), "Error Record Count", 0}, + {ACPI_DMT_UINT64, ACPI_AEST0D_OFFSET (ErrorRecordImplemented),"Error Record Implemented", 0}, + {ACPI_DMT_UINT64, ACPI_AEST0D_OFFSET (ErrorStatusReporting), "Error Status Reporting", 0}, + {ACPI_DMT_UINT64, ACPI_AEST0D_OFFSET (AddressingMode), "Addressing Mode", 0}, + ACPI_DMT_TERMINATOR +}; + +/* AestXrupt: Node Interrupt Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoAestXrupt[] = +{ + {ACPI_DMT_AEST_XRUPT, ACPI_AEST0E_OFFSET (Type), "Interrupt Type", 0}, + {ACPI_DMT_UINT16, ACPI_AEST0E_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT8, ACPI_AEST0E_OFFSET (Flags), "Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_AEST0E_FLAG_OFFSET (Flags, 0), "Level Triggered", 0}, + {ACPI_DMT_UINT32, ACPI_AEST0E_OFFSET (Gsiv), "Gsiv", 0}, + {ACPI_DMT_UINT8, ACPI_AEST0E_OFFSET (IortId), "IortId", 0}, + {ACPI_DMT_UINT24, ACPI_AEST0E_OFFSET (Reserved1[0]), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + + /******************************************************************************* * * ASF - Alert Standard Format table (Signature "ASF!") diff --git a/src/acpica/source/common/dmtbinfo3.c b/src/acpica/source/common/dmtbinfo3.c index b0435019..e573676a 100644 --- a/src/acpica/source/common/dmtbinfo3.c +++ b/src/acpica/source/common/dmtbinfo3.c @@ -759,7 +759,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt[] = ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt0[] = { - {ACPI_DMT_UNICODE, sizeof (ACPI_TABLE_WPBT), "Command-line Arguments", 0}, + {ACPI_DMT_WPBT_UNICODE, ACPI_WPBT2_OFFSET (UnicodeString), "Command-line Arguments", DT_DESCRIBES_OPTIONAL}, ACPI_DMT_TERMINATOR }; @@ -834,6 +834,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoGeneric[][2] = ACPI_DM_GENERIC_ENTRY (ACPI_DMT_STRING, "String"), ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UNICODE, "Unicode"), ACPI_DM_GENERIC_ENTRY (ACPI_DMT_BUFFER, "Buffer"), + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_BUF16, "BUF16"), ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UUID, "GUID"), ACPI_DM_GENERIC_ENTRY (ACPI_DMT_STRING, "DevicePath"), ACPI_DM_GENERIC_ENTRY (ACPI_DMT_LABEL, "Label"), diff --git a/src/acpica/source/compiler/aslmethod.c b/src/acpica/source/compiler/aslmethod.c index e9aa7f2d..5bec65e8 100644 --- a/src/acpica/source/compiler/aslmethod.c +++ b/src/acpica/source/compiler/aslmethod.c @@ -205,6 +205,10 @@ MtMethodAnalysisWalkBegin ( UINT8 ActualArgs = 0; BOOLEAN HidExists; BOOLEAN AdrExists; + BOOLEAN PrsExists; + BOOLEAN CrsExists; + BOOLEAN SrsExists; + BOOLEAN DisExists; /* Build cross-reference output file if requested */ @@ -536,8 +540,8 @@ MtMethodAnalysisWalkBegin ( if (!HidExists && !AdrExists) { - AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, - "Device object requires a _HID or _ADR in same scope"); + AslError (ASL_ERROR, ASL_MSG_MISSING_DEPENDENCY, Op, + "Device object requires a _HID or _ADR"); } else if (HidExists && AdrExists) { @@ -549,6 +553,81 @@ MtMethodAnalysisWalkBegin ( AslError (ASL_WARNING, ASL_MSG_MULTIPLE_TYPES, Op, "Device object requires either a _HID or _ADR, but not both"); } + + /* + * Check usage of _CRS, _DIS, _PRS, and _SRS objects (July 2021). + * + * Under the Device Object: + * + * 1) If _DIS is present, must have a _CRS, _PRS, and _SRS + * 2) If _PRS is present, must have a _CRS and _SRS + * 3) If _SRS is present, must have a _CRS and _PRS + */ + CrsExists = ApFindNameInDeviceTree (METHOD_NAME__CRS, Op); + DisExists = ApFindNameInDeviceTree (METHOD_NAME__DIS, Op); + PrsExists = ApFindNameInDeviceTree (METHOD_NAME__PRS, Op); + SrsExists = ApFindNameInDeviceTree (METHOD_NAME__SRS, Op); + + /* 1) If _DIS is present, must have a _CRS, _PRS, and _SRS */ + + if (DisExists) + { + if (!CrsExists) + { + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, + "_DIS is missing a _CRS, requires a _CRS, _PRS, and a _SRS"); + } + + if (!PrsExists) + { + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, + "_DIS is missing a _PRS, requires a _CRS, _PRS, and a _SRS"); + } + + if (!SrsExists) + { + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, + "_DIS is missing a _SRS, requires a _CRS, _PRS, and a _SRS"); + } + } + + /* 2) If _PRS is present, must have a _CRS and _SRS */ + + if (PrsExists) + { + if (!CrsExists) + { + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, + "_PRS is missing a _CRS, requires a _CRS and a _SRS"); + } + + if (!SrsExists) + { + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, + "_PRS is missing a _SRS, requires a _CRS and a _SRS"); + } + } + + /* 3) If _SRS is present, must have a _CRS and _PRS */ + + if (SrsExists) + { + if (!CrsExists) + { + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, + "_SRS is missing a _CRS, requires a _CRS and a _PRS"); + } + if (!PrsExists) + { + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, + "_SRS is missing a _PRS, requires a _CRS and a _PRS"); + } + if (!DisExists) + { + AslError (ASL_REMARK, ASL_MSG_MISSING_DEPENDENCY, Op, + "_SRS is missing a _DIS"); + } + } break; case PARSEOP_EVENT: diff --git a/src/acpica/source/compiler/aslutils.c b/src/acpica/source/compiler/aslutils.c index 44631957..c4325c3b 100644 --- a/src/acpica/source/compiler/aslutils.c +++ b/src/acpica/source/compiler/aslutils.c @@ -434,18 +434,20 @@ UtDisplaySupportedTables ( printf ("\nACPI tables supported by iASL version %8.8X:\n" - " (Compiler, Disassembler, Template Generator)\n\n", + " (Compiler, Disassembler, Template Generator)\n", ACPI_CA_VERSION); /* All ACPI tables with the common table header */ - printf ("\n Supported ACPI tables:\n"); + printf ("\nKnown/Supported ACPI tables:\n"); for (TableData = AcpiGbl_SupportedTables, i = 1; TableData->Signature; TableData++, i++) { printf ("%8u) %s %s\n", i, TableData->Signature, TableData->Description); } + + printf ("\nTotal %u ACPI tables\n\n", i-1); } diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h index 4f966808..6d3dbefa 100644 --- a/src/acpica/source/compiler/dtcompiler.h +++ b/src/acpica/source/compiler/dtcompiler.h @@ -565,6 +565,10 @@ ACPI_STATUS DtCompileRsdp ( DT_FIELD **PFieldList); +ACPI_STATUS +DtCompileAest ( + void **PFieldList); + ACPI_STATUS DtCompileAsf ( void **PFieldList); @@ -753,6 +757,7 @@ DtGetGenericTableInfo ( /* ACPI Table templates */ +extern const unsigned char TemplateAest[]; extern const unsigned char TemplateAsf[]; extern const unsigned char TemplateBoot[]; extern const unsigned char TemplateBdat[]; diff --git a/src/acpica/source/compiler/dtfield.c b/src/acpica/source/compiler/dtfield.c index 729791d7..f4c71147 100644 --- a/src/acpica/source/compiler/dtfield.c +++ b/src/acpica/source/compiler/dtfield.c @@ -434,14 +434,14 @@ DtCompileInteger ( { if (Value != 1) { - DtError (ASL_WARNING, ASL_MSG_RESERVED_FIELD, Field, + DtError (ASL_ERROR, ASL_MSG_RESERVED_FIELD, Field, "Must be one, setting to one"); Value = 1; } } else if (Value != 0) { - DtError (ASL_WARNING, ASL_MSG_RESERVED_FIELD, Field, + DtError (ASL_ERROR, ASL_MSG_RESERVED_FIELD, Field, "Must be zero, setting to zero"); Value = 0; } diff --git a/src/acpica/source/compiler/dttable1.c b/src/acpica/source/compiler/dttable1.c index bf710e31..2e6a8569 100644 --- a/src/acpica/source/compiler/dttable1.c +++ b/src/acpica/source/compiler/dttable1.c @@ -170,6 +170,223 @@ static ACPI_DMTABLE_INFO TableInfoDmarPciPath[] = }; +/****************************************************************************** + * + * FUNCTION: DtCompileAest + * + * PARAMETERS: List - Current field list pointer + * + * RETURN: Status + * + * DESCRIPTION: Compile AEST. + * + * NOTE: Assumes the following table structure: + * For all AEST Error Nodes: + * 1) An AEST Error Node, followed immediately by: + * 2) Any node-specific data + * 3) An Interface Structure (one) + * 4) A list (array) of Interrupt Structures, the count as specified + * in the NodeInterruptCount field of the Error Node header. + * + * AEST - ARM Error Source table. Conforms to: + * ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document Sep 2020 + * + *****************************************************************************/ + +ACPI_STATUS +DtCompileAest ( + void **List) +{ + ACPI_AEST_HEADER *ErrorNodeHeader; + ACPI_AEST_PROCESSOR *AestProcessor; + DT_SUBTABLE *Subtable; + DT_SUBTABLE *ParentTable; + ACPI_DMTABLE_INFO *InfoTable; + ACPI_STATUS Status; + UINT32 i; + UINT32 Offset; + DT_FIELD **PFieldList = (DT_FIELD **) List; + + + while (*PFieldList) + { + /* Compile the common error node header */ + + Status = DtCompileTable (PFieldList, AcpiDmTableInfoAestHdr, + &Subtable); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + + /* Everything past the error node header will be a subtable */ + + DtPushSubtable (Subtable); + + /* + * Compile the node-specific structure (Based on the error + * node header Type field) + */ + ErrorNodeHeader = ACPI_CAST_PTR (ACPI_AEST_HEADER, Subtable->Buffer); + + /* Point past the common error node header */ + + Offset = sizeof (ACPI_AEST_HEADER); + ErrorNodeHeader->NodeSpecificOffset = Offset; + + /* Decode the error node type */ + + switch (ErrorNodeHeader->Type) + { + case ACPI_AEST_PROCESSOR_ERROR_NODE: + + InfoTable = AcpiDmTableInfoAestProcError; + break; + + case ACPI_AEST_MEMORY_ERROR_NODE: + + InfoTable = AcpiDmTableInfoAestMemError; + break; + + case ACPI_AEST_SMMU_ERROR_NODE: + + InfoTable = AcpiDmTableInfoAestSmmuError; + break; + + case ACPI_AEST_VENDOR_ERROR_NODE: + + InfoTable = AcpiDmTableInfoAestVendorError; + break; + + case ACPI_AEST_GIC_ERROR_NODE: + + InfoTable = AcpiDmTableInfoAestGicError; + break; + + /* Error case below */ + default: + AcpiOsPrintf ("Unknown AEST Subtable Type: %X\n", + ErrorNodeHeader->Type); + return (AE_ERROR); + } + + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + /* Point past the node-specific structure */ + + Offset += Subtable->Length; + ErrorNodeHeader->NodeInterfaceOffset = Offset; + + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + + /* Compile any additional node-specific substructures */ + + if (ErrorNodeHeader->Type == ACPI_AEST_PROCESSOR_ERROR_NODE) + { + /* + * Special handling for PROCESSOR_ERROR_NODE subtables + * (to handle the Resource Substructure via the ResourceType + * field). + */ + AestProcessor = ACPI_CAST_PTR (ACPI_AEST_PROCESSOR, + Subtable->Buffer); + + switch (AestProcessor->ResourceType) + { + case ACPI_AEST_CACHE_RESOURCE: + + InfoTable = AcpiDmTableInfoAestCacheRsrc; + break; + + case ACPI_AEST_TLB_RESOURCE: + + InfoTable = AcpiDmTableInfoAestTlbRsrc; + break; + + case ACPI_AEST_GENERIC_RESOURCE: + + InfoTable = AcpiDmTableInfoAestGenRsrc; + AcpiOsPrintf ("Generic Resource Type (%X) is not supported at this time\n", + AestProcessor->ResourceType); + return (AE_ERROR); + + /* Error case below */ + default: + AcpiOsPrintf ("Unknown AEST Processor Resource Type: %X\n", + AestProcessor->ResourceType); + return (AE_ERROR); + } + + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + /* Point past the resource substructure subtable */ + + Offset += Subtable->Length; + ErrorNodeHeader->NodeInterfaceOffset = Offset; + + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + } + + /* Compile the (required) node interface structure */ + + Status = DtCompileTable (PFieldList, AcpiDmTableInfoAestXface, + &Subtable); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + ErrorNodeHeader->NodeInterruptOffset = 0; + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + + /* Compile each of the node interrupt structures */ + + if (ErrorNodeHeader->NodeInterruptCount) + { + /* Point to the first interrupt structure */ + + Offset += Subtable->Length; + ErrorNodeHeader->NodeInterruptOffset = Offset; + } + + /* Compile each of the interrupt structures */ + + for (i = 0; i < ErrorNodeHeader->NodeInterruptCount; i++) + { + Status = DtCompileTable (PFieldList, AcpiDmTableInfoAestXrupt, + &Subtable); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + } + + /* Prepare for the next AEST Error node */ + + DtPopSubtable (); + } + + return (AE_OK); +} + + /****************************************************************************** * * FUNCTION: DtCompileAsf diff --git a/src/acpica/source/compiler/dttable2.c b/src/acpica/source/compiler/dttable2.c index 3a0d8a22..fb41ac87 100644 --- a/src/acpica/source/compiler/dttable2.c +++ b/src/acpica/source/compiler/dttable2.c @@ -2678,13 +2678,11 @@ DtCompileWpbt ( DT_SUBTABLE *ParentTable; ACPI_TABLE_WPBT *Table; ACPI_STATUS Status; - UINT16 Length; /* Compile the main table */ - Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt, - &Subtable); + Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -2692,11 +2690,23 @@ DtCompileWpbt ( ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); + Table = ACPI_CAST_PTR (ACPI_TABLE_WPBT, ParentTable->Buffer); + + /* + * Exit now if there are no arguments specified. This is indicated by: + * The "Command-line Arguments" field has not been specified (if specified, + * it will be the last field in the field list -- after the main table). + * Set the Argument Length in the main table to zero. + */ + if (!*PFieldList) + { + Table->ArgumentsLength = 0; + return (AE_OK); + } /* Compile the argument list subtable */ - Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt0, - &Subtable); + Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt0, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -2704,11 +2714,7 @@ DtCompileWpbt ( /* Extract the length of the Arguments buffer, insert into main table */ - Length = (UINT16) Subtable->TotalLength; - Table = ACPI_CAST_PTR (ACPI_TABLE_WPBT, ParentTable->Buffer); - Table->ArgumentsLength = Length; - - ParentTable = DtPeekSubtable (); + Table->ArgumentsLength = (UINT16) Subtable->TotalLength; DtInsertSubtable (ParentTable, Subtable); return (AE_OK); } diff --git a/src/acpica/source/compiler/dttemplate.h b/src/acpica/source/compiler/dttemplate.h index 224a6a11..24c8c6f9 100644 --- a/src/acpica/source/compiler/dttemplate.h +++ b/src/acpica/source/compiler/dttemplate.h @@ -155,6 +155,100 @@ /* Templates for ACPI data tables */ +const unsigned char TemplateAest[] = +{ + 0x41,0x45,0x53,0x54,0xCC,0x02,0x00,0x00, /* 00000000 "AEST...." */ + 0x01,0x2A,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 ".*INTEL " */ + 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ + 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ + 0x04,0x06,0x21,0x20,0x00,0x80,0x00,0x00, /* 00000020 "..! ...." */ + 0x2C,0x00,0x00,0x00,0x44,0x00,0x00,0x00, /* 00000028 ",...D..." */ + 0x74,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000030 "t......." */ + 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 00000038 "....gE#." */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000048 "........" */ + 0xCD,0xFE,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000050 "........" */ + 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 00000058 "....gE#." */ + 0x33,0x33,0x22,0x22,0x00,0x00,0x00,0x00, /* 00000060 "33""...." */ + 0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, /* 00000068 "........" */ + 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 00000070 "....gE#." */ + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000078 "........" */ + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000088 "........" */ + 0x11,0x11,0x11,0x01,0x00,0x00,0x00,0x00, /* 00000090 "........" */ + 0x01,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x78, /* 00000098 ".......x" */ + 0x56,0x00,0x00,0x00,0x00,0x74,0x00,0x00, /* 000000A0 "V....t.." */ + 0x2C,0x00,0x00,0x00,0x44,0x00,0x00,0x00, /* 000000A8 ",...D..." */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B0 "........" */ + 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 000000B8 "....gE#." */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000C0 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000C8 "........" */ + 0x11,0x11,0x00,0x00,0x01,0x00,0x01,0x00, /* 000000D0 "........" */ + 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 000000D8 "....gE#." */ + 0x67,0x67,0x67,0x67,0x00,0x00,0x00,0x00, /* 000000E0 "gggg...." */ + 0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, /* 000000E8 "........" */ + 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 000000F0 "....gE#." */ + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000000F8 "........" */ + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000100 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000108 "........" */ + 0x11,0x11,0x11,0x01,0x00,0x00,0x00,0x00, /* 00000110 "........" */ + 0x01,0x60,0x00,0x00,0x2C,0x00,0x00,0x00, /* 00000118 ".`..,..." */ + 0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000120 "0......." */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000128 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000130 "........" */ + 0x00,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89, /* 00000138 "........" */ + 0x67,0x45,0x23,0x01,0xAA,0xAA,0x00,0x00, /* 00000140 "gE#....." */ + 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000148 "........" */ + 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 00000150 "....gE#." */ + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000158 "........" */ + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000160 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000168 "........" */ + 0x11,0x11,0x11,0x01,0x00,0x00,0x00,0x00, /* 00000170 "........" */ + 0x02,0x64,0x00,0x00,0x2C,0x00,0x00,0x00, /* 00000178 ".d..,..." */ + 0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000180 "4......." */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000188 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000190 "........" */ + 0x00,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89, /* 00000198 "........" */ + 0x67,0x45,0x23,0x01,0x55,0x55,0x55,0x55, /* 000001A0 "gE#.UUUU" */ + 0x66,0x66,0x66,0x66,0x01,0x00,0x00,0x00, /* 000001A8 "ffff...." */ + 0x03,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89, /* 000001B0 "........" */ + 0x67,0x45,0x23,0x01,0x00,0x00,0x00,0x00, /* 000001B8 "gE#....." */ + 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000001C0 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001C8 "........" */ + 0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x01, /* 000001D0 "........" */ + 0x00,0x00,0x00,0x00,0x03,0x74,0x00,0x00, /* 000001D8 ".....t.." */ + 0x2C,0x00,0x00,0x00,0x44,0x00,0x00,0x00, /* 000001E0 ",...D..." */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001E8 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001F0 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001F8 "........" */ + 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 00000200 "....gE#." */ + 0x33,0x33,0x33,0x33,0x44,0x44,0x44,0x44, /* 00000208 "3333DDDD" */ + 0x12,0x23,0x34,0x45,0x56,0x67,0x78,0x89, /* 00000210 ".#4EVgx." */ + 0x9A,0xAB,0xBC,0xCD,0xDE,0xEF,0xFF,0x55, /* 00000218 ".......U" */ + 0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, /* 00000220 "........" */ + 0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01, /* 00000228 "....gE#." */ + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000230 "........" */ + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000238 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000240 "........" */ + 0x11,0x11,0x11,0x01,0x00,0x00,0x00,0x00, /* 00000248 "........" */ + 0x04,0x7C,0x00,0x00,0x2C,0x00,0x00,0x00, /* 00000250 ".|..,..." */ + 0x34,0x00,0x00,0x00,0x64,0x00,0x00,0x00, /* 00000258 "4...d..." */ + 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000260 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000268 "........" */ + 0x00,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89, /* 00000270 "........" */ + 0x67,0x45,0x23,0x01,0x03,0x00,0x00,0x00, /* 00000278 "gE#....." */ + 0x88,0x88,0x77,0x77,0x00,0x00,0x00,0x00, /* 00000280 "..ww...." */ + 0x03,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89, /* 00000288 "........" */ + 0x67,0x45,0x23,0x01,0x00,0x00,0x00,0x00, /* 00000290 "gE#....." */ + 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000298 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000002A0 "........" */ + 0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x01, /* 000002A8 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000002B0 "........" */ + 0xBB,0xBB,0xAA,0xAA,0xCC,0x00,0x00,0x00, /* 000002B8 "........" */ + 0x01,0x00,0x00,0x01,0xEF,0xCD,0xAB,0x78, /* 000002C0 ".......x" */ + 0x56,0x00,0x00,0x00 /* 000002C8 "V..." */ +}; + const unsigned char TemplateAsf[] = { 0x41,0x53,0x46,0x21,0x72,0x00,0x00,0x00, /* 00000000 "ASF!r..." */ diff --git a/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c index ba454b31..7d706da6 100644 --- a/src/acpica/source/compiler/dtutils.c +++ b/src/acpica/source/compiler/dtutils.c @@ -452,6 +452,7 @@ DtGetFieldType ( break; case ACPI_DMT_UNICODE: + case ACPI_DMT_WPBT_UNICODE: Type = DT_FIELD_TYPE_UNICODE; break; @@ -586,6 +587,10 @@ DtGetFieldLength ( case ACPI_DMT_RGRT: case ACPI_DMT_SDEV: case ACPI_DMT_SRAT: + case ACPI_DMT_AEST: + case ACPI_DMT_AEST_RES: + case ACPI_DMT_AEST_XFACE: + case ACPI_DMT_AEST_XRUPT: case ACPI_DMT_ASF: case ACPI_DMT_HESTNTYP: case ACPI_DMT_FADTPM: @@ -616,6 +621,8 @@ DtGetFieldLength ( break; case ACPI_DMT_UINT32: + case ACPI_DMT_AEST_CACHE: + case ACPI_DMT_AEST_GIC: case ACPI_DMT_NAME4: case ACPI_DMT_SIG: case ACPI_DMT_LPIT: @@ -734,12 +741,13 @@ DtGetFieldLength ( break; case ACPI_DMT_UNICODE: + case ACPI_DMT_WPBT_UNICODE: Value = DtGetFieldValue (Field); /* TBD: error if Value is NULL? (as below?) */ - ByteLength = (strlen (Value) + 1) * sizeof(UINT16); + ByteLength = (strlen (Value) + 1) * sizeof (UINT16); break; default: diff --git a/src/acpica/source/components/dispatcher/dswexec.c b/src/acpica/source/components/dispatcher/dswexec.c index addc06e1..636067bf 100644 --- a/src/acpica/source/components/dispatcher/dswexec.c +++ b/src/acpica/source/components/dispatcher/dswexec.c @@ -737,7 +737,7 @@ AcpiDsExecEndOp ( if (ACPI_SUCCESS (Status)) { Status = AcpiExWriteDataToField (ObjDesc, Op->Common.Node->Object, NULL); - if ACPI_FAILURE (Status) + if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "While writing to buffer field")); } diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h index 9b584d67..839c0edd 100644 --- a/src/acpica/source/include/acdisasm.h +++ b/src/acpica/source/include/acdisasm.h @@ -250,6 +250,12 @@ typedef enum /* Types that are specific to particular ACPI tables */ + ACPI_DMT_AEST, + ACPI_DMT_AEST_CACHE, + ACPI_DMT_AEST_GIC, + ACPI_DMT_AEST_RES, + ACPI_DMT_AEST_XFACE, + ACPI_DMT_AEST_XRUPT, ACPI_DMT_ASF, ACPI_DMT_CEDT, ACPI_DMT_DMAR, @@ -283,6 +289,7 @@ typedef enum ACPI_DMT_SRAT, ACPI_DMT_TPM2, ACPI_DMT_VIOT, + ACPI_DMT_WPBT_UNICODE, /* Special opcodes */ @@ -360,6 +367,17 @@ extern const char *AcpiGbl_AccessTypes[]; extern const char *AcpiGbl_UpdateRules[]; extern const char *AcpiGbl_MatchOps[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestHdr[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestProcError[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestCacheRsrc[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestTlbRsrc[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestGenRsrc[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestMemError[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestSmmuError[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestVendorError[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestGicError[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestXface[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoAestXrupt[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoAsf0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoAsf1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoAsf1a[]; @@ -681,6 +699,10 @@ AcpiDmDumpUnicode ( UINT32 BufferOffset, UINT32 ByteLength); +void +AcpiDmDumpAest ( + ACPI_TABLE_HEADER *Table); + void AcpiDmDumpAsf ( ACPI_TABLE_HEADER *Table); diff --git a/src/acpica/source/include/acnames.h b/src/acpica/source/include/acnames.h index 5e762906..9075ca74 100644 --- a/src/acpica/source/include/acnames.h +++ b/src/acpica/source/include/acnames.h @@ -162,6 +162,7 @@ #define METHOD_NAME__CLS "_CLS" #define METHOD_NAME__CRS "_CRS" #define METHOD_NAME__DDN "_DDN" +#define METHOD_NAME__DIS "_DIS" #define METHOD_NAME__DMA "_DMA" #define METHOD_NAME__HID "_HID" #define METHOD_NAME__INI "_INI" diff --git a/src/acpica/source/include/acoutput.h b/src/acpica/source/include/acoutput.h index 46774ad0..b72c9a94 100644 --- a/src/acpica/source/include/acoutput.h +++ b/src/acpica/source/include/acoutput.h @@ -561,7 +561,7 @@ /* Conditional execution */ #define ACPI_DEBUG_EXEC(a) a -#define ACPI_DEBUG_ONLY_MEMBERS(a) a; +#define ACPI_DEBUG_ONLY_MEMBERS(a) a #define _VERBOSE_STRUCTURES diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h index dc459c9a..7610f2e3 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 0x20210604 +#define ACPI_CA_VERSION 0x20210730 #include "acconfig.h" #include "actypes.h" diff --git a/src/acpica/source/include/actbinfo.h b/src/acpica/source/include/actbinfo.h index 027e6085..f2a1a48c 100644 --- a/src/acpica/source/include/actbinfo.h +++ b/src/acpica/source/include/actbinfo.h @@ -205,11 +205,23 @@ #define ACPI_WDDT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WDDT,f) #define ACPI_WDRT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WDRT,f) #define ACPI_WPBT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WPBT,f) +#define ACPI_WPBT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_WPBT_UNICODE,f) #define ACPI_WSMT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WSMT,f) #define ACPI_XENV_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_XENV,f) /* Subtables */ +#define ACPI_AESTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_HEADER,f) +#define ACPI_AEST0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_PROCESSOR,f) +#define ACPI_AEST0A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_PROCESSOR_CACHE,f) +#define ACPI_AEST0B_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_PROCESSOR_TLB,f) +#define ACPI_AEST0C_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_PROCESSOR_GENERIC,f) +#define ACPI_AEST1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_MEMORY,f) +#define ACPI_AEST2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_SMMU,f) +#define ACPI_AEST3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_VENDOR,f) +#define ACPI_AEST4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_GIC,f) +#define ACPI_AEST0D_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_NODE_INTERFACE,f) +#define ACPI_AEST0E_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_AEST_NODE_INTERRUPT,f) #define ACPI_ASF0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_INFO,f) #define ACPI_ASF1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_ALERT,f) #define ACPI_ASF1a_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_ALERT_DATA,f) @@ -379,6 +391,9 @@ /* Flags */ +#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_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/actbl1.h b/src/acpica/source/include/actbl1.h index 136ebf12..09e68293 100644 --- a/src/acpica/source/include/actbl1.h +++ b/src/acpica/source/include/actbl1.h @@ -168,6 +168,7 @@ * file. Useful because they make it more difficult to inadvertently type in * the wrong signature. */ +#define ACPI_SIG_AEST "AEST" /* Arm Error Source Table */ #define ACPI_SIG_ASF "ASF!" /* Alert Standard Format table */ #define ACPI_SIG_BERT "BERT" /* Boot Error Record Table */ #define ACPI_SIG_BGRT "BGRT" /* Boot Graphics Resource Table */ @@ -701,7 +702,7 @@ typedef struct acpi_csrt_descriptor * DBG2 - Debug Port Table 2 * Version 0 (Both main table and subtables) * - * Conforms to "Microsoft Debug Port Table 2 (DBG2)", December 10, 2015 + * Conforms to "Microsoft Debug Port Table 2 (DBG2)", September 21, 2020 * ******************************************************************************/ @@ -758,11 +759,24 @@ typedef struct acpi_dbg2_device #define ACPI_DBG2_16550_COMPATIBLE 0x0000 #define ACPI_DBG2_16550_SUBSET 0x0001 +#define ACPI_DBG2_MAX311XE_SPI 0x0002 #define ACPI_DBG2_ARM_PL011 0x0003 +#define ACPI_DBG2_MSM8X60 0x0004 +#define ACPI_DBG2_16550_NVIDIA 0x0005 +#define ACPI_DBG2_TI_OMAP 0x0006 +#define ACPI_DBG2_APM88XXXX 0x0008 +#define ACPI_DBG2_MSM8974 0x0009 +#define ACPI_DBG2_SAM5250 0x000A +#define ACPI_DBG2_INTEL_USIF 0x000B +#define ACPI_DBG2_IMX6 0x000C #define ACPI_DBG2_ARM_SBSA_32BIT 0x000D #define ACPI_DBG2_ARM_SBSA_GENERIC 0x000E #define ACPI_DBG2_ARM_DCC 0x000F #define ACPI_DBG2_BCM2835 0x0010 +#define ACPI_DBG2_SDM845_1_8432MHZ 0x0011 +#define ACPI_DBG2_16550_WITH_GAS 0x0012 +#define ACPI_DBG2_SDM845_7_372MHZ 0x0013 +#define ACPI_DBG2_INTEL_LPSS 0x0014 #define ACPI_DBG2_1394_STANDARD 0x0000 diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h index cb237a6b..58c1570c 100644 --- a/src/acpica/source/include/actbl2.h +++ b/src/acpica/source/include/actbl2.h @@ -213,6 +213,193 @@ */ +/******************************************************************************* + * + * AEST - Arm Error Source Table + * + * Conforms to: ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document + * September 2020. + * + ******************************************************************************/ + +typedef struct acpi_table_aest +{ + ACPI_TABLE_HEADER Header; + void *NodeArray[]; + +} ACPI_TABLE_AEST; + +/* Common Subtable header - one per Node Structure (Subtable) */ + +typedef struct acpi_aest_hdr +{ + UINT8 Type; + UINT16 Length; + UINT8 Reserved; + UINT32 NodeSpecificOffset; + UINT32 NodeInterfaceOffset; + UINT32 NodeInterruptOffset; + UINT32 NodeInterruptCount; + UINT64 TimestampRate; + UINT64 Reserved1; + UINT64 ErrorInjectionRate; + +} ACPI_AEST_HEADER; + +/* Values for Type above */ + +#define ACPI_AEST_PROCESSOR_ERROR_NODE 0 +#define ACPI_AEST_MEMORY_ERROR_NODE 1 +#define ACPI_AEST_SMMU_ERROR_NODE 2 +#define ACPI_AEST_VENDOR_ERROR_NODE 3 +#define ACPI_AEST_GIC_ERROR_NODE 4 +#define ACPI_AEST_NODE_TYPE_RESERVED 5 /* 5 and above are reserved */ + + +/* + * AEST subtables (Error nodes) + */ + +/* 0: Processor Error */ + +typedef struct acpi_aest_processor +{ + UINT32 ProcessorId; + UINT8 ResourceType; + UINT8 Reserved; + UINT8 Flags; + UINT8 Revision; + UINT64 ProcessorAffinity; + +} ACPI_AEST_PROCESSOR; + +/* Values for ResourceType above, related structs below */ + +#define ACPI_AEST_CACHE_RESOURCE 0 +#define ACPI_AEST_TLB_RESOURCE 1 +#define ACPI_AEST_GENERIC_RESOURCE 2 +#define ACPI_AEST_RESOURCE_RESERVED 3 /* 3 and above are reserved */ + +/* 0R: Processor Cache Resource Substructure */ + +typedef struct acpi_aest_processor_cache +{ + UINT32 CacheReference; + UINT32 Reserved; + +} ACPI_AEST_PROCESSOR_CACHE; + +/* Values for CacheType above */ + +#define ACPI_AEST_CACHE_DATA 0 +#define ACPI_AEST_CACHE_INSTRUCTION 1 +#define ACPI_AEST_CACHE_UNIFIED 2 +#define ACPI_AEST_CACHE_RESERVED 3 /* 3 and above are reserved */ + +/* 1R: Processor TLB Resource Substructure */ + +typedef struct acpi_aest_processor_tlb +{ + UINT32 TlbLevel; + UINT32 Reserved; + +} ACPI_AEST_PROCESSOR_TLB; + +/* 2R: Processor Generic Resource Substructure */ + +typedef struct acpi_aest_processor_generic +{ + UINT8 *Resource; + +} ACPI_AEST_PROCESSOR_GENERIC; + +/* 1: Memory Error */ + +typedef struct acpi_aest_memory +{ + UINT32 SratProximityDomain; + +} ACPI_AEST_MEMORY; + +/* 2: Smmu Error */ + +typedef struct acpi_aest_smmu +{ + UINT32 IortNodeReference; + UINT32 SubcomponentReference; + +} ACPI_AEST_SMMU; + +/* 3: Vendor Defined */ + +typedef struct acpi_aest_vendor +{ + UINT32 AcpiHid; + UINT32 AcpiUid; + UINT8 VendorSpecificData[16]; + +} ACPI_AEST_VENDOR; + +/* 4: Gic Error */ + +typedef struct acpi_aest_gic +{ + UINT32 InterfaceType; + UINT32 InstanceId; + +} ACPI_AEST_GIC; + +/* Values for InterfaceType above */ + +#define ACPI_AEST_GIC_CPU 0 +#define ACPI_AEST_GIC_DISTRIBUTOR 1 +#define ACPI_AEST_GIC_REDISTRIBUTOR 2 +#define ACPI_AEST_GIC_ITS 3 +#define ACPI_AEST_GIC_RESERVED 4 /* 4 and above are reserved */ + + +/* Node Interface Structure */ + +typedef struct acpi_aest_node_interface +{ + UINT8 Type; + UINT8 Reserved[3]; + UINT32 Flags; + UINT64 Address; + UINT32 ErrorRecordIndex; + UINT32 ErrorRecordCount; + UINT64 ErrorRecordImplemented; + UINT64 ErrorStatusReporting; + UINT64 AddressingMode; + +} ACPI_AEST_NODE_INTERFACE; + +/* Values for Type field above */ + +#define ACPI_AEST_NODE_SYSTEM_REGISTER 0 +#define ACPI_AEST_NODE_MEMORY_MAPPED 1 +#define ACPI_AEST_XFACE_RESERVED 2 /* 2 and above are reserved */ + +/* Node Interrupt Structure */ + +typedef struct acpi_aest_node_interrupt +{ + UINT8 Type; + UINT8 Reserved[2]; + UINT8 Flags; + UINT32 Gsiv; + UINT8 IortId; + UINT8 Reserved1[3]; + +} ACPI_AEST_NODE_INTERRUPT; + +/* Values for Type field above */ + +#define ACPI_AEST_NODE_FAULT_HANDLING 0 +#define ACPI_AEST_NODE_ERROR_RECOVERY 1 +#define ACPI_AEST_XRUPT_RESERVED 2 /* 2 and above are reserved */ + + /******************************************************************************* * * BDAT - BIOS Data ACPI Table @@ -2163,6 +2350,13 @@ typedef struct acpi_table_prmt_header } ACPI_TABLE_PRMT_HEADER; +typedef struct acpi_prmt_module_header +{ + UINT16 Revision; + UINT16 Length; + +} ACPI_PRMT_MODULE_HEADER; + typedef struct acpi_prmt_module_info { UINT16 Revision; diff --git a/src/acpica/source/include/actbl3.h b/src/acpica/source/include/actbl3.h index d4260a1d..d0f7025f 100644 --- a/src/acpica/source/include/actbl3.h +++ b/src/acpica/source/include/actbl3.h @@ -955,6 +955,12 @@ typedef struct acpi_table_wpbt } ACPI_TABLE_WPBT; +typedef struct acpi_wpbt_unicode +{ + UINT16 *UnicodeString; + +} ACPI_WPBT_UNICODE; + /******************************************************************************* *