Message ID | 20180209183443.23772-2-colin.king@canonical.com |
---|---|
State | Accepted |
Headers | show |
Series | Update ACPICA to 20180209 | expand |
On 02/10/2018 02:34 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/pipermail/devel/2018-February/001722.html > > Signed-off-by: Colin Ian King <colin.king@canonical.com> > --- > src/acpica/source/common/dmtbdump.c | 3829 -------------------- > src/acpica/source/common/dmtbdump1.c | 1542 ++++++++ > src/acpica/source/common/dmtbdump2.c | 2074 +++++++++++ > src/acpica/source/common/dmtbdump3.c | 693 ++++ > src/acpica/source/common/dmtbinfo.c | 2906 --------------- > src/acpica/source/common/dmtbinfo1.c | 1200 ++++++ > src/acpica/source/common/dmtbinfo2.c | 1541 ++++++++ > src/acpica/source/common/dmtbinfo3.c | 733 ++++ > src/acpica/source/compiler/Makefile.am | 6 + > src/acpica/source/compiler/aslbtypes.c | 1 + > src/acpica/source/compiler/aslerror.c | 7 + > src/acpica/source/compiler/aslfold.c | 54 +- > src/acpica/source/compiler/aslload.c | 12 +- > src/acpica/source/compiler/aslmessages.c | 4 +- > src/acpica/source/compiler/aslmessages.h | 2 + > src/acpica/source/compiler/dtcompile.c | 18 +- > src/acpica/source/compiler/dtcompiler.h | 3 +- > src/acpica/source/compiler/dtexpress.c | 42 +- > src/acpica/source/compiler/dtparser.l | 58 +- > src/acpica/source/compiler/dtparser.y | 102 +- > src/acpica/source/compiler/dttable.c | 16 +- > src/acpica/source/compiler/dttable1.c | 118 +- > src/acpica/source/compiler/dttable2.c | 114 +- > src/acpica/source/components/dispatcher/dsargs.c | 1 + > src/acpica/source/components/dispatcher/dsopcode.c | 4 +- > .../source/components/dispatcher/dspkginit.c | 158 +- > src/acpica/source/components/dispatcher/dswexec.c | 4 +- > src/acpica/source/components/dispatcher/dswload.c | 2 +- > src/acpica/source/components/executer/exconvrt.c | 1 + > src/acpica/source/components/executer/exnames.c | 7 +- > src/acpica/source/components/executer/exresop.c | 1 + > src/acpica/source/components/namespace/nseval.c | 11 +- > src/acpica/source/components/namespace/nsinit.c | 7 +- > src/acpica/source/components/namespace/nsnames.c | 3 + > src/acpica/source/components/namespace/nsparse.c | 8 +- > src/acpica/source/components/parser/psargs.c | 7 +- > src/acpica/source/components/parser/psloop.c | 4 +- > src/acpica/source/components/parser/psparse.c | 2 +- > src/acpica/source/components/parser/pstree.c | 1 + > src/acpica/source/components/utilities/utcache.c | 5 +- > src/acpica/source/components/utilities/utdelete.c | 16 +- > src/acpica/source/include/acopcode.h | 14 +- > src/acpica/source/include/acpixf.h | 8 +- > src/acpica/source/include/actbl1.h | 2526 +++++++------ > src/acpica/source/include/actbl2.h | 2624 +++++++------- > src/acpica/source/include/actbl3.h | 1136 +++--- > src/acpica/source/include/amlcode.h | 21 +- > src/acpica/source/include/platform/aclinux.h | 1 + > 48 files changed, 11390 insertions(+), 10257 deletions(-) > create mode 100644 src/acpica/source/common/dmtbdump1.c > create mode 100644 src/acpica/source/common/dmtbdump2.c > create mode 100644 src/acpica/source/common/dmtbdump3.c > create mode 100644 src/acpica/source/common/dmtbinfo1.c > create mode 100644 src/acpica/source/common/dmtbinfo2.c > create mode 100644 src/acpica/source/common/dmtbinfo3.c > > diff --git a/src/acpica/source/common/dmtbdump.c b/src/acpica/source/common/dmtbdump.c > index c9699d5f..cf2ed6d6 100644 > --- a/src/acpica/source/common/dmtbdump.c > +++ b/src/acpica/source/common/dmtbdump.c > @@ -603,3832 +603,3 @@ AcpiDmValidateFadtLength ( > "found %X expected %X\n", > Revision, Length, ExpectedLength); > } > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpAsf > - * > - * PARAMETERS: Table - A ASF table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a ASF table > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpAsf ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - UINT32 Offset = sizeof (ACPI_TABLE_HEADER); > - ACPI_ASF_INFO *Subtable; > - ACPI_DMTABLE_INFO *InfoTable; > - ACPI_DMTABLE_INFO *DataInfoTable = NULL; > - UINT8 *DataTable = NULL; > - UINT32 DataCount = 0; > - UINT32 DataLength = 0; > - UINT32 DataOffset = 0; > - UINT32 i; > - UINT8 Type; > - > - > - /* No main table, only subtables */ > - > - Subtable = ACPI_ADD_PTR (ACPI_ASF_INFO, Table, Offset); > - while (Offset < Table->Length) > - { > - /* Common subtable header */ > - > - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > - Subtable->Header.Length, AcpiDmTableInfoAsfHdr); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* The actual type is the lower 7 bits of Type */ > - > - Type = (UINT8) (Subtable->Header.Type & 0x7F); > - > - switch (Type) > - { > - case ACPI_ASF_TYPE_INFO: > - > - InfoTable = AcpiDmTableInfoAsf0; > - break; > - > - case ACPI_ASF_TYPE_ALERT: > - > - InfoTable = AcpiDmTableInfoAsf1; > - DataInfoTable = AcpiDmTableInfoAsf1a; > - DataTable = ACPI_ADD_PTR (UINT8, Subtable, sizeof (ACPI_ASF_ALERT)); > - DataCount = ACPI_CAST_PTR (ACPI_ASF_ALERT, Subtable)->Alerts; > - DataLength = ACPI_CAST_PTR (ACPI_ASF_ALERT, Subtable)->DataLength; > - DataOffset = Offset + sizeof (ACPI_ASF_ALERT); > - break; > - > - case ACPI_ASF_TYPE_CONTROL: > - > - InfoTable = AcpiDmTableInfoAsf2; > - DataInfoTable = AcpiDmTableInfoAsf2a; > - DataTable = ACPI_ADD_PTR (UINT8, Subtable, sizeof (ACPI_ASF_REMOTE)); > - DataCount = ACPI_CAST_PTR (ACPI_ASF_REMOTE, Subtable)->Controls; > - DataLength = ACPI_CAST_PTR (ACPI_ASF_REMOTE, Subtable)->DataLength; > - DataOffset = Offset + sizeof (ACPI_ASF_REMOTE); > - break; > - > - case ACPI_ASF_TYPE_BOOT: > - > - InfoTable = AcpiDmTableInfoAsf3; > - break; > - > - case ACPI_ASF_TYPE_ADDRESS: > - > - InfoTable = AcpiDmTableInfoAsf4; > - DataTable = ACPI_ADD_PTR (UINT8, Subtable, sizeof (ACPI_ASF_ADDRESS)); > - DataLength = ACPI_CAST_PTR (ACPI_ASF_ADDRESS, Subtable)->Devices; > - DataOffset = Offset + sizeof (ACPI_ASF_ADDRESS); > - break; > - > - default: > - > - AcpiOsPrintf ("\n**** Unknown ASF subtable type 0x%X\n", > - Subtable->Header.Type); > - return; > - } > - > - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > - Subtable->Header.Length, InfoTable); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Dump variable-length extra data */ > - > - switch (Type) > - { > - case ACPI_ASF_TYPE_ALERT: > - case ACPI_ASF_TYPE_CONTROL: > - > - for (i = 0; i < DataCount; i++) > - { > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Table->Length, DataOffset, > - DataTable, DataLength, DataInfoTable); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - DataTable = ACPI_ADD_PTR (UINT8, DataTable, DataLength); > - DataOffset += DataLength; > - } > - break; > - > - case ACPI_ASF_TYPE_ADDRESS: > - > - for (i = 0; i < DataLength; i++) > - { > - if (!(i % 16)) > - { > - AcpiDmLineHeader (DataOffset, 1, "Addresses"); > - } > - > - AcpiOsPrintf ("%2.2X ", *DataTable); > - DataTable++; > - DataOffset++; > - > - if (DataOffset > Table->Length) > - { > - AcpiOsPrintf ( > - "**** ACPI table terminates in the middle of a " > - "data structure! (ASF! table)\n"); > - return; > - } > - } > - > - AcpiOsPrintf ("\n"); > - break; > - > - default: > - > - break; > - } > - > - AcpiOsPrintf ("\n"); > - > - /* Point to next subtable */ > - > - if (!Subtable->Header.Length) > - { > - AcpiOsPrintf ("Invalid zero subtable header length\n"); > - return; > - } > - > - Offset += Subtable->Header.Length; > - Subtable = ACPI_ADD_PTR (ACPI_ASF_INFO, Subtable, > - Subtable->Header.Length); > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpCpep > - * > - * PARAMETERS: Table - A CPEP table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a CPEP. This table type consists > - * of an open-ended number of subtables. > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpCpep ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - ACPI_CPEP_POLLING *Subtable; > - UINT32 Length = Table->Length; > - UINT32 Offset = sizeof (ACPI_TABLE_CPEP); > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoCpep); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Subtables */ > - > - Subtable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Table, Offset); > - while (Offset < Table->Length) > - { > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Length, Offset, Subtable, > - Subtable->Header.Length, AcpiDmTableInfoCpep0); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Point to next subtable */ > - > - Offset += Subtable->Header.Length; > - Subtable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Subtable, > - Subtable->Header.Length); > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpCsrt > - * > - * PARAMETERS: Table - A CSRT table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a CSRT. This table type consists > - * of an open-ended number of subtables. > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpCsrt ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - ACPI_CSRT_GROUP *Subtable; > - ACPI_CSRT_SHARED_INFO *SharedInfoTable; > - ACPI_CSRT_DESCRIPTOR *SubSubtable; > - UINT32 Length = Table->Length; > - UINT32 Offset = sizeof (ACPI_TABLE_CSRT); > - UINT32 SubOffset; > - UINT32 SubSubOffset; > - UINT32 InfoLength; > - > - > - /* The main table only contains the ACPI header, thus already handled */ > - > - /* Subtables (Resource Groups) */ > - > - Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Table, Offset); > - while (Offset < Table->Length) > - { > - /* Resource group subtable */ > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Length, Offset, Subtable, > - Subtable->Length, AcpiDmTableInfoCsrt0); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Shared info subtable (One per resource group) */ > - > - SubOffset = sizeof (ACPI_CSRT_GROUP); > - SharedInfoTable = ACPI_ADD_PTR (ACPI_CSRT_SHARED_INFO, Table, > - Offset + SubOffset); > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Length, Offset + SubOffset, SharedInfoTable, > - sizeof (ACPI_CSRT_SHARED_INFO), AcpiDmTableInfoCsrt1); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - SubOffset += Subtable->SharedInfoLength; > - > - /* Sub-Subtables (Resource Descriptors) */ > - > - SubSubtable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, Table, > - Offset + SubOffset); > - > - while ((SubOffset < Subtable->Length) && > - ((Offset + SubOffset) < Table->Length)) > - { > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubtable, > - SubSubtable->Length, AcpiDmTableInfoCsrt2); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - SubSubOffset = sizeof (ACPI_CSRT_DESCRIPTOR); > - > - /* Resource-specific info buffer */ > - > - InfoLength = SubSubtable->Length - SubSubOffset; > - if (InfoLength) > - { > - Status = AcpiDmDumpTable (Length, > - Offset + SubOffset + SubSubOffset, Table, > - InfoLength, AcpiDmTableInfoCsrt2a); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - SubSubOffset += InfoLength; > - } > - > - /* Point to next sub-subtable */ > - > - SubOffset += SubSubtable->Length; > - SubSubtable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, SubSubtable, > - SubSubtable->Length); > - } > - > - /* Point to next subtable */ > - > - Offset += Subtable->Length; > - Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Subtable, > - Subtable->Length); > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpDbg2 > - * > - * PARAMETERS: Table - A DBG2 table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a DBG2. This table type consists > - * of an open-ended number of subtables. > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpDbg2 ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - ACPI_DBG2_DEVICE *Subtable; > - UINT32 Length = Table->Length; > - UINT32 Offset = sizeof (ACPI_TABLE_DBG2); > - UINT32 i; > - UINT32 ArrayOffset; > - UINT32 AbsoluteOffset; > - UINT8 *Array; > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDbg2); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Subtables */ > - > - Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Table, Offset); > - while (Offset < Table->Length) > - { > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Length, Offset, Subtable, > - Subtable->Length, AcpiDmTableInfoDbg2Device); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Dump the BaseAddress array */ > - > - for (i = 0; i < Subtable->RegisterCount; i++) > - { > - ArrayOffset = Subtable->BaseAddressOffset + > - (sizeof (ACPI_GENERIC_ADDRESS) * i); > - AbsoluteOffset = Offset + ArrayOffset; > - Array = (UINT8 *) Subtable + ArrayOffset; > - > - Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, > - Subtable->Length, AcpiDmTableInfoDbg2Addr); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - } > - > - /* Dump the AddressSize array */ > - > - for (i = 0; i < Subtable->RegisterCount; i++) > - { > - ArrayOffset = Subtable->AddressSizeOffset + > - (sizeof (UINT32) * i); > - AbsoluteOffset = Offset + ArrayOffset; > - Array = (UINT8 *) Subtable + ArrayOffset; > - > - Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, > - Subtable->Length, AcpiDmTableInfoDbg2Size); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - } > - > - /* Dump the Namestring (required) */ > - > - AcpiOsPrintf ("\n"); > - ArrayOffset = Subtable->NamepathOffset; > - AbsoluteOffset = Offset + ArrayOffset; > - Array = (UINT8 *) Subtable + ArrayOffset; > - > - Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, > - Subtable->Length, AcpiDmTableInfoDbg2Name); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Dump the OemData (optional) */ > - > - if (Subtable->OemDataOffset) > - { > - Status = AcpiDmDumpTable (Length, Offset + Subtable->OemDataOffset, > - Table, Subtable->OemDataLength, > - AcpiDmTableInfoDbg2OemData); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - } > - > - /* Point to next subtable */ > - > - Offset += Subtable->Length; > - Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Subtable, > - Subtable->Length); > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpDmar > - * > - * PARAMETERS: Table - A DMAR table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a DMAR. This table type consists > - * of an open-ended number of subtables. > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpDmar ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - ACPI_DMAR_HEADER *Subtable; > - UINT32 Length = Table->Length; > - UINT32 Offset = sizeof (ACPI_TABLE_DMAR); > - ACPI_DMTABLE_INFO *InfoTable; > - ACPI_DMAR_DEVICE_SCOPE *ScopeTable; > - UINT32 ScopeOffset; > - UINT8 *PciPath; > - UINT32 PathOffset; > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDmar); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Subtables */ > - > - Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Table, Offset); > - while (Offset < Table->Length) > - { > - /* Common subtable header */ > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Length, Offset, Subtable, > - Subtable->Length, AcpiDmTableInfoDmarHdr); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - AcpiOsPrintf ("\n"); > - > - switch (Subtable->Type) > - { > - case ACPI_DMAR_TYPE_HARDWARE_UNIT: > - > - InfoTable = AcpiDmTableInfoDmar0; > - ScopeOffset = sizeof (ACPI_DMAR_HARDWARE_UNIT); > - break; > - > - case ACPI_DMAR_TYPE_RESERVED_MEMORY: > - > - InfoTable = AcpiDmTableInfoDmar1; > - ScopeOffset = sizeof (ACPI_DMAR_RESERVED_MEMORY); > - break; > - > - case ACPI_DMAR_TYPE_ROOT_ATS: > - > - InfoTable = AcpiDmTableInfoDmar2; > - ScopeOffset = sizeof (ACPI_DMAR_ATSR); > - break; > - > - case ACPI_DMAR_TYPE_HARDWARE_AFFINITY: > - > - InfoTable = AcpiDmTableInfoDmar3; > - ScopeOffset = sizeof (ACPI_DMAR_RHSA); > - break; > - > - case ACPI_DMAR_TYPE_NAMESPACE: > - > - InfoTable = AcpiDmTableInfoDmar4; > - ScopeOffset = sizeof (ACPI_DMAR_ANDD); > - break; > - > - default: > - > - AcpiOsPrintf ("\n**** Unknown DMAR subtable type 0x%X\n\n", > - Subtable->Type); > - return; > - } > - > - Status = AcpiDmDumpTable (Length, Offset, Subtable, > - Subtable->Length, InfoTable); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* > - * Dump the optional device scope entries > - */ > - if ((Subtable->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) || > - (Subtable->Type == ACPI_DMAR_TYPE_NAMESPACE)) > - { > - /* These types do not support device scopes */ > - > - goto NextSubtable; > - } > - > - ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, Subtable, ScopeOffset); > - while (ScopeOffset < Subtable->Length) > - { > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Length, Offset + ScopeOffset, ScopeTable, > - ScopeTable->Length, AcpiDmTableInfoDmarScope); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - AcpiOsPrintf ("\n"); > - > - /* Dump the PCI Path entries for this device scope */ > - > - PathOffset = sizeof (ACPI_DMAR_DEVICE_SCOPE); /* Path entries start at this offset */ > - > - PciPath = ACPI_ADD_PTR (UINT8, ScopeTable, > - sizeof (ACPI_DMAR_DEVICE_SCOPE)); > - > - while (PathOffset < ScopeTable->Length) > - { > - AcpiDmLineHeader ((PathOffset + ScopeOffset + Offset), 2, > - "PCI Path"); > - AcpiOsPrintf ("%2.2X,%2.2X\n", PciPath[0], PciPath[1]); > - > - /* Point to next PCI Path entry */ > - > - PathOffset += 2; > - PciPath += 2; > - AcpiOsPrintf ("\n"); > - } > - > - /* Point to next device scope entry */ > - > - ScopeOffset += ScopeTable->Length; > - ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, > - ScopeTable, ScopeTable->Length); > - } > - > -NextSubtable: > - /* Point to next subtable */ > - > - Offset += Subtable->Length; > - Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Subtable, > - Subtable->Length); > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpDrtm > - * > - * PARAMETERS: Table - A DRTM table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a DRTM. > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpDrtm ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - UINT32 Offset; > - ACPI_DRTM_VTABLE_LIST *DrtmVtl; > - ACPI_DRTM_RESOURCE_LIST *DrtmRl; > - ACPI_DRTM_DPS_ID *DrtmDps; > - UINT32 Count; > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, > - AcpiDmTableInfoDrtm); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - Offset = sizeof (ACPI_TABLE_DRTM); > - > - /* Sub-tables */ > - > - /* Dump ValidatedTable length */ > - > - DrtmVtl = ACPI_ADD_PTR (ACPI_DRTM_VTABLE_LIST, Table, Offset); > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Table->Length, Offset, > - DrtmVtl, ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST, ValidatedTables), > - AcpiDmTableInfoDrtm0); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - Offset += ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST, ValidatedTables); > - > - /* Dump Validated table addresses */ > - > - Count = 0; > - while ((Offset < Table->Length) && > - (DrtmVtl->ValidatedTableCount > Count)) > - { > - Status = AcpiDmDumpTable (Table->Length, Offset, > - ACPI_ADD_PTR (void, Table, Offset), sizeof (UINT64), > - AcpiDmTableInfoDrtm0a); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - Offset += sizeof (UINT64); > - Count++; > - } > - > - /* Dump ResourceList length */ > - > - DrtmRl = ACPI_ADD_PTR (ACPI_DRTM_RESOURCE_LIST, Table, Offset); > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Table->Length, Offset, > - DrtmRl, ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST, Resources), > - AcpiDmTableInfoDrtm1); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - Offset += ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST, Resources); > - > - /* Dump the Resource List */ > - > - Count = 0; > - while ((Offset < Table->Length) && > - (DrtmRl->ResourceCount > Count)) > - { > - Status = AcpiDmDumpTable (Table->Length, Offset, > - ACPI_ADD_PTR (void, Table, Offset), > - sizeof (ACPI_DRTM_RESOURCE), AcpiDmTableInfoDrtm1a); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - Offset += sizeof (ACPI_DRTM_RESOURCE); > - Count++; > - } > - > - /* Dump DPS */ > - > - DrtmDps = ACPI_ADD_PTR (ACPI_DRTM_DPS_ID, Table, Offset); > - AcpiOsPrintf ("\n"); > - (void) AcpiDmDumpTable (Table->Length, Offset, > - DrtmDps, sizeof (ACPI_DRTM_DPS_ID), AcpiDmTableInfoDrtm2); > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpEinj > - * > - * PARAMETERS: Table - A EINJ table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a EINJ. This table type consists > - * of an open-ended number of subtables. > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpEinj ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - ACPI_WHEA_HEADER *Subtable; > - UINT32 Length = Table->Length; > - UINT32 Offset = sizeof (ACPI_TABLE_EINJ); > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoEinj); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Subtables */ > - > - Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset); > - while (Offset < Table->Length) > - { > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Length, Offset, Subtable, > - sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoEinj0); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Point to next subtable (each subtable is of fixed length) */ > - > - Offset += sizeof (ACPI_WHEA_HEADER); > - Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Subtable, > - sizeof (ACPI_WHEA_HEADER)); > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpErst > - * > - * PARAMETERS: Table - A ERST table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a ERST. This table type consists > - * of an open-ended number of subtables. > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpErst ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - ACPI_WHEA_HEADER *Subtable; > - UINT32 Length = Table->Length; > - UINT32 Offset = sizeof (ACPI_TABLE_ERST); > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoErst); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Subtables */ > - > - Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset); > - while (Offset < Table->Length) > - { > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Length, Offset, Subtable, > - sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoErst0); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Point to next subtable (each subtable is of fixed length) */ > - > - Offset += sizeof (ACPI_WHEA_HEADER); > - Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Subtable, > - sizeof (ACPI_WHEA_HEADER)); > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpFpdt > - * > - * PARAMETERS: Table - A FPDT table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a FPDT. This table type consists > - * of an open-ended number of subtables. > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpFpdt ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - ACPI_FPDT_HEADER *Subtable; > - UINT32 Length = Table->Length; > - UINT32 Offset = sizeof (ACPI_TABLE_FPDT); > - ACPI_DMTABLE_INFO *InfoTable; > - > - > - /* There is no main table (other than the standard ACPI header) */ > - > - /* Subtables */ > - > - Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Table, Offset); > - while (Offset < Table->Length) > - { > - /* Common subtable header */ > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Length, Offset, Subtable, > - Subtable->Length, AcpiDmTableInfoFpdtHdr); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - switch (Subtable->Type) > - { > - case ACPI_FPDT_TYPE_BOOT: > - > - InfoTable = AcpiDmTableInfoFpdt0; > - break; > - > - case ACPI_FPDT_TYPE_S3PERF: > - > - InfoTable = AcpiDmTableInfoFpdt1; > - break; > - > - default: > - > - AcpiOsPrintf ("\n**** Unknown FPDT subtable type 0x%X\n\n", > - Subtable->Type); > - > - /* Attempt to continue */ > - > - if (!Subtable->Length) > - { > - AcpiOsPrintf ("Invalid zero length subtable\n"); > - return; > - } > - goto NextSubtable; > - } > - > - Status = AcpiDmDumpTable (Length, Offset, Subtable, > - Subtable->Length, InfoTable); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > -NextSubtable: > - /* Point to next subtable */ > - > - Offset += Subtable->Length; > - Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Subtable, > - Subtable->Length); > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpGtdt > - * > - * PARAMETERS: Table - A GTDT table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a GTDT. This table type consists > - * of an open-ended number of subtables. > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpGtdt ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - ACPI_GTDT_HEADER *Subtable; > - UINT32 Length = Table->Length; > - UINT32 Offset = sizeof (ACPI_TABLE_GTDT); > - ACPI_DMTABLE_INFO *InfoTable; > - UINT32 SubtableLength; > - UINT32 GtCount; > - ACPI_GTDT_TIMER_ENTRY *GtxTable; > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoGtdt); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Subtables */ > - > - Subtable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Table, Offset); > - while (Offset < Table->Length) > - { > - /* Common subtable header */ > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Length, Offset, Subtable, > - Subtable->Length, AcpiDmTableInfoGtdtHdr); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - GtCount = 0; > - switch (Subtable->Type) > - { > - case ACPI_GTDT_TYPE_TIMER_BLOCK: > - > - SubtableLength = sizeof (ACPI_GTDT_TIMER_BLOCK); > - GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK, > - Subtable))->TimerCount; > - > - InfoTable = AcpiDmTableInfoGtdt0; > - break; > - > - case ACPI_GTDT_TYPE_WATCHDOG: > - > - SubtableLength = sizeof (ACPI_GTDT_WATCHDOG); > - > - InfoTable = AcpiDmTableInfoGtdt1; > - break; > - > - default: > - > - /* Cannot continue on unknown type - no length */ > - > - AcpiOsPrintf ("\n**** Unknown GTDT subtable type 0x%X\n", > - Subtable->Type); > - return; > - } > - > - Status = AcpiDmDumpTable (Length, Offset, Subtable, > - Subtable->Length, InfoTable); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Point to end of current subtable (each subtable above is of fixed length) */ > - > - Offset += SubtableLength; > - > - /* If there are any Gt Timer Blocks from above, dump them now */ > - > - if (GtCount) > - { > - GtxTable = ACPI_ADD_PTR ( > - ACPI_GTDT_TIMER_ENTRY, Subtable, SubtableLength); > - SubtableLength += GtCount * sizeof (ACPI_GTDT_TIMER_ENTRY); > - > - while (GtCount) > - { > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Length, Offset, GtxTable, > - sizeof (ACPI_GTDT_TIMER_ENTRY), AcpiDmTableInfoGtdt0a); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - Offset += sizeof (ACPI_GTDT_TIMER_ENTRY); > - GtxTable++; > - GtCount--; > - } > - } > - > - /* Point to next subtable */ > - > - Subtable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Subtable, SubtableLength); > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpHest > - * > - * PARAMETERS: Table - A HEST table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a HEST. This table type consists > - * of an open-ended number of subtables. > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpHest ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - ACPI_HEST_HEADER *Subtable; > - UINT32 Length = Table->Length; > - UINT32 Offset = sizeof (ACPI_TABLE_HEST); > - ACPI_DMTABLE_INFO *InfoTable; > - UINT32 SubtableLength; > - UINT32 BankCount; > - ACPI_HEST_IA_ERROR_BANK *BankTable; > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoHest); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Subtables */ > - > - Subtable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Table, Offset); > - while (Offset < Table->Length) > - { > - BankCount = 0; > - switch (Subtable->Type) > - { > - case ACPI_HEST_TYPE_IA32_CHECK: > - > - InfoTable = AcpiDmTableInfoHest0; > - SubtableLength = sizeof (ACPI_HEST_IA_MACHINE_CHECK); > - BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_MACHINE_CHECK, > - Subtable))->NumHardwareBanks; > - break; > - > - case ACPI_HEST_TYPE_IA32_CORRECTED_CHECK: > - > - InfoTable = AcpiDmTableInfoHest1; > - SubtableLength = sizeof (ACPI_HEST_IA_CORRECTED); > - BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_CORRECTED, > - Subtable))->NumHardwareBanks; > - break; > - > - case ACPI_HEST_TYPE_IA32_NMI: > - > - InfoTable = AcpiDmTableInfoHest2; > - SubtableLength = sizeof (ACPI_HEST_IA_NMI); > - break; > - > - case ACPI_HEST_TYPE_AER_ROOT_PORT: > - > - InfoTable = AcpiDmTableInfoHest6; > - SubtableLength = sizeof (ACPI_HEST_AER_ROOT); > - break; > - > - case ACPI_HEST_TYPE_AER_ENDPOINT: > - > - InfoTable = AcpiDmTableInfoHest7; > - SubtableLength = sizeof (ACPI_HEST_AER); > - break; > - > - case ACPI_HEST_TYPE_AER_BRIDGE: > - > - InfoTable = AcpiDmTableInfoHest8; > - SubtableLength = sizeof (ACPI_HEST_AER_BRIDGE); > - break; > - > - case ACPI_HEST_TYPE_GENERIC_ERROR: > - > - InfoTable = AcpiDmTableInfoHest9; > - SubtableLength = sizeof (ACPI_HEST_GENERIC); > - break; > - > - case ACPI_HEST_TYPE_GENERIC_ERROR_V2: > - > - InfoTable = AcpiDmTableInfoHest10; > - SubtableLength = sizeof (ACPI_HEST_GENERIC_V2); > - break; > - > - case ACPI_HEST_TYPE_IA32_DEFERRED_CHECK: > - > - InfoTable = AcpiDmTableInfoHest11; > - SubtableLength = sizeof (ACPI_HEST_IA_DEFERRED_CHECK); > - BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_DEFERRED_CHECK, > - Subtable))->NumHardwareBanks; > - break; > - > - default: > - > - /* Cannot continue on unknown type - no length */ > - > - AcpiOsPrintf ("\n**** Unknown HEST subtable type 0x%X\n", > - Subtable->Type); > - return; > - } > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Length, Offset, Subtable, > - SubtableLength, InfoTable); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Point to end of current subtable (each subtable above is of fixed length) */ > - > - Offset += SubtableLength; > - > - /* If there are any (fixed-length) Error Banks from above, dump them now */ > - > - if (BankCount) > - { > - BankTable = ACPI_ADD_PTR (ACPI_HEST_IA_ERROR_BANK, Subtable, > - SubtableLength); > - SubtableLength += BankCount * sizeof (ACPI_HEST_IA_ERROR_BANK); > - > - while (BankCount) > - { > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Length, Offset, BankTable, > - sizeof (ACPI_HEST_IA_ERROR_BANK), AcpiDmTableInfoHestBank); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - Offset += sizeof (ACPI_HEST_IA_ERROR_BANK); > - BankTable++; > - BankCount--; > - } > - } > - > - /* Point to next subtable */ > - > - Subtable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Subtable, SubtableLength); > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpHmat > - * > - * PARAMETERS: Table - A HMAT table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a HMAT. > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpHmat ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - ACPI_HMAT_STRUCTURE *HmatStruct; > - ACPI_HMAT_LOCALITY *HmatLocality; > - ACPI_HMAT_CACHE *HmatCache; > - UINT32 Offset; > - UINT32 SubtableOffset; > - UINT32 Length; > - ACPI_DMTABLE_INFO *InfoTable; > - UINT32 i, j; > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoHmat); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - Offset = sizeof (ACPI_TABLE_HMAT); > - > - while (Offset < Table->Length) > - { > - AcpiOsPrintf ("\n"); > - SubtableOffset = 0; > - > - /* Dump HMAT structure header */ > - > - HmatStruct = ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, Table, Offset); > - if (HmatStruct->Length < sizeof (ACPI_HMAT_STRUCTURE)) > - { > - AcpiOsPrintf ("Invalid HMAT structure length\n"); > - return; > - } > - Status = AcpiDmDumpTable (Table->Length, Offset, HmatStruct, > - HmatStruct->Length, AcpiDmTableInfoHmatHdr); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - switch (HmatStruct->Type) > - { > - case ACPI_HMAT_TYPE_ADDRESS_RANGE: > - > - InfoTable = AcpiDmTableInfoHmat0; > - Length = sizeof (ACPI_HMAT_ADDRESS_RANGE); > - break; > - > - case ACPI_HMAT_TYPE_LOCALITY: > - > - InfoTable = AcpiDmTableInfoHmat1; > - Length = sizeof (ACPI_HMAT_LOCALITY); > - break; > - > - case ACPI_HMAT_TYPE_CACHE: > - > - InfoTable = AcpiDmTableInfoHmat2; > - Length = sizeof (ACPI_HMAT_CACHE); > - break; > - > - default: > - > - AcpiOsPrintf ("\n**** Unknown HMAT structure type 0x%X\n", > - HmatStruct->Type); > - > - /* Attempt to continue */ > - > - goto NextSubtable; > - } > - > - /* Dump HMAT structure body */ > - > - if (HmatStruct->Length < Length) > - { > - AcpiOsPrintf ("Invalid HMAT structure length\n"); > - return; > - } > - Status = AcpiDmDumpTable (Table->Length, Offset, HmatStruct, > - HmatStruct->Length, InfoTable); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Dump HMAT structure additionals */ > - > - switch (HmatStruct->Type) > - { > - case ACPI_HMAT_TYPE_LOCALITY: > - > - HmatLocality = ACPI_CAST_PTR (ACPI_HMAT_LOCALITY, HmatStruct); > - SubtableOffset = sizeof (ACPI_HMAT_LOCALITY); > - > - /* Dump initiator proximity domains */ > - > - if ((UINT32)(HmatStruct->Length - SubtableOffset) < > - (UINT32)(HmatLocality->NumberOfInitiatorPDs * 4)) > - { > - AcpiOsPrintf ("Invalid initiator proximity domain number\n"); > - return; > - } > - for (i = 0; i < HmatLocality->NumberOfInitiatorPDs; i++) > - { > - Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, > - ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), > - 4, AcpiDmTableInfoHmat1a); > - SubtableOffset += 4; > - } > - > - /* Dump target proximity domains */ > - > - if ((UINT32)(HmatStruct->Length - SubtableOffset) < > - (UINT32)(HmatLocality->NumberOfTargetPDs * 4)) > - { > - AcpiOsPrintf ("Invalid target proximity domain number\n"); > - return; > - } > - for (i = 0; i < HmatLocality->NumberOfTargetPDs; i++) > - { > - Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, > - ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), > - 4, AcpiDmTableInfoHmat1b); > - SubtableOffset += 4; > - } > - > - /* Dump latency/bandwidth entris */ > - > - if ((UINT32)(HmatStruct->Length - SubtableOffset) < > - (UINT32)(HmatLocality->NumberOfInitiatorPDs * > - HmatLocality->NumberOfTargetPDs * 2)) > - { > - AcpiOsPrintf ("Invalid latency/bandwidth entry number\n"); > - return; > - } > - for (i = 0; i < HmatLocality->NumberOfInitiatorPDs; i++) > - { > - for (j = 0; j < HmatLocality->NumberOfTargetPDs; j++) > - { > - Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, > - ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), > - 2, AcpiDmTableInfoHmat1c); > - SubtableOffset += 2; > - } > - } > - break; > - > - case ACPI_HMAT_TYPE_CACHE: > - > - HmatCache = ACPI_CAST_PTR (ACPI_HMAT_CACHE, HmatStruct); > - SubtableOffset = sizeof (ACPI_HMAT_CACHE); > - > - /* Dump SMBIOS handles */ > - > - if ((UINT32)(HmatStruct->Length - SubtableOffset) < > - (UINT32)(HmatCache->NumberOfSMBIOSHandles * 2)) > - { > - AcpiOsPrintf ("Invalid SMBIOS handle number\n"); > - return; > - } > - for (i = 0; i < HmatCache->NumberOfSMBIOSHandles; i++) > - { > - Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, > - ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), > - 2, AcpiDmTableInfoHmat2a); > - SubtableOffset += 2; > - } > - break; > - > - default: > - > - break; > - } > - > -NextSubtable: > - /* Point to next HMAT structure subtable */ > - > - Offset += (HmatStruct->Length); > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpIort > - * > - * PARAMETERS: Table - A IORT table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a IORT > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpIort ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - ACPI_TABLE_IORT *Iort; > - ACPI_IORT_NODE *IortNode; > - ACPI_IORT_ITS_GROUP *IortItsGroup = NULL; > - ACPI_IORT_SMMU *IortSmmu = NULL; > - UINT32 Offset; > - UINT32 NodeOffset; > - UINT32 Length; > - ACPI_DMTABLE_INFO *InfoTable; > - char *String; > - UINT32 i; > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIort); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - Iort = ACPI_CAST_PTR (ACPI_TABLE_IORT, Table); > - Offset = sizeof (ACPI_TABLE_IORT); > - > - /* Dump the OptionalPadding (optional) */ > - > - if (Iort->NodeOffset > Offset) > - { > - Status = AcpiDmDumpTable (Table->Length, Offset, Table, > - Iort->NodeOffset - Offset, AcpiDmTableInfoIortPad); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - } > - > - Offset = Iort->NodeOffset; > - while (Offset < Table->Length) > - { > - /* Common subtable header */ > - > - IortNode = ACPI_ADD_PTR (ACPI_IORT_NODE, Table, Offset); > - AcpiOsPrintf ("\n"); > - Length = ACPI_OFFSET (ACPI_IORT_NODE, NodeData); > - Status = AcpiDmDumpTable (Table->Length, Offset, > - IortNode, Length, AcpiDmTableInfoIortHdr); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - NodeOffset = Length; > - > - switch (IortNode->Type) > - { > - case ACPI_IORT_NODE_ITS_GROUP: > - > - InfoTable = AcpiDmTableInfoIort0; > - Length = ACPI_OFFSET (ACPI_IORT_ITS_GROUP, Identifiers); > - IortItsGroup = ACPI_ADD_PTR (ACPI_IORT_ITS_GROUP, IortNode, NodeOffset); > - break; > - > - case ACPI_IORT_NODE_NAMED_COMPONENT: > - > - InfoTable = AcpiDmTableInfoIort1; > - Length = ACPI_OFFSET (ACPI_IORT_NAMED_COMPONENT, DeviceName); > - String = ACPI_ADD_PTR (char, IortNode, NodeOffset + Length); > - Length += strlen (String) + 1; > - break; > - > - case ACPI_IORT_NODE_PCI_ROOT_COMPLEX: > - > - InfoTable = AcpiDmTableInfoIort2; > - Length = IortNode->Length - NodeOffset; > - break; > - > - case ACPI_IORT_NODE_SMMU: > - > - InfoTable = AcpiDmTableInfoIort3; > - Length = ACPI_OFFSET (ACPI_IORT_SMMU, Interrupts); > - IortSmmu = ACPI_ADD_PTR (ACPI_IORT_SMMU, IortNode, NodeOffset); > - break; > - > - case ACPI_IORT_NODE_SMMU_V3: > - > - InfoTable = AcpiDmTableInfoIort4; > - Length = IortNode->Length - NodeOffset; > - break; > - > - default: > - > - AcpiOsPrintf ("\n**** Unknown IORT node type 0x%X\n", > - IortNode->Type); > - > - /* Attempt to continue */ > - > - if (!IortNode->Length) > - { > - AcpiOsPrintf ("Invalid zero length IORT node\n"); > - return; > - } > - goto NextSubtable; > - } > - > - /* Dump the node subtable header */ > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, > - ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), > - Length, InfoTable); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - NodeOffset += Length; > - > - /* Dump the node specific data */ > - > - switch (IortNode->Type) > - { > - case ACPI_IORT_NODE_ITS_GROUP: > - > - /* Validate IortItsGroup to avoid compiler warnings */ > - > - if (IortItsGroup) > - { > - for (i = 0; i < IortItsGroup->ItsCount; i++) > - { > - Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, > - ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), > - 4, AcpiDmTableInfoIort0a); > - NodeOffset += 4; > - } > - } > - break; > - > - case ACPI_IORT_NODE_NAMED_COMPONENT: > - > - /* Dump the Padding (optional) */ > - > - if (IortNode->Length > NodeOffset) > - { > - Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, > - Table, IortNode->Length - NodeOffset, > - AcpiDmTableInfoIort1a); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - } > - break; > - > - case ACPI_IORT_NODE_SMMU: > - > - AcpiOsPrintf ("\n"); > - > - /* Validate IortSmmu to avoid compiler warnings */ > - > - if (IortSmmu) > - { > - Length = 2 * sizeof (UINT64); > - NodeOffset = IortSmmu->GlobalInterruptOffset; > - Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, > - ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), > - Length, AcpiDmTableInfoIort3a); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - NodeOffset = IortSmmu->ContextInterruptOffset; > - for (i = 0; i < IortSmmu->ContextInterruptCount; i++) > - { > - Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, > - ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), > - 8, AcpiDmTableInfoIort3b); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - NodeOffset += 8; > - } > - > - NodeOffset = IortSmmu->PmuInterruptOffset; > - for (i = 0; i < IortSmmu->PmuInterruptCount; i++) > - { > - Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, > - ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), > - 8, AcpiDmTableInfoIort3c); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - NodeOffset += 8; > - } > - } > - break; > - > - default: > - > - break; > - } > - > - /* Dump the ID mappings */ > - > - NodeOffset = IortNode->MappingOffset; > - for (i = 0; i < IortNode->MappingCount; i++) > - { > - AcpiOsPrintf ("\n"); > - Length = sizeof (ACPI_IORT_ID_MAPPING); > - Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, > - ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), > - Length, AcpiDmTableInfoIortMap); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - NodeOffset += Length; > - } > - > -NextSubtable: > - /* Point to next node subtable */ > - > - Offset += IortNode->Length; > - IortNode = ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, IortNode->Length); > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpIvrs > - * > - * PARAMETERS: Table - A IVRS table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a IVRS > - * > - ******************************************************************************/ > - > -static UINT8 EntrySizes[] = {4,8,16,32}; > - > -void > -AcpiDmDumpIvrs ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - UINT32 Offset = sizeof (ACPI_TABLE_IVRS); > - UINT32 EntryOffset; > - UINT32 EntryLength; > - UINT32 EntryType; > - ACPI_IVRS_DE_HEADER *DeviceEntry; > - ACPI_IVRS_HEADER *Subtable; > - ACPI_DMTABLE_INFO *InfoTable; > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIvrs); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Subtables */ > - > - Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset); > - while (Offset < Table->Length) > - { > - /* Common subtable header */ > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > - Subtable->Length, AcpiDmTableInfoIvrsHdr); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - switch (Subtable->Type) > - { > - case ACPI_IVRS_TYPE_HARDWARE: > - > - InfoTable = AcpiDmTableInfoIvrs0; > - break; > - > - case ACPI_IVRS_TYPE_MEMORY1: > - case ACPI_IVRS_TYPE_MEMORY2: > - case ACPI_IVRS_TYPE_MEMORY3: > - > - InfoTable = AcpiDmTableInfoIvrs1; > - break; > - > - default: > - > - AcpiOsPrintf ("\n**** Unknown IVRS subtable type 0x%X\n", > - Subtable->Type); > - > - /* Attempt to continue */ > - > - if (!Subtable->Length) > - { > - AcpiOsPrintf ("Invalid zero length subtable\n"); > - return; > - } > - goto NextSubtable; > - } > - > - /* Dump the subtable */ > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > - Subtable->Length, InfoTable); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* The hardware subtable can contain multiple device entries */ > - > - if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE) > - { > - EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE); > - DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable, > - sizeof (ACPI_IVRS_HARDWARE)); > - > - while (EntryOffset < (Offset + Subtable->Length)) > - { > - AcpiOsPrintf ("\n"); > - /* > - * Upper 2 bits of Type encode the length of the device entry > - * > - * 00 = 4 byte > - * 01 = 8 byte > - * 10 = 16 byte - currently no entries defined > - * 11 = 32 byte - currently no entries defined > - */ > - EntryType = DeviceEntry->Type; > - EntryLength = EntrySizes [EntryType >> 6]; > - > - switch (EntryType) > - { > - /* 4-byte device entries */ > - > - case ACPI_IVRS_TYPE_PAD4: > - case ACPI_IVRS_TYPE_ALL: > - case ACPI_IVRS_TYPE_SELECT: > - case ACPI_IVRS_TYPE_START: > - case ACPI_IVRS_TYPE_END: > - > - InfoTable = AcpiDmTableInfoIvrs4; > - break; > - > - /* 8-byte entries, type A */ > - > - case ACPI_IVRS_TYPE_ALIAS_SELECT: > - case ACPI_IVRS_TYPE_ALIAS_START: > - > - InfoTable = AcpiDmTableInfoIvrs8a; > - break; > - > - /* 8-byte entries, type B */ > - > - case ACPI_IVRS_TYPE_PAD8: > - case ACPI_IVRS_TYPE_EXT_SELECT: > - case ACPI_IVRS_TYPE_EXT_START: > - > - InfoTable = AcpiDmTableInfoIvrs8b; > - break; > - > - /* 8-byte entries, type C */ > - > - case ACPI_IVRS_TYPE_SPECIAL: > - > - InfoTable = AcpiDmTableInfoIvrs8c; > - break; > - > - default: > - InfoTable = AcpiDmTableInfoIvrs4; > - AcpiOsPrintf ( > - "\n**** Unknown IVRS device entry type/length: " > - "0x%.2X/0x%X at offset 0x%.4X: (header below)\n", > - EntryType, EntryLength, EntryOffset); > - break; > - } > - > - /* Dump the Device Entry */ > - > - Status = AcpiDmDumpTable (Table->Length, EntryOffset, > - DeviceEntry, EntryLength, InfoTable); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - EntryOffset += EntryLength; > - DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, DeviceEntry, > - EntryLength); > - } > - } > - > -NextSubtable: > - /* Point to next subtable */ > - > - Offset += Subtable->Length; > - Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Subtable, Subtable->Length); > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpLpit > - * > - * PARAMETERS: Table - A LPIT table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a LPIT. This table type consists > - * of an open-ended number of subtables. Note: There are no > - * entries in the main table. An LPIT consists of the table > - * header and then subtables only. > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpLpit ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - ACPI_LPIT_HEADER *Subtable; > - UINT32 Length = Table->Length; > - UINT32 Offset = sizeof (ACPI_TABLE_LPIT); > - ACPI_DMTABLE_INFO *InfoTable; > - UINT32 SubtableLength; > - > - > - /* Subtables */ > - > - Subtable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Table, Offset); > - while (Offset < Table->Length) > - { > - /* Common subtable header */ > - > - Status = AcpiDmDumpTable (Length, Offset, Subtable, > - sizeof (ACPI_LPIT_HEADER), AcpiDmTableInfoLpitHdr); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - switch (Subtable->Type) > - { > - case ACPI_LPIT_TYPE_NATIVE_CSTATE: > - > - InfoTable = AcpiDmTableInfoLpit0; > - SubtableLength = sizeof (ACPI_LPIT_NATIVE); > - break; > - > - default: > - > - /* Cannot continue on unknown type - no length */ > - > - AcpiOsPrintf ("\n**** Unknown LPIT subtable type 0x%X\n", > - Subtable->Type); > - return; > - } > - > - Status = AcpiDmDumpTable (Length, Offset, Subtable, > - SubtableLength, InfoTable); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - AcpiOsPrintf ("\n"); > - > - /* Point to next subtable */ > - > - Offset += SubtableLength; > - Subtable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Subtable, SubtableLength); > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpMadt > - * > - * PARAMETERS: Table - A MADT table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a MADT. This table type consists > - * of an open-ended number of subtables. > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpMadt ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - ACPI_SUBTABLE_HEADER *Subtable; > - UINT32 Length = Table->Length; > - UINT32 Offset = sizeof (ACPI_TABLE_MADT); > - ACPI_DMTABLE_INFO *InfoTable; > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMadt); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Subtables */ > - > - Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset); > - while (Offset < Table->Length) > - { > - /* Common subtable header */ > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Length, Offset, Subtable, > - Subtable->Length, AcpiDmTableInfoMadtHdr); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - switch (Subtable->Type) > - { > - case ACPI_MADT_TYPE_LOCAL_APIC: > - > - InfoTable = AcpiDmTableInfoMadt0; > - break; > - > - case ACPI_MADT_TYPE_IO_APIC: > - > - InfoTable = AcpiDmTableInfoMadt1; > - break; > - > - case ACPI_MADT_TYPE_INTERRUPT_OVERRIDE: > - > - InfoTable = AcpiDmTableInfoMadt2; > - break; > - > - case ACPI_MADT_TYPE_NMI_SOURCE: > - > - InfoTable = AcpiDmTableInfoMadt3; > - break; > - > - case ACPI_MADT_TYPE_LOCAL_APIC_NMI: > - > - InfoTable = AcpiDmTableInfoMadt4; > - break; > - > - case ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE: > - > - InfoTable = AcpiDmTableInfoMadt5; > - break; > - > - case ACPI_MADT_TYPE_IO_SAPIC: > - > - InfoTable = AcpiDmTableInfoMadt6; > - break; > - > - case ACPI_MADT_TYPE_LOCAL_SAPIC: > - > - InfoTable = AcpiDmTableInfoMadt7; > - break; > - > - case ACPI_MADT_TYPE_INTERRUPT_SOURCE: > - > - InfoTable = AcpiDmTableInfoMadt8; > - break; > - > - case ACPI_MADT_TYPE_LOCAL_X2APIC: > - > - InfoTable = AcpiDmTableInfoMadt9; > - break; > - > - case ACPI_MADT_TYPE_LOCAL_X2APIC_NMI: > - > - InfoTable = AcpiDmTableInfoMadt10; > - break; > - > - case ACPI_MADT_TYPE_GENERIC_INTERRUPT: > - > - InfoTable = AcpiDmTableInfoMadt11; > - break; > - > - case ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR: > - > - InfoTable = AcpiDmTableInfoMadt12; > - break; > - > - case ACPI_MADT_TYPE_GENERIC_MSI_FRAME: > - > - InfoTable = AcpiDmTableInfoMadt13; > - break; > - > - case ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR: > - > - InfoTable = AcpiDmTableInfoMadt14; > - break; > - > - case ACPI_MADT_TYPE_GENERIC_TRANSLATOR: > - > - InfoTable = AcpiDmTableInfoMadt15; > - break; > - > - default: > - > - AcpiOsPrintf ("\n**** Unknown MADT subtable type 0x%X\n\n", > - Subtable->Type); > - > - /* Attempt to continue */ > - > - if (!Subtable->Length) > - { > - AcpiOsPrintf ("Invalid zero length subtable\n"); > - return; > - } > - > - goto NextSubtable; > - } > - > - Status = AcpiDmDumpTable (Length, Offset, Subtable, > - Subtable->Length, InfoTable); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > -NextSubtable: > - /* Point to next subtable */ > - > - Offset += Subtable->Length; > - Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, > - Subtable->Length); > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpMcfg > - * > - * PARAMETERS: Table - A MCFG Table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a MCFG table > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpMcfg ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - UINT32 Offset = sizeof (ACPI_TABLE_MCFG); > - ACPI_MCFG_ALLOCATION *Subtable; > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMcfg); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Subtables */ > - > - Subtable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Table, Offset); > - while (Offset < Table->Length) > - { > - if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > Table->Length) > - { > - AcpiOsPrintf ("Warning: there are %u invalid trailing bytes\n", > - sizeof (ACPI_MCFG_ALLOCATION) - (Offset - Table->Length)); > - return; > - } > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > - sizeof (ACPI_MCFG_ALLOCATION), AcpiDmTableInfoMcfg0); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Point to next subtable (each subtable is of fixed length) */ > - > - Offset += sizeof (ACPI_MCFG_ALLOCATION); > - Subtable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Subtable, > - sizeof (ACPI_MCFG_ALLOCATION)); > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpMpst > - * > - * PARAMETERS: Table - A MPST Table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a MPST table > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpMpst ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - UINT32 Offset = sizeof (ACPI_TABLE_MPST); > - ACPI_MPST_POWER_NODE *Subtable0; > - ACPI_MPST_POWER_STATE *Subtable0A; > - ACPI_MPST_COMPONENT *Subtable0B; > - ACPI_MPST_DATA_HDR *Subtable1; > - ACPI_MPST_POWER_DATA *Subtable2; > - UINT16 SubtableCount; > - UINT32 PowerStateCount; > - UINT32 ComponentCount; > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMpst); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Subtable: Memory Power Node(s) */ > - > - SubtableCount = (ACPI_CAST_PTR (ACPI_TABLE_MPST, Table))->PowerNodeCount; > - Subtable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Table, Offset); > - > - while ((Offset < Table->Length) && SubtableCount) > - { > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0, > - sizeof (ACPI_MPST_POWER_NODE), AcpiDmTableInfoMpst0); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Extract the sub-subtable counts */ > - > - PowerStateCount = Subtable0->NumPowerStates; > - ComponentCount = Subtable0->NumPhysicalComponents; > - Offset += sizeof (ACPI_MPST_POWER_NODE); > - > - /* Sub-subtables - Memory Power State Structure(s) */ > - > - Subtable0A = ACPI_ADD_PTR (ACPI_MPST_POWER_STATE, Subtable0, > - sizeof (ACPI_MPST_POWER_NODE)); > - > - while (PowerStateCount) > - { > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0A, > - sizeof (ACPI_MPST_POWER_STATE), AcpiDmTableInfoMpst0A); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - Subtable0A++; > - PowerStateCount--; > - Offset += sizeof (ACPI_MPST_POWER_STATE); > - } > - > - /* Sub-subtables - Physical Component ID Structure(s) */ > - > - Subtable0B = ACPI_CAST_PTR (ACPI_MPST_COMPONENT, Subtable0A); > - > - if (ComponentCount) > - { > - AcpiOsPrintf ("\n"); > - } > - > - while (ComponentCount) > - { > - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0B, > - sizeof (ACPI_MPST_COMPONENT), AcpiDmTableInfoMpst0B); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - Subtable0B++; > - ComponentCount--; > - Offset += sizeof (ACPI_MPST_COMPONENT); > - } > - > - /* Point to next Memory Power Node subtable */ > - > - SubtableCount--; > - Subtable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Subtable0, > - sizeof (ACPI_MPST_POWER_NODE) + > - (sizeof (ACPI_MPST_POWER_STATE) * Subtable0->NumPowerStates) + > - (sizeof (ACPI_MPST_COMPONENT) * Subtable0->NumPhysicalComponents)); > - } > - > - /* Subtable: Count of Memory Power State Characteristic structures */ > - > - AcpiOsPrintf ("\n"); > - Subtable1 = ACPI_CAST_PTR (ACPI_MPST_DATA_HDR, Subtable0); > - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable1, > - sizeof (ACPI_MPST_DATA_HDR), AcpiDmTableInfoMpst1); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - SubtableCount = Subtable1->CharacteristicsCount; > - Offset += sizeof (ACPI_MPST_DATA_HDR); > - > - /* Subtable: Memory Power State Characteristics structure(s) */ > - > - Subtable2 = ACPI_ADD_PTR (ACPI_MPST_POWER_DATA, Subtable1, > - sizeof (ACPI_MPST_DATA_HDR)); > - > - while ((Offset < Table->Length) && SubtableCount) > - { > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable2, > - sizeof (ACPI_MPST_POWER_DATA), AcpiDmTableInfoMpst2); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - Subtable2++; > - SubtableCount--; > - Offset += sizeof (ACPI_MPST_POWER_DATA); > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpMsct > - * > - * PARAMETERS: Table - A MSCT table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a MSCT > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpMsct ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - UINT32 Offset = sizeof (ACPI_TABLE_MSCT); > - ACPI_MSCT_PROXIMITY *Subtable; > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMsct); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Subtables */ > - > - Subtable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Table, Offset); > - while (Offset < Table->Length) > - { > - /* Common subtable header */ > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > - sizeof (ACPI_MSCT_PROXIMITY), AcpiDmTableInfoMsct0); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Point to next subtable */ > - > - Offset += sizeof (ACPI_MSCT_PROXIMITY); > - Subtable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Subtable, > - sizeof (ACPI_MSCT_PROXIMITY)); > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpMtmr > - * > - * PARAMETERS: Table - A MTMR table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a MTMR > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpMtmr ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - UINT32 Offset = sizeof (ACPI_TABLE_MTMR); > - ACPI_MTMR_ENTRY *Subtable; > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMtmr); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Subtables */ > - > - Subtable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Table, Offset); > - while (Offset < Table->Length) > - { > - /* Common subtable header */ > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > - sizeof (ACPI_MTMR_ENTRY), AcpiDmTableInfoMtmr0); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Point to next subtable */ > - > - Offset += sizeof (ACPI_MTMR_ENTRY); > - Subtable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Subtable, > - sizeof (ACPI_MTMR_ENTRY)); > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpNfit > - * > - * PARAMETERS: Table - A NFIT table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of an NFIT. > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpNfit ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - UINT32 Offset = sizeof (ACPI_TABLE_NFIT); > - UINT32 FieldOffset = 0; > - UINT32 Length; > - ACPI_NFIT_HEADER *Subtable; > - ACPI_DMTABLE_INFO *InfoTable; > - ACPI_NFIT_INTERLEAVE *Interleave = NULL; > - ACPI_NFIT_SMBIOS *SmbiosInfo = NULL; > - ACPI_NFIT_FLUSH_ADDRESS *Hint = NULL; > - UINT32 i; > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoNfit); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Subtables */ > - > - Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Table, Offset); > - while (Offset < Table->Length) > - { > - /* NFIT subtable header */ > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > - Subtable->Length, AcpiDmTableInfoNfitHdr); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - switch (Subtable->Type) > - { > - case ACPI_NFIT_TYPE_SYSTEM_ADDRESS: > - > - InfoTable = AcpiDmTableInfoNfit0; > - break; > - > - case ACPI_NFIT_TYPE_MEMORY_MAP: > - > - InfoTable = AcpiDmTableInfoNfit1; > - break; > - > - case ACPI_NFIT_TYPE_INTERLEAVE: > - > - /* Has a variable number of 32-bit values at the end */ > - > - InfoTable = AcpiDmTableInfoNfit2; > - Interleave = ACPI_CAST_PTR (ACPI_NFIT_INTERLEAVE, Subtable); > - FieldOffset = sizeof (ACPI_NFIT_INTERLEAVE); > - break; > - > - case ACPI_NFIT_TYPE_SMBIOS: > - > - SmbiosInfo = ACPI_CAST_PTR (ACPI_NFIT_SMBIOS, Subtable); > - InfoTable = AcpiDmTableInfoNfit3; > - break; > - > - case ACPI_NFIT_TYPE_CONTROL_REGION: > - > - InfoTable = AcpiDmTableInfoNfit4; > - break; > - > - case ACPI_NFIT_TYPE_DATA_REGION: > - > - InfoTable = AcpiDmTableInfoNfit5; > - break; > - > - case ACPI_NFIT_TYPE_FLUSH_ADDRESS: > - > - /* Has a variable number of 64-bit addresses at the end */ > - > - InfoTable = AcpiDmTableInfoNfit6; > - Hint = ACPI_CAST_PTR (ACPI_NFIT_FLUSH_ADDRESS, Subtable); > - FieldOffset = sizeof (ACPI_NFIT_FLUSH_ADDRESS) - sizeof (UINT64); > - break; > - > - case ACPI_NFIT_TYPE_CAPABILITIES: /* ACPI 6.0A */ > - > - InfoTable = AcpiDmTableInfoNfit7; > - break; > - > - default: > - AcpiOsPrintf ("\n**** Unknown NFIT subtable type 0x%X\n", > - Subtable->Type); > - > - /* Attempt to continue */ > - > - if (!Subtable->Length) > - { > - AcpiOsPrintf ("Invalid zero length subtable\n"); > - return; > - } > - goto NextSubtable; > - } > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > - Subtable->Length, InfoTable); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Per-subtable variable-length fields */ > - > - switch (Subtable->Type) > - { > - case ACPI_NFIT_TYPE_INTERLEAVE: > - > - for (i = 0; i < Interleave->LineCount; i++) > - { > - Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset, > - &Interleave->LineOffset[i], > - sizeof (UINT32), AcpiDmTableInfoNfit2a); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - FieldOffset += sizeof (UINT32); > - } > - break; > - > - case ACPI_NFIT_TYPE_SMBIOS: > - > - Length = Subtable->Length - > - sizeof (ACPI_NFIT_SMBIOS) + sizeof (UINT8); > - > - if (Length) > - { > - Status = AcpiDmDumpTable (Table->Length, > - sizeof (ACPI_NFIT_SMBIOS) - sizeof (UINT8), > - SmbiosInfo, > - Length, AcpiDmTableInfoNfit3a); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - } > - > - break; > - > - case ACPI_NFIT_TYPE_FLUSH_ADDRESS: > - > - for (i = 0; i < Hint->HintCount; i++) > - { > - Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset, > - &Hint->HintAddress[i], > - sizeof (UINT64), AcpiDmTableInfoNfit6a); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - FieldOffset += sizeof (UINT64); > - } > - break; > - > - default: > - break; > - } > - > -NextSubtable: > - /* Point to next subtable */ > - > - Offset += Subtable->Length; > - Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Subtable, Subtable->Length); > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpPcct > - * > - * PARAMETERS: Table - A PCCT table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a PCCT. This table type consists > - * of an open-ended number of subtables. > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpPcct ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - ACPI_PCCT_SUBSPACE *Subtable; > - ACPI_DMTABLE_INFO *InfoTable; > - UINT32 Length = Table->Length; > - UINT32 Offset = sizeof (ACPI_TABLE_PCCT); > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPcct); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Subtables */ > - > - Subtable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Table, Offset); > - while (Offset < Table->Length) > - { > - /* Common subtable header */ > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Length, Offset, Subtable, > - Subtable->Header.Length, AcpiDmTableInfoPcctHdr); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - switch (Subtable->Header.Type) > - { > - case ACPI_PCCT_TYPE_GENERIC_SUBSPACE: > - > - InfoTable = AcpiDmTableInfoPcct0; > - break; > - > - case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE: > - > - InfoTable = AcpiDmTableInfoPcct1; > - break; > - > - case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2: > - > - InfoTable = AcpiDmTableInfoPcct2; > - break; > - > - case ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE: > - > - InfoTable = AcpiDmTableInfoPcct3; > - break; > - > - case ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE: > - > - InfoTable = AcpiDmTableInfoPcct4; > - break; > - > - default: > - > - AcpiOsPrintf ( > - "\n**** Unexpected or unknown PCCT subtable type 0x%X\n\n", > - Subtable->Header.Type); > - return; > - } > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Length, Offset, Subtable, > - Subtable->Header.Length, InfoTable); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Point to next subtable */ > - > - Offset += Subtable->Header.Length; > - Subtable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Subtable, > - Subtable->Header.Length); > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpPdtt > - * > - * PARAMETERS: Table - A PDTT table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a Pdtt. This is a variable-length > - * table that contains an open-ended number of IDs > - * at the end of the table. > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpPdtt ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - ACPI_PDTT_CHANNEL *Subtable; > - UINT32 Length = Table->Length; > - UINT32 Offset = sizeof (ACPI_TABLE_PDTT); > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPdtt); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Subtables. Currently there is only one type, but can be multiples */ > - > - Subtable = ACPI_ADD_PTR (ACPI_PDTT_CHANNEL, Table, Offset); > - while (Offset < Table->Length) > - { > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Length, Offset, Subtable, > - sizeof (ACPI_PDTT_CHANNEL), AcpiDmTableInfoPdtt0); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Point to next subtable */ > - > - Offset += sizeof (ACPI_PDTT_CHANNEL); > - Subtable = ACPI_ADD_PTR (ACPI_PDTT_CHANNEL, Subtable, > - sizeof (ACPI_PDTT_CHANNEL)); > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpPmtt > - * > - * PARAMETERS: Table - A PMTT table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a PMTT. This table type consists > - * of an open-ended number of subtables. > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpPmtt ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - ACPI_PMTT_HEADER *Subtable; > - ACPI_PMTT_HEADER *MemSubtable; > - ACPI_PMTT_HEADER *DimmSubtable; > - ACPI_PMTT_DOMAIN *DomainArray; > - UINT32 Length = Table->Length; > - UINT32 Offset = sizeof (ACPI_TABLE_PMTT); > - UINT32 MemOffset; > - UINT32 DimmOffset; > - UINT32 DomainOffset; > - UINT32 DomainCount; > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPmtt); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Subtables */ > - > - Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Table, Offset); > - while (Offset < Table->Length) > - { > - /* Common subtable header */ > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Length, Offset, Subtable, > - Subtable->Length, AcpiDmTableInfoPmttHdr); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Only Socket subtables are expected at this level */ > - > - if (Subtable->Type != ACPI_PMTT_TYPE_SOCKET) > - { > - AcpiOsPrintf ( > - "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n", > - Subtable->Type); > - return; > - } > - > - /* Dump the fixed-length portion of the subtable */ > - > - Status = AcpiDmDumpTable (Length, Offset, Subtable, > - Subtable->Length, AcpiDmTableInfoPmtt0); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Walk the memory controller subtables */ > - > - MemOffset = sizeof (ACPI_PMTT_SOCKET); > - MemSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Subtable, > - sizeof (ACPI_PMTT_SOCKET)); > - > - while (((Offset + MemOffset) < Table->Length) && > - (MemOffset < Subtable->Length)) > - { > - /* Common subtable header */ > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Length, > - Offset + MemOffset, MemSubtable, > - MemSubtable->Length, AcpiDmTableInfoPmttHdr); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Only memory controller subtables are expected at this level */ > - > - if (MemSubtable->Type != ACPI_PMTT_TYPE_CONTROLLER) > - { > - AcpiOsPrintf ( > - "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n", > - MemSubtable->Type); > - return; > - } > - > - /* Dump the fixed-length portion of the controller subtable */ > - > - Status = AcpiDmDumpTable (Length, > - Offset + MemOffset, MemSubtable, > - MemSubtable->Length, AcpiDmTableInfoPmtt1); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Walk the variable count of proximity domains */ > - > - DomainCount = ((ACPI_PMTT_CONTROLLER *) MemSubtable)->DomainCount; > - DomainOffset = sizeof (ACPI_PMTT_CONTROLLER); > - DomainArray = ACPI_ADD_PTR (ACPI_PMTT_DOMAIN, MemSubtable, > - sizeof (ACPI_PMTT_CONTROLLER)); > - > - while (((Offset + MemOffset + DomainOffset) < Table->Length) && > - ((MemOffset + DomainOffset) < Subtable->Length) && > - DomainCount) > - { > - Status = AcpiDmDumpTable (Length, > - Offset + MemOffset + DomainOffset, DomainArray, > - sizeof (ACPI_PMTT_DOMAIN), AcpiDmTableInfoPmtt1a); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - DomainOffset += sizeof (ACPI_PMTT_DOMAIN); > - DomainArray++; > - DomainCount--; > - } > - > - if (DomainCount) > - { > - AcpiOsPrintf ( > - "\n**** DomainCount exceeds subtable length\n\n"); > - } > - > - /* Walk the physical component (DIMM) subtables */ > - > - DimmOffset = DomainOffset; > - DimmSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, MemSubtable, > - DomainOffset); > - > - while (((Offset + MemOffset + DimmOffset) < Table->Length) && > - (DimmOffset < MemSubtable->Length)) > - { > - /* Common subtable header */ > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Length, > - Offset + MemOffset + DimmOffset, DimmSubtable, > - DimmSubtable->Length, AcpiDmTableInfoPmttHdr); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Only DIMM subtables are expected at this level */ > - > - if (DimmSubtable->Type != ACPI_PMTT_TYPE_DIMM) > - { > - AcpiOsPrintf ( > - "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n", > - DimmSubtable->Type); > - return; > - } > - > - /* Dump the fixed-length DIMM subtable */ > - > - Status = AcpiDmDumpTable (Length, > - Offset + MemOffset + DimmOffset, DimmSubtable, > - DimmSubtable->Length, AcpiDmTableInfoPmtt2); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Point to next DIMM subtable */ > - > - DimmOffset += DimmSubtable->Length; > - DimmSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, > - DimmSubtable, DimmSubtable->Length); > - } > - > - /* Point to next Controller subtable */ > - > - MemOffset += MemSubtable->Length; > - MemSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, > - MemSubtable, MemSubtable->Length); > - } > - > - /* Point to next Socket subtable */ > - > - Offset += Subtable->Length; > - Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, > - Subtable, Subtable->Length); > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpPptt > - * > - * PARAMETERS: Table - A PMTT table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a PPTT. This table type consists > - * of an open-ended number of subtables. > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpPptt ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - ACPI_SUBTABLE_HEADER *Subtable; > - ACPI_PPTT_PROCESSOR *PpttProcessor; > - UINT8 Length; > - UINT8 SubtableOffset; > - UINT32 Offset = sizeof (ACPI_TABLE_FPDT); > - ACPI_DMTABLE_INFO *InfoTable; > - UINT32 i; > - > - > - /* There is no main table (other than the standard ACPI header) */ > - > - /* Subtables */ > - > - Offset = sizeof (ACPI_TABLE_HEADER); > - while (Offset < Table->Length) > - { > - AcpiOsPrintf ("\n"); > - > - /* Common subtable header */ > - > - Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset); > - if (Subtable->Length < sizeof (ACPI_SUBTABLE_HEADER)) > - { > - AcpiOsPrintf ("Invalid subtable length\n"); > - return; > - } > - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > - Subtable->Length, AcpiDmTableInfoPpttHdr); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - switch (Subtable->Type) > - { > - case ACPI_PPTT_TYPE_PROCESSOR: > - > - InfoTable = AcpiDmTableInfoPptt0; > - Length = sizeof (ACPI_PPTT_PROCESSOR); > - break; > - > - case ACPI_PPTT_TYPE_CACHE: > - > - InfoTable = AcpiDmTableInfoPptt1; > - Length = sizeof (ACPI_PPTT_CACHE); > - break; > - > - case ACPI_PPTT_TYPE_ID: > - > - InfoTable = AcpiDmTableInfoPptt2; > - Length = sizeof (ACPI_PPTT_ID); > - break; > - > - default: > - > - AcpiOsPrintf ("\n**** Unknown PPTT subtable type 0x%X\n\n", > - Subtable->Type); > - > - /* Attempt to continue */ > - > - goto NextSubtable; > - } > - > - if (Subtable->Length < Length) > - { > - AcpiOsPrintf ("Invalid subtable length\n"); > - return; > - } > - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > - Subtable->Length, InfoTable); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - SubtableOffset = Length; > - > - switch (Subtable->Type) > - { > - case ACPI_PPTT_TYPE_PROCESSOR: > - > - PpttProcessor = ACPI_CAST_PTR (ACPI_PPTT_PROCESSOR, Subtable); > - > - /* Dump SMBIOS handles */ > - > - if ((UINT8)(Subtable->Length - SubtableOffset) < > - (UINT8)(PpttProcessor->NumberOfPrivResources * 4)) > - { > - AcpiOsPrintf ("Invalid private resource number\n"); > - return; > - } > - for (i = 0; i < PpttProcessor->NumberOfPrivResources; i++) > - { > - Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, > - ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, SubtableOffset), > - 4, AcpiDmTableInfoPptt0a); > - SubtableOffset += 4; > - } > - break; > - > - default: > - > - break; > - } > - > -NextSubtable: > - /* Point to next subtable */ > - > - Offset += Subtable->Length; > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpS3pt > - * > - * PARAMETERS: Table - A S3PT table > - * > - * RETURN: Length of the table > - * > - * DESCRIPTION: Format the contents of a S3PT > - * > - ******************************************************************************/ > - > -UINT32 > -AcpiDmDumpS3pt ( > - ACPI_TABLE_HEADER *Tables) > -{ > - ACPI_STATUS Status; > - UINT32 Offset = sizeof (ACPI_TABLE_S3PT); > - ACPI_FPDT_HEADER *Subtable; > - ACPI_DMTABLE_INFO *InfoTable; > - ACPI_TABLE_S3PT *S3ptTable = ACPI_CAST_PTR (ACPI_TABLE_S3PT, Tables); > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Offset, 0, S3ptTable, 0, AcpiDmTableInfoS3pt); > - if (ACPI_FAILURE (Status)) > - { > - return 0; > - } > - > - Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, S3ptTable, Offset); > - while (Offset < S3ptTable->Length) > - { > - /* Common subtable header */ > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (S3ptTable->Length, Offset, Subtable, > - Subtable->Length, AcpiDmTableInfoS3ptHdr); > - if (ACPI_FAILURE (Status)) > - { > - return 0; > - } > - > - switch (Subtable->Type) > - { > - case ACPI_S3PT_TYPE_RESUME: > - > - InfoTable = AcpiDmTableInfoS3pt0; > - break; > - > - case ACPI_S3PT_TYPE_SUSPEND: > - > - InfoTable = AcpiDmTableInfoS3pt1; > - break; > - > - default: > - > - AcpiOsPrintf ("\n**** Unknown S3PT subtable type 0x%X\n", > - Subtable->Type); > - > - /* Attempt to continue */ > - > - if (!Subtable->Length) > - { > - AcpiOsPrintf ("Invalid zero length subtable\n"); > - return 0; > - } > - goto NextSubtable; > - } > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (S3ptTable->Length, Offset, Subtable, > - Subtable->Length, InfoTable); > - if (ACPI_FAILURE (Status)) > - { > - return 0; > - } > - > -NextSubtable: > - /* Point to next subtable */ > - > - Offset += Subtable->Length; > - Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Subtable, Subtable->Length); > - } > - > - return (S3ptTable->Length); > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpSdev > - * > - * PARAMETERS: Table - A SDEV table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a SDEV. This is a variable-length > - * table that contains variable strings and vendor data. > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpSdev ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - ACPI_SDEV_HEADER *Subtable; > - ACPI_SDEV_PCIE *Pcie; > - ACPI_SDEV_NAMESPACE *Namesp; > - ACPI_DMTABLE_INFO *InfoTable; > - UINT32 Length = Table->Length; > - UINT32 Offset = sizeof (ACPI_TABLE_SDEV); > - UINT16 PathOffset; > - UINT16 PathLength; > - UINT16 VendorDataOffset; > - UINT16 VendorDataLength; > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoSdev); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Subtables */ > - > - Subtable = ACPI_ADD_PTR (ACPI_SDEV_HEADER, Table, Offset); > - while (Offset < Table->Length) > - { > - /* Common subtable header */ > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > - Subtable->Length, AcpiDmTableInfoSdevHdr); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - switch (Subtable->Type) > - { > - case ACPI_SDEV_TYPE_NAMESPACE_DEVICE: > - > - InfoTable = AcpiDmTableInfoSdev0; > - break; > - > - case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE: > - > - InfoTable = AcpiDmTableInfoSdev1; > - break; > - > - default: > - goto NextSubtable; > - } > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > - Subtable->Length, InfoTable); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - switch (Subtable->Type) > - { > - case ACPI_SDEV_TYPE_NAMESPACE_DEVICE: > - > - /* Dump the PCIe device ID(s) */ > - > - Namesp = ACPI_CAST_PTR (ACPI_SDEV_NAMESPACE, Subtable); > - PathOffset = Namesp->DeviceIdOffset; > - PathLength = Namesp->DeviceIdLength; > - > - if (PathLength) > - { > - Status = AcpiDmDumpTable (Table->Length, 0, > - ACPI_ADD_PTR (UINT8, Namesp, PathOffset), > - PathLength, AcpiDmTableInfoSdev0a); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - } > - > - /* Dump the vendor-specific data */ > - > - VendorDataLength = > - Namesp->VendorDataLength; > - VendorDataOffset = > - Namesp->DeviceIdOffset + Namesp->DeviceIdLength; > - > - if (VendorDataLength) > - { > - Status = AcpiDmDumpTable (Table->Length, 0, > - ACPI_ADD_PTR (UINT8, Namesp, VendorDataOffset), > - VendorDataLength, AcpiDmTableInfoSdev1b); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - } > - break; > - > - case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE: > - > - /* PCI path substructures */ > - > - Pcie = ACPI_CAST_PTR (ACPI_SDEV_PCIE, Subtable); > - PathOffset = Pcie->PathOffset; > - PathLength = Pcie->PathLength; > - > - while (PathLength) > - { > - Status = AcpiDmDumpTable (Table->Length, > - PathOffset + Offset, > - ACPI_ADD_PTR (UINT8, Pcie, PathOffset), > - sizeof (ACPI_SDEV_PCIE_PATH), AcpiDmTableInfoSdev1a); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - PathOffset += sizeof (ACPI_SDEV_PCIE_PATH); > - PathLength -= sizeof (ACPI_SDEV_PCIE_PATH); > - } > - > - /* VendorData */ > - > - VendorDataLength = Pcie->VendorDataLength; > - VendorDataOffset = Pcie->PathOffset + Pcie->PathLength; > - > - if (VendorDataLength) > - { > - Status = AcpiDmDumpTable (Table->Length, 0, > - ACPI_ADD_PTR (UINT8, Pcie, VendorDataOffset), > - VendorDataLength, AcpiDmTableInfoSdev1b); > - } > - break; > - > - default: > - goto NextSubtable; > - } > - > -NextSubtable: > - /* Point to next subtable */ > - > - Offset += Subtable->Length; > - Subtable = ACPI_ADD_PTR (ACPI_SDEV_HEADER, Subtable, > - Subtable->Length); > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpSlic > - * > - * PARAMETERS: Table - A SLIC table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a SLIC > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpSlic ( > - ACPI_TABLE_HEADER *Table) > -{ > - > - (void) AcpiDmDumpTable (Table->Length, sizeof (ACPI_TABLE_HEADER), Table, > - Table->Length - sizeof (*Table), AcpiDmTableInfoSlic); > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpSlit > - * > - * PARAMETERS: Table - An SLIT > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a SLIT > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpSlit ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - UINT32 Offset; > - UINT8 *Row; > - UINT32 Localities; > - UINT32 i; > - UINT32 j; > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSlit); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Display the Locality NxN Matrix */ > - > - Localities = (UINT32) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->LocalityCount; > - Offset = ACPI_OFFSET (ACPI_TABLE_SLIT, Entry[0]); > - Row = (UINT8 *) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->Entry; > - > - for (i = 0; i < Localities; i++) > - { > - /* Display one row of the matrix */ > - > - AcpiDmLineHeader2 (Offset, Localities, "Locality", i); > - for (j = 0; j < Localities; j++) > - { > - /* Check for beyond EOT */ > - > - if (Offset >= Table->Length) > - { > - AcpiOsPrintf ( > - "\n**** Not enough room in table for all localities\n"); > - return; > - } > - > - AcpiOsPrintf ("%2.2X", Row[j]); > - Offset++; > - > - /* Display up to 16 bytes per output row */ > - > - if ((j+1) < Localities) > - { > - AcpiOsPrintf (" "); > - > - if (j && (((j+1) % 16) == 0)) > - { > - AcpiOsPrintf ("\\\n"); /* With line continuation char */ > - AcpiDmLineHeader (Offset, 0, NULL); > - } > - } > - } > - > - /* Point to next row */ > - > - AcpiOsPrintf ("\n"); > - Row += Localities; > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpSrat > - * > - * PARAMETERS: Table - A SRAT table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a SRAT > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpSrat ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - UINT32 Offset = sizeof (ACPI_TABLE_SRAT); > - ACPI_SUBTABLE_HEADER *Subtable; > - ACPI_DMTABLE_INFO *InfoTable; > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSrat); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Subtables */ > - > - Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset); > - while (Offset < Table->Length) > - { > - /* Common subtable header */ > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > - Subtable->Length, AcpiDmTableInfoSratHdr); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - switch (Subtable->Type) > - { > - case ACPI_SRAT_TYPE_CPU_AFFINITY: > - > - InfoTable = AcpiDmTableInfoSrat0; > - break; > - > - case ACPI_SRAT_TYPE_MEMORY_AFFINITY: > - > - InfoTable = AcpiDmTableInfoSrat1; > - break; > - > - case ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY: > - > - InfoTable = AcpiDmTableInfoSrat2; > - break; > - > - case ACPI_SRAT_TYPE_GICC_AFFINITY: > - > - InfoTable = AcpiDmTableInfoSrat3; > - break; > - > - case ACPI_SRAT_TYPE_GIC_ITS_AFFINITY: > - > - InfoTable = AcpiDmTableInfoSrat4; > - break; > - > - default: > - AcpiOsPrintf ("\n**** Unknown SRAT subtable type 0x%X\n", > - Subtable->Type); > - > - /* Attempt to continue */ > - > - if (!Subtable->Length) > - { > - AcpiOsPrintf ("Invalid zero length subtable\n"); > - return; > - } > - goto NextSubtable; > - } > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > - Subtable->Length, InfoTable); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > -NextSubtable: > - /* Point to next subtable */ > - > - Offset += Subtable->Length; > - Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, > - Subtable->Length); > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpStao > - * > - * PARAMETERS: Table - A STAO table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a STAO. This is a variable-length > - * table that contains an open-ended number of ASCII strings > - * at the end of the table. > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpStao ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - char *Namepath; > - UINT32 Length = Table->Length; > - UINT32 StringLength; > - UINT32 Offset = sizeof (ACPI_TABLE_STAO); > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoStao); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* The rest of the table consists of Namepath strings */ > - > - while (Offset < Table->Length) > - { > - Namepath = ACPI_ADD_PTR (char, Table, Offset); > - StringLength = strlen (Namepath) + 1; > - > - AcpiDmLineHeader (Offset, StringLength, "Namestring"); > - AcpiOsPrintf ("\"%s\"\n", Namepath); > - > - /* Point to next namepath */ > - > - Offset += StringLength; > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpTcpa > - * > - * PARAMETERS: Table - A TCPA table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a TCPA. > - * > - * NOTE: There are two versions of the table with the same signature: > - * the client version and the server version. The common > - * PlatformClass field is used to differentiate the two types of > - * tables. > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpTcpa ( > - ACPI_TABLE_HEADER *Table) > -{ > - UINT32 Offset = sizeof (ACPI_TABLE_TCPA_HDR); > - ACPI_TABLE_TCPA_HDR *CommonHeader = ACPI_CAST_PTR ( > - ACPI_TABLE_TCPA_HDR, Table); > - ACPI_TABLE_TCPA_HDR *Subtable = ACPI_ADD_PTR ( > - ACPI_TABLE_TCPA_HDR, Table, Offset); > - ACPI_STATUS Status; > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Table->Length, 0, Table, > - 0, AcpiDmTableInfoTcpaHdr); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* > - * Examine the PlatformClass field to determine the table type. > - * Either a client or server table. Only one. > - */ > - switch (CommonHeader->PlatformClass) > - { > - case ACPI_TCPA_CLIENT_TABLE: > - > - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > - Table->Length - Offset, AcpiDmTableInfoTcpaClient); > - break; > - > - case ACPI_TCPA_SERVER_TABLE: > - > - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > - Table->Length - Offset, AcpiDmTableInfoTcpaServer); > - break; > - > - default: > - > - AcpiOsPrintf ("\n**** Unknown TCPA Platform Class 0x%X\n", > - CommonHeader->PlatformClass); > - Status = AE_ERROR; > - break; > - } > - > - if (ACPI_FAILURE (Status)) > - { > - AcpiOsPrintf ("\n**** Cannot disassemble TCPA table\n"); > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpTpm2 > - * > - * PARAMETERS: Table - A TPM2 table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a TPM2. > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpTpm2 ( > - ACPI_TABLE_HEADER *Table) > -{ > - UINT32 Offset = sizeof (ACPI_TABLE_TPM2); > - ACPI_TABLE_TPM2 *CommonHeader = ACPI_CAST_PTR (ACPI_TABLE_TPM2, Table); > - ACPI_TPM2_TRAILER *Subtable = ACPI_ADD_PTR (ACPI_TPM2_TRAILER, Table, Offset); > - ACPI_TPM2_ARM_SMC *ArmSubtable; > - ACPI_STATUS Status; > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoTpm2); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > - Table->Length - Offset, AcpiDmTableInfoTpm2a); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - switch (CommonHeader->StartMethod) > - { > - case ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC: > - > - ArmSubtable = ACPI_ADD_PTR (ACPI_TPM2_ARM_SMC, Subtable, > - sizeof (ACPI_TPM2_TRAILER)); > - Offset += sizeof (ACPI_TPM2_TRAILER); > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Table->Length, Offset, ArmSubtable, > - Table->Length - Offset, AcpiDmTableInfoTpm211); > - break; > - > - default: > - break; > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpVrtc > - * > - * PARAMETERS: Table - A VRTC table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a VRTC > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpVrtc ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - UINT32 Offset = sizeof (ACPI_TABLE_VRTC); > - ACPI_VRTC_ENTRY *Subtable; > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoVrtc); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Subtables */ > - > - Subtable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, Table, Offset); > - while (Offset < Table->Length) > - { > - /* Common subtable header */ > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > - sizeof (ACPI_VRTC_ENTRY), AcpiDmTableInfoVrtc0); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Point to next subtable */ > - > - Offset += sizeof (ACPI_VRTC_ENTRY); > - Subtable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, Subtable, > - sizeof (ACPI_VRTC_ENTRY)); > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpWdat > - * > - * PARAMETERS: Table - A WDAT table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a WDAT > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpWdat ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - UINT32 Offset = sizeof (ACPI_TABLE_WDAT); > - ACPI_WDAT_ENTRY *Subtable; > - > - > - /* Main table */ > - > - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoWdat); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Subtables */ > - > - Subtable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Table, Offset); > - while (Offset < Table->Length) > - { > - /* Common subtable header */ > - > - AcpiOsPrintf ("\n"); > - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > - sizeof (ACPI_WDAT_ENTRY), AcpiDmTableInfoWdat0); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Point to next subtable */ > - > - Offset += sizeof (ACPI_WDAT_ENTRY); > - Subtable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Subtable, > - sizeof (ACPI_WDAT_ENTRY)); > - } > -} > - > - > -/******************************************************************************* > - * > - * FUNCTION: AcpiDmDumpWpbt > - * > - * PARAMETERS: Table - A WPBT table > - * > - * RETURN: None > - * > - * DESCRIPTION: Format the contents of a WPBT. This table type consists > - * of an open-ended arguments buffer at the end of the table. > - * > - ******************************************************************************/ > - > -void > -AcpiDmDumpWpbt ( > - ACPI_TABLE_HEADER *Table) > -{ > - ACPI_STATUS Status; > - ACPI_TABLE_WPBT *Subtable; > - UINT32 Length = Table->Length; > - UINT16 ArgumentsLength; > - > - > - /* Dump the main table */ > - > - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoWpbt); > - if (ACPI_FAILURE (Status)) > - { > - return; > - } > - > - /* Extract the arguments buffer length from the main table */ > - > - Subtable = ACPI_CAST_PTR (ACPI_TABLE_WPBT, Table); > - ArgumentsLength = Subtable->ArgumentsLength; > - > - /* Dump the arguments buffer */ > - > - (void) AcpiDmDumpTable (Table->Length, 0, Table, ArgumentsLength, > - AcpiDmTableInfoWpbt0); > -} > diff --git a/src/acpica/source/common/dmtbdump1.c b/src/acpica/source/common/dmtbdump1.c > new file mode 100644 > index 00000000..4495ba4a > --- /dev/null > +++ b/src/acpica/source/common/dmtbdump1.c > @@ -0,0 +1,1542 @@ > +/****************************************************************************** > + * > + * Module Name: dmtbdump1 - Dump ACPI data tables that contain no AML code > + * > + *****************************************************************************/ > + > +/****************************************************************************** > + * > + * 1. Copyright Notice > + * > + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. > + * All rights reserved. > + * > + * 2. License > + * > + * 2.1. This is your license from Intel Corp. under its intellectual property > + * rights. You may have additional license terms from the party that provided > + * you this software, covering your right to use that party's intellectual > + * property rights. > + * > + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a > + * copy of the source code appearing in this file ("Covered Code") an > + * irrevocable, perpetual, worldwide license under Intel's copyrights in the > + * base code distributed originally by Intel ("Original Intel Code") to copy, > + * make derivatives, distribute, use and display any portion of the Covered > + * Code in any form, with the right to sublicense such rights; and > + * > + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent > + * license (with the right to sublicense), under only those claims of Intel > + * patents that are infringed by the Original Intel Code, to make, use, sell, > + * offer to sell, and import the Covered Code and derivative works thereof > + * solely to the minimum extent necessary to exercise the above copyright > + * license, and in no event shall the patent license extend to any additions > + * to or modifications of the Original Intel Code. No other license or right > + * is granted directly or by implication, estoppel or otherwise; > + * > + * The above copyright and patent license is granted only if the following > + * conditions are met: > + * > + * 3. Conditions > + * > + * 3.1. Redistribution of Source with Rights to Further Distribute Source. > + * Redistribution of source code of any substantial portion of the Covered > + * Code or modification with rights to further distribute source must include > + * the above Copyright Notice, the above License, this list of Conditions, > + * and the following Disclaimer and Export Compliance provision. In addition, > + * Licensee must cause all Covered Code to which Licensee contributes to > + * contain a file documenting the changes Licensee made to create that Covered > + * Code and the date of any change. Licensee must include in that file the > + * documentation of any changes made by any predecessor Licensee. Licensee > + * must include a prominent statement that the modification is derived, > + * directly or indirectly, from Original Intel Code. > + * > + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. > + * Redistribution of source code of any substantial portion of the Covered > + * Code or modification without rights to further distribute source must > + * include the following Disclaimer and Export Compliance provision in the > + * documentation and/or other materials provided with distribution. In > + * addition, Licensee may not authorize further sublicense of source of any > + * portion of the Covered Code, and must include terms to the effect that the > + * license from Licensee to its licensee is limited to the intellectual > + * property embodied in the software Licensee provides to its licensee, and > + * not to intellectual property embodied in modifications its licensee may > + * make. > + * > + * 3.3. Redistribution of Executable. Redistribution in executable form of any > + * substantial portion of the Covered Code or modification must reproduce the > + * above Copyright Notice, and the following Disclaimer and Export Compliance > + * provision in the documentation and/or other materials provided with the > + * distribution. > + * > + * 3.4. Intel retains all right, title, and interest in and to the Original > + * Intel Code. > + * > + * 3.5. Neither the name Intel nor any other trademark owned or controlled by > + * Intel shall be used in advertising or otherwise to promote the sale, use or > + * other dealings in products derived from or relating to the Covered Code > + * without prior written authorization from Intel. > + * > + * 4. Disclaimer and Export Compliance > + * > + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED > + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE > + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, > + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY > + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY > + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A > + * PARTICULAR PURPOSE. > + * > + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES > + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR > + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, > + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY > + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL > + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS > + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY > + * LIMITED REMEDY. > + * > + * 4.3. Licensee shall not export, either directly or indirectly, any of this > + * software or system incorporating such software without first obtaining any > + * required license or other approval from the U. S. Department of Commerce or > + * any other agency or department of the United States Government. In the > + * event Licensee exports any such software from the United States or > + * re-exports any such software from a foreign destination, Licensee shall > + * ensure that the distribution and export/re-export of the software is in > + * compliance with all laws, regulations, orders, or other restrictions of the > + * U.S. Export Administration Regulations. Licensee agrees that neither it nor > + * any of its subsidiaries will export/re-export any technical data, process, > + * software, or service, directly or indirectly, to any country for which the > + * United States government or any agency thereof requires an export license, > + * other governmental approval, or letter of assurance, without first obtaining > + * such license, approval or letter. > + * > + ***************************************************************************** > + * > + * Alternatively, you may choose to be licensed under the terms of the > + * following license: > + * > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions > + * are met: > + * 1. Redistributions of source code must retain the above copyright > + * notice, this list of conditions, and the following disclaimer, > + * without modification. > + * 2. Redistributions in binary form must reproduce at minimum a disclaimer > + * substantially similar to the "NO WARRANTY" disclaimer below > + * ("Disclaimer") and any redistribution must be conditioned upon > + * including a substantially similar Disclaimer requirement for further > + * binary redistribution. > + * 3. Neither the names of the above-listed copyright holders nor the names > + * of any contributors may be used to endorse or promote products derived > + * from this software without specific prior written permission. > + * > + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS > + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT > + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR > + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT > + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, > + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT > + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, > + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY > + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE > + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > + * > + * Alternatively, you may choose to be licensed under the terms of the > + * GNU General Public License ("GPL") version 2 as published by the Free > + * Software Foundation. > + * > + *****************************************************************************/ > + > +#include "acpi.h" > +#include "accommon.h" > +#include "acdisasm.h" > +#include "actables.h" > + > +/* This module used for application-level code only */ > + > +#define _COMPONENT ACPI_CA_DISASSEMBLER > + ACPI_MODULE_NAME ("dmtbdump1") > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpAsf > + * > + * PARAMETERS: Table - A ASF table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a ASF table > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpAsf ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + UINT32 Offset = sizeof (ACPI_TABLE_HEADER); > + ACPI_ASF_INFO *Subtable; > + ACPI_DMTABLE_INFO *InfoTable; > + ACPI_DMTABLE_INFO *DataInfoTable = NULL; > + UINT8 *DataTable = NULL; > + UINT32 DataCount = 0; > + UINT32 DataLength = 0; > + UINT32 DataOffset = 0; > + UINT32 i; > + UINT8 Type; > + > + > + /* No main table, only subtables */ > + > + Subtable = ACPI_ADD_PTR (ACPI_ASF_INFO, Table, Offset); > + while (Offset < Table->Length) > + { > + /* Common subtable header */ > + > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > + Subtable->Header.Length, AcpiDmTableInfoAsfHdr); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* The actual type is the lower 7 bits of Type */ > + > + Type = (UINT8) (Subtable->Header.Type & 0x7F); > + > + switch (Type) > + { > + case ACPI_ASF_TYPE_INFO: > + > + InfoTable = AcpiDmTableInfoAsf0; > + break; > + > + case ACPI_ASF_TYPE_ALERT: > + > + InfoTable = AcpiDmTableInfoAsf1; > + DataInfoTable = AcpiDmTableInfoAsf1a; > + DataTable = ACPI_ADD_PTR (UINT8, Subtable, sizeof (ACPI_ASF_ALERT)); > + DataCount = ACPI_CAST_PTR (ACPI_ASF_ALERT, Subtable)->Alerts; > + DataLength = ACPI_CAST_PTR (ACPI_ASF_ALERT, Subtable)->DataLength; > + DataOffset = Offset + sizeof (ACPI_ASF_ALERT); > + break; > + > + case ACPI_ASF_TYPE_CONTROL: > + > + InfoTable = AcpiDmTableInfoAsf2; > + DataInfoTable = AcpiDmTableInfoAsf2a; > + DataTable = ACPI_ADD_PTR (UINT8, Subtable, sizeof (ACPI_ASF_REMOTE)); > + DataCount = ACPI_CAST_PTR (ACPI_ASF_REMOTE, Subtable)->Controls; > + DataLength = ACPI_CAST_PTR (ACPI_ASF_REMOTE, Subtable)->DataLength; > + DataOffset = Offset + sizeof (ACPI_ASF_REMOTE); > + break; > + > + case ACPI_ASF_TYPE_BOOT: > + > + InfoTable = AcpiDmTableInfoAsf3; > + break; > + > + case ACPI_ASF_TYPE_ADDRESS: > + > + InfoTable = AcpiDmTableInfoAsf4; > + DataTable = ACPI_ADD_PTR (UINT8, Subtable, sizeof (ACPI_ASF_ADDRESS)); > + DataLength = ACPI_CAST_PTR (ACPI_ASF_ADDRESS, Subtable)->Devices; > + DataOffset = Offset + sizeof (ACPI_ASF_ADDRESS); > + break; > + > + default: > + > + AcpiOsPrintf ("\n**** Unknown ASF subtable type 0x%X\n", > + Subtable->Header.Type); > + return; > + } > + > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > + Subtable->Header.Length, InfoTable); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Dump variable-length extra data */ > + > + switch (Type) > + { > + case ACPI_ASF_TYPE_ALERT: > + case ACPI_ASF_TYPE_CONTROL: > + > + for (i = 0; i < DataCount; i++) > + { > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Table->Length, DataOffset, > + DataTable, DataLength, DataInfoTable); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + DataTable = ACPI_ADD_PTR (UINT8, DataTable, DataLength); > + DataOffset += DataLength; > + } > + break; > + > + case ACPI_ASF_TYPE_ADDRESS: > + > + for (i = 0; i < DataLength; i++) > + { > + if (!(i % 16)) > + { > + AcpiDmLineHeader (DataOffset, 1, "Addresses"); > + } > + > + AcpiOsPrintf ("%2.2X ", *DataTable); > + DataTable++; > + DataOffset++; > + > + if (DataOffset > Table->Length) > + { > + AcpiOsPrintf ( > + "**** ACPI table terminates in the middle of a " > + "data structure! (ASF! table)\n"); > + return; > + } > + } > + > + AcpiOsPrintf ("\n"); > + break; > + > + default: > + > + break; > + } > + > + AcpiOsPrintf ("\n"); > + > + /* Point to next subtable */ > + > + if (!Subtable->Header.Length) > + { > + AcpiOsPrintf ("Invalid zero subtable header length\n"); > + return; > + } > + > + Offset += Subtable->Header.Length; > + Subtable = ACPI_ADD_PTR (ACPI_ASF_INFO, Subtable, > + Subtable->Header.Length); > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpCpep > + * > + * PARAMETERS: Table - A CPEP table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a CPEP. This table type consists > + * of an open-ended number of subtables. > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpCpep ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + ACPI_CPEP_POLLING *Subtable; > + UINT32 Length = Table->Length; > + UINT32 Offset = sizeof (ACPI_TABLE_CPEP); > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoCpep); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Subtables */ > + > + Subtable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Table, Offset); > + while (Offset < Table->Length) > + { > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Length, Offset, Subtable, > + Subtable->Header.Length, AcpiDmTableInfoCpep0); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Point to next subtable */ > + > + Offset += Subtable->Header.Length; > + Subtable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Subtable, > + Subtable->Header.Length); > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpCsrt > + * > + * PARAMETERS: Table - A CSRT table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a CSRT. This table type consists > + * of an open-ended number of subtables. > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpCsrt ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + ACPI_CSRT_GROUP *Subtable; > + ACPI_CSRT_SHARED_INFO *SharedInfoTable; > + ACPI_CSRT_DESCRIPTOR *SubSubtable; > + UINT32 Length = Table->Length; > + UINT32 Offset = sizeof (ACPI_TABLE_CSRT); > + UINT32 SubOffset; > + UINT32 SubSubOffset; > + UINT32 InfoLength; > + > + > + /* The main table only contains the ACPI header, thus already handled */ > + > + /* Subtables (Resource Groups) */ > + > + Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Table, Offset); > + while (Offset < Table->Length) > + { > + /* Resource group subtable */ > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Length, Offset, Subtable, > + Subtable->Length, AcpiDmTableInfoCsrt0); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Shared info subtable (One per resource group) */ > + > + SubOffset = sizeof (ACPI_CSRT_GROUP); > + SharedInfoTable = ACPI_ADD_PTR (ACPI_CSRT_SHARED_INFO, Table, > + Offset + SubOffset); > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Length, Offset + SubOffset, SharedInfoTable, > + sizeof (ACPI_CSRT_SHARED_INFO), AcpiDmTableInfoCsrt1); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + SubOffset += Subtable->SharedInfoLength; > + > + /* Sub-Subtables (Resource Descriptors) */ > + > + SubSubtable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, Table, > + Offset + SubOffset); > + > + while ((SubOffset < Subtable->Length) && > + ((Offset + SubOffset) < Table->Length)) > + { > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubtable, > + SubSubtable->Length, AcpiDmTableInfoCsrt2); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + SubSubOffset = sizeof (ACPI_CSRT_DESCRIPTOR); > + > + /* Resource-specific info buffer */ > + > + InfoLength = SubSubtable->Length - SubSubOffset; > + if (InfoLength) > + { > + Status = AcpiDmDumpTable (Length, > + Offset + SubOffset + SubSubOffset, Table, > + InfoLength, AcpiDmTableInfoCsrt2a); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + SubSubOffset += InfoLength; > + } > + > + /* Point to next sub-subtable */ > + > + SubOffset += SubSubtable->Length; > + SubSubtable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, SubSubtable, > + SubSubtable->Length); > + } > + > + /* Point to next subtable */ > + > + Offset += Subtable->Length; > + Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Subtable, > + Subtable->Length); > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpDbg2 > + * > + * PARAMETERS: Table - A DBG2 table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a DBG2. This table type consists > + * of an open-ended number of subtables. > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpDbg2 ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + ACPI_DBG2_DEVICE *Subtable; > + UINT32 Length = Table->Length; > + UINT32 Offset = sizeof (ACPI_TABLE_DBG2); > + UINT32 i; > + UINT32 ArrayOffset; > + UINT32 AbsoluteOffset; > + UINT8 *Array; > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDbg2); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Subtables */ > + > + Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Table, Offset); > + while (Offset < Table->Length) > + { > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Length, Offset, Subtable, > + Subtable->Length, AcpiDmTableInfoDbg2Device); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Dump the BaseAddress array */ > + > + for (i = 0; i < Subtable->RegisterCount; i++) > + { > + ArrayOffset = Subtable->BaseAddressOffset + > + (sizeof (ACPI_GENERIC_ADDRESS) * i); > + AbsoluteOffset = Offset + ArrayOffset; > + Array = (UINT8 *) Subtable + ArrayOffset; > + > + Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, > + Subtable->Length, AcpiDmTableInfoDbg2Addr); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + } > + > + /* Dump the AddressSize array */ > + > + for (i = 0; i < Subtable->RegisterCount; i++) > + { > + ArrayOffset = Subtable->AddressSizeOffset + > + (sizeof (UINT32) * i); > + AbsoluteOffset = Offset + ArrayOffset; > + Array = (UINT8 *) Subtable + ArrayOffset; > + > + Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, > + Subtable->Length, AcpiDmTableInfoDbg2Size); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + } > + > + /* Dump the Namestring (required) */ > + > + AcpiOsPrintf ("\n"); > + ArrayOffset = Subtable->NamepathOffset; > + AbsoluteOffset = Offset + ArrayOffset; > + Array = (UINT8 *) Subtable + ArrayOffset; > + > + Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, > + Subtable->Length, AcpiDmTableInfoDbg2Name); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Dump the OemData (optional) */ > + > + if (Subtable->OemDataOffset) > + { > + Status = AcpiDmDumpTable (Length, Offset + Subtable->OemDataOffset, > + Table, Subtable->OemDataLength, > + AcpiDmTableInfoDbg2OemData); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + } > + > + /* Point to next subtable */ > + > + Offset += Subtable->Length; > + Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Subtable, > + Subtable->Length); > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpDmar > + * > + * PARAMETERS: Table - A DMAR table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a DMAR. This table type consists > + * of an open-ended number of subtables. > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpDmar ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + ACPI_DMAR_HEADER *Subtable; > + UINT32 Length = Table->Length; > + UINT32 Offset = sizeof (ACPI_TABLE_DMAR); > + ACPI_DMTABLE_INFO *InfoTable; > + ACPI_DMAR_DEVICE_SCOPE *ScopeTable; > + UINT32 ScopeOffset; > + UINT8 *PciPath; > + UINT32 PathOffset; > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDmar); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Subtables */ > + > + Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Table, Offset); > + while (Offset < Table->Length) > + { > + /* Common subtable header */ > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Length, Offset, Subtable, > + Subtable->Length, AcpiDmTableInfoDmarHdr); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + AcpiOsPrintf ("\n"); > + > + switch (Subtable->Type) > + { > + case ACPI_DMAR_TYPE_HARDWARE_UNIT: > + > + InfoTable = AcpiDmTableInfoDmar0; > + ScopeOffset = sizeof (ACPI_DMAR_HARDWARE_UNIT); > + break; > + > + case ACPI_DMAR_TYPE_RESERVED_MEMORY: > + > + InfoTable = AcpiDmTableInfoDmar1; > + ScopeOffset = sizeof (ACPI_DMAR_RESERVED_MEMORY); > + break; > + > + case ACPI_DMAR_TYPE_ROOT_ATS: > + > + InfoTable = AcpiDmTableInfoDmar2; > + ScopeOffset = sizeof (ACPI_DMAR_ATSR); > + break; > + > + case ACPI_DMAR_TYPE_HARDWARE_AFFINITY: > + > + InfoTable = AcpiDmTableInfoDmar3; > + ScopeOffset = sizeof (ACPI_DMAR_RHSA); > + break; > + > + case ACPI_DMAR_TYPE_NAMESPACE: > + > + InfoTable = AcpiDmTableInfoDmar4; > + ScopeOffset = sizeof (ACPI_DMAR_ANDD); > + break; > + > + default: > + > + AcpiOsPrintf ("\n**** Unknown DMAR subtable type 0x%X\n\n", > + Subtable->Type); > + return; > + } > + > + Status = AcpiDmDumpTable (Length, Offset, Subtable, > + Subtable->Length, InfoTable); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* > + * Dump the optional device scope entries > + */ > + if ((Subtable->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) || > + (Subtable->Type == ACPI_DMAR_TYPE_NAMESPACE)) > + { > + /* These types do not support device scopes */ > + > + goto NextSubtable; > + } > + > + ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, Subtable, ScopeOffset); > + while (ScopeOffset < Subtable->Length) > + { > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Length, Offset + ScopeOffset, ScopeTable, > + ScopeTable->Length, AcpiDmTableInfoDmarScope); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + AcpiOsPrintf ("\n"); > + > + /* Dump the PCI Path entries for this device scope */ > + > + PathOffset = sizeof (ACPI_DMAR_DEVICE_SCOPE); /* Path entries start at this offset */ > + > + PciPath = ACPI_ADD_PTR (UINT8, ScopeTable, > + sizeof (ACPI_DMAR_DEVICE_SCOPE)); > + > + while (PathOffset < ScopeTable->Length) > + { > + AcpiDmLineHeader ((PathOffset + ScopeOffset + Offset), 2, > + "PCI Path"); > + AcpiOsPrintf ("%2.2X,%2.2X\n", PciPath[0], PciPath[1]); > + > + /* Point to next PCI Path entry */ > + > + PathOffset += 2; > + PciPath += 2; > + AcpiOsPrintf ("\n"); > + } > + > + /* Point to next device scope entry */ > + > + ScopeOffset += ScopeTable->Length; > + ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, > + ScopeTable, ScopeTable->Length); > + } > + > +NextSubtable: > + /* Point to next subtable */ > + > + Offset += Subtable->Length; > + Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Subtable, > + Subtable->Length); > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpDrtm > + * > + * PARAMETERS: Table - A DRTM table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a DRTM. > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpDrtm ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + UINT32 Offset; > + ACPI_DRTM_VTABLE_LIST *DrtmVtl; > + ACPI_DRTM_RESOURCE_LIST *DrtmRl; > + ACPI_DRTM_DPS_ID *DrtmDps; > + UINT32 Count; > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, > + AcpiDmTableInfoDrtm); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + Offset = sizeof (ACPI_TABLE_DRTM); > + > + /* Sub-tables */ > + > + /* Dump ValidatedTable length */ > + > + DrtmVtl = ACPI_ADD_PTR (ACPI_DRTM_VTABLE_LIST, Table, Offset); > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Table->Length, Offset, > + DrtmVtl, ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST, ValidatedTables), > + AcpiDmTableInfoDrtm0); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + Offset += ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST, ValidatedTables); > + > + /* Dump Validated table addresses */ > + > + Count = 0; > + while ((Offset < Table->Length) && > + (DrtmVtl->ValidatedTableCount > Count)) > + { > + Status = AcpiDmDumpTable (Table->Length, Offset, > + ACPI_ADD_PTR (void, Table, Offset), sizeof (UINT64), > + AcpiDmTableInfoDrtm0a); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + Offset += sizeof (UINT64); > + Count++; > + } > + > + /* Dump ResourceList length */ > + > + DrtmRl = ACPI_ADD_PTR (ACPI_DRTM_RESOURCE_LIST, Table, Offset); > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Table->Length, Offset, > + DrtmRl, ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST, Resources), > + AcpiDmTableInfoDrtm1); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + Offset += ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST, Resources); > + > + /* Dump the Resource List */ > + > + Count = 0; > + while ((Offset < Table->Length) && > + (DrtmRl->ResourceCount > Count)) > + { > + Status = AcpiDmDumpTable (Table->Length, Offset, > + ACPI_ADD_PTR (void, Table, Offset), > + sizeof (ACPI_DRTM_RESOURCE), AcpiDmTableInfoDrtm1a); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + Offset += sizeof (ACPI_DRTM_RESOURCE); > + Count++; > + } > + > + /* Dump DPS */ > + > + DrtmDps = ACPI_ADD_PTR (ACPI_DRTM_DPS_ID, Table, Offset); > + AcpiOsPrintf ("\n"); > + (void) AcpiDmDumpTable (Table->Length, Offset, > + DrtmDps, sizeof (ACPI_DRTM_DPS_ID), AcpiDmTableInfoDrtm2); > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpEinj > + * > + * PARAMETERS: Table - A EINJ table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a EINJ. This table type consists > + * of an open-ended number of subtables. > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpEinj ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + ACPI_WHEA_HEADER *Subtable; > + UINT32 Length = Table->Length; > + UINT32 Offset = sizeof (ACPI_TABLE_EINJ); > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoEinj); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Subtables */ > + > + Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset); > + while (Offset < Table->Length) > + { > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Length, Offset, Subtable, > + sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoEinj0); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Point to next subtable (each subtable is of fixed length) */ > + > + Offset += sizeof (ACPI_WHEA_HEADER); > + Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Subtable, > + sizeof (ACPI_WHEA_HEADER)); > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpErst > + * > + * PARAMETERS: Table - A ERST table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a ERST. This table type consists > + * of an open-ended number of subtables. > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpErst ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + ACPI_WHEA_HEADER *Subtable; > + UINT32 Length = Table->Length; > + UINT32 Offset = sizeof (ACPI_TABLE_ERST); > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoErst); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Subtables */ > + > + Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset); > + while (Offset < Table->Length) > + { > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Length, Offset, Subtable, > + sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoErst0); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Point to next subtable (each subtable is of fixed length) */ > + > + Offset += sizeof (ACPI_WHEA_HEADER); > + Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Subtable, > + sizeof (ACPI_WHEA_HEADER)); > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpFpdt > + * > + * PARAMETERS: Table - A FPDT table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a FPDT. This table type consists > + * of an open-ended number of subtables. > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpFpdt ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + ACPI_FPDT_HEADER *Subtable; > + UINT32 Length = Table->Length; > + UINT32 Offset = sizeof (ACPI_TABLE_FPDT); > + ACPI_DMTABLE_INFO *InfoTable; > + > + > + /* There is no main table (other than the standard ACPI header) */ > + > + /* Subtables */ > + > + Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Table, Offset); > + while (Offset < Table->Length) > + { > + /* Common subtable header */ > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Length, Offset, Subtable, > + Subtable->Length, AcpiDmTableInfoFpdtHdr); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + switch (Subtable->Type) > + { > + case ACPI_FPDT_TYPE_BOOT: > + > + InfoTable = AcpiDmTableInfoFpdt0; > + break; > + > + case ACPI_FPDT_TYPE_S3PERF: > + > + InfoTable = AcpiDmTableInfoFpdt1; > + break; > + > + default: > + > + AcpiOsPrintf ("\n**** Unknown FPDT subtable type 0x%X\n\n", > + Subtable->Type); > + > + /* Attempt to continue */ > + > + if (!Subtable->Length) > + { > + AcpiOsPrintf ("Invalid zero length subtable\n"); > + return; > + } > + goto NextSubtable; > + } > + > + Status = AcpiDmDumpTable (Length, Offset, Subtable, > + Subtable->Length, InfoTable); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > +NextSubtable: > + /* Point to next subtable */ > + > + Offset += Subtable->Length; > + Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Subtable, > + Subtable->Length); > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpGtdt > + * > + * PARAMETERS: Table - A GTDT table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a GTDT. This table type consists > + * of an open-ended number of subtables. > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpGtdt ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + ACPI_GTDT_HEADER *Subtable; > + UINT32 Length = Table->Length; > + UINT32 Offset = sizeof (ACPI_TABLE_GTDT); > + ACPI_DMTABLE_INFO *InfoTable; > + UINT32 SubtableLength; > + UINT32 GtCount; > + ACPI_GTDT_TIMER_ENTRY *GtxTable; > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoGtdt); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Subtables */ > + > + Subtable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Table, Offset); > + while (Offset < Table->Length) > + { > + /* Common subtable header */ > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Length, Offset, Subtable, > + Subtable->Length, AcpiDmTableInfoGtdtHdr); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + GtCount = 0; > + switch (Subtable->Type) > + { > + case ACPI_GTDT_TYPE_TIMER_BLOCK: > + > + SubtableLength = sizeof (ACPI_GTDT_TIMER_BLOCK); > + GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK, > + Subtable))->TimerCount; > + > + InfoTable = AcpiDmTableInfoGtdt0; > + break; > + > + case ACPI_GTDT_TYPE_WATCHDOG: > + > + SubtableLength = sizeof (ACPI_GTDT_WATCHDOG); > + > + InfoTable = AcpiDmTableInfoGtdt1; > + break; > + > + default: > + > + /* Cannot continue on unknown type - no length */ > + > + AcpiOsPrintf ("\n**** Unknown GTDT subtable type 0x%X\n", > + Subtable->Type); > + return; > + } > + > + Status = AcpiDmDumpTable (Length, Offset, Subtable, > + Subtable->Length, InfoTable); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Point to end of current subtable (each subtable above is of fixed length) */ > + > + Offset += SubtableLength; > + > + /* If there are any Gt Timer Blocks from above, dump them now */ > + > + if (GtCount) > + { > + GtxTable = ACPI_ADD_PTR ( > + ACPI_GTDT_TIMER_ENTRY, Subtable, SubtableLength); > + SubtableLength += GtCount * sizeof (ACPI_GTDT_TIMER_ENTRY); > + > + while (GtCount) > + { > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Length, Offset, GtxTable, > + sizeof (ACPI_GTDT_TIMER_ENTRY), AcpiDmTableInfoGtdt0a); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + Offset += sizeof (ACPI_GTDT_TIMER_ENTRY); > + GtxTable++; > + GtCount--; > + } > + } > + > + /* Point to next subtable */ > + > + Subtable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Subtable, SubtableLength); > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpHest > + * > + * PARAMETERS: Table - A HEST table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a HEST. This table type consists > + * of an open-ended number of subtables. > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpHest ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + ACPI_HEST_HEADER *Subtable; > + UINT32 Length = Table->Length; > + UINT32 Offset = sizeof (ACPI_TABLE_HEST); > + ACPI_DMTABLE_INFO *InfoTable; > + UINT32 SubtableLength; > + UINT32 BankCount; > + ACPI_HEST_IA_ERROR_BANK *BankTable; > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoHest); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Subtables */ > + > + Subtable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Table, Offset); > + while (Offset < Table->Length) > + { > + BankCount = 0; > + switch (Subtable->Type) > + { > + case ACPI_HEST_TYPE_IA32_CHECK: > + > + InfoTable = AcpiDmTableInfoHest0; > + SubtableLength = sizeof (ACPI_HEST_IA_MACHINE_CHECK); > + BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_MACHINE_CHECK, > + Subtable))->NumHardwareBanks; > + break; > + > + case ACPI_HEST_TYPE_IA32_CORRECTED_CHECK: > + > + InfoTable = AcpiDmTableInfoHest1; > + SubtableLength = sizeof (ACPI_HEST_IA_CORRECTED); > + BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_CORRECTED, > + Subtable))->NumHardwareBanks; > + break; > + > + case ACPI_HEST_TYPE_IA32_NMI: > + > + InfoTable = AcpiDmTableInfoHest2; > + SubtableLength = sizeof (ACPI_HEST_IA_NMI); > + break; > + > + case ACPI_HEST_TYPE_AER_ROOT_PORT: > + > + InfoTable = AcpiDmTableInfoHest6; > + SubtableLength = sizeof (ACPI_HEST_AER_ROOT); > + break; > + > + case ACPI_HEST_TYPE_AER_ENDPOINT: > + > + InfoTable = AcpiDmTableInfoHest7; > + SubtableLength = sizeof (ACPI_HEST_AER); > + break; > + > + case ACPI_HEST_TYPE_AER_BRIDGE: > + > + InfoTable = AcpiDmTableInfoHest8; > + SubtableLength = sizeof (ACPI_HEST_AER_BRIDGE); > + break; > + > + case ACPI_HEST_TYPE_GENERIC_ERROR: > + > + InfoTable = AcpiDmTableInfoHest9; > + SubtableLength = sizeof (ACPI_HEST_GENERIC); > + break; > + > + case ACPI_HEST_TYPE_GENERIC_ERROR_V2: > + > + InfoTable = AcpiDmTableInfoHest10; > + SubtableLength = sizeof (ACPI_HEST_GENERIC_V2); > + break; > + > + case ACPI_HEST_TYPE_IA32_DEFERRED_CHECK: > + > + InfoTable = AcpiDmTableInfoHest11; > + SubtableLength = sizeof (ACPI_HEST_IA_DEFERRED_CHECK); > + BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_DEFERRED_CHECK, > + Subtable))->NumHardwareBanks; > + break; > + > + default: > + > + /* Cannot continue on unknown type - no length */ > + > + AcpiOsPrintf ("\n**** Unknown HEST subtable type 0x%X\n", > + Subtable->Type); > + return; > + } > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Length, Offset, Subtable, > + SubtableLength, InfoTable); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Point to end of current subtable (each subtable above is of fixed length) */ > + > + Offset += SubtableLength; > + > + /* If there are any (fixed-length) Error Banks from above, dump them now */ > + > + if (BankCount) > + { > + BankTable = ACPI_ADD_PTR (ACPI_HEST_IA_ERROR_BANK, Subtable, > + SubtableLength); > + SubtableLength += BankCount * sizeof (ACPI_HEST_IA_ERROR_BANK); > + > + while (BankCount) > + { > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Length, Offset, BankTable, > + sizeof (ACPI_HEST_IA_ERROR_BANK), AcpiDmTableInfoHestBank); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + Offset += sizeof (ACPI_HEST_IA_ERROR_BANK); > + BankTable++; > + BankCount--; > + } > + } > + > + /* Point to next subtable */ > + > + Subtable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Subtable, SubtableLength); > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpHmat > + * > + * PARAMETERS: Table - A HMAT table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a HMAT. > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpHmat ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + ACPI_HMAT_STRUCTURE *HmatStruct; > + ACPI_HMAT_LOCALITY *HmatLocality; > + ACPI_HMAT_CACHE *HmatCache; > + UINT32 Offset; > + UINT32 SubtableOffset; > + UINT32 Length; > + ACPI_DMTABLE_INFO *InfoTable; > + UINT32 i, j; > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoHmat); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + Offset = sizeof (ACPI_TABLE_HMAT); > + > + while (Offset < Table->Length) > + { > + AcpiOsPrintf ("\n"); > + SubtableOffset = 0; > + > + /* Dump HMAT structure header */ > + > + HmatStruct = ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, Table, Offset); > + if (HmatStruct->Length < sizeof (ACPI_HMAT_STRUCTURE)) > + { > + AcpiOsPrintf ("Invalid HMAT structure length\n"); > + return; > + } > + Status = AcpiDmDumpTable (Table->Length, Offset, HmatStruct, > + HmatStruct->Length, AcpiDmTableInfoHmatHdr); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + switch (HmatStruct->Type) > + { > + case ACPI_HMAT_TYPE_ADDRESS_RANGE: > + > + InfoTable = AcpiDmTableInfoHmat0; > + Length = sizeof (ACPI_HMAT_ADDRESS_RANGE); > + break; > + > + case ACPI_HMAT_TYPE_LOCALITY: > + > + InfoTable = AcpiDmTableInfoHmat1; > + Length = sizeof (ACPI_HMAT_LOCALITY); > + break; > + > + case ACPI_HMAT_TYPE_CACHE: > + > + InfoTable = AcpiDmTableInfoHmat2; > + Length = sizeof (ACPI_HMAT_CACHE); > + break; > + > + default: > + > + AcpiOsPrintf ("\n**** Unknown HMAT structure type 0x%X\n", > + HmatStruct->Type); > + > + /* Attempt to continue */ > + > + goto NextSubtable; > + } > + > + /* Dump HMAT structure body */ > + > + if (HmatStruct->Length < Length) > + { > + AcpiOsPrintf ("Invalid HMAT structure length\n"); > + return; > + } > + Status = AcpiDmDumpTable (Table->Length, Offset, HmatStruct, > + HmatStruct->Length, InfoTable); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Dump HMAT structure additionals */ > + > + switch (HmatStruct->Type) > + { > + case ACPI_HMAT_TYPE_LOCALITY: > + > + HmatLocality = ACPI_CAST_PTR (ACPI_HMAT_LOCALITY, HmatStruct); > + SubtableOffset = sizeof (ACPI_HMAT_LOCALITY); > + > + /* Dump initiator proximity domains */ > + > + if ((UINT32)(HmatStruct->Length - SubtableOffset) < > + (UINT32)(HmatLocality->NumberOfInitiatorPDs * 4)) > + { > + AcpiOsPrintf ("Invalid initiator proximity domain number\n"); > + return; > + } > + for (i = 0; i < HmatLocality->NumberOfInitiatorPDs; i++) > + { > + Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, > + ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), > + 4, AcpiDmTableInfoHmat1a); > + SubtableOffset += 4; > + } > + > + /* Dump target proximity domains */ > + > + if ((UINT32)(HmatStruct->Length - SubtableOffset) < > + (UINT32)(HmatLocality->NumberOfTargetPDs * 4)) > + { > + AcpiOsPrintf ("Invalid target proximity domain number\n"); > + return; > + } > + for (i = 0; i < HmatLocality->NumberOfTargetPDs; i++) > + { > + Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, > + ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), > + 4, AcpiDmTableInfoHmat1b); > + SubtableOffset += 4; > + } > + > + /* Dump latency/bandwidth entris */ > + > + if ((UINT32)(HmatStruct->Length - SubtableOffset) < > + (UINT32)(HmatLocality->NumberOfInitiatorPDs * > + HmatLocality->NumberOfTargetPDs * 2)) > + { > + AcpiOsPrintf ("Invalid latency/bandwidth entry number\n"); > + return; > + } > + for (i = 0; i < HmatLocality->NumberOfInitiatorPDs; i++) > + { > + for (j = 0; j < HmatLocality->NumberOfTargetPDs; j++) > + { > + Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, > + ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), > + 2, AcpiDmTableInfoHmat1c); > + SubtableOffset += 2; > + } > + } > + break; > + > + case ACPI_HMAT_TYPE_CACHE: > + > + HmatCache = ACPI_CAST_PTR (ACPI_HMAT_CACHE, HmatStruct); > + SubtableOffset = sizeof (ACPI_HMAT_CACHE); > + > + /* Dump SMBIOS handles */ > + > + if ((UINT32)(HmatStruct->Length - SubtableOffset) < > + (UINT32)(HmatCache->NumberOfSMBIOSHandles * 2)) > + { > + AcpiOsPrintf ("Invalid SMBIOS handle number\n"); > + return; > + } > + for (i = 0; i < HmatCache->NumberOfSMBIOSHandles; i++) > + { > + Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, > + ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), > + 2, AcpiDmTableInfoHmat2a); > + SubtableOffset += 2; > + } > + break; > + > + default: > + > + break; > + } > + > +NextSubtable: > + /* Point to next HMAT structure subtable */ > + > + Offset += (HmatStruct->Length); > + } > +} > diff --git a/src/acpica/source/common/dmtbdump2.c b/src/acpica/source/common/dmtbdump2.c > new file mode 100644 > index 00000000..d2c584bb > --- /dev/null > +++ b/src/acpica/source/common/dmtbdump2.c > @@ -0,0 +1,2074 @@ > +/****************************************************************************** > + * > + * Module Name: dmtbdump2 - Dump ACPI data tables that contain no AML code > + * > + *****************************************************************************/ > + > +/****************************************************************************** > + * > + * 1. Copyright Notice > + * > + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. > + * All rights reserved. > + * > + * 2. License > + * > + * 2.1. This is your license from Intel Corp. under its intellectual property > + * rights. You may have additional license terms from the party that provided > + * you this software, covering your right to use that party's intellectual > + * property rights. > + * > + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a > + * copy of the source code appearing in this file ("Covered Code") an > + * irrevocable, perpetual, worldwide license under Intel's copyrights in the > + * base code distributed originally by Intel ("Original Intel Code") to copy, > + * make derivatives, distribute, use and display any portion of the Covered > + * Code in any form, with the right to sublicense such rights; and > + * > + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent > + * license (with the right to sublicense), under only those claims of Intel > + * patents that are infringed by the Original Intel Code, to make, use, sell, > + * offer to sell, and import the Covered Code and derivative works thereof > + * solely to the minimum extent necessary to exercise the above copyright > + * license, and in no event shall the patent license extend to any additions > + * to or modifications of the Original Intel Code. No other license or right > + * is granted directly or by implication, estoppel or otherwise; > + * > + * The above copyright and patent license is granted only if the following > + * conditions are met: > + * > + * 3. Conditions > + * > + * 3.1. Redistribution of Source with Rights to Further Distribute Source. > + * Redistribution of source code of any substantial portion of the Covered > + * Code or modification with rights to further distribute source must include > + * the above Copyright Notice, the above License, this list of Conditions, > + * and the following Disclaimer and Export Compliance provision. In addition, > + * Licensee must cause all Covered Code to which Licensee contributes to > + * contain a file documenting the changes Licensee made to create that Covered > + * Code and the date of any change. Licensee must include in that file the > + * documentation of any changes made by any predecessor Licensee. Licensee > + * must include a prominent statement that the modification is derived, > + * directly or indirectly, from Original Intel Code. > + * > + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. > + * Redistribution of source code of any substantial portion of the Covered > + * Code or modification without rights to further distribute source must > + * include the following Disclaimer and Export Compliance provision in the > + * documentation and/or other materials provided with distribution. In > + * addition, Licensee may not authorize further sublicense of source of any > + * portion of the Covered Code, and must include terms to the effect that the > + * license from Licensee to its licensee is limited to the intellectual > + * property embodied in the software Licensee provides to its licensee, and > + * not to intellectual property embodied in modifications its licensee may > + * make. > + * > + * 3.3. Redistribution of Executable. Redistribution in executable form of any > + * substantial portion of the Covered Code or modification must reproduce the > + * above Copyright Notice, and the following Disclaimer and Export Compliance > + * provision in the documentation and/or other materials provided with the > + * distribution. > + * > + * 3.4. Intel retains all right, title, and interest in and to the Original > + * Intel Code. > + * > + * 3.5. Neither the name Intel nor any other trademark owned or controlled by > + * Intel shall be used in advertising or otherwise to promote the sale, use or > + * other dealings in products derived from or relating to the Covered Code > + * without prior written authorization from Intel. > + * > + * 4. Disclaimer and Export Compliance > + * > + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED > + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE > + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, > + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY > + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY > + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A > + * PARTICULAR PURPOSE. > + * > + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES > + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR > + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, > + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY > + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL > + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS > + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY > + * LIMITED REMEDY. > + * > + * 4.3. Licensee shall not export, either directly or indirectly, any of this > + * software or system incorporating such software without first obtaining any > + * required license or other approval from the U. S. Department of Commerce or > + * any other agency or department of the United States Government. In the > + * event Licensee exports any such software from the United States or > + * re-exports any such software from a foreign destination, Licensee shall > + * ensure that the distribution and export/re-export of the software is in > + * compliance with all laws, regulations, orders, or other restrictions of the > + * U.S. Export Administration Regulations. Licensee agrees that neither it nor > + * any of its subsidiaries will export/re-export any technical data, process, > + * software, or service, directly or indirectly, to any country for which the > + * United States government or any agency thereof requires an export license, > + * other governmental approval, or letter of assurance, without first obtaining > + * such license, approval or letter. > + * > + ***************************************************************************** > + * > + * Alternatively, you may choose to be licensed under the terms of the > + * following license: > + * > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions > + * are met: > + * 1. Redistributions of source code must retain the above copyright > + * notice, this list of conditions, and the following disclaimer, > + * without modification. > + * 2. Redistributions in binary form must reproduce at minimum a disclaimer > + * substantially similar to the "NO WARRANTY" disclaimer below > + * ("Disclaimer") and any redistribution must be conditioned upon > + * including a substantially similar Disclaimer requirement for further > + * binary redistribution. > + * 3. Neither the names of the above-listed copyright holders nor the names > + * of any contributors may be used to endorse or promote products derived > + * from this software without specific prior written permission. > + * > + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS > + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT > + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR > + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT > + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, > + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT > + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, > + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY > + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE > + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > + * > + * Alternatively, you may choose to be licensed under the terms of the > + * GNU General Public License ("GPL") version 2 as published by the Free > + * Software Foundation. > + * > + *****************************************************************************/ > + > +#include "acpi.h" > +#include "accommon.h" > +#include "acdisasm.h" > +#include "actables.h" > + > +/* This module used for application-level code only */ > + > +#define _COMPONENT ACPI_CA_DISASSEMBLER > + ACPI_MODULE_NAME ("dmtbdump2") > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpIort > + * > + * PARAMETERS: Table - A IORT table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a IORT > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpIort ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + ACPI_TABLE_IORT *Iort; > + ACPI_IORT_NODE *IortNode; > + ACPI_IORT_ITS_GROUP *IortItsGroup = NULL; > + ACPI_IORT_SMMU *IortSmmu = NULL; > + UINT32 Offset; > + UINT32 NodeOffset; > + UINT32 Length; > + ACPI_DMTABLE_INFO *InfoTable; > + char *String; > + UINT32 i; > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIort); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + Iort = ACPI_CAST_PTR (ACPI_TABLE_IORT, Table); > + Offset = sizeof (ACPI_TABLE_IORT); > + > + /* Dump the OptionalPadding (optional) */ > + > + if (Iort->NodeOffset > Offset) > + { > + Status = AcpiDmDumpTable (Table->Length, Offset, Table, > + Iort->NodeOffset - Offset, AcpiDmTableInfoIortPad); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + } > + > + Offset = Iort->NodeOffset; > + while (Offset < Table->Length) > + { > + /* Common subtable header */ > + > + IortNode = ACPI_ADD_PTR (ACPI_IORT_NODE, Table, Offset); > + AcpiOsPrintf ("\n"); > + Length = ACPI_OFFSET (ACPI_IORT_NODE, NodeData); > + Status = AcpiDmDumpTable (Table->Length, Offset, > + IortNode, Length, AcpiDmTableInfoIortHdr); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + NodeOffset = Length; > + > + switch (IortNode->Type) > + { > + case ACPI_IORT_NODE_ITS_GROUP: > + > + InfoTable = AcpiDmTableInfoIort0; > + Length = ACPI_OFFSET (ACPI_IORT_ITS_GROUP, Identifiers); > + IortItsGroup = ACPI_ADD_PTR (ACPI_IORT_ITS_GROUP, IortNode, NodeOffset); > + break; > + > + case ACPI_IORT_NODE_NAMED_COMPONENT: > + > + InfoTable = AcpiDmTableInfoIort1; > + Length = ACPI_OFFSET (ACPI_IORT_NAMED_COMPONENT, DeviceName); > + String = ACPI_ADD_PTR (char, IortNode, NodeOffset + Length); > + Length += strlen (String) + 1; > + break; > + > + case ACPI_IORT_NODE_PCI_ROOT_COMPLEX: > + > + InfoTable = AcpiDmTableInfoIort2; > + Length = IortNode->Length - NodeOffset; > + break; > + > + case ACPI_IORT_NODE_SMMU: > + > + InfoTable = AcpiDmTableInfoIort3; > + Length = ACPI_OFFSET (ACPI_IORT_SMMU, Interrupts); > + IortSmmu = ACPI_ADD_PTR (ACPI_IORT_SMMU, IortNode, NodeOffset); > + break; > + > + case ACPI_IORT_NODE_SMMU_V3: > + > + InfoTable = AcpiDmTableInfoIort4; > + Length = IortNode->Length - NodeOffset; > + break; > + > + default: > + > + AcpiOsPrintf ("\n**** Unknown IORT node type 0x%X\n", > + IortNode->Type); > + > + /* Attempt to continue */ > + > + if (!IortNode->Length) > + { > + AcpiOsPrintf ("Invalid zero length IORT node\n"); > + return; > + } > + goto NextSubtable; > + } > + > + /* Dump the node subtable header */ > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, > + ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), > + Length, InfoTable); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + NodeOffset += Length; > + > + /* Dump the node specific data */ > + > + switch (IortNode->Type) > + { > + case ACPI_IORT_NODE_ITS_GROUP: > + > + /* Validate IortItsGroup to avoid compiler warnings */ > + > + if (IortItsGroup) > + { > + for (i = 0; i < IortItsGroup->ItsCount; i++) > + { > + Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, > + ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), > + 4, AcpiDmTableInfoIort0a); > + NodeOffset += 4; > + } > + } > + break; > + > + case ACPI_IORT_NODE_NAMED_COMPONENT: > + > + /* Dump the Padding (optional) */ > + > + if (IortNode->Length > NodeOffset) > + { > + Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, > + Table, IortNode->Length - NodeOffset, > + AcpiDmTableInfoIort1a); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + } > + break; > + > + case ACPI_IORT_NODE_SMMU: > + > + AcpiOsPrintf ("\n"); > + > + /* Validate IortSmmu to avoid compiler warnings */ > + > + if (IortSmmu) > + { > + Length = 2 * sizeof (UINT64); > + NodeOffset = IortSmmu->GlobalInterruptOffset; > + Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, > + ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), > + Length, AcpiDmTableInfoIort3a); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + NodeOffset = IortSmmu->ContextInterruptOffset; > + for (i = 0; i < IortSmmu->ContextInterruptCount; i++) > + { > + Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, > + ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), > + 8, AcpiDmTableInfoIort3b); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + NodeOffset += 8; > + } > + > + NodeOffset = IortSmmu->PmuInterruptOffset; > + for (i = 0; i < IortSmmu->PmuInterruptCount; i++) > + { > + Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, > + ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), > + 8, AcpiDmTableInfoIort3c); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + NodeOffset += 8; > + } > + } > + break; > + > + default: > + > + break; > + } > + > + /* Dump the ID mappings */ > + > + NodeOffset = IortNode->MappingOffset; > + for (i = 0; i < IortNode->MappingCount; i++) > + { > + AcpiOsPrintf ("\n"); > + Length = sizeof (ACPI_IORT_ID_MAPPING); > + Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, > + ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), > + Length, AcpiDmTableInfoIortMap); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + NodeOffset += Length; > + } > + > +NextSubtable: > + /* Point to next node subtable */ > + > + Offset += IortNode->Length; > + IortNode = ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, IortNode->Length); > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpIvrs > + * > + * PARAMETERS: Table - A IVRS table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a IVRS > + * > + ******************************************************************************/ > + > +static UINT8 EntrySizes[] = {4,8,16,32}; > + > +void > +AcpiDmDumpIvrs ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + UINT32 Offset = sizeof (ACPI_TABLE_IVRS); > + UINT32 EntryOffset; > + UINT32 EntryLength; > + UINT32 EntryType; > + ACPI_IVRS_DE_HEADER *DeviceEntry; > + ACPI_IVRS_HEADER *Subtable; > + ACPI_DMTABLE_INFO *InfoTable; > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIvrs); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Subtables */ > + > + Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset); > + while (Offset < Table->Length) > + { > + /* Common subtable header */ > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > + Subtable->Length, AcpiDmTableInfoIvrsHdr); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + switch (Subtable->Type) > + { > + case ACPI_IVRS_TYPE_HARDWARE: > + > + InfoTable = AcpiDmTableInfoIvrs0; > + break; > + > + case ACPI_IVRS_TYPE_MEMORY1: > + case ACPI_IVRS_TYPE_MEMORY2: > + case ACPI_IVRS_TYPE_MEMORY3: > + > + InfoTable = AcpiDmTableInfoIvrs1; > + break; > + > + default: > + > + AcpiOsPrintf ("\n**** Unknown IVRS subtable type 0x%X\n", > + Subtable->Type); > + > + /* Attempt to continue */ > + > + if (!Subtable->Length) > + { > + AcpiOsPrintf ("Invalid zero length subtable\n"); > + return; > + } > + goto NextSubtable; > + } > + > + /* Dump the subtable */ > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > + Subtable->Length, InfoTable); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* The hardware subtable can contain multiple device entries */ > + > + if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE) > + { > + EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE); > + DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable, > + sizeof (ACPI_IVRS_HARDWARE)); > + > + while (EntryOffset < (Offset + Subtable->Length)) > + { > + AcpiOsPrintf ("\n"); > + /* > + * Upper 2 bits of Type encode the length of the device entry > + * > + * 00 = 4 byte > + * 01 = 8 byte > + * 10 = 16 byte - currently no entries defined > + * 11 = 32 byte - currently no entries defined > + */ > + EntryType = DeviceEntry->Type; > + EntryLength = EntrySizes [EntryType >> 6]; > + > + switch (EntryType) > + { > + /* 4-byte device entries */ > + > + case ACPI_IVRS_TYPE_PAD4: > + case ACPI_IVRS_TYPE_ALL: > + case ACPI_IVRS_TYPE_SELECT: > + case ACPI_IVRS_TYPE_START: > + case ACPI_IVRS_TYPE_END: > + > + InfoTable = AcpiDmTableInfoIvrs4; > + break; > + > + /* 8-byte entries, type A */ > + > + case ACPI_IVRS_TYPE_ALIAS_SELECT: > + case ACPI_IVRS_TYPE_ALIAS_START: > + > + InfoTable = AcpiDmTableInfoIvrs8a; > + break; > + > + /* 8-byte entries, type B */ > + > + case ACPI_IVRS_TYPE_PAD8: > + case ACPI_IVRS_TYPE_EXT_SELECT: > + case ACPI_IVRS_TYPE_EXT_START: > + > + InfoTable = AcpiDmTableInfoIvrs8b; > + break; > + > + /* 8-byte entries, type C */ > + > + case ACPI_IVRS_TYPE_SPECIAL: > + > + InfoTable = AcpiDmTableInfoIvrs8c; > + break; > + > + default: > + InfoTable = AcpiDmTableInfoIvrs4; > + AcpiOsPrintf ( > + "\n**** Unknown IVRS device entry type/length: " > + "0x%.2X/0x%X at offset 0x%.4X: (header below)\n", > + EntryType, EntryLength, EntryOffset); > + break; > + } > + > + /* Dump the Device Entry */ > + > + Status = AcpiDmDumpTable (Table->Length, EntryOffset, > + DeviceEntry, EntryLength, InfoTable); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + EntryOffset += EntryLength; > + DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, DeviceEntry, > + EntryLength); > + } > + } > + > +NextSubtable: > + /* Point to next subtable */ > + > + Offset += Subtable->Length; > + Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Subtable, Subtable->Length); > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpLpit > + * > + * PARAMETERS: Table - A LPIT table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a LPIT. This table type consists > + * of an open-ended number of subtables. Note: There are no > + * entries in the main table. An LPIT consists of the table > + * header and then subtables only. > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpLpit ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + ACPI_LPIT_HEADER *Subtable; > + UINT32 Length = Table->Length; > + UINT32 Offset = sizeof (ACPI_TABLE_LPIT); > + ACPI_DMTABLE_INFO *InfoTable; > + UINT32 SubtableLength; > + > + > + /* Subtables */ > + > + Subtable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Table, Offset); > + while (Offset < Table->Length) > + { > + /* Common subtable header */ > + > + Status = AcpiDmDumpTable (Length, Offset, Subtable, > + sizeof (ACPI_LPIT_HEADER), AcpiDmTableInfoLpitHdr); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + switch (Subtable->Type) > + { > + case ACPI_LPIT_TYPE_NATIVE_CSTATE: > + > + InfoTable = AcpiDmTableInfoLpit0; > + SubtableLength = sizeof (ACPI_LPIT_NATIVE); > + break; > + > + default: > + > + /* Cannot continue on unknown type - no length */ > + > + AcpiOsPrintf ("\n**** Unknown LPIT subtable type 0x%X\n", > + Subtable->Type); > + return; > + } > + > + Status = AcpiDmDumpTable (Length, Offset, Subtable, > + SubtableLength, InfoTable); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + AcpiOsPrintf ("\n"); > + > + /* Point to next subtable */ > + > + Offset += SubtableLength; > + Subtable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Subtable, SubtableLength); > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpMadt > + * > + * PARAMETERS: Table - A MADT table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a MADT. This table type consists > + * of an open-ended number of subtables. > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpMadt ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + ACPI_SUBTABLE_HEADER *Subtable; > + UINT32 Length = Table->Length; > + UINT32 Offset = sizeof (ACPI_TABLE_MADT); > + ACPI_DMTABLE_INFO *InfoTable; > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMadt); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Subtables */ > + > + Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset); > + while (Offset < Table->Length) > + { > + /* Common subtable header */ > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Length, Offset, Subtable, > + Subtable->Length, AcpiDmTableInfoMadtHdr); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + switch (Subtable->Type) > + { > + case ACPI_MADT_TYPE_LOCAL_APIC: > + > + InfoTable = AcpiDmTableInfoMadt0; > + break; > + > + case ACPI_MADT_TYPE_IO_APIC: > + > + InfoTable = AcpiDmTableInfoMadt1; > + break; > + > + case ACPI_MADT_TYPE_INTERRUPT_OVERRIDE: > + > + InfoTable = AcpiDmTableInfoMadt2; > + break; > + > + case ACPI_MADT_TYPE_NMI_SOURCE: > + > + InfoTable = AcpiDmTableInfoMadt3; > + break; > + > + case ACPI_MADT_TYPE_LOCAL_APIC_NMI: > + > + InfoTable = AcpiDmTableInfoMadt4; > + break; > + > + case ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE: > + > + InfoTable = AcpiDmTableInfoMadt5; > + break; > + > + case ACPI_MADT_TYPE_IO_SAPIC: > + > + InfoTable = AcpiDmTableInfoMadt6; > + break; > + > + case ACPI_MADT_TYPE_LOCAL_SAPIC: > + > + InfoTable = AcpiDmTableInfoMadt7; > + break; > + > + case ACPI_MADT_TYPE_INTERRUPT_SOURCE: > + > + InfoTable = AcpiDmTableInfoMadt8; > + break; > + > + case ACPI_MADT_TYPE_LOCAL_X2APIC: > + > + InfoTable = AcpiDmTableInfoMadt9; > + break; > + > + case ACPI_MADT_TYPE_LOCAL_X2APIC_NMI: > + > + InfoTable = AcpiDmTableInfoMadt10; > + break; > + > + case ACPI_MADT_TYPE_GENERIC_INTERRUPT: > + > + InfoTable = AcpiDmTableInfoMadt11; > + break; > + > + case ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR: > + > + InfoTable = AcpiDmTableInfoMadt12; > + break; > + > + case ACPI_MADT_TYPE_GENERIC_MSI_FRAME: > + > + InfoTable = AcpiDmTableInfoMadt13; > + break; > + > + case ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR: > + > + InfoTable = AcpiDmTableInfoMadt14; > + break; > + > + case ACPI_MADT_TYPE_GENERIC_TRANSLATOR: > + > + InfoTable = AcpiDmTableInfoMadt15; > + break; > + > + default: > + > + AcpiOsPrintf ("\n**** Unknown MADT subtable type 0x%X\n\n", > + Subtable->Type); > + > + /* Attempt to continue */ > + > + if (!Subtable->Length) > + { > + AcpiOsPrintf ("Invalid zero length subtable\n"); > + return; > + } > + > + goto NextSubtable; > + } > + > + Status = AcpiDmDumpTable (Length, Offset, Subtable, > + Subtable->Length, InfoTable); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > +NextSubtable: > + /* Point to next subtable */ > + > + Offset += Subtable->Length; > + Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, > + Subtable->Length); > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpMcfg > + * > + * PARAMETERS: Table - A MCFG Table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a MCFG table > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpMcfg ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + UINT32 Offset = sizeof (ACPI_TABLE_MCFG); > + ACPI_MCFG_ALLOCATION *Subtable; > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMcfg); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Subtables */ > + > + Subtable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Table, Offset); > + while (Offset < Table->Length) > + { > + if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > Table->Length) > + { > + AcpiOsPrintf ("Warning: there are %u invalid trailing bytes\n", > + sizeof (ACPI_MCFG_ALLOCATION) - (Offset - Table->Length)); > + return; > + } > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > + sizeof (ACPI_MCFG_ALLOCATION), AcpiDmTableInfoMcfg0); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Point to next subtable (each subtable is of fixed length) */ > + > + Offset += sizeof (ACPI_MCFG_ALLOCATION); > + Subtable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Subtable, > + sizeof (ACPI_MCFG_ALLOCATION)); > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpMpst > + * > + * PARAMETERS: Table - A MPST Table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a MPST table > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpMpst ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + UINT32 Offset = sizeof (ACPI_TABLE_MPST); > + ACPI_MPST_POWER_NODE *Subtable0; > + ACPI_MPST_POWER_STATE *Subtable0A; > + ACPI_MPST_COMPONENT *Subtable0B; > + ACPI_MPST_DATA_HDR *Subtable1; > + ACPI_MPST_POWER_DATA *Subtable2; > + UINT16 SubtableCount; > + UINT32 PowerStateCount; > + UINT32 ComponentCount; > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMpst); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Subtable: Memory Power Node(s) */ > + > + SubtableCount = (ACPI_CAST_PTR (ACPI_TABLE_MPST, Table))->PowerNodeCount; > + Subtable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Table, Offset); > + > + while ((Offset < Table->Length) && SubtableCount) > + { > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0, > + sizeof (ACPI_MPST_POWER_NODE), AcpiDmTableInfoMpst0); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Extract the sub-subtable counts */ > + > + PowerStateCount = Subtable0->NumPowerStates; > + ComponentCount = Subtable0->NumPhysicalComponents; > + Offset += sizeof (ACPI_MPST_POWER_NODE); > + > + /* Sub-subtables - Memory Power State Structure(s) */ > + > + Subtable0A = ACPI_ADD_PTR (ACPI_MPST_POWER_STATE, Subtable0, > + sizeof (ACPI_MPST_POWER_NODE)); > + > + while (PowerStateCount) > + { > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0A, > + sizeof (ACPI_MPST_POWER_STATE), AcpiDmTableInfoMpst0A); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + Subtable0A++; > + PowerStateCount--; > + Offset += sizeof (ACPI_MPST_POWER_STATE); > + } > + > + /* Sub-subtables - Physical Component ID Structure(s) */ > + > + Subtable0B = ACPI_CAST_PTR (ACPI_MPST_COMPONENT, Subtable0A); > + > + if (ComponentCount) > + { > + AcpiOsPrintf ("\n"); > + } > + > + while (ComponentCount) > + { > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0B, > + sizeof (ACPI_MPST_COMPONENT), AcpiDmTableInfoMpst0B); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + Subtable0B++; > + ComponentCount--; > + Offset += sizeof (ACPI_MPST_COMPONENT); > + } > + > + /* Point to next Memory Power Node subtable */ > + > + SubtableCount--; > + Subtable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Subtable0, > + sizeof (ACPI_MPST_POWER_NODE) + > + (sizeof (ACPI_MPST_POWER_STATE) * Subtable0->NumPowerStates) + > + (sizeof (ACPI_MPST_COMPONENT) * Subtable0->NumPhysicalComponents)); > + } > + > + /* Subtable: Count of Memory Power State Characteristic structures */ > + > + AcpiOsPrintf ("\n"); > + Subtable1 = ACPI_CAST_PTR (ACPI_MPST_DATA_HDR, Subtable0); > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable1, > + sizeof (ACPI_MPST_DATA_HDR), AcpiDmTableInfoMpst1); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + SubtableCount = Subtable1->CharacteristicsCount; > + Offset += sizeof (ACPI_MPST_DATA_HDR); > + > + /* Subtable: Memory Power State Characteristics structure(s) */ > + > + Subtable2 = ACPI_ADD_PTR (ACPI_MPST_POWER_DATA, Subtable1, > + sizeof (ACPI_MPST_DATA_HDR)); > + > + while ((Offset < Table->Length) && SubtableCount) > + { > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable2, > + sizeof (ACPI_MPST_POWER_DATA), AcpiDmTableInfoMpst2); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + Subtable2++; > + SubtableCount--; > + Offset += sizeof (ACPI_MPST_POWER_DATA); > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpMsct > + * > + * PARAMETERS: Table - A MSCT table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a MSCT > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpMsct ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + UINT32 Offset = sizeof (ACPI_TABLE_MSCT); > + ACPI_MSCT_PROXIMITY *Subtable; > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMsct); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Subtables */ > + > + Subtable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Table, Offset); > + while (Offset < Table->Length) > + { > + /* Common subtable header */ > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > + sizeof (ACPI_MSCT_PROXIMITY), AcpiDmTableInfoMsct0); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Point to next subtable */ > + > + Offset += sizeof (ACPI_MSCT_PROXIMITY); > + Subtable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Subtable, > + sizeof (ACPI_MSCT_PROXIMITY)); > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpMtmr > + * > + * PARAMETERS: Table - A MTMR table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a MTMR > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpMtmr ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + UINT32 Offset = sizeof (ACPI_TABLE_MTMR); > + ACPI_MTMR_ENTRY *Subtable; > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMtmr); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Subtables */ > + > + Subtable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Table, Offset); > + while (Offset < Table->Length) > + { > + /* Common subtable header */ > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > + sizeof (ACPI_MTMR_ENTRY), AcpiDmTableInfoMtmr0); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Point to next subtable */ > + > + Offset += sizeof (ACPI_MTMR_ENTRY); > + Subtable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Subtable, > + sizeof (ACPI_MTMR_ENTRY)); > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpNfit > + * > + * PARAMETERS: Table - A NFIT table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of an NFIT. > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpNfit ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + UINT32 Offset = sizeof (ACPI_TABLE_NFIT); > + UINT32 FieldOffset = 0; > + UINT32 Length; > + ACPI_NFIT_HEADER *Subtable; > + ACPI_DMTABLE_INFO *InfoTable; > + ACPI_NFIT_INTERLEAVE *Interleave = NULL; > + ACPI_NFIT_SMBIOS *SmbiosInfo = NULL; > + ACPI_NFIT_FLUSH_ADDRESS *Hint = NULL; > + UINT32 i; > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoNfit); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Subtables */ > + > + Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Table, Offset); > + while (Offset < Table->Length) > + { > + /* NFIT subtable header */ > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > + Subtable->Length, AcpiDmTableInfoNfitHdr); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + switch (Subtable->Type) > + { > + case ACPI_NFIT_TYPE_SYSTEM_ADDRESS: > + > + InfoTable = AcpiDmTableInfoNfit0; > + break; > + > + case ACPI_NFIT_TYPE_MEMORY_MAP: > + > + InfoTable = AcpiDmTableInfoNfit1; > + break; > + > + case ACPI_NFIT_TYPE_INTERLEAVE: > + > + /* Has a variable number of 32-bit values at the end */ > + > + InfoTable = AcpiDmTableInfoNfit2; > + Interleave = ACPI_CAST_PTR (ACPI_NFIT_INTERLEAVE, Subtable); > + FieldOffset = sizeof (ACPI_NFIT_INTERLEAVE); > + break; > + > + case ACPI_NFIT_TYPE_SMBIOS: > + > + SmbiosInfo = ACPI_CAST_PTR (ACPI_NFIT_SMBIOS, Subtable); > + InfoTable = AcpiDmTableInfoNfit3; > + break; > + > + case ACPI_NFIT_TYPE_CONTROL_REGION: > + > + InfoTable = AcpiDmTableInfoNfit4; > + break; > + > + case ACPI_NFIT_TYPE_DATA_REGION: > + > + InfoTable = AcpiDmTableInfoNfit5; > + break; > + > + case ACPI_NFIT_TYPE_FLUSH_ADDRESS: > + > + /* Has a variable number of 64-bit addresses at the end */ > + > + InfoTable = AcpiDmTableInfoNfit6; > + Hint = ACPI_CAST_PTR (ACPI_NFIT_FLUSH_ADDRESS, Subtable); > + FieldOffset = sizeof (ACPI_NFIT_FLUSH_ADDRESS) - sizeof (UINT64); > + break; > + > + case ACPI_NFIT_TYPE_CAPABILITIES: /* ACPI 6.0A */ > + > + InfoTable = AcpiDmTableInfoNfit7; > + break; > + > + default: > + AcpiOsPrintf ("\n**** Unknown NFIT subtable type 0x%X\n", > + Subtable->Type); > + > + /* Attempt to continue */ > + > + if (!Subtable->Length) > + { > + AcpiOsPrintf ("Invalid zero length subtable\n"); > + return; > + } > + goto NextSubtable; > + } > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > + Subtable->Length, InfoTable); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Per-subtable variable-length fields */ > + > + switch (Subtable->Type) > + { > + case ACPI_NFIT_TYPE_INTERLEAVE: > + > + for (i = 0; i < Interleave->LineCount; i++) > + { > + Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset, > + &Interleave->LineOffset[i], > + sizeof (UINT32), AcpiDmTableInfoNfit2a); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + FieldOffset += sizeof (UINT32); > + } > + break; > + > + case ACPI_NFIT_TYPE_SMBIOS: > + > + Length = Subtable->Length - > + sizeof (ACPI_NFIT_SMBIOS) + sizeof (UINT8); > + > + if (Length) > + { > + Status = AcpiDmDumpTable (Table->Length, > + sizeof (ACPI_NFIT_SMBIOS) - sizeof (UINT8), > + SmbiosInfo, > + Length, AcpiDmTableInfoNfit3a); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + } > + > + break; > + > + case ACPI_NFIT_TYPE_FLUSH_ADDRESS: > + > + for (i = 0; i < Hint->HintCount; i++) > + { > + Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset, > + &Hint->HintAddress[i], > + sizeof (UINT64), AcpiDmTableInfoNfit6a); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + FieldOffset += sizeof (UINT64); > + } > + break; > + > + default: > + break; > + } > + > +NextSubtable: > + /* Point to next subtable */ > + > + Offset += Subtable->Length; > + Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Subtable, Subtable->Length); > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpPcct > + * > + * PARAMETERS: Table - A PCCT table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a PCCT. This table type consists > + * of an open-ended number of subtables. > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpPcct ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + ACPI_PCCT_SUBSPACE *Subtable; > + ACPI_DMTABLE_INFO *InfoTable; > + UINT32 Length = Table->Length; > + UINT32 Offset = sizeof (ACPI_TABLE_PCCT); > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPcct); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Subtables */ > + > + Subtable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Table, Offset); > + while (Offset < Table->Length) > + { > + /* Common subtable header */ > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Length, Offset, Subtable, > + Subtable->Header.Length, AcpiDmTableInfoPcctHdr); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + switch (Subtable->Header.Type) > + { > + case ACPI_PCCT_TYPE_GENERIC_SUBSPACE: > + > + InfoTable = AcpiDmTableInfoPcct0; > + break; > + > + case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE: > + > + InfoTable = AcpiDmTableInfoPcct1; > + break; > + > + case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2: > + > + InfoTable = AcpiDmTableInfoPcct2; > + break; > + > + case ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE: > + > + InfoTable = AcpiDmTableInfoPcct3; > + break; > + > + case ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE: > + > + InfoTable = AcpiDmTableInfoPcct4; > + break; > + > + default: > + > + AcpiOsPrintf ( > + "\n**** Unexpected or unknown PCCT subtable type 0x%X\n\n", > + Subtable->Header.Type); > + return; > + } > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Length, Offset, Subtable, > + Subtable->Header.Length, InfoTable); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Point to next subtable */ > + > + Offset += Subtable->Header.Length; > + Subtable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Subtable, > + Subtable->Header.Length); > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpPdtt > + * > + * PARAMETERS: Table - A PDTT table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a Pdtt. This is a variable-length > + * table that contains an open-ended number of IDs > + * at the end of the table. > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpPdtt ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + ACPI_PDTT_CHANNEL *Subtable; > + UINT32 Length = Table->Length; > + UINT32 Offset = sizeof (ACPI_TABLE_PDTT); > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPdtt); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Subtables. Currently there is only one type, but can be multiples */ > + > + Subtable = ACPI_ADD_PTR (ACPI_PDTT_CHANNEL, Table, Offset); > + while (Offset < Table->Length) > + { > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Length, Offset, Subtable, > + sizeof (ACPI_PDTT_CHANNEL), AcpiDmTableInfoPdtt0); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Point to next subtable */ > + > + Offset += sizeof (ACPI_PDTT_CHANNEL); > + Subtable = ACPI_ADD_PTR (ACPI_PDTT_CHANNEL, Subtable, > + sizeof (ACPI_PDTT_CHANNEL)); > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpPmtt > + * > + * PARAMETERS: Table - A PMTT table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a PMTT. This table type consists > + * of an open-ended number of subtables. > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpPmtt ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + ACPI_PMTT_HEADER *Subtable; > + ACPI_PMTT_HEADER *MemSubtable; > + ACPI_PMTT_HEADER *DimmSubtable; > + ACPI_PMTT_DOMAIN *DomainArray; > + UINT32 Length = Table->Length; > + UINT32 Offset = sizeof (ACPI_TABLE_PMTT); > + UINT32 MemOffset; > + UINT32 DimmOffset; > + UINT32 DomainOffset; > + UINT32 DomainCount; > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPmtt); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Subtables */ > + > + Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Table, Offset); > + while (Offset < Table->Length) > + { > + /* Common subtable header */ > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Length, Offset, Subtable, > + Subtable->Length, AcpiDmTableInfoPmttHdr); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Only Socket subtables are expected at this level */ > + > + if (Subtable->Type != ACPI_PMTT_TYPE_SOCKET) > + { > + AcpiOsPrintf ( > + "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n", > + Subtable->Type); > + return; > + } > + > + /* Dump the fixed-length portion of the subtable */ > + > + Status = AcpiDmDumpTable (Length, Offset, Subtable, > + Subtable->Length, AcpiDmTableInfoPmtt0); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Walk the memory controller subtables */ > + > + MemOffset = sizeof (ACPI_PMTT_SOCKET); > + MemSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Subtable, > + sizeof (ACPI_PMTT_SOCKET)); > + > + while (((Offset + MemOffset) < Table->Length) && > + (MemOffset < Subtable->Length)) > + { > + /* Common subtable header */ > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Length, > + Offset + MemOffset, MemSubtable, > + MemSubtable->Length, AcpiDmTableInfoPmttHdr); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Only memory controller subtables are expected at this level */ > + > + if (MemSubtable->Type != ACPI_PMTT_TYPE_CONTROLLER) > + { > + AcpiOsPrintf ( > + "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n", > + MemSubtable->Type); > + return; > + } > + > + /* Dump the fixed-length portion of the controller subtable */ > + > + Status = AcpiDmDumpTable (Length, > + Offset + MemOffset, MemSubtable, > + MemSubtable->Length, AcpiDmTableInfoPmtt1); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Walk the variable count of proximity domains */ > + > + DomainCount = ((ACPI_PMTT_CONTROLLER *) MemSubtable)->DomainCount; > + DomainOffset = sizeof (ACPI_PMTT_CONTROLLER); > + DomainArray = ACPI_ADD_PTR (ACPI_PMTT_DOMAIN, MemSubtable, > + sizeof (ACPI_PMTT_CONTROLLER)); > + > + while (((Offset + MemOffset + DomainOffset) < Table->Length) && > + ((MemOffset + DomainOffset) < Subtable->Length) && > + DomainCount) > + { > + Status = AcpiDmDumpTable (Length, > + Offset + MemOffset + DomainOffset, DomainArray, > + sizeof (ACPI_PMTT_DOMAIN), AcpiDmTableInfoPmtt1a); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + DomainOffset += sizeof (ACPI_PMTT_DOMAIN); > + DomainArray++; > + DomainCount--; > + } > + > + if (DomainCount) > + { > + AcpiOsPrintf ( > + "\n**** DomainCount exceeds subtable length\n\n"); > + } > + > + /* Walk the physical component (DIMM) subtables */ > + > + DimmOffset = DomainOffset; > + DimmSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, MemSubtable, > + DomainOffset); > + > + while (((Offset + MemOffset + DimmOffset) < Table->Length) && > + (DimmOffset < MemSubtable->Length)) > + { > + /* Common subtable header */ > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Length, > + Offset + MemOffset + DimmOffset, DimmSubtable, > + DimmSubtable->Length, AcpiDmTableInfoPmttHdr); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Only DIMM subtables are expected at this level */ > + > + if (DimmSubtable->Type != ACPI_PMTT_TYPE_DIMM) > + { > + AcpiOsPrintf ( > + "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n", > + DimmSubtable->Type); > + return; > + } > + > + /* Dump the fixed-length DIMM subtable */ > + > + Status = AcpiDmDumpTable (Length, > + Offset + MemOffset + DimmOffset, DimmSubtable, > + DimmSubtable->Length, AcpiDmTableInfoPmtt2); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Point to next DIMM subtable */ > + > + DimmOffset += DimmSubtable->Length; > + DimmSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, > + DimmSubtable, DimmSubtable->Length); > + } > + > + /* Point to next Controller subtable */ > + > + MemOffset += MemSubtable->Length; > + MemSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, > + MemSubtable, MemSubtable->Length); > + } > + > + /* Point to next Socket subtable */ > + > + Offset += Subtable->Length; > + Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, > + Subtable, Subtable->Length); > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpPptt > + * > + * PARAMETERS: Table - A PMTT table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a PPTT. This table type consists > + * of an open-ended number of subtables. > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpPptt ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + ACPI_SUBTABLE_HEADER *Subtable; > + ACPI_PPTT_PROCESSOR *PpttProcessor; > + UINT8 Length; > + UINT8 SubtableOffset; > + UINT32 Offset = sizeof (ACPI_TABLE_FPDT); > + ACPI_DMTABLE_INFO *InfoTable; > + UINT32 i; > + > + > + /* There is no main table (other than the standard ACPI header) */ > + > + /* Subtables */ > + > + Offset = sizeof (ACPI_TABLE_HEADER); > + while (Offset < Table->Length) > + { > + AcpiOsPrintf ("\n"); > + > + /* Common subtable header */ > + > + Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset); > + if (Subtable->Length < sizeof (ACPI_SUBTABLE_HEADER)) > + { > + AcpiOsPrintf ("Invalid subtable length\n"); > + return; > + } > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > + Subtable->Length, AcpiDmTableInfoPpttHdr); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + switch (Subtable->Type) > + { > + case ACPI_PPTT_TYPE_PROCESSOR: > + > + InfoTable = AcpiDmTableInfoPptt0; > + Length = sizeof (ACPI_PPTT_PROCESSOR); > + break; > + > + case ACPI_PPTT_TYPE_CACHE: > + > + InfoTable = AcpiDmTableInfoPptt1; > + Length = sizeof (ACPI_PPTT_CACHE); > + break; > + > + case ACPI_PPTT_TYPE_ID: > + > + InfoTable = AcpiDmTableInfoPptt2; > + Length = sizeof (ACPI_PPTT_ID); > + break; > + > + default: > + > + AcpiOsPrintf ("\n**** Unknown PPTT subtable type 0x%X\n\n", > + Subtable->Type); > + > + /* Attempt to continue */ > + > + goto NextSubtable; > + } > + > + if (Subtable->Length < Length) > + { > + AcpiOsPrintf ("Invalid subtable length\n"); > + return; > + } > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > + Subtable->Length, InfoTable); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + SubtableOffset = Length; > + > + switch (Subtable->Type) > + { > + case ACPI_PPTT_TYPE_PROCESSOR: > + > + PpttProcessor = ACPI_CAST_PTR (ACPI_PPTT_PROCESSOR, Subtable); > + > + /* Dump SMBIOS handles */ > + > + if ((UINT8)(Subtable->Length - SubtableOffset) < > + (UINT8)(PpttProcessor->NumberOfPrivResources * 4)) > + { > + AcpiOsPrintf ("Invalid private resource number\n"); > + return; > + } > + for (i = 0; i < PpttProcessor->NumberOfPrivResources; i++) > + { > + Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, > + ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, SubtableOffset), > + 4, AcpiDmTableInfoPptt0a); > + SubtableOffset += 4; > + } > + break; > + > + default: > + > + break; > + } > + > +NextSubtable: > + /* Point to next subtable */ > + > + Offset += Subtable->Length; > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpS3pt > + * > + * PARAMETERS: Table - A S3PT table > + * > + * RETURN: Length of the table > + * > + * DESCRIPTION: Format the contents of a S3PT > + * > + ******************************************************************************/ > + > +UINT32 > +AcpiDmDumpS3pt ( > + ACPI_TABLE_HEADER *Tables) > +{ > + ACPI_STATUS Status; > + UINT32 Offset = sizeof (ACPI_TABLE_S3PT); > + ACPI_FPDT_HEADER *Subtable; > + ACPI_DMTABLE_INFO *InfoTable; > + ACPI_TABLE_S3PT *S3ptTable = ACPI_CAST_PTR (ACPI_TABLE_S3PT, Tables); > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Offset, 0, S3ptTable, 0, AcpiDmTableInfoS3pt); > + if (ACPI_FAILURE (Status)) > + { > + return 0; > + } > + > + Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, S3ptTable, Offset); > + while (Offset < S3ptTable->Length) > + { > + /* Common subtable header */ > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (S3ptTable->Length, Offset, Subtable, > + Subtable->Length, AcpiDmTableInfoS3ptHdr); > + if (ACPI_FAILURE (Status)) > + { > + return 0; > + } > + > + switch (Subtable->Type) > + { > + case ACPI_S3PT_TYPE_RESUME: > + > + InfoTable = AcpiDmTableInfoS3pt0; > + break; > + > + case ACPI_S3PT_TYPE_SUSPEND: > + > + InfoTable = AcpiDmTableInfoS3pt1; > + break; > + > + default: > + > + AcpiOsPrintf ("\n**** Unknown S3PT subtable type 0x%X\n", > + Subtable->Type); > + > + /* Attempt to continue */ > + > + if (!Subtable->Length) > + { > + AcpiOsPrintf ("Invalid zero length subtable\n"); > + return 0; > + } > + goto NextSubtable; > + } > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (S3ptTable->Length, Offset, Subtable, > + Subtable->Length, InfoTable); > + if (ACPI_FAILURE (Status)) > + { > + return 0; > + } > + > +NextSubtable: > + /* Point to next subtable */ > + > + Offset += Subtable->Length; > + Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Subtable, Subtable->Length); > + } > + > + return (S3ptTable->Length); > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpSdev > + * > + * PARAMETERS: Table - A SDEV table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a SDEV. This is a variable-length > + * table that contains variable strings and vendor data. > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpSdev ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + ACPI_SDEV_HEADER *Subtable; > + ACPI_SDEV_PCIE *Pcie; > + ACPI_SDEV_NAMESPACE *Namesp; > + ACPI_DMTABLE_INFO *InfoTable; > + UINT32 Length = Table->Length; > + UINT32 Offset = sizeof (ACPI_TABLE_SDEV); > + UINT16 PathOffset; > + UINT16 PathLength; > + UINT16 VendorDataOffset; > + UINT16 VendorDataLength; > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoSdev); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Subtables */ > + > + Subtable = ACPI_ADD_PTR (ACPI_SDEV_HEADER, Table, Offset); > + while (Offset < Table->Length) > + { > + /* Common subtable header */ > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > + Subtable->Length, AcpiDmTableInfoSdevHdr); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + switch (Subtable->Type) > + { > + case ACPI_SDEV_TYPE_NAMESPACE_DEVICE: > + > + InfoTable = AcpiDmTableInfoSdev0; > + break; > + > + case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE: > + > + InfoTable = AcpiDmTableInfoSdev1; > + break; > + > + default: > + goto NextSubtable; > + } > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > + Subtable->Length, InfoTable); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + switch (Subtable->Type) > + { > + case ACPI_SDEV_TYPE_NAMESPACE_DEVICE: > + > + /* Dump the PCIe device ID(s) */ > + > + Namesp = ACPI_CAST_PTR (ACPI_SDEV_NAMESPACE, Subtable); > + PathOffset = Namesp->DeviceIdOffset; > + PathLength = Namesp->DeviceIdLength; > + > + if (PathLength) > + { > + Status = AcpiDmDumpTable (Table->Length, 0, > + ACPI_ADD_PTR (UINT8, Namesp, PathOffset), > + PathLength, AcpiDmTableInfoSdev0a); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + } > + > + /* Dump the vendor-specific data */ > + > + VendorDataLength = > + Namesp->VendorDataLength; > + VendorDataOffset = > + Namesp->DeviceIdOffset + Namesp->DeviceIdLength; > + > + if (VendorDataLength) > + { > + Status = AcpiDmDumpTable (Table->Length, 0, > + ACPI_ADD_PTR (UINT8, Namesp, VendorDataOffset), > + VendorDataLength, AcpiDmTableInfoSdev1b); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + } > + break; > + > + case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE: > + > + /* PCI path substructures */ > + > + Pcie = ACPI_CAST_PTR (ACPI_SDEV_PCIE, Subtable); > + PathOffset = Pcie->PathOffset; > + PathLength = Pcie->PathLength; > + > + while (PathLength) > + { > + Status = AcpiDmDumpTable (Table->Length, > + PathOffset + Offset, > + ACPI_ADD_PTR (UINT8, Pcie, PathOffset), > + sizeof (ACPI_SDEV_PCIE_PATH), AcpiDmTableInfoSdev1a); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + PathOffset += sizeof (ACPI_SDEV_PCIE_PATH); > + PathLength -= sizeof (ACPI_SDEV_PCIE_PATH); > + } > + > + /* VendorData */ > + > + VendorDataLength = Pcie->VendorDataLength; > + VendorDataOffset = Pcie->PathOffset + Pcie->PathLength; > + > + if (VendorDataLength) > + { > + Status = AcpiDmDumpTable (Table->Length, 0, > + ACPI_ADD_PTR (UINT8, Pcie, VendorDataOffset), > + VendorDataLength, AcpiDmTableInfoSdev1b); > + } > + break; > + > + default: > + goto NextSubtable; > + } > + > +NextSubtable: > + /* Point to next subtable */ > + > + Offset += Subtable->Length; > + Subtable = ACPI_ADD_PTR (ACPI_SDEV_HEADER, Subtable, > + Subtable->Length); > + } > +} > diff --git a/src/acpica/source/common/dmtbdump3.c b/src/acpica/source/common/dmtbdump3.c > new file mode 100644 > index 00000000..3c1dea6c > --- /dev/null > +++ b/src/acpica/source/common/dmtbdump3.c > @@ -0,0 +1,693 @@ > +/****************************************************************************** > + * > + * Module Name: dmtbdump3 - Dump ACPI data tables that contain no AML code > + * > + *****************************************************************************/ > + > +/****************************************************************************** > + * > + * 1. Copyright Notice > + * > + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. > + * All rights reserved. > + * > + * 2. License > + * > + * 2.1. This is your license from Intel Corp. under its intellectual property > + * rights. You may have additional license terms from the party that provided > + * you this software, covering your right to use that party's intellectual > + * property rights. > + * > + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a > + * copy of the source code appearing in this file ("Covered Code") an > + * irrevocable, perpetual, worldwide license under Intel's copyrights in the > + * base code distributed originally by Intel ("Original Intel Code") to copy, > + * make derivatives, distribute, use and display any portion of the Covered > + * Code in any form, with the right to sublicense such rights; and > + * > + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent > + * license (with the right to sublicense), under only those claims of Intel > + * patents that are infringed by the Original Intel Code, to make, use, sell, > + * offer to sell, and import the Covered Code and derivative works thereof > + * solely to the minimum extent necessary to exercise the above copyright > + * license, and in no event shall the patent license extend to any additions > + * to or modifications of the Original Intel Code. No other license or right > + * is granted directly or by implication, estoppel or otherwise; > + * > + * The above copyright and patent license is granted only if the following > + * conditions are met: > + * > + * 3. Conditions > + * > + * 3.1. Redistribution of Source with Rights to Further Distribute Source. > + * Redistribution of source code of any substantial portion of the Covered > + * Code or modification with rights to further distribute source must include > + * the above Copyright Notice, the above License, this list of Conditions, > + * and the following Disclaimer and Export Compliance provision. In addition, > + * Licensee must cause all Covered Code to which Licensee contributes to > + * contain a file documenting the changes Licensee made to create that Covered > + * Code and the date of any change. Licensee must include in that file the > + * documentation of any changes made by any predecessor Licensee. Licensee > + * must include a prominent statement that the modification is derived, > + * directly or indirectly, from Original Intel Code. > + * > + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. > + * Redistribution of source code of any substantial portion of the Covered > + * Code or modification without rights to further distribute source must > + * include the following Disclaimer and Export Compliance provision in the > + * documentation and/or other materials provided with distribution. In > + * addition, Licensee may not authorize further sublicense of source of any > + * portion of the Covered Code, and must include terms to the effect that the > + * license from Licensee to its licensee is limited to the intellectual > + * property embodied in the software Licensee provides to its licensee, and > + * not to intellectual property embodied in modifications its licensee may > + * make. > + * > + * 3.3. Redistribution of Executable. Redistribution in executable form of any > + * substantial portion of the Covered Code or modification must reproduce the > + * above Copyright Notice, and the following Disclaimer and Export Compliance > + * provision in the documentation and/or other materials provided with the > + * distribution. > + * > + * 3.4. Intel retains all right, title, and interest in and to the Original > + * Intel Code. > + * > + * 3.5. Neither the name Intel nor any other trademark owned or controlled by > + * Intel shall be used in advertising or otherwise to promote the sale, use or > + * other dealings in products derived from or relating to the Covered Code > + * without prior written authorization from Intel. > + * > + * 4. Disclaimer and Export Compliance > + * > + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED > + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE > + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, > + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY > + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY > + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A > + * PARTICULAR PURPOSE. > + * > + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES > + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR > + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, > + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY > + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL > + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS > + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY > + * LIMITED REMEDY. > + * > + * 4.3. Licensee shall not export, either directly or indirectly, any of this > + * software or system incorporating such software without first obtaining any > + * required license or other approval from the U. S. Department of Commerce or > + * any other agency or department of the United States Government. In the > + * event Licensee exports any such software from the United States or > + * re-exports any such software from a foreign destination, Licensee shall > + * ensure that the distribution and export/re-export of the software is in > + * compliance with all laws, regulations, orders, or other restrictions of the > + * U.S. Export Administration Regulations. Licensee agrees that neither it nor > + * any of its subsidiaries will export/re-export any technical data, process, > + * software, or service, directly or indirectly, to any country for which the > + * United States government or any agency thereof requires an export license, > + * other governmental approval, or letter of assurance, without first obtaining > + * such license, approval or letter. > + * > + ***************************************************************************** > + * > + * Alternatively, you may choose to be licensed under the terms of the > + * following license: > + * > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions > + * are met: > + * 1. Redistributions of source code must retain the above copyright > + * notice, this list of conditions, and the following disclaimer, > + * without modification. > + * 2. Redistributions in binary form must reproduce at minimum a disclaimer > + * substantially similar to the "NO WARRANTY" disclaimer below > + * ("Disclaimer") and any redistribution must be conditioned upon > + * including a substantially similar Disclaimer requirement for further > + * binary redistribution. > + * 3. Neither the names of the above-listed copyright holders nor the names > + * of any contributors may be used to endorse or promote products derived > + * from this software without specific prior written permission. > + * > + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS > + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT > + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR > + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT > + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, > + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT > + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, > + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY > + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE > + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > + * > + * Alternatively, you may choose to be licensed under the terms of the > + * GNU General Public License ("GPL") version 2 as published by the Free > + * Software Foundation. > + * > + *****************************************************************************/ > + > +#include "acpi.h" > +#include "accommon.h" > +#include "acdisasm.h" > +#include "actables.h" > + > +/* This module used for application-level code only */ > + > +#define _COMPONENT ACPI_CA_DISASSEMBLER > + ACPI_MODULE_NAME ("dmtbdump3") > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpSlic > + * > + * PARAMETERS: Table - A SLIC table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a SLIC > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpSlic ( > + ACPI_TABLE_HEADER *Table) > +{ > + > + (void) AcpiDmDumpTable (Table->Length, sizeof (ACPI_TABLE_HEADER), Table, > + Table->Length - sizeof (*Table), AcpiDmTableInfoSlic); > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpSlit > + * > + * PARAMETERS: Table - An SLIT > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a SLIT > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpSlit ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + UINT32 Offset; > + UINT8 *Row; > + UINT32 Localities; > + UINT32 i; > + UINT32 j; > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSlit); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Display the Locality NxN Matrix */ > + > + Localities = (UINT32) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->LocalityCount; > + Offset = ACPI_OFFSET (ACPI_TABLE_SLIT, Entry[0]); > + Row = (UINT8 *) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->Entry; > + > + for (i = 0; i < Localities; i++) > + { > + /* Display one row of the matrix */ > + > + AcpiDmLineHeader2 (Offset, Localities, "Locality", i); > + for (j = 0; j < Localities; j++) > + { > + /* Check for beyond EOT */ > + > + if (Offset >= Table->Length) > + { > + AcpiOsPrintf ( > + "\n**** Not enough room in table for all localities\n"); > + return; > + } > + > + AcpiOsPrintf ("%2.2X", Row[j]); > + Offset++; > + > + /* Display up to 16 bytes per output row */ > + > + if ((j+1) < Localities) > + { > + AcpiOsPrintf (" "); > + > + if (j && (((j+1) % 16) == 0)) > + { > + AcpiOsPrintf ("\\\n"); /* With line continuation char */ > + AcpiDmLineHeader (Offset, 0, NULL); > + } > + } > + } > + > + /* Point to next row */ > + > + AcpiOsPrintf ("\n"); > + Row += Localities; > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpSrat > + * > + * PARAMETERS: Table - A SRAT table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a SRAT > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpSrat ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + UINT32 Offset = sizeof (ACPI_TABLE_SRAT); > + ACPI_SUBTABLE_HEADER *Subtable; > + ACPI_DMTABLE_INFO *InfoTable; > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSrat); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Subtables */ > + > + Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset); > + while (Offset < Table->Length) > + { > + /* Common subtable header */ > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > + Subtable->Length, AcpiDmTableInfoSratHdr); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + switch (Subtable->Type) > + { > + case ACPI_SRAT_TYPE_CPU_AFFINITY: > + > + InfoTable = AcpiDmTableInfoSrat0; > + break; > + > + case ACPI_SRAT_TYPE_MEMORY_AFFINITY: > + > + InfoTable = AcpiDmTableInfoSrat1; > + break; > + > + case ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY: > + > + InfoTable = AcpiDmTableInfoSrat2; > + break; > + > + case ACPI_SRAT_TYPE_GICC_AFFINITY: > + > + InfoTable = AcpiDmTableInfoSrat3; > + break; > + > + case ACPI_SRAT_TYPE_GIC_ITS_AFFINITY: > + > + InfoTable = AcpiDmTableInfoSrat4; > + break; > + > + default: > + AcpiOsPrintf ("\n**** Unknown SRAT subtable type 0x%X\n", > + Subtable->Type); > + > + /* Attempt to continue */ > + > + if (!Subtable->Length) > + { > + AcpiOsPrintf ("Invalid zero length subtable\n"); > + return; > + } > + goto NextSubtable; > + } > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > + Subtable->Length, InfoTable); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > +NextSubtable: > + /* Point to next subtable */ > + > + Offset += Subtable->Length; > + Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, > + Subtable->Length); > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpStao > + * > + * PARAMETERS: Table - A STAO table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a STAO. This is a variable-length > + * table that contains an open-ended number of ASCII strings > + * at the end of the table. > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpStao ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + char *Namepath; > + UINT32 Length = Table->Length; > + UINT32 StringLength; > + UINT32 Offset = sizeof (ACPI_TABLE_STAO); > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoStao); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* The rest of the table consists of Namepath strings */ > + > + while (Offset < Table->Length) > + { > + Namepath = ACPI_ADD_PTR (char, Table, Offset); > + StringLength = strlen (Namepath) + 1; > + > + AcpiDmLineHeader (Offset, StringLength, "Namestring"); > + AcpiOsPrintf ("\"%s\"\n", Namepath); > + > + /* Point to next namepath */ > + > + Offset += StringLength; > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpTcpa > + * > + * PARAMETERS: Table - A TCPA table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a TCPA. > + * > + * NOTE: There are two versions of the table with the same signature: > + * the client version and the server version. The common > + * PlatformClass field is used to differentiate the two types of > + * tables. > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpTcpa ( > + ACPI_TABLE_HEADER *Table) > +{ > + UINT32 Offset = sizeof (ACPI_TABLE_TCPA_HDR); > + ACPI_TABLE_TCPA_HDR *CommonHeader = ACPI_CAST_PTR ( > + ACPI_TABLE_TCPA_HDR, Table); > + ACPI_TABLE_TCPA_HDR *Subtable = ACPI_ADD_PTR ( > + ACPI_TABLE_TCPA_HDR, Table, Offset); > + ACPI_STATUS Status; > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Table->Length, 0, Table, > + 0, AcpiDmTableInfoTcpaHdr); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* > + * Examine the PlatformClass field to determine the table type. > + * Either a client or server table. Only one. > + */ > + switch (CommonHeader->PlatformClass) > + { > + case ACPI_TCPA_CLIENT_TABLE: > + > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > + Table->Length - Offset, AcpiDmTableInfoTcpaClient); > + break; > + > + case ACPI_TCPA_SERVER_TABLE: > + > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > + Table->Length - Offset, AcpiDmTableInfoTcpaServer); > + break; > + > + default: > + > + AcpiOsPrintf ("\n**** Unknown TCPA Platform Class 0x%X\n", > + CommonHeader->PlatformClass); > + Status = AE_ERROR; > + break; > + } > + > + if (ACPI_FAILURE (Status)) > + { > + AcpiOsPrintf ("\n**** Cannot disassemble TCPA table\n"); > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpTpm2 > + * > + * PARAMETERS: Table - A TPM2 table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a TPM2. > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpTpm2 ( > + ACPI_TABLE_HEADER *Table) > +{ > + UINT32 Offset = sizeof (ACPI_TABLE_TPM2); > + ACPI_TABLE_TPM2 *CommonHeader = ACPI_CAST_PTR (ACPI_TABLE_TPM2, Table); > + ACPI_TPM2_TRAILER *Subtable = ACPI_ADD_PTR (ACPI_TPM2_TRAILER, Table, Offset); > + ACPI_TPM2_ARM_SMC *ArmSubtable; > + ACPI_STATUS Status; > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoTpm2); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > + Table->Length - Offset, AcpiDmTableInfoTpm2a); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + switch (CommonHeader->StartMethod) > + { > + case ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC: > + > + ArmSubtable = ACPI_ADD_PTR (ACPI_TPM2_ARM_SMC, Subtable, > + sizeof (ACPI_TPM2_TRAILER)); > + Offset += sizeof (ACPI_TPM2_TRAILER); > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Table->Length, Offset, ArmSubtable, > + Table->Length - Offset, AcpiDmTableInfoTpm211); > + break; > + > + default: > + break; > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpVrtc > + * > + * PARAMETERS: Table - A VRTC table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a VRTC > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpVrtc ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + UINT32 Offset = sizeof (ACPI_TABLE_VRTC); > + ACPI_VRTC_ENTRY *Subtable; > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoVrtc); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Subtables */ > + > + Subtable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, Table, Offset); > + while (Offset < Table->Length) > + { > + /* Common subtable header */ > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > + sizeof (ACPI_VRTC_ENTRY), AcpiDmTableInfoVrtc0); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Point to next subtable */ > + > + Offset += sizeof (ACPI_VRTC_ENTRY); > + Subtable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, Subtable, > + sizeof (ACPI_VRTC_ENTRY)); > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpWdat > + * > + * PARAMETERS: Table - A WDAT table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a WDAT > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpWdat ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + UINT32 Offset = sizeof (ACPI_TABLE_WDAT); > + ACPI_WDAT_ENTRY *Subtable; > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoWdat); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Subtables */ > + > + Subtable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Table, Offset); > + while (Offset < Table->Length) > + { > + /* Common subtable header */ > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, > + sizeof (ACPI_WDAT_ENTRY), AcpiDmTableInfoWdat0); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Point to next subtable */ > + > + Offset += sizeof (ACPI_WDAT_ENTRY); > + Subtable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Subtable, > + sizeof (ACPI_WDAT_ENTRY)); > + } > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpWpbt > + * > + * PARAMETERS: Table - A WPBT table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a WPBT. This table type consists > + * of an open-ended arguments buffer at the end of the table. > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpWpbt ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + ACPI_TABLE_WPBT *Subtable; > + UINT32 Length = Table->Length; > + UINT16 ArgumentsLength; > + > + > + /* Dump the main table */ > + > + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoWpbt); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Extract the arguments buffer length from the main table */ > + > + Subtable = ACPI_CAST_PTR (ACPI_TABLE_WPBT, Table); > + ArgumentsLength = Subtable->ArgumentsLength; > + > + /* Dump the arguments buffer */ > + > + (void) AcpiDmDumpTable (Table->Length, 0, Table, ArgumentsLength, > + AcpiDmTableInfoWpbt0); > +} > diff --git a/src/acpica/source/common/dmtbinfo.c b/src/acpica/source/common/dmtbinfo.c > index 8e14569b..2e1c54f8 100644 > --- a/src/acpica/source/common/dmtbinfo.c > +++ b/src/acpica/source/common/dmtbinfo.c > @@ -424,2909 +424,3 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoFadt6[] = > {ACPI_DMT_UINT64, ACPI_FADT_OFFSET (HypervisorId), "Hypervisor ID", 0}, > ACPI_DMT_TERMINATOR > }; > - > - > -/* > - * Remaining tables are not consumed directly by the ACPICA subsystem > - */ > - > -/******************************************************************************* > - * > - * ASF - Alert Standard Format table (Signature "ASF!") > - * > - ******************************************************************************/ > - > -/* Common Subtable header (one per Subtable) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoAsfHdr[] = > -{ > - {ACPI_DMT_ASF, ACPI_ASF0_OFFSET (Header.Type), "Subtable Type", 0}, > - {ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (Header.Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT16, ACPI_ASF0_OFFSET (Header.Length), "Length", DT_LENGTH}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 0: ASF Information */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoAsf0[] = > -{ > - {ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (MinResetValue), "Minimum Reset Value", 0}, > - {ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (MinPollInterval), "Minimum Polling Interval", 0}, > - {ACPI_DMT_UINT16, ACPI_ASF0_OFFSET (SystemId), "System ID", 0}, > - {ACPI_DMT_UINT32, ACPI_ASF0_OFFSET (MfgId), "Manufacturer ID", 0}, > - {ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (Flags), "Flags", 0}, > - {ACPI_DMT_UINT24, ACPI_ASF0_OFFSET (Reserved2[0]), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 1: ASF Alerts */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoAsf1[] = > -{ > - {ACPI_DMT_UINT8, ACPI_ASF1_OFFSET (AssertMask), "AssertMask", 0}, > - {ACPI_DMT_UINT8, ACPI_ASF1_OFFSET (DeassertMask), "DeassertMask", 0}, > - {ACPI_DMT_UINT8, ACPI_ASF1_OFFSET (Alerts), "Alert Count", 0}, > - {ACPI_DMT_UINT8, ACPI_ASF1_OFFSET (DataLength), "Alert Data Length", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 1a: ASF Alert data */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoAsf1a[] = > -{ > - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Address), "Address", 0}, > - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Command), "Command", 0}, > - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Mask), "Mask", 0}, > - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Value), "Value", 0}, > - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (SensorType), "SensorType", 0}, > - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Type), "Type", 0}, > - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Offset), "Offset", 0}, > - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (SourceType), "SourceType", 0}, > - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Severity), "Severity", 0}, > - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (SensorNumber), "SensorNumber", 0}, > - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Entity), "Entity", 0}, > - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Instance), "Instance", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 2: ASF Remote Control */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoAsf2[] = > -{ > - {ACPI_DMT_UINT8, ACPI_ASF2_OFFSET (Controls), "Control Count", 0}, > - {ACPI_DMT_UINT8, ACPI_ASF2_OFFSET (DataLength), "Control Data Length", 0}, > - {ACPI_DMT_UINT16, ACPI_ASF2_OFFSET (Reserved2), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 2a: ASF Control data */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoAsf2a[] = > -{ > - {ACPI_DMT_UINT8, ACPI_ASF2a_OFFSET (Function), "Function", 0}, > - {ACPI_DMT_UINT8, ACPI_ASF2a_OFFSET (Address), "Address", 0}, > - {ACPI_DMT_UINT8, ACPI_ASF2a_OFFSET (Command), "Command", 0}, > - {ACPI_DMT_UINT8, ACPI_ASF2a_OFFSET (Value), "Value", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 3: ASF RMCP Boot Options */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoAsf3[] = > -{ > - {ACPI_DMT_BUF7, ACPI_ASF3_OFFSET (Capabilities[0]), "Capabilities", 0}, > - {ACPI_DMT_UINT8, ACPI_ASF3_OFFSET (CompletionCode), "Completion Code", 0}, > - {ACPI_DMT_UINT32, ACPI_ASF3_OFFSET (EnterpriseId), "Enterprise ID", 0}, > - {ACPI_DMT_UINT8, ACPI_ASF3_OFFSET (Command), "Command", 0}, > - {ACPI_DMT_UINT16, ACPI_ASF3_OFFSET (Parameter), "Parameter", 0}, > - {ACPI_DMT_UINT16, ACPI_ASF3_OFFSET (BootOptions), "Boot Options", 0}, > - {ACPI_DMT_UINT16, ACPI_ASF3_OFFSET (OemParameters), "Oem Parameters", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 4: ASF Address */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoAsf4[] = > -{ > - {ACPI_DMT_UINT8, ACPI_ASF4_OFFSET (EpromAddress), "Eprom Address", 0}, > - {ACPI_DMT_UINT8, ACPI_ASF4_OFFSET (Devices), "Device Count", DT_COUNT}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * BERT - Boot Error Record table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoBert[] = > -{ > - {ACPI_DMT_UINT32, ACPI_BERT_OFFSET (RegionLength), "Boot Error Region Length", 0}, > - {ACPI_DMT_UINT64, ACPI_BERT_OFFSET (Address), "Boot Error Region Address", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * BGRT - Boot Graphics Resource Table (ACPI 5.0) > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoBgrt[] = > -{ > - {ACPI_DMT_UINT16, ACPI_BGRT_OFFSET (Version), "Version", 0}, > - {ACPI_DMT_UINT8, ACPI_BGRT_OFFSET (Status), "Status (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_BGRT_FLAG_OFFSET (Status, 0), "Displayed", 0}, > - {ACPI_DMT_FLAGS1, ACPI_BGRT_FLAG_OFFSET (Status, 0), "Orientation Offset", 0}, > - > - {ACPI_DMT_UINT8, ACPI_BGRT_OFFSET (ImageType), "Image Type", 0}, > - {ACPI_DMT_UINT64, ACPI_BGRT_OFFSET (ImageAddress), "Image Address", 0}, > - {ACPI_DMT_UINT32, ACPI_BGRT_OFFSET (ImageOffsetX), "Image OffsetX", 0}, > - {ACPI_DMT_UINT32, ACPI_BGRT_OFFSET (ImageOffsetY), "Image OffsetY", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * BOOT - Simple Boot Flag Table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoBoot[] = > -{ > - {ACPI_DMT_UINT8, ACPI_BOOT_OFFSET (CmosIndex), "Boot Register Index", 0}, > - {ACPI_DMT_UINT24, ACPI_BOOT_OFFSET (Reserved[0]), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * CPEP - Corrected Platform Error Polling table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoCpep[] = > -{ > - {ACPI_DMT_UINT64, ACPI_CPEP_OFFSET (Reserved), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoCpep0[] = > -{ > - {ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Header.Type), "Subtable Type", 0}, > - {ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Header.Length), "Length", DT_LENGTH}, > - {ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Id), "Processor ID", 0}, > - {ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Eid), "Processor EID", 0}, > - {ACPI_DMT_UINT32, ACPI_CPEP0_OFFSET (Interval), "Polling Interval", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * CSRT - Core System Resource Table > - * > - ******************************************************************************/ > - > -/* Main table consists only of the standard ACPI table header */ > - > -/* Resource Group subtable */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt0[] = > -{ > - {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (Length), "Length", DT_LENGTH}, > - {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (VendorId), "Vendor ID", 0}, > - {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (SubvendorId), "Subvendor ID", 0}, > - {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (DeviceId), "Device ID", 0}, > - {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (SubdeviceId), "Subdevice ID", 0}, > - {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (Revision), "Revision", 0}, > - {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (SharedInfoLength), "Shared Info Length", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* Shared Info subtable */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt1[] = > -{ > - {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (MajorVersion), "Major Version", 0}, > - {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (MinorVersion), "Minor Version", 0}, > - {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (MmioBaseLow), "MMIO Base Address Low", 0}, > - {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (MmioBaseHigh), "MMIO Base Address High", 0}, > - {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (GsiInterrupt), "GSI Interrupt", 0}, > - {ACPI_DMT_UINT8, ACPI_CSRT1_OFFSET (InterruptPolarity), "Interrupt Polarity", 0}, > - {ACPI_DMT_UINT8, ACPI_CSRT1_OFFSET (InterruptMode), "Interrupt Mode", 0}, > - {ACPI_DMT_UINT8, ACPI_CSRT1_OFFSET (NumChannels), "Num Channels", 0}, > - {ACPI_DMT_UINT8, ACPI_CSRT1_OFFSET (DmaAddressWidth), "DMA Address Width", 0}, > - {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (BaseRequestLine), "Base Request Line", 0}, > - {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (NumHandshakeSignals), "Num Handshake Signals", 0}, > - {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (MaxBlockSize), "Max Block Size", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* Resource Descriptor subtable */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt2[] = > -{ > - {ACPI_DMT_UINT32, ACPI_CSRT2_OFFSET (Length), "Length", DT_LENGTH}, > - {ACPI_DMT_UINT16, ACPI_CSRT2_OFFSET (Type), "Type", 0}, > - {ACPI_DMT_UINT16, ACPI_CSRT2_OFFSET (Subtype), "Subtype", 0}, > - {ACPI_DMT_UINT32, ACPI_CSRT2_OFFSET (Uid), "UID", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt2a[] = > -{ > - {ACPI_DMT_RAW_BUFFER, 0, "ResourceInfo", DT_OPTIONAL}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * DBG2 - Debug Port Table 2 > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2[] = > -{ > - {ACPI_DMT_UINT32, ACPI_DBG2_OFFSET (InfoOffset), "Info Offset", 0}, > - {ACPI_DMT_UINT32, ACPI_DBG2_OFFSET (InfoCount), "Info Count", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* Debug Device Information Subtable */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Device[] = > -{ > - {ACPI_DMT_UINT8, ACPI_DBG20_OFFSET (Revision), "Revision", 0}, > - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (Length), "Length", DT_LENGTH}, > - {ACPI_DMT_UINT8, ACPI_DBG20_OFFSET (RegisterCount), "Register Count", 0}, > - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (NamepathLength), "Namepath Length", 0}, > - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (NamepathOffset), "Namepath Offset", 0}, > - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (OemDataLength), "OEM Data Length", DT_DESCRIBES_OPTIONAL}, > - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (OemDataOffset), "OEM Data Offset", DT_DESCRIBES_OPTIONAL}, > - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (PortType), "Port Type", 0}, > - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (PortSubtype), "Port Subtype", 0}, > - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (BaseAddressOffset), "Base Address Offset", 0}, > - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (AddressSizeOffset), "Address Size Offset", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* Variable-length data for the subtable */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Addr[] = > -{ > - {ACPI_DMT_GAS, 0, "Base Address Register", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Size[] = > -{ > - {ACPI_DMT_UINT32, 0, "Address Size", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Name[] = > -{ > - {ACPI_DMT_STRING, 0, "Namepath", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2OemData[] = > -{ > - {ACPI_DMT_RAW_BUFFER, 0, "OEM Data", DT_OPTIONAL}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * DBGP - Debug Port > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoDbgp[] = > -{ > - {ACPI_DMT_UINT8, ACPI_DBGP_OFFSET (Type), "Interface Type", 0}, > - {ACPI_DMT_UINT24, ACPI_DBGP_OFFSET (Reserved[0]), "Reserved", 0}, > - {ACPI_DMT_GAS, ACPI_DBGP_OFFSET (DebugPort), "Debug Port Register", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * DMAR - DMA Remapping table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoDmar[] = > -{ > - {ACPI_DMT_UINT8, ACPI_DMAR_OFFSET (Width), "Host Address Width", 0}, > - {ACPI_DMT_UINT8, ACPI_DMAR_OFFSET (Flags), "Flags", 0}, > - {ACPI_DMT_BUF10, ACPI_DMAR_OFFSET (Reserved[0]), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* Common Subtable header (one per Subtable) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoDmarHdr[] = > -{ > - {ACPI_DMT_DMAR, ACPI_DMAR0_OFFSET (Header.Type), "Subtable Type", 0}, > - {ACPI_DMT_UINT16, ACPI_DMAR0_OFFSET (Header.Length), "Length", DT_LENGTH}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* Common device scope entry */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoDmarScope[] = > -{ > - {ACPI_DMT_DMAR_SCOPE, ACPI_DMARS_OFFSET (EntryType), "Device Scope Type", 0}, > - {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (Length), "Entry Length", DT_LENGTH}, > - {ACPI_DMT_UINT16, ACPI_DMARS_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (EnumerationId), "Enumeration ID", 0}, > - {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (Bus), "PCI Bus Number", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* DMAR Subtables */ > - > -/* 0: Hardware Unit Definition */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoDmar0[] = > -{ > - {ACPI_DMT_UINT8, ACPI_DMAR0_OFFSET (Flags), "Flags", 0}, > - {ACPI_DMT_UINT8, ACPI_DMAR0_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT16, ACPI_DMAR0_OFFSET (Segment), "PCI Segment Number", 0}, > - {ACPI_DMT_UINT64, ACPI_DMAR0_OFFSET (Address), "Register Base Address", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 1: Reserved Memory Definition */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoDmar1[] = > -{ > - {ACPI_DMT_UINT16, ACPI_DMAR1_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT16, ACPI_DMAR1_OFFSET (Segment), "PCI Segment Number", 0}, > - {ACPI_DMT_UINT64, ACPI_DMAR1_OFFSET (BaseAddress), "Base Address", 0}, > - {ACPI_DMT_UINT64, ACPI_DMAR1_OFFSET (EndAddress), "End Address (limit)", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 2: Root Port ATS Capability Definition */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoDmar2[] = > -{ > - {ACPI_DMT_UINT8, ACPI_DMAR2_OFFSET (Flags), "Flags", 0}, > - {ACPI_DMT_UINT8, ACPI_DMAR2_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT16, ACPI_DMAR2_OFFSET (Segment), "PCI Segment Number", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 3: Remapping Hardware Static Affinity Structure */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoDmar3[] = > -{ > - {ACPI_DMT_UINT32, ACPI_DMAR3_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT64, ACPI_DMAR3_OFFSET (BaseAddress), "Base Address", 0}, > - {ACPI_DMT_UINT32, ACPI_DMAR3_OFFSET (ProximityDomain), "Proximity Domain", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 4: ACPI Namespace Device Declaration Structure */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoDmar4[] = > -{ > - {ACPI_DMT_UINT24, ACPI_DMAR4_OFFSET (Reserved[0]), "Reserved", 0}, > - {ACPI_DMT_UINT8, ACPI_DMAR4_OFFSET (DeviceNumber), "Device Number", 0}, > - {ACPI_DMT_STRING, ACPI_DMAR4_OFFSET (DeviceName[0]), "Device Name", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * DRTM - Dynamic Root of Trust for Measurement table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm[] = > -{ > - {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (EntryBaseAddress), "Entry Base Address", 0}, > - {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (EntryLength), "Entry Length", 0}, > - {ACPI_DMT_UINT32, ACPI_DRTM_OFFSET (EntryAddress32), "Entry 32", 0}, > - {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (EntryAddress64), "Entry 64", 0}, > - {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (ExitAddress), "Exit Address", 0}, > - {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (LogAreaAddress), "Log Area Start", 0}, > - {ACPI_DMT_UINT32, ACPI_DRTM_OFFSET (LogAreaLength), "Log Area Length", 0}, > - {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (ArchDependentAddress), "Arch Dependent Address", 0}, > - {ACPI_DMT_UINT32, ACPI_DRTM_OFFSET (Flags), "Flags (decoded below)", 0}, > - {ACPI_DMT_FLAG0, ACPI_DRTM_FLAG_OFFSET (Flags, 0), "Namespace in TCB", 0}, > - {ACPI_DMT_FLAG1, ACPI_DRTM_FLAG_OFFSET (Flags, 0), "Gap Code on S3 Resume", 0}, > - {ACPI_DMT_FLAG2, ACPI_DRTM_FLAG_OFFSET (Flags, 0), "Gap Code on DLME_Exit", 0}, > - {ACPI_DMT_FLAG3, ACPI_DRTM_FLAG_OFFSET (Flags, 0), "PCR_Authorities Changed", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm0[] = > -{ > - {ACPI_DMT_UINT32, ACPI_DRTM0_OFFSET (ValidatedTableCount), "Validated Table Count", DT_COUNT}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm0a[] = > -{ > - {ACPI_DMT_UINT64, 0, "Table Address", DT_OPTIONAL}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm1[] = > -{ > - {ACPI_DMT_UINT32, ACPI_DRTM1_OFFSET (ResourceCount), "Resource Count", DT_COUNT}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm1a[] = > -{ > - {ACPI_DMT_UINT56, ACPI_DRTM1a_OFFSET (Size[0]), "Size", DT_OPTIONAL}, > - {ACPI_DMT_UINT8, ACPI_DRTM1a_OFFSET (Type), "Type", 0}, > - {ACPI_DMT_FLAG0, ACPI_DRTM1a_FLAG_OFFSET (Type, 0), "Resource Type", 0}, > - {ACPI_DMT_FLAG7, ACPI_DRTM1a_FLAG_OFFSET (Type, 0), "Protections", 0}, > - {ACPI_DMT_UINT64, ACPI_DRTM1a_OFFSET (Address), "Address", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm2[] = > -{ > - {ACPI_DMT_UINT32, ACPI_DRTM2_OFFSET (DpsIdLength), "DLME Platform Id Length", DT_COUNT}, > - {ACPI_DMT_BUF16, ACPI_DRTM2_OFFSET (DpsId), "DLME Platform Id", DT_COUNT}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * ECDT - Embedded Controller Boot Resources Table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoEcdt[] = > -{ > - {ACPI_DMT_GAS, ACPI_ECDT_OFFSET (Control), "Command/Status Register", 0}, > - {ACPI_DMT_GAS, ACPI_ECDT_OFFSET (Data), "Data Register", 0}, > - {ACPI_DMT_UINT32, ACPI_ECDT_OFFSET (Uid), "UID", 0}, > - {ACPI_DMT_UINT8, ACPI_ECDT_OFFSET (Gpe), "GPE Number", 0}, > - {ACPI_DMT_STRING, ACPI_ECDT_OFFSET (Id[0]), "Namepath", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * EINJ - Error Injection table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoEinj[] = > -{ > - {ACPI_DMT_UINT32, ACPI_EINJ_OFFSET (HeaderLength), "Injection Header Length", 0}, > - {ACPI_DMT_UINT8, ACPI_EINJ_OFFSET (Flags), "Flags", 0}, > - {ACPI_DMT_UINT24, ACPI_EINJ_OFFSET (Reserved[0]), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_EINJ_OFFSET (Entries), "Injection Entry Count", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoEinj0[] = > -{ > - {ACPI_DMT_EINJACT, ACPI_EINJ0_OFFSET (Action), "Action", 0}, > - {ACPI_DMT_EINJINST, ACPI_EINJ0_OFFSET (Instruction), "Instruction", 0}, > - {ACPI_DMT_UINT8, ACPI_EINJ0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_EINJ0_FLAG_OFFSET (Flags,0), "Preserve Register Bits", 0}, > - > - {ACPI_DMT_UINT8, ACPI_EINJ0_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_GAS, ACPI_EINJ0_OFFSET (RegisterRegion), "Register Region", 0}, > - {ACPI_DMT_UINT64, ACPI_EINJ0_OFFSET (Value), "Value", 0}, > - {ACPI_DMT_UINT64, ACPI_EINJ0_OFFSET (Mask), "Mask", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * ERST - Error Record Serialization table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoErst[] = > -{ > - {ACPI_DMT_UINT32, ACPI_ERST_OFFSET (HeaderLength), "Serialization Header Length", 0}, > - {ACPI_DMT_UINT32, ACPI_ERST_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_ERST_OFFSET (Entries), "Instruction Entry Count", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoErst0[] = > -{ > - {ACPI_DMT_ERSTACT, ACPI_ERST0_OFFSET (Action), "Action", 0}, > - {ACPI_DMT_ERSTINST, ACPI_ERST0_OFFSET (Instruction), "Instruction", 0}, > - {ACPI_DMT_UINT8, ACPI_ERST0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_ERST0_FLAG_OFFSET (Flags,0), "Preserve Register Bits", 0}, > - > - {ACPI_DMT_UINT8, ACPI_ERST0_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_GAS, ACPI_ERST0_OFFSET (RegisterRegion), "Register Region", 0}, > - {ACPI_DMT_UINT64, ACPI_ERST0_OFFSET (Value), "Value", 0}, > - {ACPI_DMT_UINT64, ACPI_ERST0_OFFSET (Mask), "Mask", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * FPDT - Firmware Performance Data Table (ACPI 5.0) > - * > - ******************************************************************************/ > - > -/* Main table consists of only the standard ACPI header - subtables follow */ > - > -/* FPDT subtable header */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoFpdtHdr[] = > -{ > - {ACPI_DMT_UINT16, ACPI_FPDTH_OFFSET (Type), "Subtable Type", 0}, > - {ACPI_DMT_UINT8, ACPI_FPDTH_OFFSET (Length), "Length", DT_LENGTH}, > - {ACPI_DMT_UINT8, ACPI_FPDTH_OFFSET (Revision), "Revision", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 0: Firmware Basic Boot Performance Record */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt0[] = > -{ > - {ACPI_DMT_UINT32, ACPI_FPDT0_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT64, ACPI_FPDT1_OFFSET (Address), "FPDT Boot Record Address", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 1: S3 Performance Table Pointer Record */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt1[] = > -{ > - {ACPI_DMT_UINT32, ACPI_FPDT1_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT64, ACPI_FPDT1_OFFSET (Address), "S3PT Record Address", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -#if 0 > - /* Boot Performance Record, not supported at this time. */ > - {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (ResetEnd), "Reset End", 0}, > - {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (LoadStart), "Load Image Start", 0}, > - {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (StartupStart), "Start Image Start", 0}, > - {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (ExitServicesEntry), "Exit Services Entry", 0}, > - {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (ExitServicesExit), "Exit Services Exit", 0}, > -#endif > - > - > -/******************************************************************************* > - * > - * GTDT - Generic Timer Description Table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt[] = > -{ > - {ACPI_DMT_UINT64, ACPI_GTDT_OFFSET (CounterBlockAddresss), "Counter Block Address", 0}, > - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (Reserved), "Reserved", 0}, > - ACPI_DMT_NEW_LINE, > - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (SecureEl1Interrupt), "Secure EL1 Interrupt", 0}, > - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (SecureEl1Flags), "EL1 Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Trigger Mode", 0}, > - {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Polarity", 0}, > - {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Always On", 0}, > - ACPI_DMT_NEW_LINE, > - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl1Interrupt), "Non-Secure EL1 Interrupt", 0}, > - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl1Flags), "NEL1 Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Trigger Mode", 0}, > - {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Polarity", 0}, > - {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Always On", 0}, > - ACPI_DMT_NEW_LINE, > - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (VirtualTimerInterrupt), "Virtual Timer Interrupt", 0}, > - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (VirtualTimerFlags), "VT Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Trigger Mode", 0}, > - {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Polarity", 0}, > - {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Always On", 0}, > - ACPI_DMT_NEW_LINE, > - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl2Interrupt), "Non-Secure EL2 Interrupt", 0}, > - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl2Flags), "NEL2 Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Trigger Mode", 0}, > - {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Polarity", 0}, > - {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Always On", 0}, > - {ACPI_DMT_UINT64, ACPI_GTDT_OFFSET (CounterReadBlockAddress), "Counter Read Block Address", 0}, > - ACPI_DMT_NEW_LINE, > - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (PlatformTimerCount), "Platform Timer Count", 0}, > - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (PlatformTimerOffset), "Platform Timer Offset", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* GTDT Subtable header (one per Subtable) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoGtdtHdr[] = > -{ > - {ACPI_DMT_GTDT, ACPI_GTDTH_OFFSET (Type), "Subtable Type", 0}, > - {ACPI_DMT_UINT16, ACPI_GTDTH_OFFSET (Length), "Length", DT_LENGTH}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* GTDT Subtables */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt0[] = > -{ > - {ACPI_DMT_UINT8, ACPI_GTDT0_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT64, ACPI_GTDT0_OFFSET (BlockAddress), "Block Address", 0}, > - {ACPI_DMT_UINT32, ACPI_GTDT0_OFFSET (TimerCount), "Timer Count", 0}, > - {ACPI_DMT_UINT32, ACPI_GTDT0_OFFSET (TimerOffset), "Timer Offset", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt0a[] = > -{ > - {ACPI_DMT_UINT8 , ACPI_GTDT0a_OFFSET (FrameNumber), "Frame Number", 0}, > - {ACPI_DMT_UINT24, ACPI_GTDT0a_OFFSET (Reserved[0]), "Reserved", 0}, > - {ACPI_DMT_UINT64, ACPI_GTDT0a_OFFSET (BaseAddress), "Base Address", 0}, > - {ACPI_DMT_UINT64, ACPI_GTDT0a_OFFSET (El0BaseAddress), "EL0 Base Address", 0}, > - {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (TimerInterrupt), "Timer Interrupt", 0}, > - {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (TimerFlags), "Timer Flags (decoded below)", 0}, > - {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (TimerFlags,0), "Trigger Mode", 0}, > - {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (TimerFlags,0), "Polarity", 0}, > - {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (VirtualTimerInterrupt), "Virtual Timer Interrupt", 0}, > - {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (VirtualTimerFlags), "Virtual Timer Flags (decoded below)", 0}, > - {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (VirtualTimerFlags,0), "Trigger Mode", 0}, > - {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (VirtualTimerFlags,0), "Polarity", 0}, > - {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (CommonFlags), "Common Flags (decoded below)", 0}, > - {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (CommonFlags,0), "Secure", 0}, > - {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (CommonFlags,0), "Always On", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt1[] = > -{ > - {ACPI_DMT_UINT8, ACPI_GTDT1_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT64, ACPI_GTDT1_OFFSET (RefreshFrameAddress), "Refresh Frame Address", 0}, > - {ACPI_DMT_UINT64, ACPI_GTDT1_OFFSET (ControlFrameAddress), "Control Frame Address", 0}, > - {ACPI_DMT_UINT32, ACPI_GTDT1_OFFSET (TimerInterrupt), "Timer Interrupt", 0}, > - {ACPI_DMT_UINT32, ACPI_GTDT1_OFFSET (TimerFlags), "Timer Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Trigger Mode", 0}, > - {ACPI_DMT_FLAG1, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Polarity", 0}, > - {ACPI_DMT_FLAG2, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Security", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * HEST - Hardware Error Source table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoHest[] = > -{ > - {ACPI_DMT_UINT32, ACPI_HEST_OFFSET (ErrorSourceCount), "Error Source Count", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* Common HEST structures for subtables */ > - > -#define ACPI_DM_HEST_HEADER \ > - {ACPI_DMT_HEST, ACPI_HEST0_OFFSET (Header.Type), "Subtable Type", 0}, \ > - {ACPI_DMT_UINT16, ACPI_HEST0_OFFSET (Header.SourceId), "Source Id", 0} > - > -#define ACPI_DM_HEST_AER \ > - {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Reserved1), "Reserved", 0}, \ > - {ACPI_DMT_UINT8, ACPI_HEST6_OFFSET (Aer.Flags), "Flags (decoded below)", DT_FLAG}, \ > - {ACPI_DMT_FLAG0, ACPI_HEST6_FLAG_OFFSET (Aer.Flags,0), "Firmware First", 0}, \ > - {ACPI_DMT_FLAG0, ACPI_HEST6_FLAG_OFFSET (Aer.Flags,0), "Global", 0}, \ > - {ACPI_DMT_UINT8, ACPI_HEST6_OFFSET (Aer.Enabled), "Enabled", 0}, \ > - {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.RecordsToPreallocate), "Records To Preallocate", 0}, \ > - {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.MaxSectionsPerRecord), "Max Sections Per Record", 0}, \ > - {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.Bus), "Bus", 0}, \ > - {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Device), "Device", 0}, \ > - {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Function), "Function", 0}, \ > - {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.DeviceControl), "DeviceControl", 0}, \ > - {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Reserved2), "Reserved", 0}, \ > - {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.UncorrectableMask), "Uncorrectable Mask", 0}, \ > - {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.UncorrectableSeverity), "Uncorrectable Severity", 0}, \ > - {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.CorrectableMask), "Correctable Mask", 0}, \ > - {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.AdvancedCapabilities), "Advanced Capabilities", 0} > - > - > -/* HEST Subtables */ > - > -/* 0: IA32 Machine Check Exception */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoHest0[] = > -{ > - ACPI_DM_HEST_HEADER, > - {ACPI_DMT_UINT16, ACPI_HEST0_OFFSET (Reserved1), "Reserved1", 0}, > - {ACPI_DMT_UINT8, ACPI_HEST0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_HEST0_FLAG_OFFSET (Flags,0), "Firmware First", 0}, > - {ACPI_DMT_FLAG2, ACPI_HEST0_FLAG_OFFSET (Flags,0), "GHES Assist", 0}, > - > - {ACPI_DMT_UINT8, ACPI_HEST0_OFFSET (Enabled), "Enabled", 0}, > - {ACPI_DMT_UINT32, ACPI_HEST0_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, > - {ACPI_DMT_UINT32, ACPI_HEST0_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, > - {ACPI_DMT_UINT64, ACPI_HEST0_OFFSET (GlobalCapabilityData), "Global Capability Data", 0}, > - {ACPI_DMT_UINT64, ACPI_HEST0_OFFSET (GlobalControlData), "Global Control Data", 0}, > - {ACPI_DMT_UINT8, ACPI_HEST0_OFFSET (NumHardwareBanks), "Num Hardware Banks", 0}, > - {ACPI_DMT_UINT56, ACPI_HEST0_OFFSET (Reserved3[0]), "Reserved2", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 1: IA32 Corrected Machine Check */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoHest1[] = > -{ > - ACPI_DM_HEST_HEADER, > - {ACPI_DMT_UINT16, ACPI_HEST1_OFFSET (Reserved1), "Reserved1", 0}, > - {ACPI_DMT_UINT8, ACPI_HEST1_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_HEST1_FLAG_OFFSET (Flags,0), "Firmware First", 0}, > - {ACPI_DMT_FLAG2, ACPI_HEST1_FLAG_OFFSET (Flags,0), "GHES Assist", 0}, > - > - {ACPI_DMT_UINT8, ACPI_HEST1_OFFSET (Enabled), "Enabled", 0}, > - {ACPI_DMT_UINT32, ACPI_HEST1_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, > - {ACPI_DMT_UINT32, ACPI_HEST1_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, > - {ACPI_DMT_HESTNTFY, ACPI_HEST1_OFFSET (Notify), "Notify", 0}, > - {ACPI_DMT_UINT8, ACPI_HEST1_OFFSET (NumHardwareBanks), "Num Hardware Banks", 0}, > - {ACPI_DMT_UINT24, ACPI_HEST1_OFFSET (Reserved2[0]), "Reserved2", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 2: IA32 Non-Maskable Interrupt */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoHest2[] = > -{ > - ACPI_DM_HEST_HEADER, > - {ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, > - {ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, > - {ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (MaxRawDataLength), "Max Raw Data Length", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 6: PCI Express Root Port AER */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoHest6[] = > -{ > - ACPI_DM_HEST_HEADER, > - ACPI_DM_HEST_AER, > - {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (RootErrorCommand), "Root Error Command", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 7: PCI Express AER (AER Endpoint) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoHest7[] = > -{ > - ACPI_DM_HEST_HEADER, > - ACPI_DM_HEST_AER, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 8: PCI Express/PCI-X Bridge AER */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoHest8[] = > -{ > - ACPI_DM_HEST_HEADER, > - ACPI_DM_HEST_AER, > - {ACPI_DMT_UINT32, ACPI_HEST8_OFFSET (UncorrectableMask2), "2nd Uncorrectable Mask", 0}, > - {ACPI_DMT_UINT32, ACPI_HEST8_OFFSET (UncorrectableSeverity2), "2nd Uncorrectable Severity", 0}, > - {ACPI_DMT_UINT32, ACPI_HEST8_OFFSET (AdvancedCapabilities2), "2nd Advanced Capabilities", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 9: Generic Hardware Error Source */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoHest9[] = > -{ > - ACPI_DM_HEST_HEADER, > - {ACPI_DMT_UINT16, ACPI_HEST9_OFFSET (RelatedSourceId), "Related Source Id", 0}, > - {ACPI_DMT_UINT8, ACPI_HEST9_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT8, ACPI_HEST9_OFFSET (Enabled), "Enabled", 0}, > - {ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, > - {ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, > - {ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (MaxRawDataLength), "Max Raw Data Length", 0}, > - {ACPI_DMT_GAS, ACPI_HEST9_OFFSET (ErrorStatusAddress), "Error Status Address", 0}, > - {ACPI_DMT_HESTNTFY, ACPI_HEST9_OFFSET (Notify), "Notify", 0}, > - {ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (ErrorBlockLength), "Error Status Block Length", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 10: Generic Hardware Error Source - Version 2 */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoHest10[] = > -{ > - ACPI_DM_HEST_HEADER, > - {ACPI_DMT_UINT16, ACPI_HEST10_OFFSET (RelatedSourceId), "Related Source Id", 0}, > - {ACPI_DMT_UINT8, ACPI_HEST10_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT8, ACPI_HEST10_OFFSET (Enabled), "Enabled", 0}, > - {ACPI_DMT_UINT32, ACPI_HEST10_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, > - {ACPI_DMT_UINT32, ACPI_HEST10_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, > - {ACPI_DMT_UINT32, ACPI_HEST10_OFFSET (MaxRawDataLength), "Max Raw Data Length", 0}, > - {ACPI_DMT_GAS, ACPI_HEST10_OFFSET (ErrorStatusAddress), "Error Status Address", 0}, > - {ACPI_DMT_HESTNTFY, ACPI_HEST10_OFFSET (Notify), "Notify", 0}, > - {ACPI_DMT_UINT32, ACPI_HEST10_OFFSET (ErrorBlockLength), "Error Status Block Length", 0}, > - {ACPI_DMT_GAS, ACPI_HEST10_OFFSET (ReadAckRegister), "Read Ack Register", 0}, > - {ACPI_DMT_UINT64, ACPI_HEST10_OFFSET (ReadAckPreserve), "Read Ack Preserve", 0}, > - {ACPI_DMT_UINT64, ACPI_HEST10_OFFSET (ReadAckWrite), "Read Ack Write", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 11: IA32 Deferred Machine Check */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoHest11[] = > -{ > - ACPI_DM_HEST_HEADER, > - {ACPI_DMT_UINT16, ACPI_HEST11_OFFSET (Reserved1), "Reserved1", 0}, > - {ACPI_DMT_UINT8, ACPI_HEST11_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_HEST11_FLAG_OFFSET (Flags,0), "Firmware First", 0}, > - {ACPI_DMT_FLAG2, ACPI_HEST11_FLAG_OFFSET (Flags,0), "GHES Assist", 0}, > - > - {ACPI_DMT_UINT8, ACPI_HEST11_OFFSET (Enabled), "Enabled", 0}, > - {ACPI_DMT_UINT32, ACPI_HEST11_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, > - {ACPI_DMT_UINT32, ACPI_HEST11_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, > - {ACPI_DMT_HESTNTFY, ACPI_HEST11_OFFSET (Notify), "Notify", 0}, > - {ACPI_DMT_UINT8, ACPI_HEST11_OFFSET (NumHardwareBanks), "Num Hardware Banks", 0}, > - {ACPI_DMT_UINT24, ACPI_HEST11_OFFSET (Reserved2[0]), "Reserved2", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* Notification Structure */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoHestNotify[] = > -{ > - {ACPI_DMT_HESTNTYP, ACPI_HESTN_OFFSET (Type), "Notify Type", 0}, > - {ACPI_DMT_UINT8, ACPI_HESTN_OFFSET (Length), "Notify Length", DT_LENGTH}, > - {ACPI_DMT_UINT16, ACPI_HESTN_OFFSET (ConfigWriteEnable), "Configuration Write Enable", 0}, > - {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (PollInterval), "PollInterval", 0}, > - {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (Vector), "Vector", 0}, > - {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (PollingThresholdValue), "Polling Threshold Value", 0}, > - {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (PollingThresholdWindow), "Polling Threshold Window", 0}, > - {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (ErrorThresholdValue), "Error Threshold Value", 0}, > - {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (ErrorThresholdWindow), "Error Threshold Window", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/* > - * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and > - * ACPI_HEST_IA_CORRECTED structures. > - */ > -ACPI_DMTABLE_INFO AcpiDmTableInfoHestBank[] = > -{ > - {ACPI_DMT_UINT8, ACPI_HESTB_OFFSET (BankNumber), "Bank Number", 0}, > - {ACPI_DMT_UINT8, ACPI_HESTB_OFFSET (ClearStatusOnInit), "Clear Status On Init", 0}, > - {ACPI_DMT_UINT8, ACPI_HESTB_OFFSET (StatusFormat), "Status Format", 0}, > - {ACPI_DMT_UINT8, ACPI_HESTB_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_HESTB_OFFSET (ControlRegister), "Control Register", 0}, > - {ACPI_DMT_UINT64, ACPI_HESTB_OFFSET (ControlData), "Control Data", 0}, > - {ACPI_DMT_UINT32, ACPI_HESTB_OFFSET (StatusRegister), "Status Register", 0}, > - {ACPI_DMT_UINT32, ACPI_HESTB_OFFSET (AddressRegister), "Address Register", 0}, > - {ACPI_DMT_UINT32, ACPI_HESTB_OFFSET (MiscRegister), "Misc Register", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * HPET - High Precision Event Timer table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoHpet[] = > -{ > - {ACPI_DMT_UINT32, ACPI_HPET_OFFSET (Id), "Hardware Block ID", 0}, > - {ACPI_DMT_GAS, ACPI_HPET_OFFSET (Address), "Timer Block Register", 0}, > - {ACPI_DMT_UINT8, ACPI_HPET_OFFSET (Sequence), "Sequence Number", 0}, > - {ACPI_DMT_UINT16, ACPI_HPET_OFFSET (MinimumTick), "Minimum Clock Ticks", 0}, > - {ACPI_DMT_UINT8, ACPI_HPET_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_HPET_FLAG_OFFSET (Flags,0), "4K Page Protect", 0}, > - {ACPI_DMT_FLAG1, ACPI_HPET_FLAG_OFFSET (Flags,0), "64K Page Protect", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * HMAT - Heterogeneous Memory Attributes Table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoHmat[] = > -{ > - {ACPI_DMT_UINT32, ACPI_HMAT_OFFSET (Reserved), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* Common HMAT structure header (one per Subtable) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoHmatHdr[] = > -{ > - {ACPI_DMT_HMAT, ACPI_HMATH_OFFSET (Type), "Structure Type", 0}, > - {ACPI_DMT_UINT16, ACPI_HMATH_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_HMATH_OFFSET (Length), "Length", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* HMAT subtables */ > - > -/* 0x00: Memory Subsystem Address Range */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoHmat0[] = > -{ > - {ACPI_DMT_UINT16, ACPI_HMAT0_OFFSET (Flags), "Flags (decoded below)", 0}, > - {ACPI_DMT_FLAG0, ACPI_HMAT0_FLAG_OFFSET (Flags,0), "Processor Proximity Domain Valid", 0}, > - {ACPI_DMT_FLAG1, ACPI_HMAT0_FLAG_OFFSET (Flags,0), "Memory Proximity Domain Valid", 0}, > - {ACPI_DMT_FLAG2, ACPI_HMAT0_FLAG_OFFSET (Flags,0), "Reservation Hint", 0}, > - {ACPI_DMT_UINT16, ACPI_HMAT0_OFFSET (Reserved1), "Reserved1", 0}, > - {ACPI_DMT_UINT32, ACPI_HMAT0_OFFSET (ProcessorPD), "Processor Proximity Domain", 0}, > - {ACPI_DMT_UINT32, ACPI_HMAT0_OFFSET (MemoryPD), "Memory Proximity Domain", 0}, > - {ACPI_DMT_UINT32, ACPI_HMAT0_OFFSET (Reserved2), "Reserved2", 0}, > - {ACPI_DMT_UINT64, ACPI_HMAT0_OFFSET (PhysicalAddressBase), "Physical Address Range Base", 0}, > - {ACPI_DMT_UINT64, ACPI_HMAT0_OFFSET (PhysicalAddressLength), "Physical Address Range Size", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 0x01: System Locality Latency and Bandwidth Information */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1[] = > -{ > - {ACPI_DMT_UINT8, ACPI_HMAT1_OFFSET (Flags), "Flags (decoded below)", 0}, > - {ACPI_DMT_FLAGS4_0, ACPI_HMAT1_FLAG_OFFSET (Flags,0), "Memory Hierarchy", 0}, > - {ACPI_DMT_UINT8, ACPI_HMAT1_OFFSET (DataType), "Data Type", 0}, > - {ACPI_DMT_UINT16, ACPI_HMAT1_OFFSET (Reserved1), "Reserved1", 0}, > - {ACPI_DMT_UINT32, ACPI_HMAT1_OFFSET (NumberOfInitiatorPDs), "Initiator Proximity Domains #", 0}, > - {ACPI_DMT_UINT32, ACPI_HMAT1_OFFSET (NumberOfTargetPDs), "Target Proximity Domains #", 0}, > - {ACPI_DMT_UINT32, ACPI_HMAT1_OFFSET (Reserved2), "Reserved2", 0}, > - {ACPI_DMT_UINT64, ACPI_HMAT1_OFFSET (EntryBaseUnit), "Entry Base Unit", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1a[] = > -{ > - {ACPI_DMT_UINT32, 0, "Initiator Proximity Domain List", DT_OPTIONAL}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1b[] = > -{ > - {ACPI_DMT_UINT32, 0, "Target Proximity Domain List", DT_OPTIONAL}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1c[] = > -{ > - {ACPI_DMT_UINT16, 0, "Entry", DT_OPTIONAL}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 0x02: Memory Side Cache Information */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoHmat2[] = > -{ > - {ACPI_DMT_UINT32, ACPI_HMAT2_OFFSET (MemoryPD), "Memory Proximity Domain", 0}, > - {ACPI_DMT_UINT32, ACPI_HMAT2_OFFSET (Reserved1), "Reserved1", 0}, > - {ACPI_DMT_UINT64, ACPI_HMAT2_OFFSET (CacheSize), "Memory Side Cache Size", 0}, > - {ACPI_DMT_UINT32, ACPI_HMAT2_OFFSET (CacheAttributes), "Cache Attributes (decoded below)", 0}, > - {ACPI_DMT_FLAGS4_0, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Total Cache Levels", 0}, > - {ACPI_DMT_FLAGS4_4, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Cache Level", 0}, > - {ACPI_DMT_FLAGS4_8, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Cache Associativity", 0}, > - {ACPI_DMT_FLAGS4_12, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Write Policy", 0}, > - {ACPI_DMT_FLAGS16_16, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Cache Line Size", 0}, > - {ACPI_DMT_UINT16, ACPI_HMAT2_OFFSET (Reserved2), "Reserved2", 0}, > - {ACPI_DMT_UINT16, ACPI_HMAT2_OFFSET (NumberOfSMBIOSHandles), "SMBIOS Handle #", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoHmat2a[] = > -{ > - {ACPI_DMT_UINT16, 0, "SMBIOS Handle", DT_OPTIONAL}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * IORT - IO Remapping Table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoIort[] = > -{ > - {ACPI_DMT_UINT32, ACPI_IORT_OFFSET (NodeCount), "Node Count", 0}, > - {ACPI_DMT_UINT32, ACPI_IORT_OFFSET (NodeOffset), "Node Offset", 0}, > - {ACPI_DMT_UINT32, ACPI_IORT_OFFSET (Reserved), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* Optional padding field */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoIortPad[] = > -{ > - {ACPI_DMT_RAW_BUFFER, 0, "Optional Padding", DT_OPTIONAL}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* Common Subtable header (one per Subtable) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoIortHdr[] = > -{ > - {ACPI_DMT_UINT8, ACPI_IORTH_OFFSET (Type), "Type", 0}, > - {ACPI_DMT_UINT16, ACPI_IORTH_OFFSET (Length), "Length", DT_LENGTH}, > - {ACPI_DMT_UINT8, ACPI_IORTH_OFFSET (Revision), "Revision", 0}, > - {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (MappingCount), "Mapping Count", 0}, > - {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (MappingOffset), "Mapping Offset", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoIortMap[] = > -{ > - {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (InputBase), "Input base", DT_OPTIONAL}, > - {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (IdCount), "ID Count", 0}, > - {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (OutputBase), "Output Base", 0}, > - {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (OutputReference), "Output Reference", 0}, > - {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (Flags), "Flags (decoded below)", 0}, > - {ACPI_DMT_FLAG0, ACPI_IORTM_FLAG_OFFSET (Flags, 0), "Single Mapping", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoIortAcc[] = > -{ > - {ACPI_DMT_UINT32, ACPI_IORTA_OFFSET (CacheCoherency), "Cache Coherency", 0}, > - {ACPI_DMT_UINT8, ACPI_IORTA_OFFSET (Hints), "Hints (decoded below)", 0}, > - {ACPI_DMT_FLAG0, ACPI_IORTA_FLAG_OFFSET (Hints, 0), "Transient", 0}, > - {ACPI_DMT_FLAG1, ACPI_IORTA_FLAG_OFFSET (Hints, 0), "Write Allocate", 0}, > - {ACPI_DMT_FLAG2, ACPI_IORTA_FLAG_OFFSET (Hints, 0), "Read Allocate", 0}, > - {ACPI_DMT_FLAG3, ACPI_IORTA_FLAG_OFFSET (Hints, 0), "Override", 0}, > - {ACPI_DMT_UINT16, ACPI_IORTA_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT8, ACPI_IORTA_OFFSET (MemoryFlags), "Memory Flags (decoded below)", 0}, > - {ACPI_DMT_FLAG0, ACPI_IORTA_FLAG_OFFSET (MemoryFlags, 0), "Coherency", 0}, > - {ACPI_DMT_FLAG1, ACPI_IORTA_FLAG_OFFSET (MemoryFlags, 0), "Device Attribute", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* IORT subtables */ > - > -/* 0x00: ITS Group */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoIort0[] = > -{ > - {ACPI_DMT_UINT32, ACPI_IORT0_OFFSET (ItsCount), "ItsCount", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoIort0a[] = > -{ > - {ACPI_DMT_UINT32, 0, "Identifiers", DT_OPTIONAL}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 0x01: Named Component */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoIort1[] = > -{ > - {ACPI_DMT_UINT32, ACPI_IORT1_OFFSET (NodeFlags), "Node Flags", 0}, > - {ACPI_DMT_IORTMEM, ACPI_IORT1_OFFSET (MemoryProperties), "Memory Properties", 0}, > - {ACPI_DMT_UINT8, ACPI_IORT1_OFFSET (MemoryAddressLimit), "Memory Size Limit", 0}, > - {ACPI_DMT_STRING, ACPI_IORT1_OFFSET (DeviceName[0]), "Device Name", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoIort1a[] = > -{ > - {ACPI_DMT_RAW_BUFFER, 0, "Padding", DT_OPTIONAL}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 0x02: PCI Root Complex */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoIort2[] = > -{ > - {ACPI_DMT_IORTMEM, ACPI_IORT2_OFFSET (MemoryProperties), "Memory Properties", 0}, > - {ACPI_DMT_UINT32, ACPI_IORT2_OFFSET (AtsAttribute), "ATS Attribute", 0}, > - {ACPI_DMT_UINT32, ACPI_IORT2_OFFSET (PciSegmentNumber), "PCI Segment Number", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 0x03: SMMUv1/2 */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoIort3[] = > -{ > - {ACPI_DMT_UINT64, ACPI_IORT3_OFFSET (BaseAddress), "Base Address", 0}, > - {ACPI_DMT_UINT64, ACPI_IORT3_OFFSET (Span), "Span", 0}, > - {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (Model), "Model", 0}, > - {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (Flags), "Flags (decoded below)", 0}, > - {ACPI_DMT_FLAG0, ACPI_IORT3_FLAG_OFFSET (Flags, 0), "DVM Supported", 0}, > - {ACPI_DMT_FLAG1, ACPI_IORT3_FLAG_OFFSET (Flags, 0), "Coherent Walk", 0}, > - {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (GlobalInterruptOffset), "Global Interrupt Offset", 0}, > - {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (ContextInterruptCount), "Context Interrupt Count", 0}, > - {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (ContextInterruptOffset), "Context Interrupt Offset", 0}, > - {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (PmuInterruptCount), "PMU Interrupt Count", 0}, > - {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (PmuInterruptOffset), "PMU Interrupt Offset", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoIort3a[] = > -{ > - {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgIrpt), "NSgIrpt", 0}, > - {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgIrptFlags), "NSgIrpt Flags (decoded below)", 0}, > - {ACPI_DMT_FLAG0, ACPI_IORT3a_FLAG_OFFSET (NSgIrptFlags, 0), "Edge Triggered", 0}, > - {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgCfgIrpt), "NSgCfgIrpt", 0}, > - {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgCfgIrptFlags), "NSgCfgIrpt Flags (decoded below)", 0}, > - {ACPI_DMT_FLAG0, ACPI_IORT3a_FLAG_OFFSET (NSgCfgIrptFlags, 0), "Edge Triggered", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoIort3b[] = > -{ > - {ACPI_DMT_UINT64, 0, "Context Interrupt", DT_OPTIONAL}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoIort3c[] = > -{ > - {ACPI_DMT_UINT64, 0, "PMU Interrupt", DT_OPTIONAL}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 0x04: SMMUv3 */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoIort4[] = > -{ > - {ACPI_DMT_UINT64, ACPI_IORT4_OFFSET (BaseAddress), "Base Address", 0}, > - {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (Flags), "Flags (decoded below)", 0}, > - {ACPI_DMT_FLAG0, ACPI_IORT4_FLAG_OFFSET (Flags, 0), "COHACC Override", 0}, > - {ACPI_DMT_FLAG1, ACPI_IORT4_FLAG_OFFSET (Flags, 0), "HTTU Override", 0}, > - {ACPI_DMT_FLAG3, ACPI_IORT4_FLAG_OFFSET (Flags, 0), "Proximity Domain Valid", 0}, > - {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT64, ACPI_IORT4_OFFSET (VatosAddress), "VATOS Address", 0}, > - {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (Model), "Model", 0}, > - {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (EventGsiv), "Event GSIV", 0}, > - {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (PriGsiv), "PRI GSIV", 0}, > - {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (GerrGsiv), "GERR GSIV", 0}, > - {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (SyncGsiv), "Sync GSIV", 0}, > - {ACPI_DMT_UINT8, ACPI_IORT4_OFFSET (Pxm), "Proximity Domain", 0}, > - {ACPI_DMT_UINT8, ACPI_IORT4_OFFSET (Reserved1), "Reserved", 0}, > - {ACPI_DMT_UINT16, ACPI_IORT4_OFFSET (Reserved2), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (IdMappingIndex), "Device ID Mapping Index", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * IVRS - I/O Virtualization Reporting Structure > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs[] = > -{ > - {ACPI_DMT_UINT32, ACPI_IVRS_OFFSET (Info), "Virtualization Info", 0}, > - {ACPI_DMT_UINT64, ACPI_IVRS_OFFSET (Reserved), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* Common Subtable header (one per Subtable) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsHdr[] = > -{ > - {ACPI_DMT_IVRS, ACPI_IVRSH_OFFSET (Type), "Subtable Type", 0}, > - {ACPI_DMT_UINT8, ACPI_IVRSH_OFFSET (Flags), "Flags", 0}, > - {ACPI_DMT_UINT16, ACPI_IVRSH_OFFSET (Length), "Length", DT_LENGTH}, > - {ACPI_DMT_UINT16, ACPI_IVRSH_OFFSET (DeviceId), "DeviceId", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* IVRS subtables */ > - > -/* 0x10: I/O Virtualization Hardware Definition (IVHD) Block */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs0[] = > -{ > - {ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (CapabilityOffset), "Capability Offset", 0}, > - {ACPI_DMT_UINT64, ACPI_IVRS0_OFFSET (BaseAddress), "Base Address", 0}, > - {ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (PciSegmentGroup), "PCI Segment Group", 0}, > - {ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (Info), "Virtualization Info", 0}, > - {ACPI_DMT_UINT32, ACPI_IVRS0_OFFSET (Reserved), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition (IVMD) Block */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs1[] = > -{ > - {ACPI_DMT_UINT16, ACPI_IVRS1_OFFSET (AuxData), "Auxiliary Data", 0}, > - {ACPI_DMT_UINT64, ACPI_IVRS1_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT64, ACPI_IVRS1_OFFSET (StartAddress), "Start Address", 0}, > - {ACPI_DMT_UINT64, ACPI_IVRS1_OFFSET (MemoryLength), "Memory Length", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* Device entry header for IVHD block */ > - > -#define ACPI_DMT_IVRS_DE_HEADER \ > - {ACPI_DMT_UINT8, ACPI_IVRSD_OFFSET (Type), "Entry Type", 0}, \ > - {ACPI_DMT_UINT16, ACPI_IVRSD_OFFSET (Id), "Device ID", 0}, \ > - {ACPI_DMT_UINT8, ACPI_IVRSD_OFFSET (DataSetting), "Data Setting", 0} > - > -/* 4-byte device entry */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs4[] = > -{ > - ACPI_DMT_IVRS_DE_HEADER, > - {ACPI_DMT_EXIT, 0, NULL, 0}, > -}; > - > -/* 8-byte device entry */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8a[] = > -{ > - ACPI_DMT_IVRS_DE_HEADER, > - {ACPI_DMT_UINT8, ACPI_IVRS8A_OFFSET (Reserved1), "Reserved", 0}, > - {ACPI_DMT_UINT16, ACPI_IVRS8A_OFFSET (UsedId), "Source Used Device ID", 0}, > - {ACPI_DMT_UINT8, ACPI_IVRS8A_OFFSET (Reserved2), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 8-byte device entry */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8b[] = > -{ > - ACPI_DMT_IVRS_DE_HEADER, > - {ACPI_DMT_UINT32, ACPI_IVRS8B_OFFSET (ExtendedData), "Extended Data", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 8-byte device entry */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8c[] = > -{ > - ACPI_DMT_IVRS_DE_HEADER, > - {ACPI_DMT_UINT8, ACPI_IVRS8C_OFFSET (Handle), "Handle", 0}, > - {ACPI_DMT_UINT16, ACPI_IVRS8C_OFFSET (UsedId), "Source Used Device ID", 0}, > - {ACPI_DMT_UINT8, ACPI_IVRS8C_OFFSET (Variety), "Variety", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * LPIT - Low Power Idle Table > - * > - ******************************************************************************/ > - > -/* Main table consists only of the standard ACPI table header */ > - > -/* Common Subtable header (one per Subtable) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoLpitHdr[] = > -{ > - {ACPI_DMT_LPIT, ACPI_LPITH_OFFSET (Type), "Subtable Type", 0}, > - {ACPI_DMT_UINT32, ACPI_LPITH_OFFSET (Length), "Length", DT_LENGTH}, > - {ACPI_DMT_UINT16, ACPI_LPITH_OFFSET (UniqueId), "Unique ID", 0}, > - {ACPI_DMT_UINT16, ACPI_LPITH_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_LPITH_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_LPITH_FLAG_OFFSET (Flags, 0), "State Disabled", 0}, > - {ACPI_DMT_FLAG1, ACPI_LPITH_FLAG_OFFSET (Flags, 0), "No Counter", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* LPIT Subtables */ > - > -/* 0: Native C-state */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoLpit0[] = > -{ > - {ACPI_DMT_GAS, ACPI_LPIT0_OFFSET (EntryTrigger), "Entry Trigger", 0}, > - {ACPI_DMT_UINT32, ACPI_LPIT0_OFFSET (Residency), "Residency", 0}, > - {ACPI_DMT_UINT32, ACPI_LPIT0_OFFSET (Latency), "Latency", 0}, > - {ACPI_DMT_GAS, ACPI_LPIT0_OFFSET (ResidencyCounter), "Residency Counter", 0}, > - {ACPI_DMT_UINT64, ACPI_LPIT0_OFFSET (CounterFrequency), "Counter Frequency", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * MADT - Multiple APIC Description Table and subtables > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt[] = > -{ > - {ACPI_DMT_UINT32, ACPI_MADT_OFFSET (Address), "Local Apic Address", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_MADT_FLAG_OFFSET (Flags,0), "PC-AT Compatibility", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* Common Subtable header (one per Subtable) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMadtHdr[] = > -{ > - {ACPI_DMT_MADT, ACPI_MADTH_OFFSET (Type), "Subtable Type", 0}, > - {ACPI_DMT_UINT8, ACPI_MADTH_OFFSET (Length), "Length", DT_LENGTH}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* MADT Subtables */ > - > -/* 0: processor APIC */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt0[] = > -{ > - {ACPI_DMT_UINT8, ACPI_MADT0_OFFSET (ProcessorId), "Processor ID", 0}, > - {ACPI_DMT_UINT8, ACPI_MADT0_OFFSET (Id), "Local Apic ID", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT0_OFFSET (LapicFlags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_MADT0_FLAG_OFFSET (LapicFlags,0), "Processor Enabled", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 1: IO APIC */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt1[] = > -{ > - {ACPI_DMT_UINT8, ACPI_MADT1_OFFSET (Id), "I/O Apic ID", 0}, > - {ACPI_DMT_UINT8, ACPI_MADT1_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT1_OFFSET (Address), "Address", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT1_OFFSET (GlobalIrqBase), "Interrupt", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 2: Interrupt Override */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt2[] = > -{ > - {ACPI_DMT_UINT8, ACPI_MADT2_OFFSET (Bus), "Bus", 0}, > - {ACPI_DMT_UINT8, ACPI_MADT2_OFFSET (SourceIrq), "Source", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT2_OFFSET (GlobalIrq), "Interrupt", 0}, > - {ACPI_DMT_UINT16, ACPI_MADT2_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAGS0, ACPI_MADT2_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, > - {ACPI_DMT_FLAGS2, ACPI_MADT2_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 3: NMI Sources */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt3[] = > -{ > - {ACPI_DMT_UINT16, ACPI_MADT3_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAGS0, ACPI_MADT3_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, > - {ACPI_DMT_FLAGS2, ACPI_MADT3_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT3_OFFSET (GlobalIrq), "Interrupt", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 4: Local APIC NMI */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt4[] = > -{ > - {ACPI_DMT_UINT8, ACPI_MADT4_OFFSET (ProcessorId), "Processor ID", 0}, > - {ACPI_DMT_UINT16, ACPI_MADT4_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAGS0, ACPI_MADT4_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, > - {ACPI_DMT_FLAGS2, ACPI_MADT4_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, > - {ACPI_DMT_UINT8, ACPI_MADT4_OFFSET (Lint), "Interrupt Input LINT", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 5: Address Override */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt5[] = > -{ > - {ACPI_DMT_UINT16, ACPI_MADT5_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT64, ACPI_MADT5_OFFSET (Address), "APIC Address", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 6: I/O Sapic */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt6[] = > -{ > - {ACPI_DMT_UINT8, ACPI_MADT6_OFFSET (Id), "I/O Sapic ID", 0}, > - {ACPI_DMT_UINT8, ACPI_MADT6_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT6_OFFSET (GlobalIrqBase), "Interrupt Base", 0}, > - {ACPI_DMT_UINT64, ACPI_MADT6_OFFSET (Address), "Address", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 7: Local Sapic */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt7[] = > -{ > - {ACPI_DMT_UINT8, ACPI_MADT7_OFFSET (ProcessorId), "Processor ID", 0}, > - {ACPI_DMT_UINT8, ACPI_MADT7_OFFSET (Id), "Local Sapic ID", 0}, > - {ACPI_DMT_UINT8, ACPI_MADT7_OFFSET (Eid), "Local Sapic EID", 0}, > - {ACPI_DMT_UINT24, ACPI_MADT7_OFFSET (Reserved[0]), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT7_OFFSET (LapicFlags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_MADT7_FLAG_OFFSET (LapicFlags,0), "Processor Enabled", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT7_OFFSET (Uid), "Processor UID", 0}, > - {ACPI_DMT_STRING, ACPI_MADT7_OFFSET (UidString[0]), "Processor UID String", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 8: Platform Interrupt Source */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt8[] = > -{ > - {ACPI_DMT_UINT16, ACPI_MADT8_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAGS0, ACPI_MADT8_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, > - {ACPI_DMT_FLAGS2, ACPI_MADT8_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, > - {ACPI_DMT_UINT8, ACPI_MADT8_OFFSET (Type), "InterruptType", 0}, > - {ACPI_DMT_UINT8, ACPI_MADT8_OFFSET (Id), "Processor ID", 0}, > - {ACPI_DMT_UINT8, ACPI_MADT8_OFFSET (Eid), "Processor EID", 0}, > - {ACPI_DMT_UINT8, ACPI_MADT8_OFFSET (IoSapicVector), "I/O Sapic Vector", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT8_OFFSET (GlobalIrq), "Interrupt", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT8_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_MADT8_OFFSET (Flags), "CPEI Override", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 9: Processor Local X2_APIC (ACPI 4.0) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt9[] = > -{ > - {ACPI_DMT_UINT16, ACPI_MADT9_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT9_OFFSET (LocalApicId), "Processor x2Apic ID", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT9_OFFSET (LapicFlags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_MADT9_FLAG_OFFSET (LapicFlags,0), "Processor Enabled", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT9_OFFSET (Uid), "Processor UID", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 10: Local X2_APIC NMI (ACPI 4.0) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt10[] = > -{ > - {ACPI_DMT_UINT16, ACPI_MADT10_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAGS0, ACPI_MADT10_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, > - {ACPI_DMT_FLAGS2, ACPI_MADT10_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT10_OFFSET (Uid), "Processor UID", 0}, > - {ACPI_DMT_UINT8, ACPI_MADT10_OFFSET (Lint), "Interrupt Input LINT", 0}, > - {ACPI_DMT_UINT24, ACPI_MADT10_OFFSET (Reserved[0]), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 11: Generic Interrupt Controller (ACPI 5.0) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt11[] = > -{ > - {ACPI_DMT_UINT16, ACPI_MADT11_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (CpuInterfaceNumber), "CPU Interface Number", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (Uid), "Processor UID", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Processor Enabled", 0}, > - {ACPI_DMT_FLAG1, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Performance Interrupt Trigger Mode", 0}, > - {ACPI_DMT_FLAG2, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Virtual GIC Interrupt Trigger Mode", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (ParkingVersion), "Parking Protocol Version", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (PerformanceInterrupt), "Performance Interrupt", 0}, > - {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (ParkedAddress), "Parked Address", 0}, > - {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (BaseAddress), "Base Address", 0}, > - {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GicvBaseAddress), "Virtual GIC Base Address", 0}, > - {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GichBaseAddress), "Hypervisor GIC Base Address", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (VgicInterrupt), "Virtual GIC Interrupt", 0}, > - {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GicrBaseAddress), "Redistributor Base Address", 0}, > - {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (ArmMpidr), "ARM MPIDR", 0}, > - {ACPI_DMT_UINT8, ACPI_MADT11_OFFSET (EfficiencyClass), "Efficiency Class", 0}, > - {ACPI_DMT_UINT24, ACPI_MADT11_OFFSET (Reserved2[0]), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 12: Generic Interrupt Distributor (ACPI 5.0) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt12[] = > -{ > - {ACPI_DMT_UINT16, ACPI_MADT12_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT12_OFFSET (GicId), "Local GIC Hardware ID", 0}, > - {ACPI_DMT_UINT64, ACPI_MADT12_OFFSET (BaseAddress), "Base Address", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT12_OFFSET (GlobalIrqBase), "Interrupt Base", 0}, > - {ACPI_DMT_UINT8, ACPI_MADT12_OFFSET (Version), "Version", 0}, > - {ACPI_DMT_UINT24, ACPI_MADT12_OFFSET (Reserved2[0]), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 13: Generic MSI Frame (ACPI 5.1) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt13[] = > -{ > - {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT13_OFFSET (MsiFrameId), "MSI Frame ID", 0}, > - {ACPI_DMT_UINT64, ACPI_MADT13_OFFSET (BaseAddress), "Base Address", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT13_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_MADT13_FLAG_OFFSET (Flags,0), "Select SPI", 0}, > - {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (SpiCount), "SPI Count", 0}, > - {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (SpiBase), "SPI Base", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 14: Generic Redistributor (ACPI 5.1) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt14[] = > -{ > - {ACPI_DMT_UINT16, ACPI_MADT14_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT64, ACPI_MADT14_OFFSET (BaseAddress), "Base Address", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT14_OFFSET (Length), "Length", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 15: Generic Translator (ACPI 6.0) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt15[] = > -{ > - {ACPI_DMT_UINT16, ACPI_MADT15_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT15_OFFSET (TranslationId), "Translation ID", 0}, > - {ACPI_DMT_UINT64, ACPI_MADT15_OFFSET (BaseAddress), "Base Address", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT15_OFFSET (Reserved2), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * MCFG - PCI Memory Mapped Configuration table and Subtable > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMcfg[] = > -{ > - {ACPI_DMT_UINT64, ACPI_MCFG_OFFSET (Reserved[0]), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMcfg0[] = > -{ > - {ACPI_DMT_UINT64, ACPI_MCFG0_OFFSET (Address), "Base Address", 0}, > - {ACPI_DMT_UINT16, ACPI_MCFG0_OFFSET (PciSegment), "Segment Group Number", 0}, > - {ACPI_DMT_UINT8, ACPI_MCFG0_OFFSET (StartBusNumber), "Start Bus Number", 0}, > - {ACPI_DMT_UINT8, ACPI_MCFG0_OFFSET (EndBusNumber), "End Bus Number", 0}, > - {ACPI_DMT_UINT32, ACPI_MCFG0_OFFSET (Reserved), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * MCHI - Management Controller Host Interface table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMchi[] = > -{ > - {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (InterfaceType), "Interface Type", 0}, > - {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (Protocol), "Protocol", 0}, > - {ACPI_DMT_UINT64, ACPI_MCHI_OFFSET (ProtocolData), "Protocol Data", 0}, > - {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (InterruptType), "Interrupt Type", 0}, > - {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (Gpe), "Gpe", 0}, > - {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciDeviceFlag), "Pci Device Flag", 0}, > - {ACPI_DMT_UINT32, ACPI_MCHI_OFFSET (GlobalInterrupt), "Global Interrupt", 0}, > - {ACPI_DMT_GAS, ACPI_MCHI_OFFSET (ControlRegister), "Control Register", 0}, > - {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciSegment), "Pci Segment", 0}, > - {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciBus), "Pci Bus", 0}, > - {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciDevice), "Pci Device", 0}, > - {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciFunction), "Pci Function", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * MPST - Memory Power State Table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMpst[] = > -{ > - {ACPI_DMT_UINT8, ACPI_MPST_OFFSET (ChannelId), "Channel ID", 0}, > - {ACPI_DMT_UINT24, ACPI_MPST_OFFSET (Reserved1[0]), "Reserved", 0}, > - {ACPI_DMT_UINT16, ACPI_MPST_OFFSET (PowerNodeCount), "Power Node Count", 0}, > - {ACPI_DMT_UINT16, ACPI_MPST_OFFSET (Reserved2), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* MPST subtables */ > - > -/* 0: Memory Power Node Structure */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMpst0[] = > -{ > - {ACPI_DMT_UINT8, ACPI_MPST0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_MPST0_FLAG_OFFSET (Flags,0), "Node Enabled", 0}, > - {ACPI_DMT_FLAG1, ACPI_MPST0_FLAG_OFFSET (Flags,0), "Power Managed", 0}, > - {ACPI_DMT_FLAG2, ACPI_MPST0_FLAG_OFFSET (Flags,0), "Hot Plug Capable", 0}, > - > - {ACPI_DMT_UINT8, ACPI_MPST0_OFFSET (Reserved1), "Reserved", 0}, > - {ACPI_DMT_UINT16, ACPI_MPST0_OFFSET (NodeId), "Node ID", 0}, > - {ACPI_DMT_UINT32, ACPI_MPST0_OFFSET (Length), "Length", 0}, > - {ACPI_DMT_UINT64, ACPI_MPST0_OFFSET (RangeAddress), "Range Address", 0}, > - {ACPI_DMT_UINT64, ACPI_MPST0_OFFSET (RangeLength), "Range Length", 0}, > - {ACPI_DMT_UINT32, ACPI_MPST0_OFFSET (NumPowerStates), "Num Power States", 0}, > - {ACPI_DMT_UINT32, ACPI_MPST0_OFFSET (NumPhysicalComponents), "Num Physical Components", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 0A: Sub-subtable - Memory Power State Structure (follows Memory Power Node above) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMpst0A[] = > -{ > - {ACPI_DMT_UINT8, ACPI_MPST0A_OFFSET (PowerState), "Power State", 0}, > - {ACPI_DMT_UINT8, ACPI_MPST0A_OFFSET (InfoIndex), "InfoIndex", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 0B: Sub-subtable - Physical Component ID Structure (follows Memory Power State(s) above) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMpst0B[] = > -{ > - {ACPI_DMT_UINT16, ACPI_MPST0B_OFFSET (ComponentId), "Component Id", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 01: Power Characteristics Count (follows all Power Node(s) above) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMpst1[] = > -{ > - {ACPI_DMT_UINT16, ACPI_MPST1_OFFSET (CharacteristicsCount), "Characteristics Count", 0}, > - {ACPI_DMT_UINT16, ACPI_MPST1_OFFSET (Reserved), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 02: Memory Power State Characteristics Structure */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMpst2[] = > -{ > - {ACPI_DMT_UINT8, ACPI_MPST2_OFFSET (StructureId), "Structure ID", 0}, > - {ACPI_DMT_UINT8, ACPI_MPST2_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_MPST2_FLAG_OFFSET (Flags,0), "Memory Preserved", 0}, > - {ACPI_DMT_FLAG1, ACPI_MPST2_FLAG_OFFSET (Flags,0), "Auto Entry", 0}, > - {ACPI_DMT_FLAG2, ACPI_MPST2_FLAG_OFFSET (Flags,0), "Auto Exit", 0}, > - > - {ACPI_DMT_UINT16, ACPI_MPST2_OFFSET (Reserved1), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_MPST2_OFFSET (AveragePower), "Average Power", 0}, > - {ACPI_DMT_UINT32, ACPI_MPST2_OFFSET (PowerSaving), "Power Saving", 0}, > - {ACPI_DMT_UINT64, ACPI_MPST2_OFFSET (ExitLatency), "Exit Latency", 0}, > - {ACPI_DMT_UINT64, ACPI_MPST2_OFFSET (Reserved2), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * MSCT - Maximum System Characteristics Table (ACPI 4.0) > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMsct[] = > -{ > - {ACPI_DMT_UINT32, ACPI_MSCT_OFFSET (ProximityOffset), "Proximity Offset", 0}, > - {ACPI_DMT_UINT32, ACPI_MSCT_OFFSET (MaxProximityDomains), "Max Proximity Domains", 0}, > - {ACPI_DMT_UINT32, ACPI_MSCT_OFFSET (MaxClockDomains), "Max Clock Domains", 0}, > - {ACPI_DMT_UINT64, ACPI_MSCT_OFFSET (MaxAddress), "Max Physical Address", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* Subtable - Maximum Proximity Domain Information. Version 1 */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMsct0[] = > -{ > - {ACPI_DMT_UINT8, ACPI_MSCT0_OFFSET (Revision), "Revision", 0}, > - {ACPI_DMT_UINT8, ACPI_MSCT0_OFFSET (Length), "Length", DT_LENGTH}, > - {ACPI_DMT_UINT32, ACPI_MSCT0_OFFSET (RangeStart), "Domain Range Start", 0}, > - {ACPI_DMT_UINT32, ACPI_MSCT0_OFFSET (RangeEnd), "Domain Range End", 0}, > - {ACPI_DMT_UINT32, ACPI_MSCT0_OFFSET (ProcessorCapacity), "Processor Capacity", 0}, > - {ACPI_DMT_UINT64, ACPI_MSCT0_OFFSET (MemoryCapacity), "Memory Capacity", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * MTMR - MID Timer Table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMtmr[] = > -{ > - ACPI_DMT_TERMINATOR > -}; > - > -/* MTMR Subtables - MTMR Entry */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoMtmr0[] = > -{ > - {ACPI_DMT_GAS, ACPI_MTMR0_OFFSET (PhysicalAddress), "PhysicalAddress", 0}, > - {ACPI_DMT_UINT32, ACPI_MTMR0_OFFSET (Frequency), "Frequency", 0}, > - {ACPI_DMT_UINT32, ACPI_MTMR0_OFFSET (Irq), "IRQ", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * NFIT - NVDIMM Firmware Interface Table and Subtables - (ACPI 6.0) > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit[] = > -{ > - {ACPI_DMT_UINT32, ACPI_NFIT_OFFSET (Reserved), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* Common Subtable header */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoNfitHdr[] = > -{ > - {ACPI_DMT_NFIT, ACPI_NFITH_OFFSET (Type), "Subtable Type", 0}, > - {ACPI_DMT_UINT16, ACPI_NFITH_OFFSET (Length), "Length", DT_LENGTH}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 0: System Physical Address Range Structure */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit0[] = > -{ > - {ACPI_DMT_UINT16, ACPI_NFIT0_OFFSET (RangeIndex), "Range Index", 0}, > - {ACPI_DMT_UINT16, ACPI_NFIT0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_NFIT0_FLAG_OFFSET (Flags,0), "Add/Online Operation Only", 0}, > - {ACPI_DMT_FLAG1, ACPI_NFIT0_FLAG_OFFSET (Flags,0), "Proximity Domain Valid", 0}, > - {ACPI_DMT_UINT32, ACPI_NFIT0_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_NFIT0_OFFSET (ProximityDomain), "Proximity Domain", 0}, > - {ACPI_DMT_UUID, ACPI_NFIT0_OFFSET (RangeGuid[0]), "Address Range GUID", 0}, > - {ACPI_DMT_UINT64, ACPI_NFIT0_OFFSET (Address), "Address Range Base", 0}, > - {ACPI_DMT_UINT64, ACPI_NFIT0_OFFSET (Length), "Address Range Length", 0}, > - {ACPI_DMT_UINT64, ACPI_NFIT0_OFFSET (MemoryMapping), "Memory Map Attribute", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 1: Memory Device to System Address Range Map Structure */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit1[] = > -{ > - {ACPI_DMT_UINT32, ACPI_NFIT1_OFFSET (DeviceHandle), "Device Handle", 0}, > - {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (PhysicalId), "Physical Id", 0}, > - {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (RegionId), "Region Id", 0}, > - {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (RangeIndex), "Range Index", 0}, > - {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (RegionIndex), "Control Region Index", 0}, > - {ACPI_DMT_UINT64, ACPI_NFIT1_OFFSET (RegionSize), "Region Size", 0}, > - {ACPI_DMT_UINT64, ACPI_NFIT1_OFFSET (RegionOffset), "Region Offset", 0}, > - {ACPI_DMT_UINT64, ACPI_NFIT1_OFFSET (Address), "Address Region Base", 0}, > - {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (InterleaveIndex), "Interleave Index", 0}, > - {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (InterleaveWays), "Interleave Ways", 0}, > - {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (Flags), "Flags", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Save to device failed", 0}, > - {ACPI_DMT_FLAG1, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Restore from device failed", 0}, > - {ACPI_DMT_FLAG2, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Platform flush failed", 0}, > - {ACPI_DMT_FLAG3, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Device not armed", 0}, > - {ACPI_DMT_FLAG4, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Health events observed", 0}, > - {ACPI_DMT_FLAG5, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Health events enabled", 0}, > - {ACPI_DMT_FLAG6, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Mapping failed", 0}, > - {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (Reserved), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 2: Interleave Structure */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit2[] = > -{ > - {ACPI_DMT_UINT16, ACPI_NFIT2_OFFSET (InterleaveIndex), "Interleave Index", 0}, > - {ACPI_DMT_UINT16, ACPI_NFIT2_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_NFIT2_OFFSET (LineCount), "Line Count", 0}, > - {ACPI_DMT_UINT32, ACPI_NFIT2_OFFSET (LineSize), "Line Size", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit2a[] = > -{ > - {ACPI_DMT_UINT32, 0, "Line Offset", DT_OPTIONAL}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 3: SMBIOS Management Information Structure */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit3[] = > -{ > - {ACPI_DMT_UINT32, ACPI_NFIT3_OFFSET (Reserved), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit3a[] = > -{ > - {ACPI_DMT_RAW_BUFFER, 0, "SMBIOS Table Entries", DT_OPTIONAL}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 4: NVDIMM Control Region Structure */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit4[] = > -{ > - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (RegionIndex), "Region Index", 0}, > - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (VendorId), "Vendor Id", 0}, > - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (DeviceId), "Device Id", 0}, > - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (RevisionId), "Revision Id", 0}, > - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (SubsystemVendorId), "Subsystem Vendor Id", 0}, > - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (SubsystemDeviceId), "Subsystem Device Id", 0}, > - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (SubsystemRevisionId), "Subsystem Revision Id", 0}, > - {ACPI_DMT_UINT8, ACPI_NFIT4_OFFSET (ValidFields), "Valid Fields", 0}, > - {ACPI_DMT_UINT8, ACPI_NFIT4_OFFSET (ManufacturingLocation), "Manufacturing Location", 0}, > - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (ManufacturingDate), "Manufacturing Date", 0}, > - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Reserved[0]), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_NFIT4_OFFSET (SerialNumber), "Serial Number", 0}, > - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Code), "Code", 0}, > - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Windows), "Window Count", 0}, > - {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (WindowSize), "Window Size", 0}, > - {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (CommandOffset), "Command Offset", 0}, > - {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (CommandSize), "Command Size", 0}, > - {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (StatusOffset), "Status Offset", 0}, > - {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (StatusSize), "Status Size", 0}, > - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Flags), "Flags", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_NFIT4_FLAG_OFFSET (Flags,0), "Windows buffered", 0}, > - {ACPI_DMT_UINT48, ACPI_NFIT4_OFFSET (Reserved1[0]), "Reserved1", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 5: NVDIMM Block Data Window Region Structure */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit5[] = > -{ > - {ACPI_DMT_UINT16, ACPI_NFIT5_OFFSET (RegionIndex), "Region Index", 0}, > - {ACPI_DMT_UINT16, ACPI_NFIT5_OFFSET (Windows), "Window Count", 0}, > - {ACPI_DMT_UINT64, ACPI_NFIT5_OFFSET (Offset), "Offset", 0}, > - {ACPI_DMT_UINT64, ACPI_NFIT5_OFFSET (Size), "Size", 0}, > - {ACPI_DMT_UINT64, ACPI_NFIT5_OFFSET (Capacity), "Capacity", 0}, > - {ACPI_DMT_UINT64, ACPI_NFIT5_OFFSET (StartAddress), "Start Address", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 6: Flush Hint Address Structure */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit6[] = > -{ > - {ACPI_DMT_UINT32, ACPI_NFIT6_OFFSET (DeviceHandle), "Device Handle", 0}, > - {ACPI_DMT_UINT16, ACPI_NFIT6_OFFSET (HintCount), "Hint Count", 0}, > - {ACPI_DMT_UINT48, ACPI_NFIT6_OFFSET (Reserved[0]), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit6a[] = > -{ > - {ACPI_DMT_UINT64, 0, "Hint Address", DT_OPTIONAL}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit7[] = > -{ > - {ACPI_DMT_UINT8, ACPI_NFIT7_OFFSET (HighestCapability), "Highest Capability", 0}, > - {ACPI_DMT_UINT24, ACPI_NFIT7_OFFSET (Reserved[0]), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_NFIT7_OFFSET (Capabilities), "Capabilities (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_NFIT7_FLAG_OFFSET (Capabilities,0), "Cache Flush to NVDIMM", 0}, > - {ACPI_DMT_FLAG1, ACPI_NFIT7_FLAG_OFFSET (Capabilities,0), "Memory Flush to MVDIMM", 0}, > - {ACPI_DMT_FLAG2, ACPI_NFIT7_FLAG_OFFSET (Capabilities,0), "Memory Mirroring", 0}, > - {ACPI_DMT_UINT32, ACPI_NFIT7_OFFSET (Reserved2), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * PCCT - Platform Communications Channel Table (ACPI 5.0) > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoPcct[] = > -{ > - {ACPI_DMT_UINT32, ACPI_PCCT_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_PCCT_FLAG_OFFSET (Flags,0), "Platform", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT_OFFSET (Reserved), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* PCCT subtables */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoPcctHdr[] = > -{ > - {ACPI_DMT_PCCT, ACPI_PCCT0_OFFSET (Header.Type), "Subtable Type", 0}, > - {ACPI_DMT_UINT8, ACPI_PCCT0_OFFSET (Header.Length), "Length", DT_LENGTH}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 0: Generic Communications Subspace */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoPcct0[] = > -{ > - {ACPI_DMT_UINT48, ACPI_PCCT0_OFFSET (Reserved[0]), "Reserved", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT0_OFFSET (BaseAddress), "Base Address", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT0_OFFSET (Length), "Address Length", 0}, > - {ACPI_DMT_GAS, ACPI_PCCT0_OFFSET (DoorbellRegister), "Doorbell Register", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT0_OFFSET (PreserveMask), "Preserve Mask", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT0_OFFSET (WriteMask), "Write Mask", 0}, > - {ACPI_DMT_UINT32, ACPI_PCCT0_OFFSET (Latency), "Command Latency", 0}, > - {ACPI_DMT_UINT32, ACPI_PCCT0_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, > - {ACPI_DMT_UINT16, ACPI_PCCT0_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 1: HW-reduced Communications Subspace (ACPI 5.1) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoPcct1[] = > -{ > - {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (PlatformInterrupt), "Platform Interrupt", 0}, > - {ACPI_DMT_UINT8, ACPI_PCCT1_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_PCCT1_FLAG_OFFSET (Flags,0), "Polarity", 0}, > - {ACPI_DMT_FLAG1, ACPI_PCCT1_FLAG_OFFSET (Flags,0), "Mode", 0}, > - {ACPI_DMT_UINT8, ACPI_PCCT1_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (BaseAddress), "Base Address", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (Length), "Address Length", 0}, > - {ACPI_DMT_GAS, ACPI_PCCT1_OFFSET (DoorbellRegister), "Doorbell Register", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (PreserveMask), "Preserve Mask", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (WriteMask), "Write Mask", 0}, > - {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (Latency), "Command Latency", 0}, > - {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, > - {ACPI_DMT_UINT16, ACPI_PCCT1_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoPcct2[] = > -{ > - {ACPI_DMT_UINT32, ACPI_PCCT2_OFFSET (PlatformInterrupt), "Platform Interrupt", 0}, > - {ACPI_DMT_UINT8, ACPI_PCCT2_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_PCCT2_FLAG_OFFSET (Flags,0), "Polarity", 0}, > - {ACPI_DMT_FLAG1, ACPI_PCCT2_FLAG_OFFSET (Flags,0), "Mode", 0}, > - {ACPI_DMT_UINT8, ACPI_PCCT2_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (BaseAddress), "Base Address", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (Length), "Address Length", 0}, > - {ACPI_DMT_GAS, ACPI_PCCT2_OFFSET (DoorbellRegister), "Doorbell Register", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (PreserveMask), "Preserve Mask", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (WriteMask), "Write Mask", 0}, > - {ACPI_DMT_UINT32, ACPI_PCCT2_OFFSET (Latency), "Command Latency", 0}, > - {ACPI_DMT_UINT32, ACPI_PCCT2_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, > - {ACPI_DMT_UINT16, ACPI_PCCT2_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, > - {ACPI_DMT_GAS, ACPI_PCCT2_OFFSET (PlatformAckRegister), "Platform ACK Register", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (AckPreserveMask), "ACK Preserve Mask", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (AckWriteMask), "ACK Write Mask", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoPcct3[] = > -{ > - {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (PlatformInterrupt), "Platform Interrupt", 0}, > - {ACPI_DMT_UINT8, ACPI_PCCT3_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_PCCT3_FLAG_OFFSET (Flags,0), "Polarity", 0}, > - {ACPI_DMT_FLAG1, ACPI_PCCT3_FLAG_OFFSET (Flags,0), "Mode", 0}, > - {ACPI_DMT_UINT8, ACPI_PCCT3_OFFSET (Reserved1), "Reserved", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (BaseAddress), "Base Address", 0}, > - {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (Length), "Address Length", 0}, > - {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (DoorbellRegister), "Doorbell Register", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (PreserveMask), "Preserve Mask", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (WriteMask), "Write Mask", 0}, > - {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (Latency), "Command Latency", 0}, > - {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, > - {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, > - {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (PlatformAckRegister), "Platform ACK Register", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (AckPreserveMask), "ACK Preserve Mask", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (AckSetMask), "ACK Set Mask", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (Reserved2), "Reserved", 0}, > - {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (CmdCompleteRegister), "Command Complete Register", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (CmdCompleteMask), "Command Complete Check Mask", 0}, > - {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (CmdUpdateRegister), "Command Update Register", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (CmdUpdatePreserveMask), "Command Update Preserve Mask", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (CmdUpdateSetMask), "Command Update Set Mask", 0}, > - {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (ErrorStatusRegister), "Error Status Register", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (ErrorStatusMask), "Error Status Mask", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoPcct4[] = > -{ > - {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (PlatformInterrupt), "Platform Interrupt", 0}, > - {ACPI_DMT_UINT8, ACPI_PCCT4_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_PCCT4_FLAG_OFFSET (Flags,0), "Polarity", 0}, > - {ACPI_DMT_FLAG1, ACPI_PCCT4_FLAG_OFFSET (Flags,0), "Mode", 0}, > - {ACPI_DMT_UINT8, ACPI_PCCT4_OFFSET (Reserved1), "Reserved", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (BaseAddress), "Base Address", 0}, > - {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (Length), "Address Length", 0}, > - {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (DoorbellRegister), "Doorbell Register", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (PreserveMask), "Preserve Mask", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (WriteMask), "Write Mask", 0}, > - {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (Latency), "Command Latency", 0}, > - {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, > - {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, > - {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (PlatformAckRegister), "Platform ACK Register", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (AckPreserveMask), "ACK Preserve Mask", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (AckSetMask), "ACK Set Mask", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (Reserved2), "Reserved", 0}, > - {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (CmdCompleteRegister), "Command Complete Register", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (CmdCompleteMask), "Command Complete Check Mask", 0}, > - {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (CmdUpdateRegister), "Command Update Register", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (CmdUpdatePreserveMask), "Command Update Preserve Mask", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (CmdUpdateSetMask), "Command Update Set Mask", 0}, > - {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (ErrorStatusRegister), "Error Status Register", 0}, > - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (ErrorStatusMask), "Error Status Mask", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * PDTT - Platform Debug Trigger Table (ACPI 6.2) > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoPdtt[] = > -{ > - {ACPI_DMT_UINT8, ACPI_PDTT_OFFSET (TriggerCount), "Trigger Count", 0}, > - {ACPI_DMT_UINT24, ACPI_PDTT_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_PDTT_OFFSET (ArrayOffset), "Array Offset", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoPdtt0[] = > -{ > - {ACPI_DMT_UINT8, ACPI_PDTT0_OFFSET (SubchannelId), "Subchannel Id", 0}, > - {ACPI_DMT_UINT8, ACPI_PDTT0_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_PDTT0_FLAG_OFFSET (Flags,0), "Runtime Trigger", 0}, > - {ACPI_DMT_FLAG1, ACPI_PDTT0_FLAG_OFFSET (Flags,0), "Wait for Completion", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * PMTT - Platform Memory Topology Table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt[] = > -{ > - {ACPI_DMT_UINT32, ACPI_PMTT_OFFSET (Reserved), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* Common Subtable header (one per Subtable) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoPmttHdr[] = > -{ > - {ACPI_DMT_PMTT, ACPI_PMTTH_OFFSET (Type), "Subtable Type", 0}, > - {ACPI_DMT_UINT8, ACPI_PMTTH_OFFSET (Reserved1), "Reserved", 0}, > - {ACPI_DMT_UINT16, ACPI_PMTTH_OFFSET (Length), "Length", DT_LENGTH}, > - {ACPI_DMT_UINT16, ACPI_PMTTH_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_PMTTH_FLAG_OFFSET (Flags,0), "Top-level Device", 0}, > - {ACPI_DMT_FLAG1, ACPI_PMTTH_FLAG_OFFSET (Flags,0), "Physical Element", 0}, > - {ACPI_DMT_FLAGS2, ACPI_PMTTH_FLAG_OFFSET (Flags,0), "Memory Type", 0}, > - {ACPI_DMT_UINT16, ACPI_PMTTH_OFFSET (Reserved2), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* PMTT Subtables */ > - > -/* 0: Socket */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt0[] = > -{ > - {ACPI_DMT_UINT16, ACPI_PMTT0_OFFSET (SocketId), "Socket ID", 0}, > - {ACPI_DMT_UINT16, ACPI_PMTT0_OFFSET (Reserved), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 1: Memory Controller */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt1[] = > -{ > - {ACPI_DMT_UINT32, ACPI_PMTT1_OFFSET (ReadLatency), "Read Latency", 0}, > - {ACPI_DMT_UINT32, ACPI_PMTT1_OFFSET (WriteLatency), "Write Latency", 0}, > - {ACPI_DMT_UINT32, ACPI_PMTT1_OFFSET (ReadBandwidth), "Read Bandwidth", 0}, > - {ACPI_DMT_UINT32, ACPI_PMTT1_OFFSET (WriteBandwidth), "Write Bandwidth", 0}, > - {ACPI_DMT_UINT16, ACPI_PMTT1_OFFSET (AccessWidth), "Access Width", 0}, > - {ACPI_DMT_UINT16, ACPI_PMTT1_OFFSET (Alignment), "Alignment", 0}, > - {ACPI_DMT_UINT16, ACPI_PMTT1_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT16, ACPI_PMTT1_OFFSET (DomainCount), "Domain Count", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 1a: Proximity Domain */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt1a[] = > -{ > - {ACPI_DMT_UINT32, ACPI_PMTT1A_OFFSET (ProximityDomain), "Proximity Domain", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 2: Physical Component */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt2[] = > -{ > - {ACPI_DMT_UINT16, ACPI_PMTT2_OFFSET (ComponentId), "Component ID", 0}, > - {ACPI_DMT_UINT16, ACPI_PMTT2_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_PMTT2_OFFSET (MemorySize), "Memory Size", 0}, > - {ACPI_DMT_UINT32, ACPI_PMTT2_OFFSET (BiosHandle), "Bios Handle", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * PPTT - Processor Properties Topology Table (ACPI 6.2) > - * > - ******************************************************************************/ > - > -/* Main table consists of only the standard ACPI header - subtables follow */ > - > -/* Common Subtable header (one per Subtable) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoPpttHdr[] = > -{ > - {ACPI_DMT_PPTT, ACPI_PPTTH_OFFSET (Type), "Subtable Type", 0}, > - {ACPI_DMT_UINT8, ACPI_PPTTH_OFFSET (Length), "Length", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 0: Processor hierarchy node */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0[] = > -{ > - {ACPI_DMT_UINT16, ACPI_PPTT0_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (Flags), "Flags (decoded below)", 0}, > - {ACPI_DMT_FLAG0, ACPI_PPTT0_FLAG_OFFSET (Flags,0), "Physical package", 0}, > - {ACPI_DMT_FLAG1, ACPI_PPTT0_FLAG_OFFSET (Flags,0), "ACPI Processor ID valid", 0}, > - {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (Parent), "Parent", 0}, > - {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (AcpiProcessorId), "ACPI Processor ID", 0}, > - {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (NumberOfPrivResources), "Private Resource Number", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0a[] = > -{ > - {ACPI_DMT_UINT32, 0, "Private Resource", DT_OPTIONAL}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 1: Cache type */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoPptt1[] = > -{ > - {ACPI_DMT_UINT16, ACPI_PPTT1_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (Flags), "Flags (decoded below)", 0}, > - {ACPI_DMT_FLAG0, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Size valid", 0}, > - {ACPI_DMT_FLAG1, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Number of Sets valid", 0}, > - {ACPI_DMT_FLAG2, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Associativity valid", 0}, > - {ACPI_DMT_FLAG3, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Allocation Type valid", 0}, > - {ACPI_DMT_FLAG4, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Cache Type valid", 0}, > - {ACPI_DMT_FLAG5, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Write Policy valid", 0}, > - {ACPI_DMT_FLAG6, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Line Size valid", 0}, > - {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (NextLevelOfCache), "Next Level of Cache", 0}, > - {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (Size), "Size", 0}, > - {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (NumberOfSets), "Number of Sets", 0}, > - {ACPI_DMT_UINT8, ACPI_PPTT1_OFFSET (Associativity), "Associativity", 0}, > - {ACPI_DMT_UINT8, ACPI_PPTT1_OFFSET (Attributes), "Attributes", 0}, > - {ACPI_DMT_FLAGS0, ACPI_PPTT1_OFFSET (Attributes), "Allocation Type", 0}, > - {ACPI_DMT_FLAGS2, ACPI_PPTT1_OFFSET (Attributes), "Cache Type", 0}, > - {ACPI_DMT_FLAG4, ACPI_PPTT1_OFFSET (Attributes), "Write Policy", 0}, > - {ACPI_DMT_UINT16, ACPI_PPTT1_OFFSET (LineSize), "Line Size", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 2: ID */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoPptt2[] = > -{ > - {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_PPTT2_OFFSET (VendorId), "VENDOR_ID", 0}, > - {ACPI_DMT_UINT64, ACPI_PPTT2_OFFSET (Level1Id), "LEVEL_1_ID", 0}, > - {ACPI_DMT_UINT64, ACPI_PPTT2_OFFSET (Level2Id), "LEVEL_2_ID", 0}, > - {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (MajorRev), "MAJOR_REV", 0}, > - {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (MinorRev), "MINOR_REV", 0}, > - {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (SpinRev), "SPIN_REV", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * RASF - RAS Feature table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoRasf[] = > -{ > - {ACPI_DMT_BUF12, ACPI_RASF_OFFSET (ChannelId[0]), "Channel ID", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * S3PT - S3 Performance Table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt[] = > -{ > - {ACPI_DMT_SIG, ACPI_S3PT_OFFSET (Signature[0]), "Signature", 0}, > - {ACPI_DMT_UINT32, ACPI_S3PT_OFFSET (Length), "Length", DT_LENGTH}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* S3PT subtable header */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoS3ptHdr[] = > -{ > - {ACPI_DMT_UINT16, ACPI_S3PTH_OFFSET (Type), "Type", 0}, > - {ACPI_DMT_UINT8, ACPI_S3PTH_OFFSET (Length), "Length", DT_LENGTH}, > - {ACPI_DMT_UINT8, ACPI_S3PTH_OFFSET (Revision), "Revision", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 0: Basic S3 Resume Performance Record */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt0[] = > -{ > - {ACPI_DMT_UINT32, ACPI_S3PT0_OFFSET (ResumeCount), "Resume Count", 0}, > - {ACPI_DMT_UINT64, ACPI_S3PT0_OFFSET (FullResume), "Full Resume", 0}, > - {ACPI_DMT_UINT64, ACPI_S3PT0_OFFSET (AverageResume), "Average Resume", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 1: Basic S3 Suspend Performance Record */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt1[] = > -{ > - {ACPI_DMT_UINT64, ACPI_S3PT1_OFFSET (SuspendStart), "Suspend Start", 0}, > - {ACPI_DMT_UINT64, ACPI_S3PT1_OFFSET (SuspendEnd), "Suspend End", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * SBST - Smart Battery Specification Table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoSbst[] = > -{ > - {ACPI_DMT_UINT32, ACPI_SBST_OFFSET (WarningLevel), "Warning Level", 0}, > - {ACPI_DMT_UINT32, ACPI_SBST_OFFSET (LowLevel), "Low Level", 0}, > - {ACPI_DMT_UINT32, ACPI_SBST_OFFSET (CriticalLevel), "Critical Level", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * SDEI - Software Delegated Execption Interface Descriptor Table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoSdei[] = > -{ > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * SDEV - Secure Devices Table (ACPI 6.2) > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoSdev[] = > -{ > - ACPI_DMT_TERMINATOR > -}; > - > -/* Common Subtable header (one per Subtable) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoSdevHdr[] = > -{ > - {ACPI_DMT_SDEV, ACPI_SDEVH_OFFSET (Type), "Subtable Type", 0}, > - {ACPI_DMT_UINT8, ACPI_SDEVH_OFFSET (Flags), "Flags (decoded below)", 0}, > - {ACPI_DMT_FLAG0, ACPI_SDEVH_FLAG_OFFSET (Flags,0), "Allow handoff to unsecure OS", 0}, > - {ACPI_DMT_UINT16, ACPI_SDEVH_OFFSET (Length), "Length", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* SDEV Subtables */ > - > -/* 0: Namespace Device Based Secure Device Structure */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoSdev0[] = > -{ > - {ACPI_DMT_UINT16, ACPI_SDEV0_OFFSET (DeviceIdOffset), "Device ID Offset", 0}, > - {ACPI_DMT_UINT16, ACPI_SDEV0_OFFSET (DeviceIdLength), "Device ID Length", 0}, > - {ACPI_DMT_UINT16, ACPI_SDEV0_OFFSET (VendorDataOffset), "Vendor Data Offset", 0}, > - {ACPI_DMT_UINT16, ACPI_SDEV0_OFFSET (VendorDataLength), "Vendor Data Length", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoSdev0a[] = > -{ > - {ACPI_DMT_STRING, 0, "Namepath", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 1: PCIe Endpoint Device Based Device Structure */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoSdev1[] = > -{ > - {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (Segment), "Segment", 0}, > - {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (StartBus), "Start Bus", 0}, > - {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (PathOffset), "Path Offset", 0}, > - {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (PathLength), "Path Length", 0}, > - {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (VendorDataOffset), "Vendor Data Offset", 0}, > - {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (VendorDataLength), "Vendor Data Length", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoSdev1a[] = > -{ > - {ACPI_DMT_UINT8, ACPI_SDEV1A_OFFSET (Device), "Device", 0}, > - {ACPI_DMT_UINT8, ACPI_SDEV1A_OFFSET (Function), "Function", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoSdev1b[] = > -{ > - {ACPI_DMT_RAW_BUFFER, 0, "Vendor Data", 0}, /*, DT_OPTIONAL}, */ > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * SLIC - Software Licensing Description Table. This table contains the standard > - * ACPI header followed by proprietary data structures > - * > - ******************************************************************************/ > - > -/* Single subtable, a proprietary format, so treat it as a buffer */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoSlic[] = > -{ > - {ACPI_DMT_RAW_BUFFER, 0, "Software Licensing Structure", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * SLIT - System Locality Information Table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoSlit[] = > -{ > - {ACPI_DMT_UINT64, ACPI_SLIT_OFFSET (LocalityCount), "Localities", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * SPCR - Serial Port Console Redirection table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoSpcr[] = > -{ > - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (InterfaceType), "Interface Type", 0}, > - {ACPI_DMT_UINT24, ACPI_SPCR_OFFSET (Reserved[0]), "Reserved", 0}, > - {ACPI_DMT_GAS, ACPI_SPCR_OFFSET (SerialPort), "Serial Port Register", 0}, > - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (InterruptType), "Interrupt Type", 0}, > - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PcInterrupt), "PCAT-compatible IRQ", 0}, > - {ACPI_DMT_UINT32, ACPI_SPCR_OFFSET (Interrupt), "Interrupt", 0}, > - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (BaudRate), "Baud Rate", 0}, > - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (Parity), "Parity", 0}, > - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (StopBits), "Stop Bits", 0}, > - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (FlowControl), "Flow Control", 0}, > - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (TerminalType), "Terminal Type", 0}, > - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (Reserved2), "Reserved", 0}, > - {ACPI_DMT_UINT16, ACPI_SPCR_OFFSET (PciDeviceId), "PCI Device ID", 0}, > - {ACPI_DMT_UINT16, ACPI_SPCR_OFFSET (PciVendorId), "PCI Vendor ID", 0}, > - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PciBus), "PCI Bus", 0}, > - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PciDevice), "PCI Device", 0}, > - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PciFunction), "PCI Function", 0}, > - {ACPI_DMT_UINT32, ACPI_SPCR_OFFSET (PciFlags), "PCI Flags", 0}, > - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PciSegment), "PCI Segment", 0}, > - {ACPI_DMT_UINT32, ACPI_SPCR_OFFSET (Reserved2), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * SPMI - Server Platform Management Interface table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoSpmi[] = > -{ > - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (InterfaceType), "Interface Type", 0}, > - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (Reserved), "Reserved", DT_NON_ZERO}, /* Value must be 1 */ > - {ACPI_DMT_UINT16, ACPI_SPMI_OFFSET (SpecRevision), "IPMI Spec Version", 0}, > - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (InterruptType), "Interrupt Type", 0}, > - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (GpeNumber), "GPE Number", 0}, > - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (Reserved1), "Reserved", 0}, > - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciDeviceFlag), "PCI Device Flag", 0}, > - {ACPI_DMT_UINT32, ACPI_SPMI_OFFSET (Interrupt), "Interrupt", 0}, > - {ACPI_DMT_GAS, ACPI_SPMI_OFFSET (IpmiRegister), "IPMI Register", 0}, > - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciSegment), "PCI Segment", 0}, > - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciBus), "PCI Bus", 0}, > - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciDevice), "PCI Device", 0}, > - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciFunction), "PCI Function", 0}, > - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (Reserved2), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * SRAT - System Resource Affinity Table and Subtables > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoSrat[] = > -{ > - {ACPI_DMT_UINT32, ACPI_SRAT_OFFSET (TableRevision), "Table Revision", 0}, > - {ACPI_DMT_UINT64, ACPI_SRAT_OFFSET (Reserved), "Reserved", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* Common Subtable header (one per Subtable) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoSratHdr[] = > -{ > - {ACPI_DMT_SRAT, ACPI_SRATH_OFFSET (Type), "Subtable Type", 0}, > - {ACPI_DMT_UINT8, ACPI_SRATH_OFFSET (Length), "Length", DT_LENGTH}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* SRAT Subtables */ > - > -/* 0: Processor Local APIC/SAPIC Affinity */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoSrat0[] = > -{ > - {ACPI_DMT_UINT8, ACPI_SRAT0_OFFSET (ProximityDomainLo), "Proximity Domain Low(8)", 0}, > - {ACPI_DMT_UINT8, ACPI_SRAT0_OFFSET (ApicId), "Apic ID", 0}, > - {ACPI_DMT_UINT32, ACPI_SRAT0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_SRAT0_FLAG_OFFSET (Flags,0), "Enabled", 0}, > - {ACPI_DMT_UINT8, ACPI_SRAT0_OFFSET (LocalSapicEid), "Local Sapic EID", 0}, > - {ACPI_DMT_UINT24, ACPI_SRAT0_OFFSET (ProximityDomainHi[0]), "Proximity Domain High(24)", 0}, > - {ACPI_DMT_UINT32, ACPI_SRAT0_OFFSET (ClockDomain), "Clock Domain", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 1: Memory Affinity */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoSrat1[] = > -{ > - {ACPI_DMT_UINT32, ACPI_SRAT1_OFFSET (ProximityDomain), "Proximity Domain", 0}, > - {ACPI_DMT_UINT16, ACPI_SRAT1_OFFSET (Reserved), "Reserved1", 0}, > - {ACPI_DMT_UINT64, ACPI_SRAT1_OFFSET (BaseAddress), "Base Address", 0}, > - {ACPI_DMT_UINT64, ACPI_SRAT1_OFFSET (Length), "Address Length", 0}, > - {ACPI_DMT_UINT32, ACPI_SRAT1_OFFSET (Reserved1), "Reserved2", 0}, > - {ACPI_DMT_UINT32, ACPI_SRAT1_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_SRAT1_FLAG_OFFSET (Flags,0), "Enabled", 0}, > - {ACPI_DMT_FLAG1, ACPI_SRAT1_FLAG_OFFSET (Flags,0), "Hot Pluggable", 0}, > - {ACPI_DMT_FLAG2, ACPI_SRAT1_FLAG_OFFSET (Flags,0), "Non-Volatile", 0}, > - {ACPI_DMT_UINT64, ACPI_SRAT1_OFFSET (Reserved2), "Reserved3", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoSrat2[] = > -{ > - {ACPI_DMT_UINT16, ACPI_SRAT2_OFFSET (Reserved), "Reserved1", 0}, > - {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (ProximityDomain), "Proximity Domain", 0}, > - {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (ApicId), "Apic ID", 0}, > - {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_SRAT2_FLAG_OFFSET (Flags,0), "Enabled", 0}, > - {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (ClockDomain), "Clock Domain", 0}, > - {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (Reserved2), "Reserved2", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 3: GICC Affinity (ACPI 5.1) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoSrat3[] = > -{ > - {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (ProximityDomain), "Proximity Domain", 0}, > - {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (AcpiProcessorUid), "Acpi Processor UID", 0}, > - {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_SRAT3_FLAG_OFFSET (Flags,0), "Enabled", 0}, > - {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (ClockDomain), "Clock Domain", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 4: GCC ITS Affinity (ACPI 6.2) */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoSrat4[] = > -{ > - {ACPI_DMT_UINT32, ACPI_SRAT4_OFFSET (ProximityDomain), "Proximity Domain", 0}, > - {ACPI_DMT_UINT16, ACPI_SRAT4_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_SRAT4_OFFSET (ItsId), "ITS ID", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * STAO - Status Override Table (_STA override) - ACPI 6.0 > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoStao[] = > -{ > - {ACPI_DMT_UINT8, ACPI_STAO_OFFSET (IgnoreUart), "Ignore UART", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoStaoStr[] = > -{ > - {ACPI_DMT_STRING, 0, "Namepath", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * TCPA - Trusted Computing Platform Alliance table (Client) > - * > - * NOTE: There are two versions of the table with the same signature -- > - * the client version and the server version. The common PlatformClass > - * field is used to differentiate the two types of tables. > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaHdr[] = > -{ > - {ACPI_DMT_UINT16, ACPI_TCPA_OFFSET (PlatformClass), "Platform Class", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaClient[] = > -{ > - {ACPI_DMT_UINT32, ACPI_TCPA_CLIENT_OFFSET (MinimumLogLength), "Min Event Log Length", 0}, > - {ACPI_DMT_UINT64, ACPI_TCPA_CLIENT_OFFSET (LogAddress), "Event Log Address", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaServer[] = > -{ > - {ACPI_DMT_UINT16, ACPI_TCPA_SERVER_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT64, ACPI_TCPA_SERVER_OFFSET (MinimumLogLength), "Min Event Log Length", 0}, > - {ACPI_DMT_UINT64, ACPI_TCPA_SERVER_OFFSET (LogAddress), "Event Log Address", 0}, > - {ACPI_DMT_UINT16, ACPI_TCPA_SERVER_OFFSET (SpecRevision), "Specification Revision", 0}, > - {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Device Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Pci Device", 0}, > - {ACPI_DMT_FLAG1, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Bus is Pnp", 0}, > - {ACPI_DMT_FLAG2, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Address Valid", 0}, > - {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Interrupt Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Mode", 0}, > - {ACPI_DMT_FLAG1, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Polarity", 0}, > - {ACPI_DMT_FLAG2, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "GPE SCI Triggered", 0}, > - {ACPI_DMT_FLAG3, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Global System Interrupt", 0}, > - {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (GpeNumber), "Gpe Number", 0}, > - {ACPI_DMT_UINT24, ACPI_TCPA_SERVER_OFFSET (Reserved2[0]), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_TCPA_SERVER_OFFSET (GlobalInterrupt), "Global Interrupt", 0}, > - {ACPI_DMT_GAS, ACPI_TCPA_SERVER_OFFSET (Address), "Address", 0}, > - {ACPI_DMT_UINT32, ACPI_TCPA_SERVER_OFFSET (Reserved3), "Reserved", 0}, > - {ACPI_DMT_GAS, ACPI_TCPA_SERVER_OFFSET (ConfigAddress), "Configuration Address", 0}, > - {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Group), "Pci Group", 0}, > - {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Bus), "Pci Bus", 0}, > - {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Device), "Pci Device", 0}, > - {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Function), "Pci Function", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoTpm2[] = > -{ > - {ACPI_DMT_UINT16, ACPI_TPM2_OFFSET (PlatformClass), "Platform Class", 0}, > - {ACPI_DMT_UINT16, ACPI_TPM2_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT64, ACPI_TPM2_OFFSET (ControlAddress), "Control Address", 0}, > - {ACPI_DMT_TPM2, ACPI_TPM2_OFFSET (StartMethod), "Start Method", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* Optional trailer. LogLength and LogAddress are additionally optional */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoTpm2a[] = > -{ > - {ACPI_DMT_BUF12, ACPI_TPM2A_OFFSET (MethodParameters), "Method Parameters", DT_OPTIONAL}, > - {ACPI_DMT_UINT32, ACPI_TPM2A_OFFSET (MinimumLogLength), "Minimum Log Length", DT_OPTIONAL}, > - {ACPI_DMT_UINT64, ACPI_TPM2A_OFFSET (LogAddress), "Log Address", DT_OPTIONAL}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* 11: Start Method for ARM SMC */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoTpm211[] = > -{ > - {ACPI_DMT_UINT32, ACPI_TPM211_OFFSET (GlobalInterrupt), "Global Interrupt", 0}, > - {ACPI_DMT_UINT8, ACPI_TPM211_OFFSET (InterruptFlags), "Interrupt Flags", 0}, > - {ACPI_DMT_UINT8, ACPI_TPM211_OFFSET (OperationFlags), "Operation Flags", 0}, > - {ACPI_DMT_UINT16, ACPI_TPM211_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_TPM211_OFFSET (FunctionId), "Function ID", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * UEFI - UEFI Boot optimization Table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoUefi[] = > -{ > - {ACPI_DMT_UUID, ACPI_UEFI_OFFSET (Identifier[0]), "UUID Identifier", 0}, > - {ACPI_DMT_UINT16, ACPI_UEFI_OFFSET (DataOffset), "Data Offset", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * VRTC - Virtual Real Time Clock Table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoVrtc[] = > -{ > - ACPI_DMT_TERMINATOR > -}; > - > -/* VRTC Subtables - VRTC Entry */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoVrtc0[] = > -{ > - {ACPI_DMT_GAS, ACPI_VRTC0_OFFSET (PhysicalAddress), "PhysicalAddress", 0}, > - {ACPI_DMT_UINT32, ACPI_VRTC0_OFFSET (Irq), "IRQ", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * WAET - Windows ACPI Emulated devices Table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoWaet[] = > -{ > - {ACPI_DMT_UINT32, ACPI_WAET_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_WAET_OFFSET (Flags), "RTC needs no INT ack", 0}, > - {ACPI_DMT_FLAG1, ACPI_WAET_OFFSET (Flags), "PM timer, one read only", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * WDAT - Watchdog Action Table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoWdat[] = > -{ > - {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (HeaderLength), "Header Length", DT_LENGTH}, > - {ACPI_DMT_UINT16, ACPI_WDAT_OFFSET (PciSegment), "PCI Segment", 0}, > - {ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (PciBus), "PCI Bus", 0}, > - {ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (PciDevice), "PCI Device", 0}, > - {ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (PciFunction), "PCI Function", 0}, > - {ACPI_DMT_UINT24, ACPI_WDAT_OFFSET (Reserved[0]), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (TimerPeriod), "Timer Period", 0}, > - {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (MaxCount), "Max Count", 0}, > - {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (MinCount), "Min Count", 0}, > - {ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_WDAT_OFFSET (Flags), "Enabled", 0}, > - {ACPI_DMT_FLAG7, ACPI_WDAT_OFFSET (Flags), "Stopped When Asleep", 0}, > - {ACPI_DMT_UINT24, ACPI_WDAT_OFFSET (Reserved2[0]), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (Entries), "Watchdog Entry Count", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -/* WDAT Subtables - Watchdog Instruction Entries */ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoWdat0[] = > -{ > - {ACPI_DMT_UINT8, ACPI_WDAT0_OFFSET (Action), "Watchdog Action", 0}, > - {ACPI_DMT_UINT8, ACPI_WDAT0_OFFSET (Instruction), "Instruction", 0}, > - {ACPI_DMT_UINT16, ACPI_WDAT0_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_GAS, ACPI_WDAT0_OFFSET (RegisterRegion), "Register Region", 0}, > - {ACPI_DMT_UINT32, ACPI_WDAT0_OFFSET (Value), "Value", 0}, > - {ACPI_DMT_UINT32, ACPI_WDAT0_OFFSET (Mask), "Register Mask", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * WDDT - Watchdog Description Table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoWddt[] = > -{ > - {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (SpecVersion), "Specification Version", 0}, > - {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (TableVersion), "Table Version", 0}, > - {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (PciVendorId), "PCI Vendor ID", 0}, > - {ACPI_DMT_GAS, ACPI_WDDT_OFFSET (Address), "Timer Register", 0}, > - {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (MaxCount), "Max Count", 0}, > - {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (MinCount), "Min Count", 0}, > - {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (Period), "Period", 0}, > - {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (Status), "Status (decoded below)", 0}, > - > - /* Status Flags byte 0 */ > - > - {ACPI_DMT_FLAG0, ACPI_WDDT_FLAG_OFFSET (Status,0), "Available", 0}, > - {ACPI_DMT_FLAG1, ACPI_WDDT_FLAG_OFFSET (Status,0), "Active", 0}, > - {ACPI_DMT_FLAG2, ACPI_WDDT_FLAG_OFFSET (Status,0), "OS Owns", 0}, > - > - /* Status Flags byte 1 */ > - > - {ACPI_DMT_FLAG3, ACPI_WDDT_FLAG_OFFSET (Status,1), "User Reset", 0}, > - {ACPI_DMT_FLAG4, ACPI_WDDT_FLAG_OFFSET (Status,1), "Timeout Reset", 0}, > - {ACPI_DMT_FLAG5, ACPI_WDDT_FLAG_OFFSET (Status,1), "Power Fail Reset", 0}, > - {ACPI_DMT_FLAG6, ACPI_WDDT_FLAG_OFFSET (Status,1), "Unknown Reset", 0}, > - > - {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (Capability), "Capability (decoded below)", 0}, > - > - /* Capability Flags byte 0 */ > - > - {ACPI_DMT_FLAG0, ACPI_WDDT_FLAG_OFFSET (Capability,0), "Auto Reset", 0}, > - {ACPI_DMT_FLAG1, ACPI_WDDT_FLAG_OFFSET (Capability,0), "Timeout Alert", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * WDRT - Watchdog Resource Table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoWdrt[] = > -{ > - {ACPI_DMT_GAS, ACPI_WDRT_OFFSET (ControlRegister), "Control Register", 0}, > - {ACPI_DMT_GAS, ACPI_WDRT_OFFSET (CountRegister), "Count Register", 0}, > - {ACPI_DMT_UINT16, ACPI_WDRT_OFFSET (PciDeviceId), "PCI Device ID", 0}, > - {ACPI_DMT_UINT16, ACPI_WDRT_OFFSET (PciVendorId), "PCI Vendor ID", 0}, > - {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciBus), "PCI Bus", 0}, > - {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciDevice), "PCI Device", 0}, > - {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciFunction), "PCI Function", 0}, > - {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciSegment), "PCI Segment", 0}, > - {ACPI_DMT_UINT16, ACPI_WDRT_OFFSET (MaxCount), "Max Count", 0}, > - {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (Units), "Counter Units", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * WPBT - Windows Platform Environment Table (ACPI 6.0) > - * Version 1 > - * > - * Conforms to "Windows Platform Binary Table (WPBT)" 29 November 2011 > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt[] = > -{ > - {ACPI_DMT_UINT32, ACPI_WPBT_OFFSET (HandoffSize), "Handoff Size", 0}, > - {ACPI_DMT_UINT64, ACPI_WPBT_OFFSET (HandoffAddress), "Handoff Address", 0}, > - {ACPI_DMT_UINT8, ACPI_WPBT_OFFSET (Layout), "Layout", 0}, > - {ACPI_DMT_UINT8, ACPI_WPBT_OFFSET (Type), "Type", 0}, > - {ACPI_DMT_UINT16, ACPI_WPBT_OFFSET (ArgumentsLength), "Arguments Length", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt0[] = > -{ > - {ACPI_DMT_UNICODE, sizeof (ACPI_TABLE_WPBT), "Command-line Arguments", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * WSMT - Windows SMM Security Migrations Table > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoWsmt[] = > -{ > - {ACPI_DMT_UINT32, ACPI_WSMT_OFFSET (ProtectionFlags), "Protection Flags", 0}, > - {ACPI_DMT_FLAG0, ACPI_WSMT_FLAG_OFFSET (ProtectionFlags,0), "FIXED_COMM_BUFFERS", 0}, > - {ACPI_DMT_FLAG1, ACPI_WSMT_FLAG_OFFSET (ProtectionFlags,0), "COMM_BUFFER_NESTED_PTR_PROTECTION", 0}, > - {ACPI_DMT_FLAG2, ACPI_WSMT_FLAG_OFFSET (ProtectionFlags,0), "SYSTEM_RESOURCE_PROTECTION", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/******************************************************************************* > - * > - * XENV - Xen Environment table (ACPI 6.0) > - * > - ******************************************************************************/ > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoXenv[] = > -{ > - {ACPI_DMT_UINT64, ACPI_XENV_OFFSET (GrantTableAddress), "Grant Table Address", 0}, > - {ACPI_DMT_UINT64, ACPI_XENV_OFFSET (GrantTableSize), "Grant Table Size", 0}, > - {ACPI_DMT_UINT32, ACPI_XENV_OFFSET (EventInterrupt), "Event Interrupt", 0}, > - {ACPI_DMT_UINT8, ACPI_XENV_OFFSET (EventFlags), "Event Flags", 0}, > - ACPI_DMT_TERMINATOR > -}; > - > - > -/*! [Begin] no source code translation */ > - > -/* > - * Generic types (used in UEFI and custom tables) > - * > - * Examples: > - * > - * Buffer : cc 04 ff bb > - * UINT8 : 11 > - * UINT16 : 1122 > - * UINT24 : 112233 > - * UINT32 : 11223344 > - * UINT56 : 11223344556677 > - * UINT64 : 1122334455667788 > - * > - * String : "This is string" > - * Unicode : "This string encoded to Unicode" > - * > - * GUID : 11223344-5566-7788-99aa-bbccddeeff00 > - * DevicePath : "\PciRoot(0)\Pci(0x1f,1)\Usb(0,0)" > - */ > - > -#define ACPI_DM_GENERIC_ENTRY(FieldType, FieldName) \ > - {{FieldType, 0, FieldName, 0}, ACPI_DMT_TERMINATOR} > - > -ACPI_DMTABLE_INFO AcpiDmTableInfoGeneric[][2] = > -{ > - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT8, "UINT8"), > - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT16, "UINT16"), > - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT24, "UINT24"), > - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT32, "UINT32"), > - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT40, "UINT40"), > - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT48, "UINT48"), > - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT56, "UINT56"), > - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT64, "UINT64"), > - 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_UUID, "GUID"), > - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_STRING, "DevicePath"), > - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_LABEL, "Label"), > - {ACPI_DMT_TERMINATOR} > -}; > -/*! [End] no source code translation !*/ > diff --git a/src/acpica/source/common/dmtbinfo1.c b/src/acpica/source/common/dmtbinfo1.c > new file mode 100644 > index 00000000..a7a3d484 > --- /dev/null > +++ b/src/acpica/source/common/dmtbinfo1.c > @@ -0,0 +1,1200 @@ > +/****************************************************************************** > + * > + * Module Name: dmtbinfo1 - Table info for non-AML tables > + * > + *****************************************************************************/ > + > +/****************************************************************************** > + * > + * 1. Copyright Notice > + * > + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. > + * All rights reserved. > + * > + * 2. License > + * > + * 2.1. This is your license from Intel Corp. under its intellectual property > + * rights. You may have additional license terms from the party that provided > + * you this software, covering your right to use that party's intellectual > + * property rights. > + * > + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a > + * copy of the source code appearing in this file ("Covered Code") an > + * irrevocable, perpetual, worldwide license under Intel's copyrights in the > + * base code distributed originally by Intel ("Original Intel Code") to copy, > + * make derivatives, distribute, use and display any portion of the Covered > + * Code in any form, with the right to sublicense such rights; and > + * > + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent > + * license (with the right to sublicense), under only those claims of Intel > + * patents that are infringed by the Original Intel Code, to make, use, sell, > + * offer to sell, and import the Covered Code and derivative works thereof > + * solely to the minimum extent necessary to exercise the above copyright > + * license, and in no event shall the patent license extend to any additions > + * to or modifications of the Original Intel Code. No other license or right > + * is granted directly or by implication, estoppel or otherwise; > + * > + * The above copyright and patent license is granted only if the following > + * conditions are met: > + * > + * 3. Conditions > + * > + * 3.1. Redistribution of Source with Rights to Further Distribute Source. > + * Redistribution of source code of any substantial portion of the Covered > + * Code or modification with rights to further distribute source must include > + * the above Copyright Notice, the above License, this list of Conditions, > + * and the following Disclaimer and Export Compliance provision. In addition, > + * Licensee must cause all Covered Code to which Licensee contributes to > + * contain a file documenting the changes Licensee made to create that Covered > + * Code and the date of any change. Licensee must include in that file the > + * documentation of any changes made by any predecessor Licensee. Licensee > + * must include a prominent statement that the modification is derived, > + * directly or indirectly, from Original Intel Code. > + * > + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. > + * Redistribution of source code of any substantial portion of the Covered > + * Code or modification without rights to further distribute source must > + * include the following Disclaimer and Export Compliance provision in the > + * documentation and/or other materials provided with distribution. In > + * addition, Licensee may not authorize further sublicense of source of any > + * portion of the Covered Code, and must include terms to the effect that the > + * license from Licensee to its licensee is limited to the intellectual > + * property embodied in the software Licensee provides to its licensee, and > + * not to intellectual property embodied in modifications its licensee may > + * make. > + * > + * 3.3. Redistribution of Executable. Redistribution in executable form of any > + * substantial portion of the Covered Code or modification must reproduce the > + * above Copyright Notice, and the following Disclaimer and Export Compliance > + * provision in the documentation and/or other materials provided with the > + * distribution. > + * > + * 3.4. Intel retains all right, title, and interest in and to the Original > + * Intel Code. > + * > + * 3.5. Neither the name Intel nor any other trademark owned or controlled by > + * Intel shall be used in advertising or otherwise to promote the sale, use or > + * other dealings in products derived from or relating to the Covered Code > + * without prior written authorization from Intel. > + * > + * 4. Disclaimer and Export Compliance > + * > + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED > + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE > + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, > + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY > + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY > + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A > + * PARTICULAR PURPOSE. > + * > + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES > + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR > + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, > + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY > + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL > + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS > + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY > + * LIMITED REMEDY. > + * > + * 4.3. Licensee shall not export, either directly or indirectly, any of this > + * software or system incorporating such software without first obtaining any > + * required license or other approval from the U. S. Department of Commerce or > + * any other agency or department of the United States Government. In the > + * event Licensee exports any such software from the United States or > + * re-exports any such software from a foreign destination, Licensee shall > + * ensure that the distribution and export/re-export of the software is in > + * compliance with all laws, regulations, orders, or other restrictions of the > + * U.S. Export Administration Regulations. Licensee agrees that neither it nor > + * any of its subsidiaries will export/re-export any technical data, process, > + * software, or service, directly or indirectly, to any country for which the > + * United States government or any agency thereof requires an export license, > + * other governmental approval, or letter of assurance, without first obtaining > + * such license, approval or letter. > + * > + ***************************************************************************** > + * > + * Alternatively, you may choose to be licensed under the terms of the > + * following license: > + * > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions > + * are met: > + * 1. Redistributions of source code must retain the above copyright > + * notice, this list of conditions, and the following disclaimer, > + * without modification. > + * 2. Redistributions in binary form must reproduce at minimum a disclaimer > + * substantially similar to the "NO WARRANTY" disclaimer below > + * ("Disclaimer") and any redistribution must be conditioned upon > + * including a substantially similar Disclaimer requirement for further > + * binary redistribution. > + * 3. Neither the names of the above-listed copyright holders nor the names > + * of any contributors may be used to endorse or promote products derived > + * from this software without specific prior written permission. > + * > + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS > + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT > + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR > + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT > + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, > + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT > + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, > + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY > + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE > + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > + * > + * Alternatively, you may choose to be licensed under the terms of the > + * GNU General Public License ("GPL") version 2 as published by the Free > + * Software Foundation. > + * > + *****************************************************************************/ > + > +#include "acpi.h" > +#include "accommon.h" > +#include "acdisasm.h" > +#include "actbinfo.h" > + > +/* This module used for application-level code only */ > + > +#define _COMPONENT ACPI_CA_DISASSEMBLER > + ACPI_MODULE_NAME ("dmtbinfo1") > + > +/* > + * How to add a new table: > + * > + * - Add the C table definition to the actbl1.h or actbl2.h header. > + * - Add ACPI_xxxx_OFFSET macro(s) for the table (and subtables) to list below. > + * - Define the table in this file (for the disassembler). If any > + * new data types are required (ACPI_DMT_*), see below. > + * - Add an external declaration for the new table definition (AcpiDmTableInfo*) > + * in acdisam.h > + * - Add new table definition to the dispatch table in dmtable.c (AcpiDmTableData) > + * If a simple table (with no subtables), no disassembly code is needed. > + * Otherwise, create the AcpiDmDump* function for to disassemble the table > + * and add it to the dmtbdump.c file. > + * - Add an external declaration for the new AcpiDmDump* function in acdisasm.h > + * - Add the new AcpiDmDump* function to the dispatch table in dmtable.c > + * - Create a template for the new table > + * - Add data table compiler support > + * > + * How to add a new data type (ACPI_DMT_*): > + * > + * - Add new type at the end of the ACPI_DMT list in acdisasm.h > + * - Add length and implementation cases in dmtable.c (disassembler) > + * - Add type and length cases in dtutils.c (DT compiler) > + */ > + > +/* > + * ACPI Table Information, used to dump formatted ACPI tables > + * > + * Each entry is of the form: <Field Type, Field Offset, Field Name> > + */ > + > + > +/******************************************************************************* > + * > + * ASF - Alert Standard Format table (Signature "ASF!") > + * > + ******************************************************************************/ > + > +/* Common Subtable header (one per Subtable) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAsfHdr[] = > +{ > + {ACPI_DMT_ASF, ACPI_ASF0_OFFSET (Header.Type), "Subtable Type", 0}, > + {ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (Header.Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT16, ACPI_ASF0_OFFSET (Header.Length), "Length", DT_LENGTH}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 0: ASF Information */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAsf0[] = > +{ > + {ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (MinResetValue), "Minimum Reset Value", 0}, > + {ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (MinPollInterval), "Minimum Polling Interval", 0}, > + {ACPI_DMT_UINT16, ACPI_ASF0_OFFSET (SystemId), "System ID", 0}, > + {ACPI_DMT_UINT32, ACPI_ASF0_OFFSET (MfgId), "Manufacturer ID", 0}, > + {ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (Flags), "Flags", 0}, > + {ACPI_DMT_UINT24, ACPI_ASF0_OFFSET (Reserved2[0]), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 1: ASF Alerts */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAsf1[] = > +{ > + {ACPI_DMT_UINT8, ACPI_ASF1_OFFSET (AssertMask), "AssertMask", 0}, > + {ACPI_DMT_UINT8, ACPI_ASF1_OFFSET (DeassertMask), "DeassertMask", 0}, > + {ACPI_DMT_UINT8, ACPI_ASF1_OFFSET (Alerts), "Alert Count", 0}, > + {ACPI_DMT_UINT8, ACPI_ASF1_OFFSET (DataLength), "Alert Data Length", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 1a: ASF Alert data */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAsf1a[] = > +{ > + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Address), "Address", 0}, > + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Command), "Command", 0}, > + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Mask), "Mask", 0}, > + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Value), "Value", 0}, > + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (SensorType), "SensorType", 0}, > + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Type), "Type", 0}, > + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Offset), "Offset", 0}, > + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (SourceType), "SourceType", 0}, > + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Severity), "Severity", 0}, > + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (SensorNumber), "SensorNumber", 0}, > + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Entity), "Entity", 0}, > + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Instance), "Instance", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 2: ASF Remote Control */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAsf2[] = > +{ > + {ACPI_DMT_UINT8, ACPI_ASF2_OFFSET (Controls), "Control Count", 0}, > + {ACPI_DMT_UINT8, ACPI_ASF2_OFFSET (DataLength), "Control Data Length", 0}, > + {ACPI_DMT_UINT16, ACPI_ASF2_OFFSET (Reserved2), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 2a: ASF Control data */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAsf2a[] = > +{ > + {ACPI_DMT_UINT8, ACPI_ASF2a_OFFSET (Function), "Function", 0}, > + {ACPI_DMT_UINT8, ACPI_ASF2a_OFFSET (Address), "Address", 0}, > + {ACPI_DMT_UINT8, ACPI_ASF2a_OFFSET (Command), "Command", 0}, > + {ACPI_DMT_UINT8, ACPI_ASF2a_OFFSET (Value), "Value", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 3: ASF RMCP Boot Options */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAsf3[] = > +{ > + {ACPI_DMT_BUF7, ACPI_ASF3_OFFSET (Capabilities[0]), "Capabilities", 0}, > + {ACPI_DMT_UINT8, ACPI_ASF3_OFFSET (CompletionCode), "Completion Code", 0}, > + {ACPI_DMT_UINT32, ACPI_ASF3_OFFSET (EnterpriseId), "Enterprise ID", 0}, > + {ACPI_DMT_UINT8, ACPI_ASF3_OFFSET (Command), "Command", 0}, > + {ACPI_DMT_UINT16, ACPI_ASF3_OFFSET (Parameter), "Parameter", 0}, > + {ACPI_DMT_UINT16, ACPI_ASF3_OFFSET (BootOptions), "Boot Options", 0}, > + {ACPI_DMT_UINT16, ACPI_ASF3_OFFSET (OemParameters), "Oem Parameters", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 4: ASF Address */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoAsf4[] = > +{ > + {ACPI_DMT_UINT8, ACPI_ASF4_OFFSET (EpromAddress), "Eprom Address", 0}, > + {ACPI_DMT_UINT8, ACPI_ASF4_OFFSET (Devices), "Device Count", DT_COUNT}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * BERT - Boot Error Record table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoBert[] = > +{ > + {ACPI_DMT_UINT32, ACPI_BERT_OFFSET (RegionLength), "Boot Error Region Length", 0}, > + {ACPI_DMT_UINT64, ACPI_BERT_OFFSET (Address), "Boot Error Region Address", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * BGRT - Boot Graphics Resource Table (ACPI 5.0) > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoBgrt[] = > +{ > + {ACPI_DMT_UINT16, ACPI_BGRT_OFFSET (Version), "Version", 0}, > + {ACPI_DMT_UINT8, ACPI_BGRT_OFFSET (Status), "Status (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_BGRT_FLAG_OFFSET (Status, 0), "Displayed", 0}, > + {ACPI_DMT_FLAGS1, ACPI_BGRT_FLAG_OFFSET (Status, 0), "Orientation Offset", 0}, > + > + {ACPI_DMT_UINT8, ACPI_BGRT_OFFSET (ImageType), "Image Type", 0}, > + {ACPI_DMT_UINT64, ACPI_BGRT_OFFSET (ImageAddress), "Image Address", 0}, > + {ACPI_DMT_UINT32, ACPI_BGRT_OFFSET (ImageOffsetX), "Image OffsetX", 0}, > + {ACPI_DMT_UINT32, ACPI_BGRT_OFFSET (ImageOffsetY), "Image OffsetY", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * BOOT - Simple Boot Flag Table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoBoot[] = > +{ > + {ACPI_DMT_UINT8, ACPI_BOOT_OFFSET (CmosIndex), "Boot Register Index", 0}, > + {ACPI_DMT_UINT24, ACPI_BOOT_OFFSET (Reserved[0]), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * CPEP - Corrected Platform Error Polling table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoCpep[] = > +{ > + {ACPI_DMT_UINT64, ACPI_CPEP_OFFSET (Reserved), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoCpep0[] = > +{ > + {ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Header.Type), "Subtable Type", 0}, > + {ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Header.Length), "Length", DT_LENGTH}, > + {ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Id), "Processor ID", 0}, > + {ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Eid), "Processor EID", 0}, > + {ACPI_DMT_UINT32, ACPI_CPEP0_OFFSET (Interval), "Polling Interval", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * CSRT - Core System Resource Table > + * > + ******************************************************************************/ > + > +/* Main table consists only of the standard ACPI table header */ > + > +/* Resource Group subtable */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt0[] = > +{ > + {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (Length), "Length", DT_LENGTH}, > + {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (VendorId), "Vendor ID", 0}, > + {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (SubvendorId), "Subvendor ID", 0}, > + {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (DeviceId), "Device ID", 0}, > + {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (SubdeviceId), "Subdevice ID", 0}, > + {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (Revision), "Revision", 0}, > + {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (SharedInfoLength), "Shared Info Length", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Shared Info subtable */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt1[] = > +{ > + {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (MajorVersion), "Major Version", 0}, > + {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (MinorVersion), "Minor Version", 0}, > + {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (MmioBaseLow), "MMIO Base Address Low", 0}, > + {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (MmioBaseHigh), "MMIO Base Address High", 0}, > + {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (GsiInterrupt), "GSI Interrupt", 0}, > + {ACPI_DMT_UINT8, ACPI_CSRT1_OFFSET (InterruptPolarity), "Interrupt Polarity", 0}, > + {ACPI_DMT_UINT8, ACPI_CSRT1_OFFSET (InterruptMode), "Interrupt Mode", 0}, > + {ACPI_DMT_UINT8, ACPI_CSRT1_OFFSET (NumChannels), "Num Channels", 0}, > + {ACPI_DMT_UINT8, ACPI_CSRT1_OFFSET (DmaAddressWidth), "DMA Address Width", 0}, > + {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (BaseRequestLine), "Base Request Line", 0}, > + {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (NumHandshakeSignals), "Num Handshake Signals", 0}, > + {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (MaxBlockSize), "Max Block Size", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Resource Descriptor subtable */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt2[] = > +{ > + {ACPI_DMT_UINT32, ACPI_CSRT2_OFFSET (Length), "Length", DT_LENGTH}, > + {ACPI_DMT_UINT16, ACPI_CSRT2_OFFSET (Type), "Type", 0}, > + {ACPI_DMT_UINT16, ACPI_CSRT2_OFFSET (Subtype), "Subtype", 0}, > + {ACPI_DMT_UINT32, ACPI_CSRT2_OFFSET (Uid), "UID", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt2a[] = > +{ > + {ACPI_DMT_RAW_BUFFER, 0, "ResourceInfo", DT_OPTIONAL}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * DBG2 - Debug Port Table 2 > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2[] = > +{ > + {ACPI_DMT_UINT32, ACPI_DBG2_OFFSET (InfoOffset), "Info Offset", 0}, > + {ACPI_DMT_UINT32, ACPI_DBG2_OFFSET (InfoCount), "Info Count", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Debug Device Information Subtable */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Device[] = > +{ > + {ACPI_DMT_UINT8, ACPI_DBG20_OFFSET (Revision), "Revision", 0}, > + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (Length), "Length", DT_LENGTH}, > + {ACPI_DMT_UINT8, ACPI_DBG20_OFFSET (RegisterCount), "Register Count", 0}, > + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (NamepathLength), "Namepath Length", 0}, > + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (NamepathOffset), "Namepath Offset", 0}, > + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (OemDataLength), "OEM Data Length", DT_DESCRIBES_OPTIONAL}, > + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (OemDataOffset), "OEM Data Offset", DT_DESCRIBES_OPTIONAL}, > + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (PortType), "Port Type", 0}, > + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (PortSubtype), "Port Subtype", 0}, > + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (BaseAddressOffset), "Base Address Offset", 0}, > + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (AddressSizeOffset), "Address Size Offset", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Variable-length data for the subtable */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Addr[] = > +{ > + {ACPI_DMT_GAS, 0, "Base Address Register", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Size[] = > +{ > + {ACPI_DMT_UINT32, 0, "Address Size", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Name[] = > +{ > + {ACPI_DMT_STRING, 0, "Namepath", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2OemData[] = > +{ > + {ACPI_DMT_RAW_BUFFER, 0, "OEM Data", DT_OPTIONAL}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * DBGP - Debug Port > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoDbgp[] = > +{ > + {ACPI_DMT_UINT8, ACPI_DBGP_OFFSET (Type), "Interface Type", 0}, > + {ACPI_DMT_UINT24, ACPI_DBGP_OFFSET (Reserved[0]), "Reserved", 0}, > + {ACPI_DMT_GAS, ACPI_DBGP_OFFSET (DebugPort), "Debug Port Register", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * DMAR - DMA Remapping table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoDmar[] = > +{ > + {ACPI_DMT_UINT8, ACPI_DMAR_OFFSET (Width), "Host Address Width", 0}, > + {ACPI_DMT_UINT8, ACPI_DMAR_OFFSET (Flags), "Flags", 0}, > + {ACPI_DMT_BUF10, ACPI_DMAR_OFFSET (Reserved[0]), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Common Subtable header (one per Subtable) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoDmarHdr[] = > +{ > + {ACPI_DMT_DMAR, ACPI_DMAR0_OFFSET (Header.Type), "Subtable Type", 0}, > + {ACPI_DMT_UINT16, ACPI_DMAR0_OFFSET (Header.Length), "Length", DT_LENGTH}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Common device scope entry */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoDmarScope[] = > +{ > + {ACPI_DMT_DMAR_SCOPE, ACPI_DMARS_OFFSET (EntryType), "Device Scope Type", 0}, > + {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (Length), "Entry Length", DT_LENGTH}, > + {ACPI_DMT_UINT16, ACPI_DMARS_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (EnumerationId), "Enumeration ID", 0}, > + {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (Bus), "PCI Bus Number", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* DMAR Subtables */ > + > +/* 0: Hardware Unit Definition */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoDmar0[] = > +{ > + {ACPI_DMT_UINT8, ACPI_DMAR0_OFFSET (Flags), "Flags", 0}, > + {ACPI_DMT_UINT8, ACPI_DMAR0_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT16, ACPI_DMAR0_OFFSET (Segment), "PCI Segment Number", 0}, > + {ACPI_DMT_UINT64, ACPI_DMAR0_OFFSET (Address), "Register Base Address", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 1: Reserved Memory Definition */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoDmar1[] = > +{ > + {ACPI_DMT_UINT16, ACPI_DMAR1_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT16, ACPI_DMAR1_OFFSET (Segment), "PCI Segment Number", 0}, > + {ACPI_DMT_UINT64, ACPI_DMAR1_OFFSET (BaseAddress), "Base Address", 0}, > + {ACPI_DMT_UINT64, ACPI_DMAR1_OFFSET (EndAddress), "End Address (limit)", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 2: Root Port ATS Capability Definition */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoDmar2[] = > +{ > + {ACPI_DMT_UINT8, ACPI_DMAR2_OFFSET (Flags), "Flags", 0}, > + {ACPI_DMT_UINT8, ACPI_DMAR2_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT16, ACPI_DMAR2_OFFSET (Segment), "PCI Segment Number", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 3: Remapping Hardware Static Affinity Structure */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoDmar3[] = > +{ > + {ACPI_DMT_UINT32, ACPI_DMAR3_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_DMAR3_OFFSET (BaseAddress), "Base Address", 0}, > + {ACPI_DMT_UINT32, ACPI_DMAR3_OFFSET (ProximityDomain), "Proximity Domain", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 4: ACPI Namespace Device Declaration Structure */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoDmar4[] = > +{ > + {ACPI_DMT_UINT24, ACPI_DMAR4_OFFSET (Reserved[0]), "Reserved", 0}, > + {ACPI_DMT_UINT8, ACPI_DMAR4_OFFSET (DeviceNumber), "Device Number", 0}, > + {ACPI_DMT_STRING, ACPI_DMAR4_OFFSET (DeviceName[0]), "Device Name", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * DRTM - Dynamic Root of Trust for Measurement table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm[] = > +{ > + {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (EntryBaseAddress), "Entry Base Address", 0}, > + {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (EntryLength), "Entry Length", 0}, > + {ACPI_DMT_UINT32, ACPI_DRTM_OFFSET (EntryAddress32), "Entry 32", 0}, > + {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (EntryAddress64), "Entry 64", 0}, > + {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (ExitAddress), "Exit Address", 0}, > + {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (LogAreaAddress), "Log Area Start", 0}, > + {ACPI_DMT_UINT32, ACPI_DRTM_OFFSET (LogAreaLength), "Log Area Length", 0}, > + {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (ArchDependentAddress), "Arch Dependent Address", 0}, > + {ACPI_DMT_UINT32, ACPI_DRTM_OFFSET (Flags), "Flags (decoded below)", 0}, > + {ACPI_DMT_FLAG0, ACPI_DRTM_FLAG_OFFSET (Flags, 0), "Namespace in TCB", 0}, > + {ACPI_DMT_FLAG1, ACPI_DRTM_FLAG_OFFSET (Flags, 0), "Gap Code on S3 Resume", 0}, > + {ACPI_DMT_FLAG2, ACPI_DRTM_FLAG_OFFSET (Flags, 0), "Gap Code on DLME_Exit", 0}, > + {ACPI_DMT_FLAG3, ACPI_DRTM_FLAG_OFFSET (Flags, 0), "PCR_Authorities Changed", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm0[] = > +{ > + {ACPI_DMT_UINT32, ACPI_DRTM0_OFFSET (ValidatedTableCount), "Validated Table Count", DT_COUNT}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm0a[] = > +{ > + {ACPI_DMT_UINT64, 0, "Table Address", DT_OPTIONAL}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm1[] = > +{ > + {ACPI_DMT_UINT32, ACPI_DRTM1_OFFSET (ResourceCount), "Resource Count", DT_COUNT}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm1a[] = > +{ > + {ACPI_DMT_UINT56, ACPI_DRTM1a_OFFSET (Size[0]), "Size", DT_OPTIONAL}, > + {ACPI_DMT_UINT8, ACPI_DRTM1a_OFFSET (Type), "Type", 0}, > + {ACPI_DMT_FLAG0, ACPI_DRTM1a_FLAG_OFFSET (Type, 0), "Resource Type", 0}, > + {ACPI_DMT_FLAG7, ACPI_DRTM1a_FLAG_OFFSET (Type, 0), "Protections", 0}, > + {ACPI_DMT_UINT64, ACPI_DRTM1a_OFFSET (Address), "Address", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm2[] = > +{ > + {ACPI_DMT_UINT32, ACPI_DRTM2_OFFSET (DpsIdLength), "DLME Platform Id Length", DT_COUNT}, > + {ACPI_DMT_BUF16, ACPI_DRTM2_OFFSET (DpsId), "DLME Platform Id", DT_COUNT}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * ECDT - Embedded Controller Boot Resources Table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoEcdt[] = > +{ > + {ACPI_DMT_GAS, ACPI_ECDT_OFFSET (Control), "Command/Status Register", 0}, > + {ACPI_DMT_GAS, ACPI_ECDT_OFFSET (Data), "Data Register", 0}, > + {ACPI_DMT_UINT32, ACPI_ECDT_OFFSET (Uid), "UID", 0}, > + {ACPI_DMT_UINT8, ACPI_ECDT_OFFSET (Gpe), "GPE Number", 0}, > + {ACPI_DMT_STRING, ACPI_ECDT_OFFSET (Id[0]), "Namepath", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * EINJ - Error Injection table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoEinj[] = > +{ > + {ACPI_DMT_UINT32, ACPI_EINJ_OFFSET (HeaderLength), "Injection Header Length", 0}, > + {ACPI_DMT_UINT8, ACPI_EINJ_OFFSET (Flags), "Flags", 0}, > + {ACPI_DMT_UINT24, ACPI_EINJ_OFFSET (Reserved[0]), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_EINJ_OFFSET (Entries), "Injection Entry Count", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoEinj0[] = > +{ > + {ACPI_DMT_EINJACT, ACPI_EINJ0_OFFSET (Action), "Action", 0}, > + {ACPI_DMT_EINJINST, ACPI_EINJ0_OFFSET (Instruction), "Instruction", 0}, > + {ACPI_DMT_UINT8, ACPI_EINJ0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_EINJ0_FLAG_OFFSET (Flags,0), "Preserve Register Bits", 0}, > + > + {ACPI_DMT_UINT8, ACPI_EINJ0_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_GAS, ACPI_EINJ0_OFFSET (RegisterRegion), "Register Region", 0}, > + {ACPI_DMT_UINT64, ACPI_EINJ0_OFFSET (Value), "Value", 0}, > + {ACPI_DMT_UINT64, ACPI_EINJ0_OFFSET (Mask), "Mask", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * ERST - Error Record Serialization table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoErst[] = > +{ > + {ACPI_DMT_UINT32, ACPI_ERST_OFFSET (HeaderLength), "Serialization Header Length", 0}, > + {ACPI_DMT_UINT32, ACPI_ERST_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_ERST_OFFSET (Entries), "Instruction Entry Count", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoErst0[] = > +{ > + {ACPI_DMT_ERSTACT, ACPI_ERST0_OFFSET (Action), "Action", 0}, > + {ACPI_DMT_ERSTINST, ACPI_ERST0_OFFSET (Instruction), "Instruction", 0}, > + {ACPI_DMT_UINT8, ACPI_ERST0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_ERST0_FLAG_OFFSET (Flags,0), "Preserve Register Bits", 0}, > + > + {ACPI_DMT_UINT8, ACPI_ERST0_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_GAS, ACPI_ERST0_OFFSET (RegisterRegion), "Register Region", 0}, > + {ACPI_DMT_UINT64, ACPI_ERST0_OFFSET (Value), "Value", 0}, > + {ACPI_DMT_UINT64, ACPI_ERST0_OFFSET (Mask), "Mask", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * FPDT - Firmware Performance Data Table (ACPI 5.0) > + * > + ******************************************************************************/ > + > +/* Main table consists of only the standard ACPI header - subtables follow */ > + > +/* FPDT subtable header */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoFpdtHdr[] = > +{ > + {ACPI_DMT_UINT16, ACPI_FPDTH_OFFSET (Type), "Subtable Type", 0}, > + {ACPI_DMT_UINT8, ACPI_FPDTH_OFFSET (Length), "Length", DT_LENGTH}, > + {ACPI_DMT_UINT8, ACPI_FPDTH_OFFSET (Revision), "Revision", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 0: Firmware Basic Boot Performance Record */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt0[] = > +{ > + {ACPI_DMT_UINT32, ACPI_FPDT0_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_FPDT1_OFFSET (Address), "FPDT Boot Record Address", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 1: S3 Performance Table Pointer Record */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt1[] = > +{ > + {ACPI_DMT_UINT32, ACPI_FPDT1_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_FPDT1_OFFSET (Address), "S3PT Record Address", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +#if 0 > + /* Boot Performance Record, not supported at this time. */ > + {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (ResetEnd), "Reset End", 0}, > + {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (LoadStart), "Load Image Start", 0}, > + {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (StartupStart), "Start Image Start", 0}, > + {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (ExitServicesEntry), "Exit Services Entry", 0}, > + {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (ExitServicesExit), "Exit Services Exit", 0}, > +#endif > + > + > +/******************************************************************************* > + * > + * GTDT - Generic Timer Description Table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt[] = > +{ > + {ACPI_DMT_UINT64, ACPI_GTDT_OFFSET (CounterBlockAddresss), "Counter Block Address", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (Reserved), "Reserved", 0}, > + ACPI_DMT_NEW_LINE, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (SecureEl1Interrupt), "Secure EL1 Interrupt", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (SecureEl1Flags), "EL1 Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Trigger Mode", 0}, > + {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Polarity", 0}, > + {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Always On", 0}, > + ACPI_DMT_NEW_LINE, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl1Interrupt), "Non-Secure EL1 Interrupt", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl1Flags), "NEL1 Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Trigger Mode", 0}, > + {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Polarity", 0}, > + {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Always On", 0}, > + ACPI_DMT_NEW_LINE, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (VirtualTimerInterrupt), "Virtual Timer Interrupt", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (VirtualTimerFlags), "VT Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Trigger Mode", 0}, > + {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Polarity", 0}, > + {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Always On", 0}, > + ACPI_DMT_NEW_LINE, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl2Interrupt), "Non-Secure EL2 Interrupt", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl2Flags), "NEL2 Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Trigger Mode", 0}, > + {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Polarity", 0}, > + {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Always On", 0}, > + {ACPI_DMT_UINT64, ACPI_GTDT_OFFSET (CounterReadBlockAddress), "Counter Read Block Address", 0}, > + ACPI_DMT_NEW_LINE, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (PlatformTimerCount), "Platform Timer Count", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (PlatformTimerOffset), "Platform Timer Offset", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* GTDT Subtable header (one per Subtable) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoGtdtHdr[] = > +{ > + {ACPI_DMT_GTDT, ACPI_GTDTH_OFFSET (Type), "Subtable Type", 0}, > + {ACPI_DMT_UINT16, ACPI_GTDTH_OFFSET (Length), "Length", DT_LENGTH}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* GTDT Subtables */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt0[] = > +{ > + {ACPI_DMT_UINT8, ACPI_GTDT0_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_GTDT0_OFFSET (BlockAddress), "Block Address", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT0_OFFSET (TimerCount), "Timer Count", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT0_OFFSET (TimerOffset), "Timer Offset", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt0a[] = > +{ > + {ACPI_DMT_UINT8 , ACPI_GTDT0a_OFFSET (FrameNumber), "Frame Number", 0}, > + {ACPI_DMT_UINT24, ACPI_GTDT0a_OFFSET (Reserved[0]), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_GTDT0a_OFFSET (BaseAddress), "Base Address", 0}, > + {ACPI_DMT_UINT64, ACPI_GTDT0a_OFFSET (El0BaseAddress), "EL0 Base Address", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (TimerInterrupt), "Timer Interrupt", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (TimerFlags), "Timer Flags (decoded below)", 0}, > + {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (TimerFlags,0), "Trigger Mode", 0}, > + {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (TimerFlags,0), "Polarity", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (VirtualTimerInterrupt), "Virtual Timer Interrupt", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (VirtualTimerFlags), "Virtual Timer Flags (decoded below)", 0}, > + {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (VirtualTimerFlags,0), "Trigger Mode", 0}, > + {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (VirtualTimerFlags,0), "Polarity", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (CommonFlags), "Common Flags (decoded below)", 0}, > + {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (CommonFlags,0), "Secure", 0}, > + {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (CommonFlags,0), "Always On", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt1[] = > +{ > + {ACPI_DMT_UINT8, ACPI_GTDT1_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_GTDT1_OFFSET (RefreshFrameAddress), "Refresh Frame Address", 0}, > + {ACPI_DMT_UINT64, ACPI_GTDT1_OFFSET (ControlFrameAddress), "Control Frame Address", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT1_OFFSET (TimerInterrupt), "Timer Interrupt", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT1_OFFSET (TimerFlags), "Timer Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Trigger Mode", 0}, > + {ACPI_DMT_FLAG1, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Polarity", 0}, > + {ACPI_DMT_FLAG2, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Security", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * HEST - Hardware Error Source table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoHest[] = > +{ > + {ACPI_DMT_UINT32, ACPI_HEST_OFFSET (ErrorSourceCount), "Error Source Count", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Common HEST structures for subtables */ > + > +#define ACPI_DM_HEST_HEADER \ > + {ACPI_DMT_HEST, ACPI_HEST0_OFFSET (Header.Type), "Subtable Type", 0}, \ > + {ACPI_DMT_UINT16, ACPI_HEST0_OFFSET (Header.SourceId), "Source Id", 0} > + > +#define ACPI_DM_HEST_AER \ > + {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Reserved1), "Reserved", 0}, \ > + {ACPI_DMT_UINT8, ACPI_HEST6_OFFSET (Aer.Flags), "Flags (decoded below)", DT_FLAG}, \ > + {ACPI_DMT_FLAG0, ACPI_HEST6_FLAG_OFFSET (Aer.Flags,0), "Firmware First", 0}, \ > + {ACPI_DMT_FLAG0, ACPI_HEST6_FLAG_OFFSET (Aer.Flags,0), "Global", 0}, \ > + {ACPI_DMT_UINT8, ACPI_HEST6_OFFSET (Aer.Enabled), "Enabled", 0}, \ > + {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.RecordsToPreallocate), "Records To Preallocate", 0}, \ > + {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.MaxSectionsPerRecord), "Max Sections Per Record", 0}, \ > + {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.Bus), "Bus", 0}, \ > + {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Device), "Device", 0}, \ > + {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Function), "Function", 0}, \ > + {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.DeviceControl), "DeviceControl", 0}, \ > + {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Reserved2), "Reserved", 0}, \ > + {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.UncorrectableMask), "Uncorrectable Mask", 0}, \ > + {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.UncorrectableSeverity), "Uncorrectable Severity", 0}, \ > + {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.CorrectableMask), "Correctable Mask", 0}, \ > + {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.AdvancedCapabilities), "Advanced Capabilities", 0} > + > + > +/* HEST Subtables */ > + > +/* 0: IA32 Machine Check Exception */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoHest0[] = > +{ > + ACPI_DM_HEST_HEADER, > + {ACPI_DMT_UINT16, ACPI_HEST0_OFFSET (Reserved1), "Reserved1", 0}, > + {ACPI_DMT_UINT8, ACPI_HEST0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_HEST0_FLAG_OFFSET (Flags,0), "Firmware First", 0}, > + {ACPI_DMT_FLAG2, ACPI_HEST0_FLAG_OFFSET (Flags,0), "GHES Assist", 0}, > + > + {ACPI_DMT_UINT8, ACPI_HEST0_OFFSET (Enabled), "Enabled", 0}, > + {ACPI_DMT_UINT32, ACPI_HEST0_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, > + {ACPI_DMT_UINT32, ACPI_HEST0_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, > + {ACPI_DMT_UINT64, ACPI_HEST0_OFFSET (GlobalCapabilityData), "Global Capability Data", 0}, > + {ACPI_DMT_UINT64, ACPI_HEST0_OFFSET (GlobalControlData), "Global Control Data", 0}, > + {ACPI_DMT_UINT8, ACPI_HEST0_OFFSET (NumHardwareBanks), "Num Hardware Banks", 0}, > + {ACPI_DMT_UINT56, ACPI_HEST0_OFFSET (Reserved3[0]), "Reserved2", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 1: IA32 Corrected Machine Check */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoHest1[] = > +{ > + ACPI_DM_HEST_HEADER, > + {ACPI_DMT_UINT16, ACPI_HEST1_OFFSET (Reserved1), "Reserved1", 0}, > + {ACPI_DMT_UINT8, ACPI_HEST1_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_HEST1_FLAG_OFFSET (Flags,0), "Firmware First", 0}, > + {ACPI_DMT_FLAG2, ACPI_HEST1_FLAG_OFFSET (Flags,0), "GHES Assist", 0}, > + > + {ACPI_DMT_UINT8, ACPI_HEST1_OFFSET (Enabled), "Enabled", 0}, > + {ACPI_DMT_UINT32, ACPI_HEST1_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, > + {ACPI_DMT_UINT32, ACPI_HEST1_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, > + {ACPI_DMT_HESTNTFY, ACPI_HEST1_OFFSET (Notify), "Notify", 0}, > + {ACPI_DMT_UINT8, ACPI_HEST1_OFFSET (NumHardwareBanks), "Num Hardware Banks", 0}, > + {ACPI_DMT_UINT24, ACPI_HEST1_OFFSET (Reserved2[0]), "Reserved2", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 2: IA32 Non-Maskable Interrupt */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoHest2[] = > +{ > + ACPI_DM_HEST_HEADER, > + {ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, > + {ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, > + {ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (MaxRawDataLength), "Max Raw Data Length", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 6: PCI Express Root Port AER */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoHest6[] = > +{ > + ACPI_DM_HEST_HEADER, > + ACPI_DM_HEST_AER, > + {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (RootErrorCommand), "Root Error Command", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 7: PCI Express AER (AER Endpoint) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoHest7[] = > +{ > + ACPI_DM_HEST_HEADER, > + ACPI_DM_HEST_AER, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 8: PCI Express/PCI-X Bridge AER */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoHest8[] = > +{ > + ACPI_DM_HEST_HEADER, > + ACPI_DM_HEST_AER, > + {ACPI_DMT_UINT32, ACPI_HEST8_OFFSET (UncorrectableMask2), "2nd Uncorrectable Mask", 0}, > + {ACPI_DMT_UINT32, ACPI_HEST8_OFFSET (UncorrectableSeverity2), "2nd Uncorrectable Severity", 0}, > + {ACPI_DMT_UINT32, ACPI_HEST8_OFFSET (AdvancedCapabilities2), "2nd Advanced Capabilities", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 9: Generic Hardware Error Source */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoHest9[] = > +{ > + ACPI_DM_HEST_HEADER, > + {ACPI_DMT_UINT16, ACPI_HEST9_OFFSET (RelatedSourceId), "Related Source Id", 0}, > + {ACPI_DMT_UINT8, ACPI_HEST9_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT8, ACPI_HEST9_OFFSET (Enabled), "Enabled", 0}, > + {ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, > + {ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, > + {ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (MaxRawDataLength), "Max Raw Data Length", 0}, > + {ACPI_DMT_GAS, ACPI_HEST9_OFFSET (ErrorStatusAddress), "Error Status Address", 0}, > + {ACPI_DMT_HESTNTFY, ACPI_HEST9_OFFSET (Notify), "Notify", 0}, > + {ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (ErrorBlockLength), "Error Status Block Length", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 10: Generic Hardware Error Source - Version 2 */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoHest10[] = > +{ > + ACPI_DM_HEST_HEADER, > + {ACPI_DMT_UINT16, ACPI_HEST10_OFFSET (RelatedSourceId), "Related Source Id", 0}, > + {ACPI_DMT_UINT8, ACPI_HEST10_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT8, ACPI_HEST10_OFFSET (Enabled), "Enabled", 0}, > + {ACPI_DMT_UINT32, ACPI_HEST10_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, > + {ACPI_DMT_UINT32, ACPI_HEST10_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, > + {ACPI_DMT_UINT32, ACPI_HEST10_OFFSET (MaxRawDataLength), "Max Raw Data Length", 0}, > + {ACPI_DMT_GAS, ACPI_HEST10_OFFSET (ErrorStatusAddress), "Error Status Address", 0}, > + {ACPI_DMT_HESTNTFY, ACPI_HEST10_OFFSET (Notify), "Notify", 0}, > + {ACPI_DMT_UINT32, ACPI_HEST10_OFFSET (ErrorBlockLength), "Error Status Block Length", 0}, > + {ACPI_DMT_GAS, ACPI_HEST10_OFFSET (ReadAckRegister), "Read Ack Register", 0}, > + {ACPI_DMT_UINT64, ACPI_HEST10_OFFSET (ReadAckPreserve), "Read Ack Preserve", 0}, > + {ACPI_DMT_UINT64, ACPI_HEST10_OFFSET (ReadAckWrite), "Read Ack Write", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 11: IA32 Deferred Machine Check */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoHest11[] = > +{ > + ACPI_DM_HEST_HEADER, > + {ACPI_DMT_UINT16, ACPI_HEST11_OFFSET (Reserved1), "Reserved1", 0}, > + {ACPI_DMT_UINT8, ACPI_HEST11_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_HEST11_FLAG_OFFSET (Flags,0), "Firmware First", 0}, > + {ACPI_DMT_FLAG2, ACPI_HEST11_FLAG_OFFSET (Flags,0), "GHES Assist", 0}, > + > + {ACPI_DMT_UINT8, ACPI_HEST11_OFFSET (Enabled), "Enabled", 0}, > + {ACPI_DMT_UINT32, ACPI_HEST11_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, > + {ACPI_DMT_UINT32, ACPI_HEST11_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, > + {ACPI_DMT_HESTNTFY, ACPI_HEST11_OFFSET (Notify), "Notify", 0}, > + {ACPI_DMT_UINT8, ACPI_HEST11_OFFSET (NumHardwareBanks), "Num Hardware Banks", 0}, > + {ACPI_DMT_UINT24, ACPI_HEST11_OFFSET (Reserved2[0]), "Reserved2", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Notification Structure */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoHestNotify[] = > +{ > + {ACPI_DMT_HESTNTYP, ACPI_HESTN_OFFSET (Type), "Notify Type", 0}, > + {ACPI_DMT_UINT8, ACPI_HESTN_OFFSET (Length), "Notify Length", DT_LENGTH}, > + {ACPI_DMT_UINT16, ACPI_HESTN_OFFSET (ConfigWriteEnable), "Configuration Write Enable", 0}, > + {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (PollInterval), "PollInterval", 0}, > + {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (Vector), "Vector", 0}, > + {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (PollingThresholdValue), "Polling Threshold Value", 0}, > + {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (PollingThresholdWindow), "Polling Threshold Window", 0}, > + {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (ErrorThresholdValue), "Error Threshold Value", 0}, > + {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (ErrorThresholdWindow), "Error Threshold Window", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/* > + * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and > + * ACPI_HEST_IA_CORRECTED structures. > + */ > +ACPI_DMTABLE_INFO AcpiDmTableInfoHestBank[] = > +{ > + {ACPI_DMT_UINT8, ACPI_HESTB_OFFSET (BankNumber), "Bank Number", 0}, > + {ACPI_DMT_UINT8, ACPI_HESTB_OFFSET (ClearStatusOnInit), "Clear Status On Init", 0}, > + {ACPI_DMT_UINT8, ACPI_HESTB_OFFSET (StatusFormat), "Status Format", 0}, > + {ACPI_DMT_UINT8, ACPI_HESTB_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_HESTB_OFFSET (ControlRegister), "Control Register", 0}, > + {ACPI_DMT_UINT64, ACPI_HESTB_OFFSET (ControlData), "Control Data", 0}, > + {ACPI_DMT_UINT32, ACPI_HESTB_OFFSET (StatusRegister), "Status Register", 0}, > + {ACPI_DMT_UINT32, ACPI_HESTB_OFFSET (AddressRegister), "Address Register", 0}, > + {ACPI_DMT_UINT32, ACPI_HESTB_OFFSET (MiscRegister), "Misc Register", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * HMAT - Heterogeneous Memory Attributes Table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat[] = > +{ > + {ACPI_DMT_UINT32, ACPI_HMAT_OFFSET (Reserved), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Common HMAT structure header (one per Subtable) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoHmatHdr[] = > +{ > + {ACPI_DMT_HMAT, ACPI_HMATH_OFFSET (Type), "Structure Type", 0}, > + {ACPI_DMT_UINT16, ACPI_HMATH_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_HMATH_OFFSET (Length), "Length", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* HMAT subtables */ > + > +/* 0x00: Memory Subsystem Address Range */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat0[] = > +{ > + {ACPI_DMT_UINT16, ACPI_HMAT0_OFFSET (Flags), "Flags (decoded below)", 0}, > + {ACPI_DMT_FLAG0, ACPI_HMAT0_FLAG_OFFSET (Flags,0), "Processor Proximity Domain Valid", 0}, > + {ACPI_DMT_FLAG1, ACPI_HMAT0_FLAG_OFFSET (Flags,0), "Memory Proximity Domain Valid", 0}, > + {ACPI_DMT_FLAG2, ACPI_HMAT0_FLAG_OFFSET (Flags,0), "Reservation Hint", 0}, > + {ACPI_DMT_UINT16, ACPI_HMAT0_OFFSET (Reserved1), "Reserved1", 0}, > + {ACPI_DMT_UINT32, ACPI_HMAT0_OFFSET (ProcessorPD), "Processor Proximity Domain", 0}, > + {ACPI_DMT_UINT32, ACPI_HMAT0_OFFSET (MemoryPD), "Memory Proximity Domain", 0}, > + {ACPI_DMT_UINT32, ACPI_HMAT0_OFFSET (Reserved2), "Reserved2", 0}, > + {ACPI_DMT_UINT64, ACPI_HMAT0_OFFSET (PhysicalAddressBase), "Physical Address Range Base", 0}, > + {ACPI_DMT_UINT64, ACPI_HMAT0_OFFSET (PhysicalAddressLength), "Physical Address Range Size", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 0x01: System Locality Latency and Bandwidth Information */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1[] = > +{ > + {ACPI_DMT_UINT8, ACPI_HMAT1_OFFSET (Flags), "Flags (decoded below)", 0}, > + {ACPI_DMT_FLAGS4_0, ACPI_HMAT1_FLAG_OFFSET (Flags,0), "Memory Hierarchy", 0}, > + {ACPI_DMT_UINT8, ACPI_HMAT1_OFFSET (DataType), "Data Type", 0}, > + {ACPI_DMT_UINT16, ACPI_HMAT1_OFFSET (Reserved1), "Reserved1", 0}, > + {ACPI_DMT_UINT32, ACPI_HMAT1_OFFSET (NumberOfInitiatorPDs), "Initiator Proximity Domains #", 0}, > + {ACPI_DMT_UINT32, ACPI_HMAT1_OFFSET (NumberOfTargetPDs), "Target Proximity Domains #", 0}, > + {ACPI_DMT_UINT32, ACPI_HMAT1_OFFSET (Reserved2), "Reserved2", 0}, > + {ACPI_DMT_UINT64, ACPI_HMAT1_OFFSET (EntryBaseUnit), "Entry Base Unit", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1a[] = > +{ > + {ACPI_DMT_UINT32, 0, "Initiator Proximity Domain List", DT_OPTIONAL}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1b[] = > +{ > + {ACPI_DMT_UINT32, 0, "Target Proximity Domain List", DT_OPTIONAL}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1c[] = > +{ > + {ACPI_DMT_UINT16, 0, "Entry", DT_OPTIONAL}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 0x02: Memory Side Cache Information */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat2[] = > +{ > + {ACPI_DMT_UINT32, ACPI_HMAT2_OFFSET (MemoryPD), "Memory Proximity Domain", 0}, > + {ACPI_DMT_UINT32, ACPI_HMAT2_OFFSET (Reserved1), "Reserved1", 0}, > + {ACPI_DMT_UINT64, ACPI_HMAT2_OFFSET (CacheSize), "Memory Side Cache Size", 0}, > + {ACPI_DMT_UINT32, ACPI_HMAT2_OFFSET (CacheAttributes), "Cache Attributes (decoded below)", 0}, > + {ACPI_DMT_FLAGS4_0, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Total Cache Levels", 0}, > + {ACPI_DMT_FLAGS4_4, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Cache Level", 0}, > + {ACPI_DMT_FLAGS4_8, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Cache Associativity", 0}, > + {ACPI_DMT_FLAGS4_12, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Write Policy", 0}, > + {ACPI_DMT_FLAGS16_16, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Cache Line Size", 0}, > + {ACPI_DMT_UINT16, ACPI_HMAT2_OFFSET (Reserved2), "Reserved2", 0}, > + {ACPI_DMT_UINT16, ACPI_HMAT2_OFFSET (NumberOfSMBIOSHandles), "SMBIOS Handle #", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat2a[] = > +{ > + {ACPI_DMT_UINT16, 0, "SMBIOS Handle", DT_OPTIONAL}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * HPET - High Precision Event Timer table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoHpet[] = > +{ > + {ACPI_DMT_UINT32, ACPI_HPET_OFFSET (Id), "Hardware Block ID", 0}, > + {ACPI_DMT_GAS, ACPI_HPET_OFFSET (Address), "Timer Block Register", 0}, > + {ACPI_DMT_UINT8, ACPI_HPET_OFFSET (Sequence), "Sequence Number", 0}, > + {ACPI_DMT_UINT16, ACPI_HPET_OFFSET (MinimumTick), "Minimum Clock Ticks", 0}, > + {ACPI_DMT_UINT8, ACPI_HPET_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_HPET_FLAG_OFFSET (Flags,0), "4K Page Protect", 0}, > + {ACPI_DMT_FLAG1, ACPI_HPET_FLAG_OFFSET (Flags,0), "64K Page Protect", 0}, > + ACPI_DMT_TERMINATOR > +}; > +/*! [End] no source code translation !*/ > diff --git a/src/acpica/source/common/dmtbinfo2.c b/src/acpica/source/common/dmtbinfo2.c > new file mode 100644 > index 00000000..a925ac1f > --- /dev/null > +++ b/src/acpica/source/common/dmtbinfo2.c > @@ -0,0 +1,1541 @@ > +/****************************************************************************** > + * > + * Module Name: dmtbinfo2 - Table info for non-AML tables > + * > + *****************************************************************************/ > + > +/****************************************************************************** > + * > + * 1. Copyright Notice > + * > + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. > + * All rights reserved. > + * > + * 2. License > + * > + * 2.1. This is your license from Intel Corp. under its intellectual property > + * rights. You may have additional license terms from the party that provided > + * you this software, covering your right to use that party's intellectual > + * property rights. > + * > + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a > + * copy of the source code appearing in this file ("Covered Code") an > + * irrevocable, perpetual, worldwide license under Intel's copyrights in the > + * base code distributed originally by Intel ("Original Intel Code") to copy, > + * make derivatives, distribute, use and display any portion of the Covered > + * Code in any form, with the right to sublicense such rights; and > + * > + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent > + * license (with the right to sublicense), under only those claims of Intel > + * patents that are infringed by the Original Intel Code, to make, use, sell, > + * offer to sell, and import the Covered Code and derivative works thereof > + * solely to the minimum extent necessary to exercise the above copyright > + * license, and in no event shall the patent license extend to any additions > + * to or modifications of the Original Intel Code. No other license or right > + * is granted directly or by implication, estoppel or otherwise; > + * > + * The above copyright and patent license is granted only if the following > + * conditions are met: > + * > + * 3. Conditions > + * > + * 3.1. Redistribution of Source with Rights to Further Distribute Source. > + * Redistribution of source code of any substantial portion of the Covered > + * Code or modification with rights to further distribute source must include > + * the above Copyright Notice, the above License, this list of Conditions, > + * and the following Disclaimer and Export Compliance provision. In addition, > + * Licensee must cause all Covered Code to which Licensee contributes to > + * contain a file documenting the changes Licensee made to create that Covered > + * Code and the date of any change. Licensee must include in that file the > + * documentation of any changes made by any predecessor Licensee. Licensee > + * must include a prominent statement that the modification is derived, > + * directly or indirectly, from Original Intel Code. > + * > + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. > + * Redistribution of source code of any substantial portion of the Covered > + * Code or modification without rights to further distribute source must > + * include the following Disclaimer and Export Compliance provision in the > + * documentation and/or other materials provided with distribution. In > + * addition, Licensee may not authorize further sublicense of source of any > + * portion of the Covered Code, and must include terms to the effect that the > + * license from Licensee to its licensee is limited to the intellectual > + * property embodied in the software Licensee provides to its licensee, and > + * not to intellectual property embodied in modifications its licensee may > + * make. > + * > + * 3.3. Redistribution of Executable. Redistribution in executable form of any > + * substantial portion of the Covered Code or modification must reproduce the > + * above Copyright Notice, and the following Disclaimer and Export Compliance > + * provision in the documentation and/or other materials provided with the > + * distribution. > + * > + * 3.4. Intel retains all right, title, and interest in and to the Original > + * Intel Code. > + * > + * 3.5. Neither the name Intel nor any other trademark owned or controlled by > + * Intel shall be used in advertising or otherwise to promote the sale, use or > + * other dealings in products derived from or relating to the Covered Code > + * without prior written authorization from Intel. > + * > + * 4. Disclaimer and Export Compliance > + * > + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED > + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE > + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, > + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY > + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY > + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A > + * PARTICULAR PURPOSE. > + * > + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES > + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR > + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, > + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY > + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL > + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS > + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY > + * LIMITED REMEDY. > + * > + * 4.3. Licensee shall not export, either directly or indirectly, any of this > + * software or system incorporating such software without first obtaining any > + * required license or other approval from the U. S. Department of Commerce or > + * any other agency or department of the United States Government. In the > + * event Licensee exports any such software from the United States or > + * re-exports any such software from a foreign destination, Licensee shall > + * ensure that the distribution and export/re-export of the software is in > + * compliance with all laws, regulations, orders, or other restrictions of the > + * U.S. Export Administration Regulations. Licensee agrees that neither it nor > + * any of its subsidiaries will export/re-export any technical data, process, > + * software, or service, directly or indirectly, to any country for which the > + * United States government or any agency thereof requires an export license, > + * other governmental approval, or letter of assurance, without first obtaining > + * such license, approval or letter. > + * > + ***************************************************************************** > + * > + * Alternatively, you may choose to be licensed under the terms of the > + * following license: > + * > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions > + * are met: > + * 1. Redistributions of source code must retain the above copyright > + * notice, this list of conditions, and the following disclaimer, > + * without modification. > + * 2. Redistributions in binary form must reproduce at minimum a disclaimer > + * substantially similar to the "NO WARRANTY" disclaimer below > + * ("Disclaimer") and any redistribution must be conditioned upon > + * including a substantially similar Disclaimer requirement for further > + * binary redistribution. > + * 3. Neither the names of the above-listed copyright holders nor the names > + * of any contributors may be used to endorse or promote products derived > + * from this software without specific prior written permission. > + * > + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS > + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT > + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR > + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT > + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, > + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT > + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, > + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY > + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE > + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > + * > + * Alternatively, you may choose to be licensed under the terms of the > + * GNU General Public License ("GPL") version 2 as published by the Free > + * Software Foundation. > + * > + *****************************************************************************/ > + > +#include "acpi.h" > +#include "accommon.h" > +#include "acdisasm.h" > +#include "actbinfo.h" > + > +/* This module used for application-level code only */ > + > +#define _COMPONENT ACPI_CA_DISASSEMBLER > + ACPI_MODULE_NAME ("dmtbinfo2") > + > +/* > + * How to add a new table: > + * > + * - Add the C table definition to the actbl1.h or actbl2.h header. > + * - Add ACPI_xxxx_OFFSET macro(s) for the table (and subtables) to list below. > + * - Define the table in this file (for the disassembler). If any > + * new data types are required (ACPI_DMT_*), see below. > + * - Add an external declaration for the new table definition (AcpiDmTableInfo*) > + * in acdisam.h > + * - Add new table definition to the dispatch table in dmtable.c (AcpiDmTableData) > + * If a simple table (with no subtables), no disassembly code is needed. > + * Otherwise, create the AcpiDmDump* function for to disassemble the table > + * and add it to the dmtbdump.c file. > + * - Add an external declaration for the new AcpiDmDump* function in acdisasm.h > + * - Add the new AcpiDmDump* function to the dispatch table in dmtable.c > + * - Create a template for the new table > + * - Add data table compiler support > + * > + * How to add a new data type (ACPI_DMT_*): > + * > + * - Add new type at the end of the ACPI_DMT list in acdisasm.h > + * - Add length and implementation cases in dmtable.c (disassembler) > + * - Add type and length cases in dtutils.c (DT compiler) > + */ > + > +/* > + * Remaining tables are not consumed directly by the ACPICA subsystem > + */ > + > + > +/******************************************************************************* > + * > + * IORT - IO Remapping Table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoIort[] = > +{ > + {ACPI_DMT_UINT32, ACPI_IORT_OFFSET (NodeCount), "Node Count", 0}, > + {ACPI_DMT_UINT32, ACPI_IORT_OFFSET (NodeOffset), "Node Offset", 0}, > + {ACPI_DMT_UINT32, ACPI_IORT_OFFSET (Reserved), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Optional padding field */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoIortPad[] = > +{ > + {ACPI_DMT_RAW_BUFFER, 0, "Optional Padding", DT_OPTIONAL}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Common Subtable header (one per Subtable) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoIortHdr[] = > +{ > + {ACPI_DMT_UINT8, ACPI_IORTH_OFFSET (Type), "Type", 0}, > + {ACPI_DMT_UINT16, ACPI_IORTH_OFFSET (Length), "Length", DT_LENGTH}, > + {ACPI_DMT_UINT8, ACPI_IORTH_OFFSET (Revision), "Revision", 0}, > + {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (MappingCount), "Mapping Count", 0}, > + {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (MappingOffset), "Mapping Offset", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoIortMap[] = > +{ > + {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (InputBase), "Input base", DT_OPTIONAL}, > + {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (IdCount), "ID Count", 0}, > + {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (OutputBase), "Output Base", 0}, > + {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (OutputReference), "Output Reference", 0}, > + {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (Flags), "Flags (decoded below)", 0}, > + {ACPI_DMT_FLAG0, ACPI_IORTM_FLAG_OFFSET (Flags, 0), "Single Mapping", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoIortAcc[] = > +{ > + {ACPI_DMT_UINT32, ACPI_IORTA_OFFSET (CacheCoherency), "Cache Coherency", 0}, > + {ACPI_DMT_UINT8, ACPI_IORTA_OFFSET (Hints), "Hints (decoded below)", 0}, > + {ACPI_DMT_FLAG0, ACPI_IORTA_FLAG_OFFSET (Hints, 0), "Transient", 0}, > + {ACPI_DMT_FLAG1, ACPI_IORTA_FLAG_OFFSET (Hints, 0), "Write Allocate", 0}, > + {ACPI_DMT_FLAG2, ACPI_IORTA_FLAG_OFFSET (Hints, 0), "Read Allocate", 0}, > + {ACPI_DMT_FLAG3, ACPI_IORTA_FLAG_OFFSET (Hints, 0), "Override", 0}, > + {ACPI_DMT_UINT16, ACPI_IORTA_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT8, ACPI_IORTA_OFFSET (MemoryFlags), "Memory Flags (decoded below)", 0}, > + {ACPI_DMT_FLAG0, ACPI_IORTA_FLAG_OFFSET (MemoryFlags, 0), "Coherency", 0}, > + {ACPI_DMT_FLAG1, ACPI_IORTA_FLAG_OFFSET (MemoryFlags, 0), "Device Attribute", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* IORT subtables */ > + > +/* 0x00: ITS Group */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoIort0[] = > +{ > + {ACPI_DMT_UINT32, ACPI_IORT0_OFFSET (ItsCount), "ItsCount", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoIort0a[] = > +{ > + {ACPI_DMT_UINT32, 0, "Identifiers", DT_OPTIONAL}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 0x01: Named Component */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoIort1[] = > +{ > + {ACPI_DMT_UINT32, ACPI_IORT1_OFFSET (NodeFlags), "Node Flags", 0}, > + {ACPI_DMT_IORTMEM, ACPI_IORT1_OFFSET (MemoryProperties), "Memory Properties", 0}, > + {ACPI_DMT_UINT8, ACPI_IORT1_OFFSET (MemoryAddressLimit), "Memory Size Limit", 0}, > + {ACPI_DMT_STRING, ACPI_IORT1_OFFSET (DeviceName[0]), "Device Name", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoIort1a[] = > +{ > + {ACPI_DMT_RAW_BUFFER, 0, "Padding", DT_OPTIONAL}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 0x02: PCI Root Complex */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoIort2[] = > +{ > + {ACPI_DMT_IORTMEM, ACPI_IORT2_OFFSET (MemoryProperties), "Memory Properties", 0}, > + {ACPI_DMT_UINT32, ACPI_IORT2_OFFSET (AtsAttribute), "ATS Attribute", 0}, > + {ACPI_DMT_UINT32, ACPI_IORT2_OFFSET (PciSegmentNumber), "PCI Segment Number", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 0x03: SMMUv1/2 */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoIort3[] = > +{ > + {ACPI_DMT_UINT64, ACPI_IORT3_OFFSET (BaseAddress), "Base Address", 0}, > + {ACPI_DMT_UINT64, ACPI_IORT3_OFFSET (Span), "Span", 0}, > + {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (Model), "Model", 0}, > + {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (Flags), "Flags (decoded below)", 0}, > + {ACPI_DMT_FLAG0, ACPI_IORT3_FLAG_OFFSET (Flags, 0), "DVM Supported", 0}, > + {ACPI_DMT_FLAG1, ACPI_IORT3_FLAG_OFFSET (Flags, 0), "Coherent Walk", 0}, > + {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (GlobalInterruptOffset), "Global Interrupt Offset", 0}, > + {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (ContextInterruptCount), "Context Interrupt Count", 0}, > + {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (ContextInterruptOffset), "Context Interrupt Offset", 0}, > + {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (PmuInterruptCount), "PMU Interrupt Count", 0}, > + {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (PmuInterruptOffset), "PMU Interrupt Offset", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoIort3a[] = > +{ > + {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgIrpt), "NSgIrpt", 0}, > + {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgIrptFlags), "NSgIrpt Flags (decoded below)", 0}, > + {ACPI_DMT_FLAG0, ACPI_IORT3a_FLAG_OFFSET (NSgIrptFlags, 0), "Edge Triggered", 0}, > + {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgCfgIrpt), "NSgCfgIrpt", 0}, > + {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgCfgIrptFlags), "NSgCfgIrpt Flags (decoded below)", 0}, > + {ACPI_DMT_FLAG0, ACPI_IORT3a_FLAG_OFFSET (NSgCfgIrptFlags, 0), "Edge Triggered", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoIort3b[] = > +{ > + {ACPI_DMT_UINT64, 0, "Context Interrupt", DT_OPTIONAL}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoIort3c[] = > +{ > + {ACPI_DMT_UINT64, 0, "PMU Interrupt", DT_OPTIONAL}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 0x04: SMMUv3 */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoIort4[] = > +{ > + {ACPI_DMT_UINT64, ACPI_IORT4_OFFSET (BaseAddress), "Base Address", 0}, > + {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (Flags), "Flags (decoded below)", 0}, > + {ACPI_DMT_FLAG0, ACPI_IORT4_FLAG_OFFSET (Flags, 0), "COHACC Override", 0}, > + {ACPI_DMT_FLAG1, ACPI_IORT4_FLAG_OFFSET (Flags, 0), "HTTU Override", 0}, > + {ACPI_DMT_FLAG3, ACPI_IORT4_FLAG_OFFSET (Flags, 0), "Proximity Domain Valid", 0}, > + {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_IORT4_OFFSET (VatosAddress), "VATOS Address", 0}, > + {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (Model), "Model", 0}, > + {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (EventGsiv), "Event GSIV", 0}, > + {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (PriGsiv), "PRI GSIV", 0}, > + {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (GerrGsiv), "GERR GSIV", 0}, > + {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (SyncGsiv), "Sync GSIV", 0}, > + {ACPI_DMT_UINT8, ACPI_IORT4_OFFSET (Pxm), "Proximity Domain", 0}, > + {ACPI_DMT_UINT8, ACPI_IORT4_OFFSET (Reserved1), "Reserved", 0}, > + {ACPI_DMT_UINT16, ACPI_IORT4_OFFSET (Reserved2), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (IdMappingIndex), "Device ID Mapping Index", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * IVRS - I/O Virtualization Reporting Structure > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs[] = > +{ > + {ACPI_DMT_UINT32, ACPI_IVRS_OFFSET (Info), "Virtualization Info", 0}, > + {ACPI_DMT_UINT64, ACPI_IVRS_OFFSET (Reserved), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Common Subtable header (one per Subtable) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsHdr[] = > +{ > + {ACPI_DMT_IVRS, ACPI_IVRSH_OFFSET (Type), "Subtable Type", 0}, > + {ACPI_DMT_UINT8, ACPI_IVRSH_OFFSET (Flags), "Flags", 0}, > + {ACPI_DMT_UINT16, ACPI_IVRSH_OFFSET (Length), "Length", DT_LENGTH}, > + {ACPI_DMT_UINT16, ACPI_IVRSH_OFFSET (DeviceId), "DeviceId", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* IVRS subtables */ > + > +/* 0x10: I/O Virtualization Hardware Definition (IVHD) Block */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs0[] = > +{ > + {ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (CapabilityOffset), "Capability Offset", 0}, > + {ACPI_DMT_UINT64, ACPI_IVRS0_OFFSET (BaseAddress), "Base Address", 0}, > + {ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (PciSegmentGroup), "PCI Segment Group", 0}, > + {ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (Info), "Virtualization Info", 0}, > + {ACPI_DMT_UINT32, ACPI_IVRS0_OFFSET (Reserved), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition (IVMD) Block */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs1[] = > +{ > + {ACPI_DMT_UINT16, ACPI_IVRS1_OFFSET (AuxData), "Auxiliary Data", 0}, > + {ACPI_DMT_UINT64, ACPI_IVRS1_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_IVRS1_OFFSET (StartAddress), "Start Address", 0}, > + {ACPI_DMT_UINT64, ACPI_IVRS1_OFFSET (MemoryLength), "Memory Length", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Device entry header for IVHD block */ > + > +#define ACPI_DMT_IVRS_DE_HEADER \ > + {ACPI_DMT_UINT8, ACPI_IVRSD_OFFSET (Type), "Entry Type", 0}, \ > + {ACPI_DMT_UINT16, ACPI_IVRSD_OFFSET (Id), "Device ID", 0}, \ > + {ACPI_DMT_UINT8, ACPI_IVRSD_OFFSET (DataSetting), "Data Setting", 0} > + > +/* 4-byte device entry */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs4[] = > +{ > + ACPI_DMT_IVRS_DE_HEADER, > + {ACPI_DMT_EXIT, 0, NULL, 0}, > +}; > + > +/* 8-byte device entry */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8a[] = > +{ > + ACPI_DMT_IVRS_DE_HEADER, > + {ACPI_DMT_UINT8, ACPI_IVRS8A_OFFSET (Reserved1), "Reserved", 0}, > + {ACPI_DMT_UINT16, ACPI_IVRS8A_OFFSET (UsedId), "Source Used Device ID", 0}, > + {ACPI_DMT_UINT8, ACPI_IVRS8A_OFFSET (Reserved2), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 8-byte device entry */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8b[] = > +{ > + ACPI_DMT_IVRS_DE_HEADER, > + {ACPI_DMT_UINT32, ACPI_IVRS8B_OFFSET (ExtendedData), "Extended Data", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 8-byte device entry */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8c[] = > +{ > + ACPI_DMT_IVRS_DE_HEADER, > + {ACPI_DMT_UINT8, ACPI_IVRS8C_OFFSET (Handle), "Handle", 0}, > + {ACPI_DMT_UINT16, ACPI_IVRS8C_OFFSET (UsedId), "Source Used Device ID", 0}, > + {ACPI_DMT_UINT8, ACPI_IVRS8C_OFFSET (Variety), "Variety", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * LPIT - Low Power Idle Table > + * > + ******************************************************************************/ > + > +/* Main table consists only of the standard ACPI table header */ > + > +/* Common Subtable header (one per Subtable) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoLpitHdr[] = > +{ > + {ACPI_DMT_LPIT, ACPI_LPITH_OFFSET (Type), "Subtable Type", 0}, > + {ACPI_DMT_UINT32, ACPI_LPITH_OFFSET (Length), "Length", DT_LENGTH}, > + {ACPI_DMT_UINT16, ACPI_LPITH_OFFSET (UniqueId), "Unique ID", 0}, > + {ACPI_DMT_UINT16, ACPI_LPITH_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_LPITH_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_LPITH_FLAG_OFFSET (Flags, 0), "State Disabled", 0}, > + {ACPI_DMT_FLAG1, ACPI_LPITH_FLAG_OFFSET (Flags, 0), "No Counter", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* LPIT Subtables */ > + > +/* 0: Native C-state */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoLpit0[] = > +{ > + {ACPI_DMT_GAS, ACPI_LPIT0_OFFSET (EntryTrigger), "Entry Trigger", 0}, > + {ACPI_DMT_UINT32, ACPI_LPIT0_OFFSET (Residency), "Residency", 0}, > + {ACPI_DMT_UINT32, ACPI_LPIT0_OFFSET (Latency), "Latency", 0}, > + {ACPI_DMT_GAS, ACPI_LPIT0_OFFSET (ResidencyCounter), "Residency Counter", 0}, > + {ACPI_DMT_UINT64, ACPI_LPIT0_OFFSET (CounterFrequency), "Counter Frequency", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * MADT - Multiple APIC Description Table and subtables > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt[] = > +{ > + {ACPI_DMT_UINT32, ACPI_MADT_OFFSET (Address), "Local Apic Address", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_MADT_FLAG_OFFSET (Flags,0), "PC-AT Compatibility", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Common Subtable header (one per Subtable) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMadtHdr[] = > +{ > + {ACPI_DMT_MADT, ACPI_MADTH_OFFSET (Type), "Subtable Type", 0}, > + {ACPI_DMT_UINT8, ACPI_MADTH_OFFSET (Length), "Length", DT_LENGTH}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* MADT Subtables */ > + > +/* 0: processor APIC */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt0[] = > +{ > + {ACPI_DMT_UINT8, ACPI_MADT0_OFFSET (ProcessorId), "Processor ID", 0}, > + {ACPI_DMT_UINT8, ACPI_MADT0_OFFSET (Id), "Local Apic ID", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT0_OFFSET (LapicFlags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_MADT0_FLAG_OFFSET (LapicFlags,0), "Processor Enabled", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 1: IO APIC */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt1[] = > +{ > + {ACPI_DMT_UINT8, ACPI_MADT1_OFFSET (Id), "I/O Apic ID", 0}, > + {ACPI_DMT_UINT8, ACPI_MADT1_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT1_OFFSET (Address), "Address", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT1_OFFSET (GlobalIrqBase), "Interrupt", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 2: Interrupt Override */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt2[] = > +{ > + {ACPI_DMT_UINT8, ACPI_MADT2_OFFSET (Bus), "Bus", 0}, > + {ACPI_DMT_UINT8, ACPI_MADT2_OFFSET (SourceIrq), "Source", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT2_OFFSET (GlobalIrq), "Interrupt", 0}, > + {ACPI_DMT_UINT16, ACPI_MADT2_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAGS0, ACPI_MADT2_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, > + {ACPI_DMT_FLAGS2, ACPI_MADT2_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 3: NMI Sources */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt3[] = > +{ > + {ACPI_DMT_UINT16, ACPI_MADT3_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAGS0, ACPI_MADT3_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, > + {ACPI_DMT_FLAGS2, ACPI_MADT3_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT3_OFFSET (GlobalIrq), "Interrupt", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 4: Local APIC NMI */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt4[] = > +{ > + {ACPI_DMT_UINT8, ACPI_MADT4_OFFSET (ProcessorId), "Processor ID", 0}, > + {ACPI_DMT_UINT16, ACPI_MADT4_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAGS0, ACPI_MADT4_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, > + {ACPI_DMT_FLAGS2, ACPI_MADT4_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, > + {ACPI_DMT_UINT8, ACPI_MADT4_OFFSET (Lint), "Interrupt Input LINT", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 5: Address Override */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt5[] = > +{ > + {ACPI_DMT_UINT16, ACPI_MADT5_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_MADT5_OFFSET (Address), "APIC Address", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 6: I/O Sapic */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt6[] = > +{ > + {ACPI_DMT_UINT8, ACPI_MADT6_OFFSET (Id), "I/O Sapic ID", 0}, > + {ACPI_DMT_UINT8, ACPI_MADT6_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT6_OFFSET (GlobalIrqBase), "Interrupt Base", 0}, > + {ACPI_DMT_UINT64, ACPI_MADT6_OFFSET (Address), "Address", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 7: Local Sapic */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt7[] = > +{ > + {ACPI_DMT_UINT8, ACPI_MADT7_OFFSET (ProcessorId), "Processor ID", 0}, > + {ACPI_DMT_UINT8, ACPI_MADT7_OFFSET (Id), "Local Sapic ID", 0}, > + {ACPI_DMT_UINT8, ACPI_MADT7_OFFSET (Eid), "Local Sapic EID", 0}, > + {ACPI_DMT_UINT24, ACPI_MADT7_OFFSET (Reserved[0]), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT7_OFFSET (LapicFlags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_MADT7_FLAG_OFFSET (LapicFlags,0), "Processor Enabled", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT7_OFFSET (Uid), "Processor UID", 0}, > + {ACPI_DMT_STRING, ACPI_MADT7_OFFSET (UidString[0]), "Processor UID String", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 8: Platform Interrupt Source */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt8[] = > +{ > + {ACPI_DMT_UINT16, ACPI_MADT8_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAGS0, ACPI_MADT8_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, > + {ACPI_DMT_FLAGS2, ACPI_MADT8_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, > + {ACPI_DMT_UINT8, ACPI_MADT8_OFFSET (Type), "InterruptType", 0}, > + {ACPI_DMT_UINT8, ACPI_MADT8_OFFSET (Id), "Processor ID", 0}, > + {ACPI_DMT_UINT8, ACPI_MADT8_OFFSET (Eid), "Processor EID", 0}, > + {ACPI_DMT_UINT8, ACPI_MADT8_OFFSET (IoSapicVector), "I/O Sapic Vector", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT8_OFFSET (GlobalIrq), "Interrupt", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT8_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_MADT8_OFFSET (Flags), "CPEI Override", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 9: Processor Local X2_APIC (ACPI 4.0) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt9[] = > +{ > + {ACPI_DMT_UINT16, ACPI_MADT9_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT9_OFFSET (LocalApicId), "Processor x2Apic ID", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT9_OFFSET (LapicFlags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_MADT9_FLAG_OFFSET (LapicFlags,0), "Processor Enabled", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT9_OFFSET (Uid), "Processor UID", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 10: Local X2_APIC NMI (ACPI 4.0) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt10[] = > +{ > + {ACPI_DMT_UINT16, ACPI_MADT10_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAGS0, ACPI_MADT10_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, > + {ACPI_DMT_FLAGS2, ACPI_MADT10_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT10_OFFSET (Uid), "Processor UID", 0}, > + {ACPI_DMT_UINT8, ACPI_MADT10_OFFSET (Lint), "Interrupt Input LINT", 0}, > + {ACPI_DMT_UINT24, ACPI_MADT10_OFFSET (Reserved[0]), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 11: Generic Interrupt Controller (ACPI 5.0) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt11[] = > +{ > + {ACPI_DMT_UINT16, ACPI_MADT11_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (CpuInterfaceNumber), "CPU Interface Number", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (Uid), "Processor UID", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Processor Enabled", 0}, > + {ACPI_DMT_FLAG1, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Performance Interrupt Trigger Mode", 0}, > + {ACPI_DMT_FLAG2, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Virtual GIC Interrupt Trigger Mode", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (ParkingVersion), "Parking Protocol Version", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (PerformanceInterrupt), "Performance Interrupt", 0}, > + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (ParkedAddress), "Parked Address", 0}, > + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (BaseAddress), "Base Address", 0}, > + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GicvBaseAddress), "Virtual GIC Base Address", 0}, > + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GichBaseAddress), "Hypervisor GIC Base Address", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (VgicInterrupt), "Virtual GIC Interrupt", 0}, > + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GicrBaseAddress), "Redistributor Base Address", 0}, > + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (ArmMpidr), "ARM MPIDR", 0}, > + {ACPI_DMT_UINT8, ACPI_MADT11_OFFSET (EfficiencyClass), "Efficiency Class", 0}, > + {ACPI_DMT_UINT24, ACPI_MADT11_OFFSET (Reserved2[0]), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 12: Generic Interrupt Distributor (ACPI 5.0) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt12[] = > +{ > + {ACPI_DMT_UINT16, ACPI_MADT12_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT12_OFFSET (GicId), "Local GIC Hardware ID", 0}, > + {ACPI_DMT_UINT64, ACPI_MADT12_OFFSET (BaseAddress), "Base Address", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT12_OFFSET (GlobalIrqBase), "Interrupt Base", 0}, > + {ACPI_DMT_UINT8, ACPI_MADT12_OFFSET (Version), "Version", 0}, > + {ACPI_DMT_UINT24, ACPI_MADT12_OFFSET (Reserved2[0]), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 13: Generic MSI Frame (ACPI 5.1) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt13[] = > +{ > + {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT13_OFFSET (MsiFrameId), "MSI Frame ID", 0}, > + {ACPI_DMT_UINT64, ACPI_MADT13_OFFSET (BaseAddress), "Base Address", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT13_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_MADT13_FLAG_OFFSET (Flags,0), "Select SPI", 0}, > + {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (SpiCount), "SPI Count", 0}, > + {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (SpiBase), "SPI Base", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 14: Generic Redistributor (ACPI 5.1) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt14[] = > +{ > + {ACPI_DMT_UINT16, ACPI_MADT14_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_MADT14_OFFSET (BaseAddress), "Base Address", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT14_OFFSET (Length), "Length", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 15: Generic Translator (ACPI 6.0) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt15[] = > +{ > + {ACPI_DMT_UINT16, ACPI_MADT15_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT15_OFFSET (TranslationId), "Translation ID", 0}, > + {ACPI_DMT_UINT64, ACPI_MADT15_OFFSET (BaseAddress), "Base Address", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT15_OFFSET (Reserved2), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * MCFG - PCI Memory Mapped Configuration table and Subtable > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMcfg[] = > +{ > + {ACPI_DMT_UINT64, ACPI_MCFG_OFFSET (Reserved[0]), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMcfg0[] = > +{ > + {ACPI_DMT_UINT64, ACPI_MCFG0_OFFSET (Address), "Base Address", 0}, > + {ACPI_DMT_UINT16, ACPI_MCFG0_OFFSET (PciSegment), "Segment Group Number", 0}, > + {ACPI_DMT_UINT8, ACPI_MCFG0_OFFSET (StartBusNumber), "Start Bus Number", 0}, > + {ACPI_DMT_UINT8, ACPI_MCFG0_OFFSET (EndBusNumber), "End Bus Number", 0}, > + {ACPI_DMT_UINT32, ACPI_MCFG0_OFFSET (Reserved), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * MCHI - Management Controller Host Interface table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMchi[] = > +{ > + {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (InterfaceType), "Interface Type", 0}, > + {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (Protocol), "Protocol", 0}, > + {ACPI_DMT_UINT64, ACPI_MCHI_OFFSET (ProtocolData), "Protocol Data", 0}, > + {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (InterruptType), "Interrupt Type", 0}, > + {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (Gpe), "Gpe", 0}, > + {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciDeviceFlag), "Pci Device Flag", 0}, > + {ACPI_DMT_UINT32, ACPI_MCHI_OFFSET (GlobalInterrupt), "Global Interrupt", 0}, > + {ACPI_DMT_GAS, ACPI_MCHI_OFFSET (ControlRegister), "Control Register", 0}, > + {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciSegment), "Pci Segment", 0}, > + {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciBus), "Pci Bus", 0}, > + {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciDevice), "Pci Device", 0}, > + {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciFunction), "Pci Function", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * MPST - Memory Power State Table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMpst[] = > +{ > + {ACPI_DMT_UINT8, ACPI_MPST_OFFSET (ChannelId), "Channel ID", 0}, > + {ACPI_DMT_UINT24, ACPI_MPST_OFFSET (Reserved1[0]), "Reserved", 0}, > + {ACPI_DMT_UINT16, ACPI_MPST_OFFSET (PowerNodeCount), "Power Node Count", 0}, > + {ACPI_DMT_UINT16, ACPI_MPST_OFFSET (Reserved2), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* MPST subtables */ > + > +/* 0: Memory Power Node Structure */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMpst0[] = > +{ > + {ACPI_DMT_UINT8, ACPI_MPST0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_MPST0_FLAG_OFFSET (Flags,0), "Node Enabled", 0}, > + {ACPI_DMT_FLAG1, ACPI_MPST0_FLAG_OFFSET (Flags,0), "Power Managed", 0}, > + {ACPI_DMT_FLAG2, ACPI_MPST0_FLAG_OFFSET (Flags,0), "Hot Plug Capable", 0}, > + > + {ACPI_DMT_UINT8, ACPI_MPST0_OFFSET (Reserved1), "Reserved", 0}, > + {ACPI_DMT_UINT16, ACPI_MPST0_OFFSET (NodeId), "Node ID", 0}, > + {ACPI_DMT_UINT32, ACPI_MPST0_OFFSET (Length), "Length", 0}, > + {ACPI_DMT_UINT64, ACPI_MPST0_OFFSET (RangeAddress), "Range Address", 0}, > + {ACPI_DMT_UINT64, ACPI_MPST0_OFFSET (RangeLength), "Range Length", 0}, > + {ACPI_DMT_UINT32, ACPI_MPST0_OFFSET (NumPowerStates), "Num Power States", 0}, > + {ACPI_DMT_UINT32, ACPI_MPST0_OFFSET (NumPhysicalComponents), "Num Physical Components", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 0A: Sub-subtable - Memory Power State Structure (follows Memory Power Node above) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMpst0A[] = > +{ > + {ACPI_DMT_UINT8, ACPI_MPST0A_OFFSET (PowerState), "Power State", 0}, > + {ACPI_DMT_UINT8, ACPI_MPST0A_OFFSET (InfoIndex), "InfoIndex", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 0B: Sub-subtable - Physical Component ID Structure (follows Memory Power State(s) above) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMpst0B[] = > +{ > + {ACPI_DMT_UINT16, ACPI_MPST0B_OFFSET (ComponentId), "Component Id", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 01: Power Characteristics Count (follows all Power Node(s) above) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMpst1[] = > +{ > + {ACPI_DMT_UINT16, ACPI_MPST1_OFFSET (CharacteristicsCount), "Characteristics Count", 0}, > + {ACPI_DMT_UINT16, ACPI_MPST1_OFFSET (Reserved), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 02: Memory Power State Characteristics Structure */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMpst2[] = > +{ > + {ACPI_DMT_UINT8, ACPI_MPST2_OFFSET (StructureId), "Structure ID", 0}, > + {ACPI_DMT_UINT8, ACPI_MPST2_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_MPST2_FLAG_OFFSET (Flags,0), "Memory Preserved", 0}, > + {ACPI_DMT_FLAG1, ACPI_MPST2_FLAG_OFFSET (Flags,0), "Auto Entry", 0}, > + {ACPI_DMT_FLAG2, ACPI_MPST2_FLAG_OFFSET (Flags,0), "Auto Exit", 0}, > + > + {ACPI_DMT_UINT16, ACPI_MPST2_OFFSET (Reserved1), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_MPST2_OFFSET (AveragePower), "Average Power", 0}, > + {ACPI_DMT_UINT32, ACPI_MPST2_OFFSET (PowerSaving), "Power Saving", 0}, > + {ACPI_DMT_UINT64, ACPI_MPST2_OFFSET (ExitLatency), "Exit Latency", 0}, > + {ACPI_DMT_UINT64, ACPI_MPST2_OFFSET (Reserved2), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * MSCT - Maximum System Characteristics Table (ACPI 4.0) > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMsct[] = > +{ > + {ACPI_DMT_UINT32, ACPI_MSCT_OFFSET (ProximityOffset), "Proximity Offset", 0}, > + {ACPI_DMT_UINT32, ACPI_MSCT_OFFSET (MaxProximityDomains), "Max Proximity Domains", 0}, > + {ACPI_DMT_UINT32, ACPI_MSCT_OFFSET (MaxClockDomains), "Max Clock Domains", 0}, > + {ACPI_DMT_UINT64, ACPI_MSCT_OFFSET (MaxAddress), "Max Physical Address", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Subtable - Maximum Proximity Domain Information. Version 1 */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMsct0[] = > +{ > + {ACPI_DMT_UINT8, ACPI_MSCT0_OFFSET (Revision), "Revision", 0}, > + {ACPI_DMT_UINT8, ACPI_MSCT0_OFFSET (Length), "Length", DT_LENGTH}, > + {ACPI_DMT_UINT32, ACPI_MSCT0_OFFSET (RangeStart), "Domain Range Start", 0}, > + {ACPI_DMT_UINT32, ACPI_MSCT0_OFFSET (RangeEnd), "Domain Range End", 0}, > + {ACPI_DMT_UINT32, ACPI_MSCT0_OFFSET (ProcessorCapacity), "Processor Capacity", 0}, > + {ACPI_DMT_UINT64, ACPI_MSCT0_OFFSET (MemoryCapacity), "Memory Capacity", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * MTMR - MID Timer Table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMtmr[] = > +{ > + ACPI_DMT_TERMINATOR > +}; > + > +/* MTMR Subtables - MTMR Entry */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMtmr0[] = > +{ > + {ACPI_DMT_GAS, ACPI_MTMR0_OFFSET (PhysicalAddress), "PhysicalAddress", 0}, > + {ACPI_DMT_UINT32, ACPI_MTMR0_OFFSET (Frequency), "Frequency", 0}, > + {ACPI_DMT_UINT32, ACPI_MTMR0_OFFSET (Irq), "IRQ", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * NFIT - NVDIMM Firmware Interface Table and Subtables - (ACPI 6.0) > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit[] = > +{ > + {ACPI_DMT_UINT32, ACPI_NFIT_OFFSET (Reserved), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Common Subtable header */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoNfitHdr[] = > +{ > + {ACPI_DMT_NFIT, ACPI_NFITH_OFFSET (Type), "Subtable Type", 0}, > + {ACPI_DMT_UINT16, ACPI_NFITH_OFFSET (Length), "Length", DT_LENGTH}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 0: System Physical Address Range Structure */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit0[] = > +{ > + {ACPI_DMT_UINT16, ACPI_NFIT0_OFFSET (RangeIndex), "Range Index", 0}, > + {ACPI_DMT_UINT16, ACPI_NFIT0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_NFIT0_FLAG_OFFSET (Flags,0), "Add/Online Operation Only", 0}, > + {ACPI_DMT_FLAG1, ACPI_NFIT0_FLAG_OFFSET (Flags,0), "Proximity Domain Valid", 0}, > + {ACPI_DMT_UINT32, ACPI_NFIT0_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_NFIT0_OFFSET (ProximityDomain), "Proximity Domain", 0}, > + {ACPI_DMT_UUID, ACPI_NFIT0_OFFSET (RangeGuid[0]), "Address Range GUID", 0}, > + {ACPI_DMT_UINT64, ACPI_NFIT0_OFFSET (Address), "Address Range Base", 0}, > + {ACPI_DMT_UINT64, ACPI_NFIT0_OFFSET (Length), "Address Range Length", 0}, > + {ACPI_DMT_UINT64, ACPI_NFIT0_OFFSET (MemoryMapping), "Memory Map Attribute", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 1: Memory Device to System Address Range Map Structure */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit1[] = > +{ > + {ACPI_DMT_UINT32, ACPI_NFIT1_OFFSET (DeviceHandle), "Device Handle", 0}, > + {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (PhysicalId), "Physical Id", 0}, > + {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (RegionId), "Region Id", 0}, > + {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (RangeIndex), "Range Index", 0}, > + {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (RegionIndex), "Control Region Index", 0}, > + {ACPI_DMT_UINT64, ACPI_NFIT1_OFFSET (RegionSize), "Region Size", 0}, > + {ACPI_DMT_UINT64, ACPI_NFIT1_OFFSET (RegionOffset), "Region Offset", 0}, > + {ACPI_DMT_UINT64, ACPI_NFIT1_OFFSET (Address), "Address Region Base", 0}, > + {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (InterleaveIndex), "Interleave Index", 0}, > + {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (InterleaveWays), "Interleave Ways", 0}, > + {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (Flags), "Flags", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Save to device failed", 0}, > + {ACPI_DMT_FLAG1, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Restore from device failed", 0}, > + {ACPI_DMT_FLAG2, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Platform flush failed", 0}, > + {ACPI_DMT_FLAG3, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Device not armed", 0}, > + {ACPI_DMT_FLAG4, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Health events observed", 0}, > + {ACPI_DMT_FLAG5, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Health events enabled", 0}, > + {ACPI_DMT_FLAG6, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Mapping failed", 0}, > + {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (Reserved), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 2: Interleave Structure */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit2[] = > +{ > + {ACPI_DMT_UINT16, ACPI_NFIT2_OFFSET (InterleaveIndex), "Interleave Index", 0}, > + {ACPI_DMT_UINT16, ACPI_NFIT2_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_NFIT2_OFFSET (LineCount), "Line Count", 0}, > + {ACPI_DMT_UINT32, ACPI_NFIT2_OFFSET (LineSize), "Line Size", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit2a[] = > +{ > + {ACPI_DMT_UINT32, 0, "Line Offset", DT_OPTIONAL}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 3: SMBIOS Management Information Structure */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit3[] = > +{ > + {ACPI_DMT_UINT32, ACPI_NFIT3_OFFSET (Reserved), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit3a[] = > +{ > + {ACPI_DMT_RAW_BUFFER, 0, "SMBIOS Table Entries", DT_OPTIONAL}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 4: NVDIMM Control Region Structure */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit4[] = > +{ > + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (RegionIndex), "Region Index", 0}, > + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (VendorId), "Vendor Id", 0}, > + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (DeviceId), "Device Id", 0}, > + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (RevisionId), "Revision Id", 0}, > + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (SubsystemVendorId), "Subsystem Vendor Id", 0}, > + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (SubsystemDeviceId), "Subsystem Device Id", 0}, > + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (SubsystemRevisionId), "Subsystem Revision Id", 0}, > + {ACPI_DMT_UINT8, ACPI_NFIT4_OFFSET (ValidFields), "Valid Fields", 0}, > + {ACPI_DMT_UINT8, ACPI_NFIT4_OFFSET (ManufacturingLocation), "Manufacturing Location", 0}, > + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (ManufacturingDate), "Manufacturing Date", 0}, > + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Reserved[0]), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_NFIT4_OFFSET (SerialNumber), "Serial Number", 0}, > + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Code), "Code", 0}, > + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Windows), "Window Count", 0}, > + {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (WindowSize), "Window Size", 0}, > + {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (CommandOffset), "Command Offset", 0}, > + {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (CommandSize), "Command Size", 0}, > + {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (StatusOffset), "Status Offset", 0}, > + {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (StatusSize), "Status Size", 0}, > + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Flags), "Flags", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_NFIT4_FLAG_OFFSET (Flags,0), "Windows buffered", 0}, > + {ACPI_DMT_UINT48, ACPI_NFIT4_OFFSET (Reserved1[0]), "Reserved1", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 5: NVDIMM Block Data Window Region Structure */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit5[] = > +{ > + {ACPI_DMT_UINT16, ACPI_NFIT5_OFFSET (RegionIndex), "Region Index", 0}, > + {ACPI_DMT_UINT16, ACPI_NFIT5_OFFSET (Windows), "Window Count", 0}, > + {ACPI_DMT_UINT64, ACPI_NFIT5_OFFSET (Offset), "Offset", 0}, > + {ACPI_DMT_UINT64, ACPI_NFIT5_OFFSET (Size), "Size", 0}, > + {ACPI_DMT_UINT64, ACPI_NFIT5_OFFSET (Capacity), "Capacity", 0}, > + {ACPI_DMT_UINT64, ACPI_NFIT5_OFFSET (StartAddress), "Start Address", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 6: Flush Hint Address Structure */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit6[] = > +{ > + {ACPI_DMT_UINT32, ACPI_NFIT6_OFFSET (DeviceHandle), "Device Handle", 0}, > + {ACPI_DMT_UINT16, ACPI_NFIT6_OFFSET (HintCount), "Hint Count", 0}, > + {ACPI_DMT_UINT48, ACPI_NFIT6_OFFSET (Reserved[0]), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit6a[] = > +{ > + {ACPI_DMT_UINT64, 0, "Hint Address", DT_OPTIONAL}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit7[] = > +{ > + {ACPI_DMT_UINT8, ACPI_NFIT7_OFFSET (HighestCapability), "Highest Capability", 0}, > + {ACPI_DMT_UINT24, ACPI_NFIT7_OFFSET (Reserved[0]), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_NFIT7_OFFSET (Capabilities), "Capabilities (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_NFIT7_FLAG_OFFSET (Capabilities,0), "Cache Flush to NVDIMM", 0}, > + {ACPI_DMT_FLAG1, ACPI_NFIT7_FLAG_OFFSET (Capabilities,0), "Memory Flush to MVDIMM", 0}, > + {ACPI_DMT_FLAG2, ACPI_NFIT7_FLAG_OFFSET (Capabilities,0), "Memory Mirroring", 0}, > + {ACPI_DMT_UINT32, ACPI_NFIT7_OFFSET (Reserved2), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * PCCT - Platform Communications Channel Table (ACPI 5.0) > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoPcct[] = > +{ > + {ACPI_DMT_UINT32, ACPI_PCCT_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_PCCT_FLAG_OFFSET (Flags,0), "Platform", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT_OFFSET (Reserved), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* PCCT subtables */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoPcctHdr[] = > +{ > + {ACPI_DMT_PCCT, ACPI_PCCT0_OFFSET (Header.Type), "Subtable Type", 0}, > + {ACPI_DMT_UINT8, ACPI_PCCT0_OFFSET (Header.Length), "Length", DT_LENGTH}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 0: Generic Communications Subspace */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoPcct0[] = > +{ > + {ACPI_DMT_UINT48, ACPI_PCCT0_OFFSET (Reserved[0]), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT0_OFFSET (BaseAddress), "Base Address", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT0_OFFSET (Length), "Address Length", 0}, > + {ACPI_DMT_GAS, ACPI_PCCT0_OFFSET (DoorbellRegister), "Doorbell Register", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT0_OFFSET (PreserveMask), "Preserve Mask", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT0_OFFSET (WriteMask), "Write Mask", 0}, > + {ACPI_DMT_UINT32, ACPI_PCCT0_OFFSET (Latency), "Command Latency", 0}, > + {ACPI_DMT_UINT32, ACPI_PCCT0_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, > + {ACPI_DMT_UINT16, ACPI_PCCT0_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 1: HW-reduced Communications Subspace (ACPI 5.1) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoPcct1[] = > +{ > + {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (PlatformInterrupt), "Platform Interrupt", 0}, > + {ACPI_DMT_UINT8, ACPI_PCCT1_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_PCCT1_FLAG_OFFSET (Flags,0), "Polarity", 0}, > + {ACPI_DMT_FLAG1, ACPI_PCCT1_FLAG_OFFSET (Flags,0), "Mode", 0}, > + {ACPI_DMT_UINT8, ACPI_PCCT1_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (BaseAddress), "Base Address", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (Length), "Address Length", 0}, > + {ACPI_DMT_GAS, ACPI_PCCT1_OFFSET (DoorbellRegister), "Doorbell Register", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (PreserveMask), "Preserve Mask", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (WriteMask), "Write Mask", 0}, > + {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (Latency), "Command Latency", 0}, > + {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, > + {ACPI_DMT_UINT16, ACPI_PCCT1_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoPcct2[] = > +{ > + {ACPI_DMT_UINT32, ACPI_PCCT2_OFFSET (PlatformInterrupt), "Platform Interrupt", 0}, > + {ACPI_DMT_UINT8, ACPI_PCCT2_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_PCCT2_FLAG_OFFSET (Flags,0), "Polarity", 0}, > + {ACPI_DMT_FLAG1, ACPI_PCCT2_FLAG_OFFSET (Flags,0), "Mode", 0}, > + {ACPI_DMT_UINT8, ACPI_PCCT2_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (BaseAddress), "Base Address", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (Length), "Address Length", 0}, > + {ACPI_DMT_GAS, ACPI_PCCT2_OFFSET (DoorbellRegister), "Doorbell Register", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (PreserveMask), "Preserve Mask", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (WriteMask), "Write Mask", 0}, > + {ACPI_DMT_UINT32, ACPI_PCCT2_OFFSET (Latency), "Command Latency", 0}, > + {ACPI_DMT_UINT32, ACPI_PCCT2_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, > + {ACPI_DMT_UINT16, ACPI_PCCT2_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, > + {ACPI_DMT_GAS, ACPI_PCCT2_OFFSET (PlatformAckRegister), "Platform ACK Register", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (AckPreserveMask), "ACK Preserve Mask", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (AckWriteMask), "ACK Write Mask", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoPcct3[] = > +{ > + {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (PlatformInterrupt), "Platform Interrupt", 0}, > + {ACPI_DMT_UINT8, ACPI_PCCT3_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_PCCT3_FLAG_OFFSET (Flags,0), "Polarity", 0}, > + {ACPI_DMT_FLAG1, ACPI_PCCT3_FLAG_OFFSET (Flags,0), "Mode", 0}, > + {ACPI_DMT_UINT8, ACPI_PCCT3_OFFSET (Reserved1), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (BaseAddress), "Base Address", 0}, > + {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (Length), "Address Length", 0}, > + {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (DoorbellRegister), "Doorbell Register", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (PreserveMask), "Preserve Mask", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (WriteMask), "Write Mask", 0}, > + {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (Latency), "Command Latency", 0}, > + {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, > + {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, > + {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (PlatformAckRegister), "Platform ACK Register", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (AckPreserveMask), "ACK Preserve Mask", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (AckSetMask), "ACK Set Mask", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (Reserved2), "Reserved", 0}, > + {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (CmdCompleteRegister), "Command Complete Register", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (CmdCompleteMask), "Command Complete Check Mask", 0}, > + {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (CmdUpdateRegister), "Command Update Register", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (CmdUpdatePreserveMask), "Command Update Preserve Mask", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (CmdUpdateSetMask), "Command Update Set Mask", 0}, > + {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (ErrorStatusRegister), "Error Status Register", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (ErrorStatusMask), "Error Status Mask", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoPcct4[] = > +{ > + {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (PlatformInterrupt), "Platform Interrupt", 0}, > + {ACPI_DMT_UINT8, ACPI_PCCT4_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_PCCT4_FLAG_OFFSET (Flags,0), "Polarity", 0}, > + {ACPI_DMT_FLAG1, ACPI_PCCT4_FLAG_OFFSET (Flags,0), "Mode", 0}, > + {ACPI_DMT_UINT8, ACPI_PCCT4_OFFSET (Reserved1), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (BaseAddress), "Base Address", 0}, > + {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (Length), "Address Length", 0}, > + {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (DoorbellRegister), "Doorbell Register", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (PreserveMask), "Preserve Mask", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (WriteMask), "Write Mask", 0}, > + {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (Latency), "Command Latency", 0}, > + {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, > + {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, > + {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (PlatformAckRegister), "Platform ACK Register", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (AckPreserveMask), "ACK Preserve Mask", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (AckSetMask), "ACK Set Mask", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (Reserved2), "Reserved", 0}, > + {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (CmdCompleteRegister), "Command Complete Register", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (CmdCompleteMask), "Command Complete Check Mask", 0}, > + {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (CmdUpdateRegister), "Command Update Register", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (CmdUpdatePreserveMask), "Command Update Preserve Mask", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (CmdUpdateSetMask), "Command Update Set Mask", 0}, > + {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (ErrorStatusRegister), "Error Status Register", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (ErrorStatusMask), "Error Status Mask", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * PDTT - Platform Debug Trigger Table (ACPI 6.2) > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoPdtt[] = > +{ > + {ACPI_DMT_UINT8, ACPI_PDTT_OFFSET (TriggerCount), "Trigger Count", 0}, > + {ACPI_DMT_UINT24, ACPI_PDTT_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_PDTT_OFFSET (ArrayOffset), "Array Offset", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoPdtt0[] = > +{ > + {ACPI_DMT_UINT8, ACPI_PDTT0_OFFSET (SubchannelId), "Subchannel Id", 0}, > + {ACPI_DMT_UINT8, ACPI_PDTT0_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_PDTT0_FLAG_OFFSET (Flags,0), "Runtime Trigger", 0}, > + {ACPI_DMT_FLAG1, ACPI_PDTT0_FLAG_OFFSET (Flags,0), "Wait for Completion", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * PMTT - Platform Memory Topology Table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt[] = > +{ > + {ACPI_DMT_UINT32, ACPI_PMTT_OFFSET (Reserved), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Common Subtable header (one per Subtable) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoPmttHdr[] = > +{ > + {ACPI_DMT_PMTT, ACPI_PMTTH_OFFSET (Type), "Subtable Type", 0}, > + {ACPI_DMT_UINT8, ACPI_PMTTH_OFFSET (Reserved1), "Reserved", 0}, > + {ACPI_DMT_UINT16, ACPI_PMTTH_OFFSET (Length), "Length", DT_LENGTH}, > + {ACPI_DMT_UINT16, ACPI_PMTTH_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_PMTTH_FLAG_OFFSET (Flags,0), "Top-level Device", 0}, > + {ACPI_DMT_FLAG1, ACPI_PMTTH_FLAG_OFFSET (Flags,0), "Physical Element", 0}, > + {ACPI_DMT_FLAGS2, ACPI_PMTTH_FLAG_OFFSET (Flags,0), "Memory Type", 0}, > + {ACPI_DMT_UINT16, ACPI_PMTTH_OFFSET (Reserved2), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* PMTT Subtables */ > + > +/* 0: Socket */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt0[] = > +{ > + {ACPI_DMT_UINT16, ACPI_PMTT0_OFFSET (SocketId), "Socket ID", 0}, > + {ACPI_DMT_UINT16, ACPI_PMTT0_OFFSET (Reserved), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 1: Memory Controller */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt1[] = > +{ > + {ACPI_DMT_UINT32, ACPI_PMTT1_OFFSET (ReadLatency), "Read Latency", 0}, > + {ACPI_DMT_UINT32, ACPI_PMTT1_OFFSET (WriteLatency), "Write Latency", 0}, > + {ACPI_DMT_UINT32, ACPI_PMTT1_OFFSET (ReadBandwidth), "Read Bandwidth", 0}, > + {ACPI_DMT_UINT32, ACPI_PMTT1_OFFSET (WriteBandwidth), "Write Bandwidth", 0}, > + {ACPI_DMT_UINT16, ACPI_PMTT1_OFFSET (AccessWidth), "Access Width", 0}, > + {ACPI_DMT_UINT16, ACPI_PMTT1_OFFSET (Alignment), "Alignment", 0}, > + {ACPI_DMT_UINT16, ACPI_PMTT1_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT16, ACPI_PMTT1_OFFSET (DomainCount), "Domain Count", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 1a: Proximity Domain */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt1a[] = > +{ > + {ACPI_DMT_UINT32, ACPI_PMTT1A_OFFSET (ProximityDomain), "Proximity Domain", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 2: Physical Component */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt2[] = > +{ > + {ACPI_DMT_UINT16, ACPI_PMTT2_OFFSET (ComponentId), "Component ID", 0}, > + {ACPI_DMT_UINT16, ACPI_PMTT2_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_PMTT2_OFFSET (MemorySize), "Memory Size", 0}, > + {ACPI_DMT_UINT32, ACPI_PMTT2_OFFSET (BiosHandle), "Bios Handle", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * PPTT - Processor Properties Topology Table (ACPI 6.2) > + * > + ******************************************************************************/ > + > +/* Main table consists of only the standard ACPI header - subtables follow */ > + > +/* Common Subtable header (one per Subtable) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoPpttHdr[] = > +{ > + {ACPI_DMT_PPTT, ACPI_PPTTH_OFFSET (Type), "Subtable Type", 0}, > + {ACPI_DMT_UINT8, ACPI_PPTTH_OFFSET (Length), "Length", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 0: Processor hierarchy node */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0[] = > +{ > + {ACPI_DMT_UINT16, ACPI_PPTT0_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (Flags), "Flags (decoded below)", 0}, > + {ACPI_DMT_FLAG0, ACPI_PPTT0_FLAG_OFFSET (Flags,0), "Physical package", 0}, > + {ACPI_DMT_FLAG1, ACPI_PPTT0_FLAG_OFFSET (Flags,0), "ACPI Processor ID valid", 0}, > + {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (Parent), "Parent", 0}, > + {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (AcpiProcessorId), "ACPI Processor ID", 0}, > + {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (NumberOfPrivResources), "Private Resource Number", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0a[] = > +{ > + {ACPI_DMT_UINT32, 0, "Private Resource", DT_OPTIONAL}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 1: Cache type */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoPptt1[] = > +{ > + {ACPI_DMT_UINT16, ACPI_PPTT1_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (Flags), "Flags (decoded below)", 0}, > + {ACPI_DMT_FLAG0, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Size valid", 0}, > + {ACPI_DMT_FLAG1, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Number of Sets valid", 0}, > + {ACPI_DMT_FLAG2, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Associativity valid", 0}, > + {ACPI_DMT_FLAG3, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Allocation Type valid", 0}, > + {ACPI_DMT_FLAG4, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Cache Type valid", 0}, > + {ACPI_DMT_FLAG5, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Write Policy valid", 0}, > + {ACPI_DMT_FLAG6, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Line Size valid", 0}, > + {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (NextLevelOfCache), "Next Level of Cache", 0}, > + {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (Size), "Size", 0}, > + {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (NumberOfSets), "Number of Sets", 0}, > + {ACPI_DMT_UINT8, ACPI_PPTT1_OFFSET (Associativity), "Associativity", 0}, > + {ACPI_DMT_UINT8, ACPI_PPTT1_OFFSET (Attributes), "Attributes", 0}, > + {ACPI_DMT_FLAGS0, ACPI_PPTT1_OFFSET (Attributes), "Allocation Type", 0}, > + {ACPI_DMT_FLAGS2, ACPI_PPTT1_OFFSET (Attributes), "Cache Type", 0}, > + {ACPI_DMT_FLAG4, ACPI_PPTT1_OFFSET (Attributes), "Write Policy", 0}, > + {ACPI_DMT_UINT16, ACPI_PPTT1_OFFSET (LineSize), "Line Size", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 2: ID */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoPptt2[] = > +{ > + {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_PPTT2_OFFSET (VendorId), "VENDOR_ID", 0}, > + {ACPI_DMT_UINT64, ACPI_PPTT2_OFFSET (Level1Id), "LEVEL_1_ID", 0}, > + {ACPI_DMT_UINT64, ACPI_PPTT2_OFFSET (Level2Id), "LEVEL_2_ID", 0}, > + {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (MajorRev), "MAJOR_REV", 0}, > + {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (MinorRev), "MINOR_REV", 0}, > + {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (SpinRev), "SPIN_REV", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * RASF - RAS Feature table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoRasf[] = > +{ > + {ACPI_DMT_BUF12, ACPI_RASF_OFFSET (ChannelId[0]), "Channel ID", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * S3PT - S3 Performance Table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt[] = > +{ > + {ACPI_DMT_SIG, ACPI_S3PT_OFFSET (Signature[0]), "Signature", 0}, > + {ACPI_DMT_UINT32, ACPI_S3PT_OFFSET (Length), "Length", DT_LENGTH}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* S3PT subtable header */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoS3ptHdr[] = > +{ > + {ACPI_DMT_UINT16, ACPI_S3PTH_OFFSET (Type), "Type", 0}, > + {ACPI_DMT_UINT8, ACPI_S3PTH_OFFSET (Length), "Length", DT_LENGTH}, > + {ACPI_DMT_UINT8, ACPI_S3PTH_OFFSET (Revision), "Revision", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 0: Basic S3 Resume Performance Record */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt0[] = > +{ > + {ACPI_DMT_UINT32, ACPI_S3PT0_OFFSET (ResumeCount), "Resume Count", 0}, > + {ACPI_DMT_UINT64, ACPI_S3PT0_OFFSET (FullResume), "Full Resume", 0}, > + {ACPI_DMT_UINT64, ACPI_S3PT0_OFFSET (AverageResume), "Average Resume", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 1: Basic S3 Suspend Performance Record */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt1[] = > +{ > + {ACPI_DMT_UINT64, ACPI_S3PT1_OFFSET (SuspendStart), "Suspend Start", 0}, > + {ACPI_DMT_UINT64, ACPI_S3PT1_OFFSET (SuspendEnd), "Suspend End", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * SBST - Smart Battery Specification Table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoSbst[] = > +{ > + {ACPI_DMT_UINT32, ACPI_SBST_OFFSET (WarningLevel), "Warning Level", 0}, > + {ACPI_DMT_UINT32, ACPI_SBST_OFFSET (LowLevel), "Low Level", 0}, > + {ACPI_DMT_UINT32, ACPI_SBST_OFFSET (CriticalLevel), "Critical Level", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * SDEI - Software Delegated Execption Interface Descriptor Table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoSdei[] = > +{ > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * SDEV - Secure Devices Table (ACPI 6.2) > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoSdev[] = > +{ > + ACPI_DMT_TERMINATOR > +}; > + > +/* Common Subtable header (one per Subtable) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoSdevHdr[] = > +{ > + {ACPI_DMT_SDEV, ACPI_SDEVH_OFFSET (Type), "Subtable Type", 0}, > + {ACPI_DMT_UINT8, ACPI_SDEVH_OFFSET (Flags), "Flags (decoded below)", 0}, > + {ACPI_DMT_FLAG0, ACPI_SDEVH_FLAG_OFFSET (Flags,0), "Allow handoff to unsecure OS", 0}, > + {ACPI_DMT_UINT16, ACPI_SDEVH_OFFSET (Length), "Length", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* SDEV Subtables */ > + > +/* 0: Namespace Device Based Secure Device Structure */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoSdev0[] = > +{ > + {ACPI_DMT_UINT16, ACPI_SDEV0_OFFSET (DeviceIdOffset), "Device ID Offset", 0}, > + {ACPI_DMT_UINT16, ACPI_SDEV0_OFFSET (DeviceIdLength), "Device ID Length", 0}, > + {ACPI_DMT_UINT16, ACPI_SDEV0_OFFSET (VendorDataOffset), "Vendor Data Offset", 0}, > + {ACPI_DMT_UINT16, ACPI_SDEV0_OFFSET (VendorDataLength), "Vendor Data Length", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoSdev0a[] = > +{ > + {ACPI_DMT_STRING, 0, "Namepath", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 1: PCIe Endpoint Device Based Device Structure */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoSdev1[] = > +{ > + {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (Segment), "Segment", 0}, > + {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (StartBus), "Start Bus", 0}, > + {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (PathOffset), "Path Offset", 0}, > + {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (PathLength), "Path Length", 0}, > + {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (VendorDataOffset), "Vendor Data Offset", 0}, > + {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (VendorDataLength), "Vendor Data Length", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoSdev1a[] = > +{ > + {ACPI_DMT_UINT8, ACPI_SDEV1A_OFFSET (Device), "Device", 0}, > + {ACPI_DMT_UINT8, ACPI_SDEV1A_OFFSET (Function), "Function", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoSdev1b[] = > +{ > + {ACPI_DMT_RAW_BUFFER, 0, "Vendor Data", 0}, /*, DT_OPTIONAL}, */ > + ACPI_DMT_TERMINATOR > +}; > +/*! [End] no source code translation !*/ > diff --git a/src/acpica/source/common/dmtbinfo3.c b/src/acpica/source/common/dmtbinfo3.c > new file mode 100644 > index 00000000..c82e3db5 > --- /dev/null > +++ b/src/acpica/source/common/dmtbinfo3.c > @@ -0,0 +1,733 @@ > +/****************************************************************************** > + * > + * Module Name: dmtbinfo3 - Table info for non-AML tables > + * > + *****************************************************************************/ > + > +/****************************************************************************** > + * > + * 1. Copyright Notice > + * > + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. > + * All rights reserved. > + * > + * 2. License > + * > + * 2.1. This is your license from Intel Corp. under its intellectual property > + * rights. You may have additional license terms from the party that provided > + * you this software, covering your right to use that party's intellectual > + * property rights. > + * > + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a > + * copy of the source code appearing in this file ("Covered Code") an > + * irrevocable, perpetual, worldwide license under Intel's copyrights in the > + * base code distributed originally by Intel ("Original Intel Code") to copy, > + * make derivatives, distribute, use and display any portion of the Covered > + * Code in any form, with the right to sublicense such rights; and > + * > + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent > + * license (with the right to sublicense), under only those claims of Intel > + * patents that are infringed by the Original Intel Code, to make, use, sell, > + * offer to sell, and import the Covered Code and derivative works thereof > + * solely to the minimum extent necessary to exercise the above copyright > + * license, and in no event shall the patent license extend to any additions > + * to or modifications of the Original Intel Code. No other license or right > + * is granted directly or by implication, estoppel or otherwise; > + * > + * The above copyright and patent license is granted only if the following > + * conditions are met: > + * > + * 3. Conditions > + * > + * 3.1. Redistribution of Source with Rights to Further Distribute Source. > + * Redistribution of source code of any substantial portion of the Covered > + * Code or modification with rights to further distribute source must include > + * the above Copyright Notice, the above License, this list of Conditions, > + * and the following Disclaimer and Export Compliance provision. In addition, > + * Licensee must cause all Covered Code to which Licensee contributes to > + * contain a file documenting the changes Licensee made to create that Covered > + * Code and the date of any change. Licensee must include in that file the > + * documentation of any changes made by any predecessor Licensee. Licensee > + * must include a prominent statement that the modification is derived, > + * directly or indirectly, from Original Intel Code. > + * > + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. > + * Redistribution of source code of any substantial portion of the Covered > + * Code or modification without rights to further distribute source must > + * include the following Disclaimer and Export Compliance provision in the > + * documentation and/or other materials provided with distribution. In > + * addition, Licensee may not authorize further sublicense of source of any > + * portion of the Covered Code, and must include terms to the effect that the > + * license from Licensee to its licensee is limited to the intellectual > + * property embodied in the software Licensee provides to its licensee, and > + * not to intellectual property embodied in modifications its licensee may > + * make. > + * > + * 3.3. Redistribution of Executable. Redistribution in executable form of any > + * substantial portion of the Covered Code or modification must reproduce the > + * above Copyright Notice, and the following Disclaimer and Export Compliance > + * provision in the documentation and/or other materials provided with the > + * distribution. > + * > + * 3.4. Intel retains all right, title, and interest in and to the Original > + * Intel Code. > + * > + * 3.5. Neither the name Intel nor any other trademark owned or controlled by > + * Intel shall be used in advertising or otherwise to promote the sale, use or > + * other dealings in products derived from or relating to the Covered Code > + * without prior written authorization from Intel. > + * > + * 4. Disclaimer and Export Compliance > + * > + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED > + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE > + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, > + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY > + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY > + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A > + * PARTICULAR PURPOSE. > + * > + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES > + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR > + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, > + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY > + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL > + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS > + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY > + * LIMITED REMEDY. > + * > + * 4.3. Licensee shall not export, either directly or indirectly, any of this > + * software or system incorporating such software without first obtaining any > + * required license or other approval from the U. S. Department of Commerce or > + * any other agency or department of the United States Government. In the > + * event Licensee exports any such software from the United States or > + * re-exports any such software from a foreign destination, Licensee shall > + * ensure that the distribution and export/re-export of the software is in > + * compliance with all laws, regulations, orders, or other restrictions of the > + * U.S. Export Administration Regulations. Licensee agrees that neither it nor > + * any of its subsidiaries will export/re-export any technical data, process, > + * software, or service, directly or indirectly, to any country for which the > + * United States government or any agency thereof requires an export license, > + * other governmental approval, or letter of assurance, without first obtaining > + * such license, approval or letter. > + * > + ***************************************************************************** > + * > + * Alternatively, you may choose to be licensed under the terms of the > + * following license: > + * > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions > + * are met: > + * 1. Redistributions of source code must retain the above copyright > + * notice, this list of conditions, and the following disclaimer, > + * without modification. > + * 2. Redistributions in binary form must reproduce at minimum a disclaimer > + * substantially similar to the "NO WARRANTY" disclaimer below > + * ("Disclaimer") and any redistribution must be conditioned upon > + * including a substantially similar Disclaimer requirement for further > + * binary redistribution. > + * 3. Neither the names of the above-listed copyright holders nor the names > + * of any contributors may be used to endorse or promote products derived > + * from this software without specific prior written permission. > + * > + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS > + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT > + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR > + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT > + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, > + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT > + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, > + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY > + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE > + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > + * > + * Alternatively, you may choose to be licensed under the terms of the > + * GNU General Public License ("GPL") version 2 as published by the Free > + * Software Foundation. > + * > + *****************************************************************************/ > + > +#include "acpi.h" > +#include "accommon.h" > +#include "acdisasm.h" > +#include "actbinfo.h" > + > +/* This module used for application-level code only */ > + > +#define _COMPONENT ACPI_CA_DISASSEMBLER > + ACPI_MODULE_NAME ("dmtbinfo3") > + > +/* > + * How to add a new table: > + * > + * - Add the C table definition to the actbl1.h or actbl2.h header. > + * - Add ACPI_xxxx_OFFSET macro(s) for the table (and subtables) to list below. > + * - Define the table in this file (for the disassembler). If any > + * new data types are required (ACPI_DMT_*), see below. > + * - Add an external declaration for the new table definition (AcpiDmTableInfo*) > + * in acdisam.h > + * - Add new table definition to the dispatch table in dmtable.c (AcpiDmTableData) > + * If a simple table (with no subtables), no disassembly code is needed. > + * Otherwise, create the AcpiDmDump* function for to disassemble the table > + * and add it to the dmtbdump.c file. > + * - Add an external declaration for the new AcpiDmDump* function in acdisasm.h > + * - Add the new AcpiDmDump* function to the dispatch table in dmtable.c > + * - Create a template for the new table > + * - Add data table compiler support > + * > + * How to add a new data type (ACPI_DMT_*): > + * > + * - Add new type at the end of the ACPI_DMT list in acdisasm.h > + * - Add length and implementation cases in dmtable.c (disassembler) > + * - Add type and length cases in dtutils.c (DT compiler) > + */ > + > +/* > + * ACPI Table Information, used to dump formatted ACPI tables > + * > + * Each entry is of the form: <Field Type, Field Offset, Field Name> > + */ > + > +/******************************************************************************* > + * > + * SLIC - Software Licensing Description Table. This table contains the standard > + * ACPI header followed by proprietary data structures > + * > + ******************************************************************************/ > + > +/* Single subtable, a proprietary format, so treat it as a buffer */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoSlic[] = > +{ > + {ACPI_DMT_RAW_BUFFER, 0, "Software Licensing Structure", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * SLIT - System Locality Information Table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoSlit[] = > +{ > + {ACPI_DMT_UINT64, ACPI_SLIT_OFFSET (LocalityCount), "Localities", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * SPCR - Serial Port Console Redirection table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoSpcr[] = > +{ > + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (InterfaceType), "Interface Type", 0}, > + {ACPI_DMT_UINT24, ACPI_SPCR_OFFSET (Reserved[0]), "Reserved", 0}, > + {ACPI_DMT_GAS, ACPI_SPCR_OFFSET (SerialPort), "Serial Port Register", 0}, > + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (InterruptType), "Interrupt Type", 0}, > + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PcInterrupt), "PCAT-compatible IRQ", 0}, > + {ACPI_DMT_UINT32, ACPI_SPCR_OFFSET (Interrupt), "Interrupt", 0}, > + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (BaudRate), "Baud Rate", 0}, > + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (Parity), "Parity", 0}, > + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (StopBits), "Stop Bits", 0}, > + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (FlowControl), "Flow Control", 0}, > + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (TerminalType), "Terminal Type", 0}, > + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (Reserved2), "Reserved", 0}, > + {ACPI_DMT_UINT16, ACPI_SPCR_OFFSET (PciDeviceId), "PCI Device ID", 0}, > + {ACPI_DMT_UINT16, ACPI_SPCR_OFFSET (PciVendorId), "PCI Vendor ID", 0}, > + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PciBus), "PCI Bus", 0}, > + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PciDevice), "PCI Device", 0}, > + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PciFunction), "PCI Function", 0}, > + {ACPI_DMT_UINT32, ACPI_SPCR_OFFSET (PciFlags), "PCI Flags", 0}, > + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PciSegment), "PCI Segment", 0}, > + {ACPI_DMT_UINT32, ACPI_SPCR_OFFSET (Reserved2), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * SPMI - Server Platform Management Interface table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoSpmi[] = > +{ > + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (InterfaceType), "Interface Type", 0}, > + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (Reserved), "Reserved", DT_NON_ZERO}, /* Value must be 1 */ > + {ACPI_DMT_UINT16, ACPI_SPMI_OFFSET (SpecRevision), "IPMI Spec Version", 0}, > + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (InterruptType), "Interrupt Type", 0}, > + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (GpeNumber), "GPE Number", 0}, > + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (Reserved1), "Reserved", 0}, > + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciDeviceFlag), "PCI Device Flag", 0}, > + {ACPI_DMT_UINT32, ACPI_SPMI_OFFSET (Interrupt), "Interrupt", 0}, > + {ACPI_DMT_GAS, ACPI_SPMI_OFFSET (IpmiRegister), "IPMI Register", 0}, > + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciSegment), "PCI Segment", 0}, > + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciBus), "PCI Bus", 0}, > + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciDevice), "PCI Device", 0}, > + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciFunction), "PCI Function", 0}, > + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (Reserved2), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * SRAT - System Resource Affinity Table and Subtables > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoSrat[] = > +{ > + {ACPI_DMT_UINT32, ACPI_SRAT_OFFSET (TableRevision), "Table Revision", 0}, > + {ACPI_DMT_UINT64, ACPI_SRAT_OFFSET (Reserved), "Reserved", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Common Subtable header (one per Subtable) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoSratHdr[] = > +{ > + {ACPI_DMT_SRAT, ACPI_SRATH_OFFSET (Type), "Subtable Type", 0}, > + {ACPI_DMT_UINT8, ACPI_SRATH_OFFSET (Length), "Length", DT_LENGTH}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* SRAT Subtables */ > + > +/* 0: Processor Local APIC/SAPIC Affinity */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoSrat0[] = > +{ > + {ACPI_DMT_UINT8, ACPI_SRAT0_OFFSET (ProximityDomainLo), "Proximity Domain Low(8)", 0}, > + {ACPI_DMT_UINT8, ACPI_SRAT0_OFFSET (ApicId), "Apic ID", 0}, > + {ACPI_DMT_UINT32, ACPI_SRAT0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_SRAT0_FLAG_OFFSET (Flags,0), "Enabled", 0}, > + {ACPI_DMT_UINT8, ACPI_SRAT0_OFFSET (LocalSapicEid), "Local Sapic EID", 0}, > + {ACPI_DMT_UINT24, ACPI_SRAT0_OFFSET (ProximityDomainHi[0]), "Proximity Domain High(24)", 0}, > + {ACPI_DMT_UINT32, ACPI_SRAT0_OFFSET (ClockDomain), "Clock Domain", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 1: Memory Affinity */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoSrat1[] = > +{ > + {ACPI_DMT_UINT32, ACPI_SRAT1_OFFSET (ProximityDomain), "Proximity Domain", 0}, > + {ACPI_DMT_UINT16, ACPI_SRAT1_OFFSET (Reserved), "Reserved1", 0}, > + {ACPI_DMT_UINT64, ACPI_SRAT1_OFFSET (BaseAddress), "Base Address", 0}, > + {ACPI_DMT_UINT64, ACPI_SRAT1_OFFSET (Length), "Address Length", 0}, > + {ACPI_DMT_UINT32, ACPI_SRAT1_OFFSET (Reserved1), "Reserved2", 0}, > + {ACPI_DMT_UINT32, ACPI_SRAT1_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_SRAT1_FLAG_OFFSET (Flags,0), "Enabled", 0}, > + {ACPI_DMT_FLAG1, ACPI_SRAT1_FLAG_OFFSET (Flags,0), "Hot Pluggable", 0}, > + {ACPI_DMT_FLAG2, ACPI_SRAT1_FLAG_OFFSET (Flags,0), "Non-Volatile", 0}, > + {ACPI_DMT_UINT64, ACPI_SRAT1_OFFSET (Reserved2), "Reserved3", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoSrat2[] = > +{ > + {ACPI_DMT_UINT16, ACPI_SRAT2_OFFSET (Reserved), "Reserved1", 0}, > + {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (ProximityDomain), "Proximity Domain", 0}, > + {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (ApicId), "Apic ID", 0}, > + {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_SRAT2_FLAG_OFFSET (Flags,0), "Enabled", 0}, > + {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (ClockDomain), "Clock Domain", 0}, > + {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (Reserved2), "Reserved2", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 3: GICC Affinity (ACPI 5.1) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoSrat3[] = > +{ > + {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (ProximityDomain), "Proximity Domain", 0}, > + {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (AcpiProcessorUid), "Acpi Processor UID", 0}, > + {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_SRAT3_FLAG_OFFSET (Flags,0), "Enabled", 0}, > + {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (ClockDomain), "Clock Domain", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 4: GCC ITS Affinity (ACPI 6.2) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoSrat4[] = > +{ > + {ACPI_DMT_UINT32, ACPI_SRAT4_OFFSET (ProximityDomain), "Proximity Domain", 0}, > + {ACPI_DMT_UINT16, ACPI_SRAT4_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_SRAT4_OFFSET (ItsId), "ITS ID", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * STAO - Status Override Table (_STA override) - ACPI 6.0 > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoStao[] = > +{ > + {ACPI_DMT_UINT8, ACPI_STAO_OFFSET (IgnoreUart), "Ignore UART", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoStaoStr[] = > +{ > + {ACPI_DMT_STRING, 0, "Namepath", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * TCPA - Trusted Computing Platform Alliance table (Client) > + * > + * NOTE: There are two versions of the table with the same signature -- > + * the client version and the server version. The common PlatformClass > + * field is used to differentiate the two types of tables. > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaHdr[] = > +{ > + {ACPI_DMT_UINT16, ACPI_TCPA_OFFSET (PlatformClass), "Platform Class", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaClient[] = > +{ > + {ACPI_DMT_UINT32, ACPI_TCPA_CLIENT_OFFSET (MinimumLogLength), "Min Event Log Length", 0}, > + {ACPI_DMT_UINT64, ACPI_TCPA_CLIENT_OFFSET (LogAddress), "Event Log Address", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaServer[] = > +{ > + {ACPI_DMT_UINT16, ACPI_TCPA_SERVER_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_TCPA_SERVER_OFFSET (MinimumLogLength), "Min Event Log Length", 0}, > + {ACPI_DMT_UINT64, ACPI_TCPA_SERVER_OFFSET (LogAddress), "Event Log Address", 0}, > + {ACPI_DMT_UINT16, ACPI_TCPA_SERVER_OFFSET (SpecRevision), "Specification Revision", 0}, > + {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Device Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Pci Device", 0}, > + {ACPI_DMT_FLAG1, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Bus is Pnp", 0}, > + {ACPI_DMT_FLAG2, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Address Valid", 0}, > + {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Interrupt Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Mode", 0}, > + {ACPI_DMT_FLAG1, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Polarity", 0}, > + {ACPI_DMT_FLAG2, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "GPE SCI Triggered", 0}, > + {ACPI_DMT_FLAG3, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Global System Interrupt", 0}, > + {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (GpeNumber), "Gpe Number", 0}, > + {ACPI_DMT_UINT24, ACPI_TCPA_SERVER_OFFSET (Reserved2[0]), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_TCPA_SERVER_OFFSET (GlobalInterrupt), "Global Interrupt", 0}, > + {ACPI_DMT_GAS, ACPI_TCPA_SERVER_OFFSET (Address), "Address", 0}, > + {ACPI_DMT_UINT32, ACPI_TCPA_SERVER_OFFSET (Reserved3), "Reserved", 0}, > + {ACPI_DMT_GAS, ACPI_TCPA_SERVER_OFFSET (ConfigAddress), "Configuration Address", 0}, > + {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Group), "Pci Group", 0}, > + {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Bus), "Pci Bus", 0}, > + {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Device), "Pci Device", 0}, > + {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Function), "Pci Function", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoTpm2[] = > +{ > + {ACPI_DMT_UINT16, ACPI_TPM2_OFFSET (PlatformClass), "Platform Class", 0}, > + {ACPI_DMT_UINT16, ACPI_TPM2_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_TPM2_OFFSET (ControlAddress), "Control Address", 0}, > + {ACPI_DMT_TPM2, ACPI_TPM2_OFFSET (StartMethod), "Start Method", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Optional trailer. LogLength and LogAddress are additionally optional */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoTpm2a[] = > +{ > + {ACPI_DMT_BUF12, ACPI_TPM2A_OFFSET (MethodParameters), "Method Parameters", DT_OPTIONAL}, > + {ACPI_DMT_UINT32, ACPI_TPM2A_OFFSET (MinimumLogLength), "Minimum Log Length", DT_OPTIONAL}, > + {ACPI_DMT_UINT64, ACPI_TPM2A_OFFSET (LogAddress), "Log Address", DT_OPTIONAL}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 11: Start Method for ARM SMC */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoTpm211[] = > +{ > + {ACPI_DMT_UINT32, ACPI_TPM211_OFFSET (GlobalInterrupt), "Global Interrupt", 0}, > + {ACPI_DMT_UINT8, ACPI_TPM211_OFFSET (InterruptFlags), "Interrupt Flags", 0}, > + {ACPI_DMT_UINT8, ACPI_TPM211_OFFSET (OperationFlags), "Operation Flags", 0}, > + {ACPI_DMT_UINT16, ACPI_TPM211_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_TPM211_OFFSET (FunctionId), "Function ID", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * UEFI - UEFI Boot optimization Table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoUefi[] = > +{ > + {ACPI_DMT_UUID, ACPI_UEFI_OFFSET (Identifier[0]), "UUID Identifier", 0}, > + {ACPI_DMT_UINT16, ACPI_UEFI_OFFSET (DataOffset), "Data Offset", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * VRTC - Virtual Real Time Clock Table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoVrtc[] = > +{ > + ACPI_DMT_TERMINATOR > +}; > + > +/* VRTC Subtables - VRTC Entry */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoVrtc0[] = > +{ > + {ACPI_DMT_GAS, ACPI_VRTC0_OFFSET (PhysicalAddress), "PhysicalAddress", 0}, > + {ACPI_DMT_UINT32, ACPI_VRTC0_OFFSET (Irq), "IRQ", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * WAET - Windows ACPI Emulated devices Table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoWaet[] = > +{ > + {ACPI_DMT_UINT32, ACPI_WAET_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_WAET_OFFSET (Flags), "RTC needs no INT ack", 0}, > + {ACPI_DMT_FLAG1, ACPI_WAET_OFFSET (Flags), "PM timer, one read only", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * WDAT - Watchdog Action Table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoWdat[] = > +{ > + {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (HeaderLength), "Header Length", DT_LENGTH}, > + {ACPI_DMT_UINT16, ACPI_WDAT_OFFSET (PciSegment), "PCI Segment", 0}, > + {ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (PciBus), "PCI Bus", 0}, > + {ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (PciDevice), "PCI Device", 0}, > + {ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (PciFunction), "PCI Function", 0}, > + {ACPI_DMT_UINT24, ACPI_WDAT_OFFSET (Reserved[0]), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (TimerPeriod), "Timer Period", 0}, > + {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (MaxCount), "Max Count", 0}, > + {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (MinCount), "Min Count", 0}, > + {ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_WDAT_OFFSET (Flags), "Enabled", 0}, > + {ACPI_DMT_FLAG7, ACPI_WDAT_OFFSET (Flags), "Stopped When Asleep", 0}, > + {ACPI_DMT_UINT24, ACPI_WDAT_OFFSET (Reserved2[0]), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (Entries), "Watchdog Entry Count", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* WDAT Subtables - Watchdog Instruction Entries */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoWdat0[] = > +{ > + {ACPI_DMT_UINT8, ACPI_WDAT0_OFFSET (Action), "Watchdog Action", 0}, > + {ACPI_DMT_UINT8, ACPI_WDAT0_OFFSET (Instruction), "Instruction", 0}, > + {ACPI_DMT_UINT16, ACPI_WDAT0_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_GAS, ACPI_WDAT0_OFFSET (RegisterRegion), "Register Region", 0}, > + {ACPI_DMT_UINT32, ACPI_WDAT0_OFFSET (Value), "Value", 0}, > + {ACPI_DMT_UINT32, ACPI_WDAT0_OFFSET (Mask), "Register Mask", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * WDDT - Watchdog Description Table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoWddt[] = > +{ > + {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (SpecVersion), "Specification Version", 0}, > + {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (TableVersion), "Table Version", 0}, > + {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (PciVendorId), "PCI Vendor ID", 0}, > + {ACPI_DMT_GAS, ACPI_WDDT_OFFSET (Address), "Timer Register", 0}, > + {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (MaxCount), "Max Count", 0}, > + {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (MinCount), "Min Count", 0}, > + {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (Period), "Period", 0}, > + {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (Status), "Status (decoded below)", 0}, > + > + /* Status Flags byte 0 */ > + > + {ACPI_DMT_FLAG0, ACPI_WDDT_FLAG_OFFSET (Status,0), "Available", 0}, > + {ACPI_DMT_FLAG1, ACPI_WDDT_FLAG_OFFSET (Status,0), "Active", 0}, > + {ACPI_DMT_FLAG2, ACPI_WDDT_FLAG_OFFSET (Status,0), "OS Owns", 0}, > + > + /* Status Flags byte 1 */ > + > + {ACPI_DMT_FLAG3, ACPI_WDDT_FLAG_OFFSET (Status,1), "User Reset", 0}, > + {ACPI_DMT_FLAG4, ACPI_WDDT_FLAG_OFFSET (Status,1), "Timeout Reset", 0}, > + {ACPI_DMT_FLAG5, ACPI_WDDT_FLAG_OFFSET (Status,1), "Power Fail Reset", 0}, > + {ACPI_DMT_FLAG6, ACPI_WDDT_FLAG_OFFSET (Status,1), "Unknown Reset", 0}, > + > + {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (Capability), "Capability (decoded below)", 0}, > + > + /* Capability Flags byte 0 */ > + > + {ACPI_DMT_FLAG0, ACPI_WDDT_FLAG_OFFSET (Capability,0), "Auto Reset", 0}, > + {ACPI_DMT_FLAG1, ACPI_WDDT_FLAG_OFFSET (Capability,0), "Timeout Alert", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * WDRT - Watchdog Resource Table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoWdrt[] = > +{ > + {ACPI_DMT_GAS, ACPI_WDRT_OFFSET (ControlRegister), "Control Register", 0}, > + {ACPI_DMT_GAS, ACPI_WDRT_OFFSET (CountRegister), "Count Register", 0}, > + {ACPI_DMT_UINT16, ACPI_WDRT_OFFSET (PciDeviceId), "PCI Device ID", 0}, > + {ACPI_DMT_UINT16, ACPI_WDRT_OFFSET (PciVendorId), "PCI Vendor ID", 0}, > + {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciBus), "PCI Bus", 0}, > + {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciDevice), "PCI Device", 0}, > + {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciFunction), "PCI Function", 0}, > + {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciSegment), "PCI Segment", 0}, > + {ACPI_DMT_UINT16, ACPI_WDRT_OFFSET (MaxCount), "Max Count", 0}, > + {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (Units), "Counter Units", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * WPBT - Windows Platform Environment Table (ACPI 6.0) > + * Version 1 > + * > + * Conforms to "Windows Platform Binary Table (WPBT)" 29 November 2011 > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt[] = > +{ > + {ACPI_DMT_UINT32, ACPI_WPBT_OFFSET (HandoffSize), "Handoff Size", 0}, > + {ACPI_DMT_UINT64, ACPI_WPBT_OFFSET (HandoffAddress), "Handoff Address", 0}, > + {ACPI_DMT_UINT8, ACPI_WPBT_OFFSET (Layout), "Layout", 0}, > + {ACPI_DMT_UINT8, ACPI_WPBT_OFFSET (Type), "Type", 0}, > + {ACPI_DMT_UINT16, ACPI_WPBT_OFFSET (ArgumentsLength), "Arguments Length", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt0[] = > +{ > + {ACPI_DMT_UNICODE, sizeof (ACPI_TABLE_WPBT), "Command-line Arguments", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * WSMT - Windows SMM Security Migrations Table > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoWsmt[] = > +{ > + {ACPI_DMT_UINT32, ACPI_WSMT_OFFSET (ProtectionFlags), "Protection Flags", 0}, > + {ACPI_DMT_FLAG0, ACPI_WSMT_FLAG_OFFSET (ProtectionFlags,0), "FIXED_COMM_BUFFERS", 0}, > + {ACPI_DMT_FLAG1, ACPI_WSMT_FLAG_OFFSET (ProtectionFlags,0), "COMM_BUFFER_NESTED_PTR_PROTECTION", 0}, > + {ACPI_DMT_FLAG2, ACPI_WSMT_FLAG_OFFSET (ProtectionFlags,0), "SYSTEM_RESOURCE_PROTECTION", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/******************************************************************************* > + * > + * XENV - Xen Environment table (ACPI 6.0) > + * > + ******************************************************************************/ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoXenv[] = > +{ > + {ACPI_DMT_UINT64, ACPI_XENV_OFFSET (GrantTableAddress), "Grant Table Address", 0}, > + {ACPI_DMT_UINT64, ACPI_XENV_OFFSET (GrantTableSize), "Grant Table Size", 0}, > + {ACPI_DMT_UINT32, ACPI_XENV_OFFSET (EventInterrupt), "Event Interrupt", 0}, > + {ACPI_DMT_UINT8, ACPI_XENV_OFFSET (EventFlags), "Event Flags", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/*! [Begin] no source code translation */ > + > +/* > + * Generic types (used in UEFI and custom tables) > + * > + * Examples: > + * > + * Buffer : cc 04 ff bb > + * UINT8 : 11 > + * UINT16 : 1122 > + * UINT24 : 112233 > + * UINT32 : 11223344 > + * UINT56 : 11223344556677 > + * UINT64 : 1122334455667788 > + * > + * String : "This is string" > + * Unicode : "This string encoded to Unicode" > + * > + * GUID : 11223344-5566-7788-99aa-bbccddeeff00 > + * DevicePath : "\PciRoot(0)\Pci(0x1f,1)\Usb(0,0)" > + */ > + > +#define ACPI_DM_GENERIC_ENTRY(FieldType, FieldName) \ > + {{FieldType, 0, FieldName, 0}, ACPI_DMT_TERMINATOR} > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoGeneric[][2] = > +{ > + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT8, "UINT8"), > + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT16, "UINT16"), > + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT24, "UINT24"), > + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT32, "UINT32"), > + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT40, "UINT40"), > + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT48, "UINT48"), > + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT56, "UINT56"), > + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT64, "UINT64"), > + 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_UUID, "GUID"), > + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_STRING, "DevicePath"), > + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_LABEL, "Label"), > + {ACPI_DMT_TERMINATOR} > +}; > +/*! [End] no source code translation !*/ > diff --git a/src/acpica/source/compiler/Makefile.am b/src/acpica/source/compiler/Makefile.am > index 6191f510..0c25d89d 100644 > --- a/src/acpica/source/compiler/Makefile.am > +++ b/src/acpica/source/compiler/Makefile.am > @@ -242,7 +242,13 @@ libfwtsiasl_la_SOURCES = \ > ../common/dmtable.c \ > ../common/dmtables.c \ > ../common/dmtbinfo.c \ > + ../common/dmtbinfo1.c \ > + ../common/dmtbinfo2.c \ > + ../common/dmtbinfo3.c \ > ../common/dmtbdump.c \ > + ../common/dmtbdump1.c \ > + ../common/dmtbdump2.c \ > + ../common/dmtbdump3.c \ > ../common/getopt.c \ > ../components/debugger/dbfileio.c \ > ../components/disassembler/dmbuffer.c \ > diff --git a/src/acpica/source/compiler/aslbtypes.c b/src/acpica/source/compiler/aslbtypes.c > index be3618ee..f7c2eb0c 100644 > --- a/src/acpica/source/compiler/aslbtypes.c > +++ b/src/acpica/source/compiler/aslbtypes.c > @@ -259,6 +259,7 @@ AnMapArgTypeToBtype ( > return (ACPI_BTYPE_DATA | ACPI_BTYPE_DEBUG_OBJECT | > ACPI_BTYPE_REFERENCE_OBJECT); > > + case ARGI_FIXED_TARGET: > case ARGI_SIMPLE_TARGET: > > return (ACPI_BTYPE_OBJECTS_AND_REFS); > diff --git a/src/acpica/source/compiler/aslerror.c b/src/acpica/source/compiler/aslerror.c > index ef6342b1..39297a4c 100644 > --- a/src/acpica/source/compiler/aslerror.c > +++ b/src/acpica/source/compiler/aslerror.c > @@ -921,6 +921,13 @@ AslCommonError ( > char *Filename, > char *ExtraMessage) > { > + /* Check if user wants to ignore this exception */ > + > + if (AslIsExceptionIgnored (Level, MessageId)) > + { > + return; > + } > + > AslLogNewError (Level, MessageId, CurrentLineNumber, LogicalLineNumber, > LogicalByteOffset, Column, Filename, ExtraMessage, > NULL, NULL); > diff --git a/src/acpica/source/compiler/aslfold.c b/src/acpica/source/compiler/aslfold.c > index 78ec8da2..7957c149 100644 > --- a/src/acpica/source/compiler/aslfold.c > +++ b/src/acpica/source/compiler/aslfold.c > @@ -444,7 +444,7 @@ OpcAmlCheckForConstant ( > if (Op->Asl.CompileFlags & OP_IS_TARGET) > { > DbgPrint (ASL_PARSE_OUTPUT, > - "**** Valid Target, transform to Store ****\n"); > + "**** Valid Target, transform to Store or CopyObject ****\n"); > return (AE_CTRL_RETURN_VALUE); > } > > @@ -468,7 +468,7 @@ OpcAmlCheckForConstant ( > if (WalkState->Opcode == AML_BUFFER_OP) > { > DbgPrint (ASL_PARSE_OUTPUT, > - "\nBuffer constant reduction is not supported yet\n"); > + "\nBuffer constant reduction is currently not supported\n"); > > if (NextOp) /* Found a Name() operator, error */ > { > @@ -623,6 +623,8 @@ TrTransformToStoreOp ( > ACPI_PARSE_OBJECT *NewParent; > ACPI_PARSE_OBJECT *OriginalParent; > ACPI_STATUS Status; > + UINT16 NewParseOpcode; > + UINT16 NewAmlOpcode; > > > /* Extract the operands */ > @@ -646,9 +648,45 @@ TrTransformToStoreOp ( > } > } > > - DbgPrint (ASL_PARSE_OUTPUT, > - "Reduction/Transform to StoreOp: Store(%s, %s)\n", > - Child1->Asl.ParseOpName, Child2->Asl.ParseOpName); > + switch (Op->Asl.ParseOpcode) > + { > + /* > + * Folding of the explicit conversion opcodes must use CopyObject > + * instead of Store. This can change the object type of the target > + * operand, as per the ACPI specification: > + * > + * "If the ASL operator is one of the explicit conversion operators > + * (ToString, ToInteger, etc., and the CopyObject operator), no > + * [implicit] conversion is performed. (In other words, the result > + * object is stored directly to the target and completely overwrites > + * any existing object already stored at the target)" > + */ > + case PARSEOP_TOINTEGER: > + case PARSEOP_TOSTRING: > + case PARSEOP_TOBUFFER: > + case PARSEOP_TODECIMALSTRING: > + case PARSEOP_TOHEXSTRING: > + case PARSEOP_TOBCD: > + case PARSEOP_FROMBCD: > + > + NewParseOpcode = PARSEOP_COPYOBJECT; > + NewAmlOpcode = AML_COPY_OBJECT_OP; > + > + DbgPrint (ASL_PARSE_OUTPUT, > + "Reduction/Transform to CopyObjectOp: CopyObject(%s, %s)\n", > + Child1->Asl.ParseOpName, Child2->Asl.ParseOpName); > + break; > + > + default: > + > + NewParseOpcode = PARSEOP_STORE; > + NewAmlOpcode = AML_STORE_OP; > + > + DbgPrint (ASL_PARSE_OUTPUT, > + "Reduction/Transform to StoreOp: Store(%s, %s)\n", > + Child1->Asl.ParseOpName, Child2->Asl.ParseOpName); > + break; > + } > > /* > * Create a NULL (zero) target so that we can use the > @@ -709,10 +747,10 @@ TrTransformToStoreOp ( > > TrInstallReducedConstant (Child1, ObjDesc); > > - /* Convert operator to STORE */ > + /* Convert operator to STORE or COPYOBJECT */ > > - Op->Asl.ParseOpcode = PARSEOP_STORE; > - Op->Asl.AmlOpcode = AML_STORE_OP; > + Op->Asl.ParseOpcode = NewParseOpcode; > + Op->Asl.AmlOpcode = NewAmlOpcode; > UtSetParseOpName (Op); > Op->Common.Parent = OriginalParent; > > diff --git a/src/acpica/source/compiler/aslload.c b/src/acpica/source/compiler/aslload.c > index 534d4ca3..f32a7461 100644 > --- a/src/acpica/source/compiler/aslload.c > +++ b/src/acpica/source/compiler/aslload.c > @@ -327,8 +327,8 @@ LdLoadFieldElements ( > * The name already exists in this scope > * But continue processing the elements > */ > - AslDualParseOpError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Child, > - Child->Asl.Value.String, ASL_MSG_FOUND_HERE, Node->Op, > + AslDualParseOpError (ASL_WARNING, ASL_MSG_EXTERN_COLLISION, Child, > + Child->Asl.Value.String, ASL_MSG_EXTERN_FOUND_HERE, Node->Op, > Node->Op->Asl.ExternalName); > } > } > @@ -830,8 +830,8 @@ LdNamespace1Begin ( > if (Node->OwnerId == WalkState->OwnerId && > !(Node->Flags & IMPLICIT_EXTERNAL)) > { > - AslDualParseOpError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op, > - Op->Asl.ExternalName, ASL_MSG_FOUND_HERE, Node->Op, > + AslDualParseOpError (ASL_WARNING, ASL_MSG_EXTERN_COLLISION, Op, > + Op->Asl.ExternalName, ASL_MSG_EXTERN_FOUND_HERE, Node->Op, > Node->Op->Asl.ExternalName); > } > if (Node->Flags & IMPLICIT_EXTERNAL) > @@ -853,8 +853,8 @@ LdNamespace1Begin ( > > if (Node->OwnerId == WalkState->OwnerId) > { > - AslDualParseOpError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op, > - Op->Asl.ExternalName, ASL_MSG_FOUND_HERE, Node->Op, > + AslDualParseOpError (ASL_WARNING, ASL_MSG_EXTERN_COLLISION, Op, > + Op->Asl.ExternalName, ASL_MSG_EXTERN_FOUND_HERE, Node->Op, > Node->Op->Asl.ExternalName); > } > } > diff --git a/src/acpica/source/compiler/aslmessages.c b/src/acpica/source/compiler/aslmessages.c > index 85500846..e816b538 100644 > --- a/src/acpica/source/compiler/aslmessages.c > +++ b/src/acpica/source/compiler/aslmessages.c > @@ -352,7 +352,9 @@ const char *AslCompilerMsgs [] = > /* ASL_MSG_EXCEPTION_NOT_RECEIVED */ "Expected remark, warning, or error did not occur. Message ID:", > /* ASL_MSG_NULL_RESOURCE_TEMPLATE */ "Empty Resource Template (END_TAG only)", > /* ASL_MSG_FOUND_HERE */ "Original name creation/declaration below: ", > -/* ASL_MSG_ILLEGAL_RECURSION */ "Illegal recursive call to method that creates named objects" > +/* ASL_MSG_ILLEGAL_RECURSION */ "Illegal recursive call to method that creates named objects", > +/* ASL_MSG_EXTERN_COLLISION */ "A name cannot be defined and declared external in the same table", > +/* ASL_MSG_FOUND_HERE_EXTERN*/ "Remove one of the declarations indicated above or below:" > }; > > /* Table compiler */ > diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h > index 77c6759e..3105f0be 100644 > --- a/src/acpica/source/compiler/aslmessages.h > +++ b/src/acpica/source/compiler/aslmessages.h > @@ -355,6 +355,8 @@ typedef enum > ASL_MSG_NULL_RESOURCE_TEMPLATE, > ASL_MSG_FOUND_HERE, > ASL_MSG_ILLEGAL_RECURSION, > + ASL_MSG_EXTERN_COLLISION, > + ASL_MSG_EXTERN_FOUND_HERE, > > /* These messages are used by the Data Table compiler only */ > > diff --git a/src/acpica/source/compiler/dtcompile.c b/src/acpica/source/compiler/dtcompile.c > index a8509937..93944146 100644 > --- a/src/acpica/source/compiler/dtcompile.c > +++ b/src/acpica/source/compiler/dtcompile.c > @@ -453,7 +453,7 @@ DtCompileDataTable ( > DtInsertCompilerIds (*FieldList); > > Status = DtCompileTable (FieldList, AcpiDmTableInfoHeader, > - &Gbl_RootTable, TRUE); > + &Gbl_RootTable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -492,7 +492,7 @@ DtCompileDataTable ( > { > Subtable = NULL; > Status = DtCompileTable (FieldList, TableData->TableInfo, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -531,7 +531,6 @@ FinishHeader: > * PARAMETERS: Field - Current field list pointer > * Info - Info table for this ACPI table > * RetSubtable - Compile result of table > - * Required - If this subtable must exist > * > * RETURN: Status > * > @@ -543,8 +542,7 @@ ACPI_STATUS > DtCompileTable ( > DT_FIELD **Field, > ACPI_DMTABLE_INFO *Info, > - DT_SUBTABLE **RetSubtable, > - BOOLEAN Required) > + DT_SUBTABLE **RetSubtable) > { > DT_FIELD *LocalField; > UINT32 Length; > @@ -682,19 +680,19 @@ DtCompileTable ( > case ACPI_DMT_GAS: > > Status = DtCompileTable (Field, AcpiDmTableInfoGas, > - &InlineSubtable, TRUE); > + &InlineSubtable); > break; > > case ACPI_DMT_HESTNTFY: > > Status = DtCompileTable (Field, AcpiDmTableInfoHestNotify, > - &InlineSubtable, TRUE); > + &InlineSubtable); > break; > > case ACPI_DMT_IORTMEM: > > Status = DtCompileTable (Field, AcpiDmTableInfoIortAcc, > - &InlineSubtable, TRUE); > + &InlineSubtable); > break; > > default: > @@ -783,7 +781,7 @@ DtCompileTwoSubtables ( > DT_FIELD **PFieldList = (DT_FIELD **) List; > > > - Status = DtCompileTable (PFieldList, TableInfo1, &Subtable, TRUE); > + Status = DtCompileTable (PFieldList, TableInfo1, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -794,7 +792,7 @@ DtCompileTwoSubtables ( > > while (*PFieldList) > { > - Status = DtCompileTable (PFieldList, TableInfo2, &Subtable, FALSE); > + Status = DtCompileTable (PFieldList, TableInfo2, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h > index 7ecb14e1..48d308b4 100644 > --- a/src/acpica/source/compiler/dtcompiler.h > +++ b/src/acpica/source/compiler/dtcompiler.h > @@ -275,8 +275,7 @@ ACPI_STATUS > DtCompileTable ( > DT_FIELD **Field, > ACPI_DMTABLE_INFO *Info, > - DT_SUBTABLE **RetSubtable, > - BOOLEAN Required); > + DT_SUBTABLE **RetSubtable); > > ACPI_STATUS > DtCompileTwoSubtables ( > diff --git a/src/acpica/source/compiler/dtexpress.c b/src/acpica/source/compiler/dtexpress.c > index ef19122b..aa68cf1e 100644 > --- a/src/acpica/source/compiler/dtexpress.c > +++ b/src/acpica/source/compiler/dtexpress.c > @@ -209,7 +209,7 @@ DtResolveIntegerExpression ( > * FUNCTION: DtDoOperator > * > * PARAMETERS: LeftValue - First 64-bit operand > - * Operator - Parse token for the operator (EXPOP_*) > + * Operator - Parse token for the operator (OP_EXP_*) > * RightValue - Second 64-bit operand > * > * RETURN: 64-bit result of the requested operation > @@ -231,22 +231,22 @@ DtDoOperator ( > > switch (Operator) > { > - case EXPOP_ONES_COMPLIMENT: > + case OP_EXP_ONES_COMPLIMENT: > > Result = ~RightValue; > break; > > - case EXPOP_LOGICAL_NOT: > + case OP_EXP_LOGICAL_NOT: > > Result = !RightValue; > break; > > - case EXPOP_MULTIPLY: > + case OP_EXP_MULTIPLY: > > Result = LeftValue * RightValue; > break; > > - case EXPOP_DIVIDE: > + case OP_EXP_DIVIDE: > > if (!RightValue) > { > @@ -258,7 +258,7 @@ DtDoOperator ( > Result = LeftValue / RightValue; > break; > > - case EXPOP_MODULO: > + case OP_EXP_MODULO: > > if (!RightValue) > { > @@ -270,76 +270,76 @@ DtDoOperator ( > Result = LeftValue % RightValue; > break; > > - case EXPOP_ADD: > + case OP_EXP_ADD: > Result = LeftValue + RightValue; > break; > > - case EXPOP_SUBTRACT: > + case OP_EXP_SUBTRACT: > > Result = LeftValue - RightValue; > break; > > - case EXPOP_SHIFT_RIGHT: > + case OP_EXP_SHIFT_RIGHT: > > Result = LeftValue >> RightValue; > break; > > - case EXPOP_SHIFT_LEFT: > + case OP_EXP_SHIFT_LEFT: > > Result = LeftValue << RightValue; > break; > > - case EXPOP_LESS: > + case OP_EXP_LESS: > > Result = LeftValue < RightValue; > break; > > - case EXPOP_GREATER: > + case OP_EXP_GREATER: > > Result = LeftValue > RightValue; > break; > > - case EXPOP_LESS_EQUAL: > + case OP_EXP_LESS_EQUAL: > > Result = LeftValue <= RightValue; > break; > > - case EXPOP_GREATER_EQUAL: > + case OP_EXP_GREATER_EQUAL: > > Result = LeftValue >= RightValue; > break; > > - case EXPOP_EQUAL: > + case OP_EXP_EQUAL: > > Result = LeftValue == RightValue; > break; > > - case EXPOP_NOT_EQUAL: > + case OP_EXP_NOT_EQUAL: > > Result = LeftValue != RightValue; > break; > > - case EXPOP_AND: > + case OP_EXP_AND: > > Result = LeftValue & RightValue; > break; > > - case EXPOP_XOR: > + case OP_EXP_XOR: > > Result = LeftValue ^ RightValue; > break; > > - case EXPOP_OR: > + case OP_EXP_OR: > > Result = LeftValue | RightValue; > break; > > - case EXPOP_LOGICAL_AND: > + case OP_EXP_LOGICAL_AND: > > Result = LeftValue && RightValue; > break; > > - case EXPOP_LOGICAL_OR: > + case OP_EXP_LOGICAL_OR: > > Result = LeftValue || RightValue; > break; > diff --git a/src/acpica/source/compiler/dtparser.l b/src/acpica/source/compiler/dtparser.l > index 3e5bc8c7..fae32dba 100644 > --- a/src/acpica/source/compiler/dtparser.l > +++ b/src/acpica/source/compiler/dtparser.l > @@ -171,37 +171,37 @@ NewLine [\n] > > %% > > -\( return (EXPOP_PAREN_OPEN); > -\) return (EXPOP_PAREN_CLOSE); > -\~ return (EXPOP_ONES_COMPLIMENT); > -\! return (EXPOP_LOGICAL_NOT); > -\* return (EXPOP_MULTIPLY); > -\/ return (EXPOP_DIVIDE); > -\% return (EXPOP_MODULO); > -\+ return (EXPOP_ADD); > -\- return (EXPOP_SUBTRACT); > -">>" return (EXPOP_SHIFT_RIGHT); > -"<<" return (EXPOP_SHIFT_LEFT); > -\< return (EXPOP_LESS); > -\> return (EXPOP_GREATER); > -"<=" return (EXPOP_LESS_EQUAL); > -">=" return (EXPOP_GREATER_EQUAL); > -"==" return (EXPOP_EQUAL); > -"!=" return (EXPOP_NOT_EQUAL); > -\& return (EXPOP_AND); > -\^ return (EXPOP_XOR); > -\| return (EXPOP_OR); > -"&&" return (EXPOP_LOGICAL_AND); > -"||" return (EXPOP_LOGICAL_OR); > -<<EOF>> return (EXPOP_EOF); /* null end-of-string */ > - > -{LabelRef} return (EXPOP_LABEL); > -{Number} return (EXPOP_NUMBER); > -{HexNumber} return (EXPOP_HEX_NUMBER); > -{NewLine} return (EXPOP_NEW_LINE); > +\( return (OP_EXP_PAREN_OPEN); > +\) return (OP_EXP_PAREN_CLOSE); > +\~ return (OP_EXP_ONES_COMPLIMENT); > +\! return (OP_EXP_LOGICAL_NOT); > +\* return (OP_EXP_MULTIPLY); > +\/ return (OP_EXP_DIVIDE); > +\% return (OP_EXP_MODULO); > +\+ return (OP_EXP_ADD); > +\- return (OP_EXP_SUBTRACT); > +">>" return (OP_EXP_SHIFT_RIGHT); > +"<<" return (OP_EXP_SHIFT_LEFT); > +\< return (OP_EXP_LESS); > +\> return (OP_EXP_GREATER); > +"<=" return (OP_EXP_LESS_EQUAL); > +">=" return (OP_EXP_GREATER_EQUAL); > +"==" return (OP_EXP_EQUAL); > +"!=" return (OP_EXP_NOT_EQUAL); > +\& return (OP_EXP_AND); > +\^ return (OP_EXP_XOR); > +\| return (OP_EXP_OR); > +"&&" return (OP_EXP_LOGICAL_AND); > +"||" return (OP_EXP_LOGICAL_OR); > +<<EOF>> return (OP_EXP_EOF); /* null end-of-string */ > + > +{LabelRef} return (OP_EXP_LABEL); > +{Number} return (OP_EXP_NUMBER); > +{HexNumber} return (OP_EXP_HEX_NUMBER); > +{NewLine} return (OP_EXP_NEW_LINE); > {WhiteSpace} /* Ignore */ > > -. return (EXPOP_EOF); > +. return (OP_EXP_EOF); > > %% > > diff --git a/src/acpica/source/compiler/dtparser.y b/src/acpica/source/compiler/dtparser.y > index 43f7f04e..1c445712 100644 > --- a/src/acpica/source/compiler/dtparser.y > +++ b/src/acpica/source/compiler/dtparser.y > @@ -193,26 +193,26 @@ UINT64 DtParserResult; /* Expression return value */ > > %type <value> Expression > > -%token <op> EXPOP_EOF > -%token <op> EXPOP_NEW_LINE > -%token <op> EXPOP_NUMBER > -%token <op> EXPOP_HEX_NUMBER > -%token <op> EXPOP_DECIMAL_NUMBER > -%token <op> EXPOP_LABEL > -%token <op> EXPOP_PAREN_OPEN > -%token <op> EXPOP_PAREN_CLOSE > - > -%left <op> EXPOP_LOGICAL_OR > -%left <op> EXPOP_LOGICAL_AND > -%left <op> EXPOP_OR > -%left <op> EXPOP_XOR > -%left <op> EXPOP_AND > -%left <op> EXPOP_EQUAL EXPOP_NOT_EQUAL > -%left <op> EXPOP_GREATER EXPOP_LESS EXPOP_GREATER_EQUAL EXPOP_LESS_EQUAL > -%left <op> EXPOP_SHIFT_RIGHT EXPOP_SHIFT_LEFT > -%left <op> EXPOP_ADD EXPOP_SUBTRACT > -%left <op> EXPOP_MULTIPLY EXPOP_DIVIDE EXPOP_MODULO > -%right <op> EXPOP_ONES_COMPLIMENT EXPOP_LOGICAL_NOT > +%token <op> OP_EXP_EOF > +%token <op> OP_EXP_NEW_LINE > +%token <op> OP_EXP_NUMBER > +%token <op> OP_EXP_HEX_NUMBER > +%token <op> OP_EXP_DECIMAL_NUMBER > +%token <op> OP_EXP_LABEL > +%token <op> OP_EXP_PAREN_OPEN > +%token <op> OP_EXP_PAREN_CLOSE > + > +%left <op> OP_EXP_LOGICAL_OR > +%left <op> OP_EXP_LOGICAL_AND > +%left <op> OP_EXP_OR > +%left <op> OP_EXP_XOR > +%left <op> OP_EXP_AND > +%left <op> OP_EXP_EQUAL OP_EXP_NOT_EQUAL > +%left <op> OP_EXP_GREATER OP_EXP_LESS OP_EXP_GREATER_EQUAL OP_EXP_LESS_EQUAL > +%left <op> OP_EXP_SHIFT_RIGHT OP_EXP_SHIFT_LEFT > +%left <op> OP_EXP_ADD OP_EXP_SUBTRACT > +%left <op> OP_EXP_MULTIPLY OP_EXP_DIVIDE OP_EXP_MODULO > +%right <op> OP_EXP_ONES_COMPLIMENT OP_EXP_LOGICAL_NOT > > %% > > @@ -233,46 +233,46 @@ UINT64 DtParserResult; /* Expression return value */ > * 12) || > */ > Value > - : Expression EXPOP_NEW_LINE { DtParserResult=$1; return 0; } /* End of line (newline) */ > - | Expression EXPOP_EOF { DtParserResult=$1; return 0; } /* End of string (0) */ > + : Expression OP_EXP_NEW_LINE { DtParserResult=$1; return 0; } /* End of line (newline) */ > + | Expression OP_EXP_EOF { DtParserResult=$1; return 0; } /* End of string (0) */ > ; > > Expression > > /* Unary operators */ > > - : EXPOP_LOGICAL_NOT Expression { $$ = DtDoOperator ($2, EXPOP_LOGICAL_NOT, $2);} > - | EXPOP_ONES_COMPLIMENT Expression { $$ = DtDoOperator ($2, EXPOP_ONES_COMPLIMENT, $2);} > + : OP_EXP_LOGICAL_NOT Expression { $$ = DtDoOperator ($2, OP_EXP_LOGICAL_NOT, $2);} > + | OP_EXP_ONES_COMPLIMENT Expression { $$ = DtDoOperator ($2, OP_EXP_ONES_COMPLIMENT, $2);} > > /* Binary operators */ > > - | Expression EXPOP_MULTIPLY Expression { $$ = DtDoOperator ($1, EXPOP_MULTIPLY, $3);} > - | Expression EXPOP_DIVIDE Expression { $$ = DtDoOperator ($1, EXPOP_DIVIDE, $3);} > - | Expression EXPOP_MODULO Expression { $$ = DtDoOperator ($1, EXPOP_MODULO, $3);} > - | Expression EXPOP_ADD Expression { $$ = DtDoOperator ($1, EXPOP_ADD, $3);} > - | Expression EXPOP_SUBTRACT Expression { $$ = DtDoOperator ($1, EXPOP_SUBTRACT, $3);} > - | Expression EXPOP_SHIFT_RIGHT Expression { $$ = DtDoOperator ($1, EXPOP_SHIFT_RIGHT, $3);} > - | Expression EXPOP_SHIFT_LEFT Expression { $$ = DtDoOperator ($1, EXPOP_SHIFT_LEFT, $3);} > - | Expression EXPOP_GREATER Expression { $$ = DtDoOperator ($1, EXPOP_GREATER, $3);} > - | Expression EXPOP_LESS Expression { $$ = DtDoOperator ($1, EXPOP_LESS, $3);} > - | Expression EXPOP_GREATER_EQUAL Expression { $$ = DtDoOperator ($1, EXPOP_GREATER_EQUAL, $3);} > - | Expression EXPOP_LESS_EQUAL Expression { $$ = DtDoOperator ($1, EXPOP_LESS_EQUAL, $3);} > - | Expression EXPOP_EQUAL Expression { $$ = DtDoOperator ($1, EXPOP_EQUAL, $3);} > - | Expression EXPOP_NOT_EQUAL Expression { $$ = DtDoOperator ($1, EXPOP_NOT_EQUAL, $3);} > - | Expression EXPOP_AND Expression { $$ = DtDoOperator ($1, EXPOP_AND, $3);} > - | Expression EXPOP_XOR Expression { $$ = DtDoOperator ($1, EXPOP_XOR, $3);} > - | Expression EXPOP_OR Expression { $$ = DtDoOperator ($1, EXPOP_OR, $3);} > - | Expression EXPOP_LOGICAL_AND Expression { $$ = DtDoOperator ($1, EXPOP_LOGICAL_AND, $3);} > - | Expression EXPOP_LOGICAL_OR Expression { $$ = DtDoOperator ($1, EXPOP_LOGICAL_OR, $3);} > + | Expression OP_EXP_MULTIPLY Expression { $$ = DtDoOperator ($1, OP_EXP_MULTIPLY, $3);} > + | Expression OP_EXP_DIVIDE Expression { $$ = DtDoOperator ($1, OP_EXP_DIVIDE, $3);} > + | Expression OP_EXP_MODULO Expression { $$ = DtDoOperator ($1, OP_EXP_MODULO, $3);} > + | Expression OP_EXP_ADD Expression { $$ = DtDoOperator ($1, OP_EXP_ADD, $3);} > + | Expression OP_EXP_SUBTRACT Expression { $$ = DtDoOperator ($1, OP_EXP_SUBTRACT, $3);} > + | Expression OP_EXP_SHIFT_RIGHT Expression { $$ = DtDoOperator ($1, OP_EXP_SHIFT_RIGHT, $3);} > + | Expression OP_EXP_SHIFT_LEFT Expression { $$ = DtDoOperator ($1, OP_EXP_SHIFT_LEFT, $3);} > + | Expression OP_EXP_GREATER Expression { $$ = DtDoOperator ($1, OP_EXP_GREATER, $3);} > + | Expression OP_EXP_LESS Expression { $$ = DtDoOperator ($1, OP_EXP_LESS, $3);} > + | Expression OP_EXP_GREATER_EQUAL Expression { $$ = DtDoOperator ($1, OP_EXP_GREATER_EQUAL, $3);} > + | Expression OP_EXP_LESS_EQUAL Expression { $$ = DtDoOperator ($1, OP_EXP_LESS_EQUAL, $3);} > + | Expression OP_EXP_EQUAL Expression { $$ = DtDoOperator ($1, OP_EXP_EQUAL, $3);} > + | Expression OP_EXP_NOT_EQUAL Expression { $$ = DtDoOperator ($1, OP_EXP_NOT_EQUAL, $3);} > + | Expression OP_EXP_AND Expression { $$ = DtDoOperator ($1, OP_EXP_AND, $3);} > + | Expression OP_EXP_XOR Expression { $$ = DtDoOperator ($1, OP_EXP_XOR, $3);} > + | Expression OP_EXP_OR Expression { $$ = DtDoOperator ($1, OP_EXP_OR, $3);} > + | Expression OP_EXP_LOGICAL_AND Expression { $$ = DtDoOperator ($1, OP_EXP_LOGICAL_AND, $3);} > + | Expression OP_EXP_LOGICAL_OR Expression { $$ = DtDoOperator ($1, OP_EXP_LOGICAL_OR, $3);} > > /* Parentheses: '(' Expression ')' */ > > - | EXPOP_PAREN_OPEN Expression > - EXPOP_PAREN_CLOSE { $$ = $2;} > + | OP_EXP_PAREN_OPEN Expression > + OP_EXP_PAREN_CLOSE { $$ = $2;} > > /* Label references (prefixed with $) */ > > - | EXPOP_LABEL { $$ = DtResolveLabel (DtParsertext);} > + | OP_EXP_LABEL { $$ = DtResolveLabel (DtParsertext);} > > /* > * All constants for the data table compiler are in hex, whether a (optional) 0x > @@ -283,15 +283,15 @@ Expression > > /* Non-prefixed hex number */ > > - | EXPOP_NUMBER { $$ = DtDoConstant (DtParsertext);} > + | OP_EXP_NUMBER { $$ = DtDoConstant (DtParsertext);} > > /* Standard hex number (0x1234) */ > > - | EXPOP_HEX_NUMBER { $$ = DtDoConstant (DtParsertext);} > + | OP_EXP_HEX_NUMBER { $$ = DtDoConstant (DtParsertext);} > > /* Possible TBD: Decimal number with prefix (0d1234) - Not supported this time */ > > - | EXPOP_DECIMAL_NUMBER { $$ = DtDoConstant (DtParsertext);} > + | OP_EXP_DECIMAL_NUMBER { $$ = DtDoConstant (DtParsertext);} > ; > %% > > @@ -300,7 +300,7 @@ Expression > /* > * Local support functions, including parser entry point > */ > -#define PR_FIRST_PARSE_OPCODE EXPOP_EOF > +#define PR_FIRST_PARSE_OPCODE OP_EXP_EOF > #define PR_YYTNAME_START 3 > > > @@ -329,7 +329,7 @@ DtParsererror ( > * > * FUNCTION: DtGetOpName > * > - * PARAMETERS: ParseOpcode - Parser token (EXPOP_*) > + * PARAMETERS: ParseOpcode - Parser token (OP_EXP_*) > * > * RETURN: Pointer to the opcode name > * > @@ -344,7 +344,7 @@ DtGetOpName ( > #ifdef ASL_YYTNAME_START > /* > * First entries (PR_YYTNAME_START) in yytname are special reserved names. > - * Ignore first 6 characters of name (EXPOP_) > + * Ignore first 6 characters of name (OP_EXP_) > */ > return ((char *) yytname > [(ParseOpcode - PR_FIRST_PARSE_OPCODE) + PR_YYTNAME_START] + 6); > diff --git a/src/acpica/source/compiler/dttable.c b/src/acpica/source/compiler/dttable.c > index 75f34d5d..44efbee4 100644 > --- a/src/acpica/source/compiler/dttable.c > +++ b/src/acpica/source/compiler/dttable.c > @@ -182,7 +182,7 @@ DtCompileRsdp ( > /* Compile the "common" RSDP (ACPI 1.0) */ > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoRsdp1, > - &Gbl_RootTable, TRUE); > + &Gbl_RootTable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -196,7 +196,7 @@ DtCompileRsdp ( > /* Compile the "extended" part of the RSDP as a subtable */ > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoRsdp2, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -240,7 +240,7 @@ DtCompileFadt ( > > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt1, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -255,7 +255,7 @@ DtCompileFadt ( > if (Revision == 2) > { > Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt2, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -266,7 +266,7 @@ DtCompileFadt ( > else if (Revision >= 2) > { > Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt3, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -277,7 +277,7 @@ DtCompileFadt ( > if (Revision >= 5) > { > Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt5, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -289,7 +289,7 @@ DtCompileFadt ( > if (Revision >= 6) > { > Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt6, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -326,7 +326,7 @@ DtCompileFacs ( > > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoFacs, > - &Gbl_RootTable, TRUE); > + &Gbl_RootTable); > if (ACPI_FAILURE (Status)) > { > return (Status); > diff --git a/src/acpica/source/compiler/dttable1.c b/src/acpica/source/compiler/dttable1.c > index bc74799c..084adc3e 100644 > --- a/src/acpica/source/compiler/dttable1.c > +++ b/src/acpica/source/compiler/dttable1.c > @@ -202,7 +202,7 @@ DtCompileAsf ( > { > SubtableStart = *PFieldList; > Status = DtCompileTable (PFieldList, AcpiDmTableInfoAsfHdr, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -247,7 +247,7 @@ DtCompileAsf ( > return (AE_ERROR); > } > > - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); > + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -307,7 +307,7 @@ DtCompileAsf ( > while (DataCount > 0) > { > Status = DtCompileTable (PFieldList, DataInfoTable, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -323,7 +323,7 @@ DtCompileAsf ( > for (i = 0; i < DataCount; i++) > { > Status = DtCompileTable (PFieldList, DataInfoTable, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -399,7 +399,7 @@ DtCompileCsrt ( > /* Resource group subtable */ > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoCsrt0, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -424,7 +424,7 @@ DtCompileCsrt ( > /* Shared info subtable (One per resource group) */ > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoCsrt1, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -438,7 +438,7 @@ DtCompileCsrt ( > { > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoCsrt2, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -451,7 +451,7 @@ DtCompileCsrt ( > if (*PFieldList) > { > Status = DtCompileTable (PFieldList, AcpiDmTableInfoCsrt2a, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -504,7 +504,7 @@ DtCompileDbg2 ( > > /* Main table */ > > - Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2, &Subtable, TRUE); > + Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -529,7 +529,7 @@ DtCompileDbg2 ( > /* Subtable: Debug Device Information */ > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Device, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -550,7 +550,7 @@ DtCompileDbg2 ( > for (i = 0; *PFieldList && (i < DeviceInfo->RegisterCount); i++) > { > Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Addr, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -566,7 +566,7 @@ DtCompileDbg2 ( > for (i = 0; *PFieldList && (i < DeviceInfo->RegisterCount); i++) > { > Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Size, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -580,7 +580,7 @@ DtCompileDbg2 ( > > DeviceInfo->NamepathOffset = CurrentOffset; > Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Name, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -595,7 +595,7 @@ DtCompileDbg2 ( > /* OemData - Variable-length data (Optional, size = OemDataLength) */ > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2OemData, > - &Subtable, TRUE); > + &Subtable); > if (Status == AE_END_OF_TABLE) > { > /* optional field was not found and we're at the end of the file */ > @@ -659,7 +659,7 @@ DtCompileDmar ( > UINT32 PciPathLength; > > > - Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmar, &Subtable, TRUE); > + Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmar, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -675,7 +675,7 @@ DtCompileDmar ( > > SubtableStart = *PFieldList; > Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmarHdr, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -722,7 +722,7 @@ DtCompileDmar ( > > /* DMAR Subtable */ > > - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); > + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -749,7 +749,7 @@ DtCompileDmar ( > while (DeviceScopeLength) > { > Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmarScope, > - &Subtable, FALSE); > + &Subtable); > if (Status == AE_NOT_FOUND) > { > break; > @@ -767,7 +767,7 @@ DtCompileDmar ( > while (PciPathLength) > { > Status = DtCompileTable (PFieldList, TableInfoDmarPciPath, > - &Subtable, FALSE); > + &Subtable); > if (Status == AE_NOT_FOUND) > { > DtPopSubtable (); > @@ -823,7 +823,7 @@ DtCompileDrtm ( > /* Compile DRTM header */ > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -841,7 +841,7 @@ DtCompileDrtm ( > /* Compile VTL */ > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm0, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -857,7 +857,7 @@ DtCompileDrtm ( > while (*PFieldList) > { > Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm0a, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -877,7 +877,7 @@ DtCompileDrtm ( > /* Compile RL */ > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm1, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -893,7 +893,7 @@ DtCompileDrtm ( > while (*PFieldList) > { > Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm1a, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -915,7 +915,7 @@ DtCompileDrtm ( > /* Compile DPS */ > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm2, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1005,7 +1005,7 @@ DtCompileGtdt ( > > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdt, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1018,7 +1018,7 @@ DtCompileGtdt ( > { > SubtableStart = *PFieldList; > Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdtHdr, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1048,7 +1048,7 @@ DtCompileGtdt ( > return (AE_ERROR); > } > > - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); > + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1074,7 +1074,7 @@ DtCompileGtdt ( > while (GtCount) > { > Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdt0a, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1128,7 +1128,7 @@ DtCompileFpdt ( > { > SubtableStart = *PFieldList; > Status = DtCompileTable (PFieldList, AcpiDmTableInfoFpdtHdr, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1159,7 +1159,7 @@ DtCompileFpdt ( > break; > } > > - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); > + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1201,7 +1201,7 @@ DtCompileHest ( > > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoHest, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1272,7 +1272,7 @@ DtCompileHest ( > return (AE_ERROR); > } > > - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); > + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1312,7 +1312,7 @@ DtCompileHest ( > while (BankCount) > { > Status = DtCompileTable (PFieldList, AcpiDmTableInfoHestBank, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1362,7 +1362,7 @@ DtCompileHmat ( > ParentTable = DtPeekSubtable (); > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoHmat, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1375,7 +1375,7 @@ DtCompileHmat ( > > SubtableStart = *PFieldList; > Status = DtCompileTable (PFieldList, AcpiDmTableInfoHmatHdr, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1410,7 +1410,7 @@ DtCompileHmat ( > return (AE_ERROR); > } > > - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); > + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1433,7 +1433,7 @@ DtCompileHmat ( > while (*PFieldList) > { > Status = DtCompileTable (PFieldList, > - AcpiDmTableInfoHmat1a, &Subtable, TRUE); > + AcpiDmTableInfoHmat1a, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1454,7 +1454,7 @@ DtCompileHmat ( > while (*PFieldList) > { > Status = DtCompileTable (PFieldList, > - AcpiDmTableInfoHmat1b, &Subtable, TRUE); > + AcpiDmTableInfoHmat1b, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1479,7 +1479,7 @@ DtCompileHmat ( > while (*PFieldList) > { > Status = DtCompileTable (PFieldList, > - AcpiDmTableInfoHmat1c, &Subtable, TRUE); > + AcpiDmTableInfoHmat1c, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1513,7 +1513,7 @@ DtCompileHmat ( > while (*PFieldList) > { > Status = DtCompileTable (PFieldList, > - AcpiDmTableInfoHmat2a, &Subtable, TRUE); > + AcpiDmTableInfoHmat2a, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1576,7 +1576,7 @@ DtCompileIort ( > ParentTable = DtPeekSubtable (); > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1598,7 +1598,7 @@ DtCompileIort ( > */ > Iort->NodeOffset = sizeof (ACPI_TABLE_IORT); > Status = DtCompileTable (PFieldList, AcpiDmTableInfoIortPad, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1624,7 +1624,7 @@ DtCompileIort ( > { > SubtableStart = *PFieldList; > Status = DtCompileTable (PFieldList, AcpiDmTableInfoIortHdr, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1642,7 +1642,7 @@ DtCompileIort ( > case ACPI_IORT_NODE_ITS_GROUP: > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort0, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1656,7 +1656,7 @@ DtCompileIort ( > while (*PFieldList) > { > Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort0a, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1677,7 +1677,7 @@ DtCompileIort ( > case ACPI_IORT_NODE_NAMED_COMPONENT: > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort1, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1692,7 +1692,7 @@ DtCompileIort ( > * for filling this field. > */ > Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort1a, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1729,7 +1729,7 @@ DtCompileIort ( > case ACPI_IORT_NODE_PCI_ROOT_COMPLEX: > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort2, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1742,7 +1742,7 @@ DtCompileIort ( > case ACPI_IORT_NODE_SMMU: > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1756,7 +1756,7 @@ DtCompileIort ( > > IortSmmu->GlobalInterruptOffset = NodeLength; > Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3a, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1772,7 +1772,7 @@ DtCompileIort ( > while (*PFieldList) > { > Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3b, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1797,7 +1797,7 @@ DtCompileIort ( > while (*PFieldList) > { > Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3c, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1819,7 +1819,7 @@ DtCompileIort ( > case ACPI_IORT_NODE_SMMU_V3: > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort4, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1842,7 +1842,7 @@ DtCompileIort ( > while (*PFieldList) > { > Status = DtCompileTable (PFieldList, AcpiDmTableInfoIortMap, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1905,7 +1905,7 @@ DtCompileIvrs ( > > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrs, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1918,7 +1918,7 @@ DtCompileIvrs ( > { > SubtableStart = *PFieldList; > Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsHdr, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1950,7 +1950,7 @@ DtCompileIvrs ( > return (AE_ERROR); > } > > - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); > + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -2012,7 +2012,7 @@ DtCompileIvrs ( > } > > Status = DtCompileTable (PFieldList, InfoTable, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > diff --git a/src/acpica/source/compiler/dttable2.c b/src/acpica/source/compiler/dttable2.c > index a2960e9b..785bc7a1 100644 > --- a/src/acpica/source/compiler/dttable2.c > +++ b/src/acpica/source/compiler/dttable2.c > @@ -191,7 +191,7 @@ DtCompileLpit ( > /* LPIT Subtable header */ > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoLpitHdr, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -218,7 +218,7 @@ DtCompileLpit ( > > /* LPIT Subtable */ > > - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); > + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -259,7 +259,7 @@ DtCompileMadt ( > > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoMadt, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -272,7 +272,7 @@ DtCompileMadt ( > { > SubtableStart = *PFieldList; > Status = DtCompileTable (PFieldList, AcpiDmTableInfoMadtHdr, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -372,7 +372,7 @@ DtCompileMadt ( > return (AE_ERROR); > } > > - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); > + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -442,7 +442,7 @@ DtCompileMpst ( > > /* Main table */ > > - Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst, &Subtable, TRUE); > + Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -460,7 +460,7 @@ DtCompileMpst ( > /* Subtable: Memory Power Node(s) */ > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst0, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -481,7 +481,7 @@ DtCompileMpst ( > while (*PFieldList && PowerStateCount) > { > Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst0A, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -496,7 +496,7 @@ DtCompileMpst ( > while (*PFieldList && ComponentCount) > { > Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst0B, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -514,7 +514,7 @@ DtCompileMpst ( > > DtPopSubtable (); > > - Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst1, &Subtable, TRUE); > + Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst1, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -534,7 +534,7 @@ DtCompileMpst ( > while (*PFieldList && SubtableCount) > { > Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst2, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -630,7 +630,7 @@ DtCompileNfit ( > /* Main table */ > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfit, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -646,7 +646,7 @@ DtCompileNfit ( > { > SubtableStart = *PFieldList; > Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfitHdr, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -708,7 +708,7 @@ DtCompileNfit ( > return (AE_ERROR); > } > > - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); > + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -727,7 +727,7 @@ DtCompileNfit ( > while (*PFieldList) > { > Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfit2a, > - &Subtable, FALSE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -752,7 +752,7 @@ DtCompileNfit ( > if (*PFieldList) > { > Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfit3a, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -772,7 +772,7 @@ DtCompileNfit ( > while (*PFieldList) > { > Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfit6a, > - &Subtable, FALSE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -829,7 +829,7 @@ DtCompilePcct ( > /* Main table */ > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoPcct, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -844,7 +844,7 @@ DtCompilePcct ( > { > SubtableStart = *PFieldList; > Status = DtCompileTable (PFieldList, AcpiDmTableInfoPcctHdr, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -889,7 +889,7 @@ DtCompilePcct ( > return (AE_ERROR); > } > > - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); > + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -930,7 +930,7 @@ DtCompilePdtt ( > > /* Main table */ > > - Status = DtCompileTable (PFieldList, AcpiDmTableInfoPdtt, &Subtable, TRUE); > + Status = DtCompileTable (PFieldList, AcpiDmTableInfoPdtt, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -949,7 +949,7 @@ DtCompilePdtt ( > /* List of subchannel IDs, each 2 bytes */ > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoPdtt0, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -993,7 +993,7 @@ DtCompilePmtt ( > > /* Main table */ > > - Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt, &Subtable, TRUE); > + Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1007,7 +1007,7 @@ DtCompilePmtt ( > { > SubtableStart = *PFieldList; > Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmttHdr, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1039,7 +1039,7 @@ DtCompilePmtt ( > /* Subtable: Socket Structure */ > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt0, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1054,7 +1054,7 @@ DtCompilePmtt ( > /* Subtable: Memory Controller Structure */ > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt1, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1070,7 +1070,7 @@ DtCompilePmtt ( > while (DomainCount) > { > Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt1a, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1086,7 +1086,7 @@ DtCompilePmtt ( > /* Subtable: Physical Component Structure */ > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt2, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1141,7 +1141,7 @@ DtCompilePptt ( > /* Compile PPTT subtable header */ > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoPpttHdr, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1175,7 +1175,7 @@ DtCompilePptt ( > > /* Compile PPTT subtable body */ > > - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); > + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1199,7 +1199,7 @@ DtCompilePptt ( > while (*PFieldList) > { > Status = DtCompileTable (PFieldList, > - AcpiDmTableInfoPptt0a, &Subtable, TRUE); > + AcpiDmTableInfoPptt0a, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1288,7 +1288,7 @@ DtCompileS3pt ( > > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoS3pt, > - &Gbl_RootTable, TRUE); > + &Gbl_RootTable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1300,7 +1300,7 @@ DtCompileS3pt ( > { > SubtableStart = *PFieldList; > Status = DtCompileTable (PFieldList, AcpiDmTableInfoS3ptHdr, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1330,7 +1330,7 @@ DtCompileS3pt ( > return (AE_ERROR); > } > > - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); > + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1381,7 +1381,7 @@ DtCompileSdev ( > > SubtableStart = *PFieldList; > Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdevHdr, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1416,7 +1416,7 @@ DtCompileSdev ( > > /* Compile SDEV subtable body */ > > - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); > + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1434,7 +1434,7 @@ DtCompileSdev ( > /* Append DeviceId namespace string */ > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev0a, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1459,7 +1459,7 @@ DtCompileSdev ( > if (*PFieldList) > { > Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev1b, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1491,7 +1491,7 @@ DtCompileSdev ( > while (*PFieldList && !strcmp ((*PFieldList)->Name, "Device")) > { > Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev1a, > - &Subtable, FALSE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1522,7 +1522,7 @@ DtCompileSdev ( > if (*PFieldList) > { > Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev1b, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1583,7 +1583,7 @@ DtCompileSlic ( > while (*PFieldList) > { > Status = DtCompileTable (PFieldList, AcpiDmTableInfoSlic, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1625,7 +1625,7 @@ DtCompileSlit ( > > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoSlit, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1681,7 +1681,7 @@ DtCompileSrat ( > > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoSrat, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1694,7 +1694,7 @@ DtCompileSrat ( > { > SubtableStart = *PFieldList; > Status = DtCompileTable (PFieldList, AcpiDmTableInfoSratHdr, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1739,7 +1739,7 @@ DtCompileSrat ( > return (AE_ERROR); > } > > - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); > + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1779,7 +1779,7 @@ DtCompileStao ( > /* Compile the main table */ > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoStao, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1793,7 +1793,7 @@ DtCompileStao ( > while (*PFieldList) > { > Status = DtCompileTable (PFieldList, AcpiDmTableInfoStaoStr, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1833,7 +1833,7 @@ DtCompileTcpa ( > /* Compile the main table */ > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoTcpaHdr, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1853,13 +1853,13 @@ DtCompileTcpa ( > case ACPI_TCPA_CLIENT_TABLE: > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoTcpaClient, > - &Subtable, TRUE); > + &Subtable); > break; > > case ACPI_TCPA_SERVER_TABLE: > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoTcpaServer, > - &Subtable, TRUE); > + &Subtable); > break; > > default: > @@ -1902,7 +1902,7 @@ DtCompileTpm2 ( > /* Compile the main table */ > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm2, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1919,7 +1919,7 @@ DtCompileTpm2 ( > /* TBD: Optional fields above not fully implemented (not optional at this time) */ > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm2a, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -1938,7 +1938,7 @@ DtCompileTpm2 ( > /* Subtable specific to to ARM_SMC */ > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm211, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -2053,7 +2053,7 @@ DtCompileUefi ( > /* Compile the predefined portion of the UEFI table */ > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoUefi, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -2152,7 +2152,7 @@ DtCompileWpbt ( > /* Compile the main table */ > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -2164,7 +2164,7 @@ DtCompileWpbt ( > /* Compile the argument list subtable */ > > Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt0, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_FAILURE (Status)) > { > return (Status); > @@ -2284,7 +2284,7 @@ DtCompileGeneric ( > } > > Status = DtCompileTable (PFieldList, Info, > - &Subtable, TRUE); > + &Subtable); > if (ACPI_SUCCESS (Status)) > { > DtInsertSubtable (ParentTable, Subtable); > diff --git a/src/acpica/source/components/dispatcher/dsargs.c b/src/acpica/source/components/dispatcher/dsargs.c > index 26adfb0b..dd8c30f0 100644 > --- a/src/acpica/source/components/dispatcher/dsargs.c > +++ b/src/acpica/source/components/dispatcher/dsargs.c > @@ -481,6 +481,7 @@ AcpiDsGetPackageArguments ( > > Status = AcpiDsExecuteArguments (Node, Node, > ObjDesc->Package.AmlLength, ObjDesc->Package.AmlStart); > + > return_ACPI_STATUS (Status); > } > > diff --git a/src/acpica/source/components/dispatcher/dsopcode.c b/src/acpica/source/components/dispatcher/dsopcode.c > index 71928fb7..038993c7 100644 > --- a/src/acpica/source/components/dispatcher/dsopcode.c > +++ b/src/acpica/source/components/dispatcher/dsopcode.c > @@ -752,8 +752,8 @@ AcpiDsEvalDataObjectOperands ( > if (!Op->Common.Value.Arg) > { > ACPI_ERROR ((AE_INFO, > - "Dispatch: Missing child while executing TermArg for %X", > - Op->Common.AmlOpcode)); > + "Missing child while evaluating opcode %4.4X, Op %p", > + Op->Common.AmlOpcode, Op)); > return_ACPI_STATUS (AE_OK); > } > > diff --git a/src/acpica/source/components/dispatcher/dspkginit.c b/src/acpica/source/components/dispatcher/dspkginit.c > index 647f5d0d..a034df0d 100644 > --- a/src/acpica/source/components/dispatcher/dspkginit.c > +++ b/src/acpica/source/components/dispatcher/dspkginit.c > @@ -155,6 +155,7 @@ > #include "amlcode.h" > #include "acdispat.h" > #include "acinterp.h" > +#include "acparser.h" > > > #define _COMPONENT ACPI_NAMESPACE > @@ -208,6 +209,7 @@ AcpiDsBuildInternalPackageObj ( > ACPI_PARSE_OBJECT *Parent; > ACPI_OPERAND_OBJECT *ObjDesc = NULL; > ACPI_STATUS Status = AE_OK; > + BOOLEAN ModuleLevelCode = FALSE; > UINT16 ReferenceCount; > UINT32 Index; > UINT32 i; > @@ -216,6 +218,13 @@ AcpiDsBuildInternalPackageObj ( > ACPI_FUNCTION_TRACE (DsBuildInternalPackageObj); > > > + /* Check if we are executing module level code */ > + > + if (WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL) > + { > + ModuleLevelCode = TRUE; > + } > + > /* Find the parent of a possibly nested package */ > > Parent = Op->Common.Parent; > @@ -250,25 +259,43 @@ AcpiDsBuildInternalPackageObj ( > > /* > * Allocate the element array (array of pointers to the individual > - * objects) based on the NumElements parameter. Add an extra pointer slot > - * so that the list is always null terminated. > + * objects) if necessary. the count is based on the NumElements > + * parameter. Add an extra pointer slot so that the list is always > + * null terminated. > */ > - ObjDesc->Package.Elements = ACPI_ALLOCATE_ZEROED ( > - ((ACPI_SIZE) ElementCount + 1) * sizeof (void *)); > - > if (!ObjDesc->Package.Elements) > { > - AcpiUtDeleteObjectDesc (ObjDesc); > - return_ACPI_STATUS (AE_NO_MEMORY); > + ObjDesc->Package.Elements = ACPI_ALLOCATE_ZEROED ( > + ((ACPI_SIZE) ElementCount + 1) * sizeof (void *)); > + > + if (!ObjDesc->Package.Elements) > + { > + AcpiUtDeleteObjectDesc (ObjDesc); > + return_ACPI_STATUS (AE_NO_MEMORY); > + } > + > + ObjDesc->Package.Count = ElementCount; > } > > - ObjDesc->Package.Count = ElementCount; > + /* First arg is element count. Second arg begins the initializer list */ > + > Arg = Op->Common.Value.Arg; > Arg = Arg->Common.Next; > > - if (Arg) > + /* > + * If we are executing module-level code, we will defer the > + * full resolution of the package elements in order to support > + * forward references from the elements. This provides > + * compatibility with other ACPI implementations. > + */ > + if (ModuleLevelCode) > { > - ObjDesc->Package.Flags |= AOPOBJ_DATA_VALID; > + ObjDesc->Package.AmlStart = WalkState->Aml; > + ObjDesc->Package.AmlLength = 0; > + > + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_PARSE, > + "%s: Deferring resolution of Package elements\n", > + ACPI_GET_FUNCTION_NAME)); > } > > /* > @@ -308,12 +335,17 @@ AcpiDsBuildInternalPackageObj ( > ACPI_ERROR ((AE_INFO, "%-48s", "****DS namepath not found")); > } > > - /* > - * Initialize this package element. This function handles the > - * resolution of named references within the package. > - */ > - AcpiDsInitPackageElement (0, ObjDesc->Package.Elements[i], > - NULL, &ObjDesc->Package.Elements[i]); > + if (!ModuleLevelCode) > + { > + /* > + * Initialize this package element. This function handles the > + * resolution of named references within the package. > + * Forward references from module-level code are deferred > + * until all ACPI tables are loaded. > + */ > + AcpiDsInitPackageElement (0, ObjDesc->Package.Elements[i], > + NULL, &ObjDesc->Package.Elements[i]); > + } > } > > if (*ObjDescPtr) > @@ -383,15 +415,21 @@ AcpiDsBuildInternalPackageObj ( > * NumElements count. > * > * Note: this is not an error, the package is padded out > - * with NULLs. > + * with NULLs as per the ACPI specification. > */ > - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, > - "Package List length (%u) smaller than NumElements " > + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, > + "%s: Package List length (%u) smaller than NumElements " > "count (%u), padded with null elements\n", > - i, ElementCount)); > + ACPI_GET_FUNCTION_NAME, i, ElementCount)); > + } > + > + /* Module-level packages will be resolved later */ > + > + if (!ModuleLevelCode) > + { > + ObjDesc->Package.Flags |= AOPOBJ_DATA_VALID; > } > > - ObjDesc->Package.Flags |= AOPOBJ_DATA_VALID; > Op->Common.Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjDesc); > return_ACPI_STATUS (Status); > } > @@ -481,11 +519,12 @@ AcpiDsResolvePackageElement ( > ACPI_OPERAND_OBJECT **ElementPtr) > { > ACPI_STATUS Status; > + ACPI_STATUS Status2; > ACPI_GENERIC_STATE ScopeInfo; > ACPI_OPERAND_OBJECT *Element = *ElementPtr; > ACPI_NAMESPACE_NODE *ResolvedNode; > ACPI_NAMESPACE_NODE *OriginalNode; > - char *ExternalPath = NULL; > + char *ExternalPath = ""; > ACPI_OBJECT_TYPE Type; > > > @@ -496,6 +535,10 @@ AcpiDsResolvePackageElement ( > > if (Element->Reference.Resolved) > { > + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_PARSE, > + "%s: Package element is already resolved\n", > + ACPI_GET_FUNCTION_NAME)); > + > return_VOID; > } > > @@ -510,14 +553,41 @@ AcpiDsResolvePackageElement ( > NULL, &ResolvedNode); > if (ACPI_FAILURE (Status)) > { > - Status = AcpiNsExternalizeName (ACPI_UINT32_MAX, > - (char *) Element->Reference.Aml, > - NULL, &ExternalPath); > +#if defined ACPI_IGNORE_PACKAGE_RESOLUTION_ERRORS && !defined ACPI_APPLICATION > + /* > + * For the kernel-resident ACPICA, optionally be silent about the > + * NOT_FOUND case. Although this is potentially a serious problem, > + * it can generate a lot of noise/errors on platforms whose > + * firmware carries around a bunch of unused Package objects. > + * To disable these errors, define ACPI_IGNORE_PACKAGE_RESOLUTION_ERRORS > + * in the OS-specific header. > + * > + * All errors are always reported for ACPICA applications such as > + * AcpiExec. > + */ > + if (Status == AE_NOT_FOUND) > + { > + /* Reference name not found, set the element to NULL */ > + > + AcpiUtRemoveReference (*ElementPtr); > + *ElementPtr = NULL; > + return_VOID; > + } > +#endif > + Status2 = AcpiNsExternalizeName (ACPI_UINT32_MAX, > + (char *) Element->Reference.Aml, NULL, &ExternalPath); > > ACPI_EXCEPTION ((AE_INFO, Status, > - "Could not find/resolve named package element: %s", ExternalPath)); > + "While resolving a named reference package element - %s", > + ExternalPath)); > + if (ACPI_SUCCESS (Status2)) > + { > + ACPI_FREE (ExternalPath); > + } > + > + /* Could not resolve name, set the element to NULL */ > > - ACPI_FREE (ExternalPath); > + AcpiUtRemoveReference (*ElementPtr); > *ElementPtr = NULL; > return_VOID; > } > @@ -531,24 +601,6 @@ AcpiDsResolvePackageElement ( > *ElementPtr = NULL; > return_VOID; > } > -#if 0 > - else if (ResolvedNode->Flags & ANOBJ_TEMPORARY) > - { > - /* > - * A temporary node found here indicates that the reference is > - * to a node that was created within this method. We are not > - * going to allow it (especially if the package is returned > - * from the method) -- the temporary node will be deleted out > - * from under the method. (05/2017). > - */ > - ACPI_ERROR ((AE_INFO, > - "Package element refers to a temporary name [%4.4s], " > - "inserting a NULL element", > - ResolvedNode->Name.Ascii)); > - *ElementPtr = NULL; > - return_VOID; > - } > -#endif > > /* > * Special handling for Alias objects. We need ResolvedNode to point > @@ -587,22 +639,6 @@ AcpiDsResolvePackageElement ( > return_VOID; > } > > -#if 0 > -/* TBD - alias support */ > - /* > - * Special handling for Alias objects. We need to setup the type > - * and the Op->Common.Node to point to the Alias target. Note, > - * Alias has at most one level of indirection internally. > - */ > - Type = Op->Common.Node->Type; > - if (Type == ACPI_TYPE_LOCAL_ALIAS) > - { > - Type = ObjDesc->Common.Type; > - Op->Common.Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, > - Op->Common.Node->Object); > - } > -#endif > - > switch (Type) > { > /* > diff --git a/src/acpica/source/components/dispatcher/dswexec.c b/src/acpica/source/components/dispatcher/dswexec.c > index d3a69fdd..c39095f6 100644 > --- a/src/acpica/source/components/dispatcher/dswexec.c > +++ b/src/acpica/source/components/dispatcher/dswexec.c > @@ -723,8 +723,8 @@ AcpiDsExecEndOp ( > case AML_TYPE_CREATE_OBJECT: > > ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, > - "Executing CreateObject (Buffer/Package) Op=%p AMLPtr=%p\n", > - Op, Op->Named.Data)); > + "Executing CreateObject (Buffer/Package) Op=%p Child=%p ParentOpcode=%4.4X\n", > + Op, Op->Named.Value.Arg, Op->Common.Parent->Common.AmlOpcode)); > > switch (Op->Common.Parent->Common.AmlOpcode) > { > diff --git a/src/acpica/source/components/dispatcher/dswload.c b/src/acpica/source/components/dispatcher/dswload.c > index 9a5da369..91f5b305 100644 > --- a/src/acpica/source/components/dispatcher/dswload.c > +++ b/src/acpica/source/components/dispatcher/dswload.c > @@ -264,7 +264,7 @@ AcpiDsLoad1BeginOp ( > UINT32 Flags; > > > - ACPI_FUNCTION_TRACE (DsLoad1BeginOp); > + ACPI_FUNCTION_TRACE_PTR (DsLoad1BeginOp, WalkState->Op); > > > Op = WalkState->Op; > diff --git a/src/acpica/source/components/executer/exconvrt.c b/src/acpica/source/components/executer/exconvrt.c > index 844f9549..5c58746e 100644 > --- a/src/acpica/source/components/executer/exconvrt.c > +++ b/src/acpica/source/components/executer/exconvrt.c > @@ -757,6 +757,7 @@ AcpiExConvertToTargetType ( > switch (GET_CURRENT_ARG_TYPE (WalkState->OpInfo->RuntimeArgs)) > { > case ARGI_SIMPLE_TARGET: > + case ARGI_FIXED_TARGET: > case ARGI_INTEGER_REF: /* Handles Increment, Decrement cases */ > > switch (DestinationType) > diff --git a/src/acpica/source/components/executer/exnames.c b/src/acpica/source/components/executer/exnames.c > index 3dc19986..ce000e5d 100644 > --- a/src/acpica/source/components/executer/exnames.c > +++ b/src/acpica/source/components/executer/exnames.c > @@ -309,14 +309,11 @@ AcpiExNameSegment ( > return_ACPI_STATUS (AE_CTRL_PENDING); > } > > - ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "Bytes from stream:\n")); > - > for (Index = 0; > (Index < ACPI_NAME_SIZE) && (AcpiUtValidNameChar (*AmlAddress, 0)); > Index++) > { > CharBuf[Index] = *AmlAddress++; > - ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "%c\n", CharBuf[Index])); > } > > > @@ -330,9 +327,9 @@ AcpiExNameSegment ( > > if (NameString) > { > - strcat (NameString, CharBuf); > ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, > - "Appended to - %s\n", NameString)); > + "Appending NameSeg %s\n", CharBuf)); > + strcat (NameString, CharBuf); > } > else > { > diff --git a/src/acpica/source/components/executer/exresop.c b/src/acpica/source/components/executer/exresop.c > index c6fa853d..7fd24535 100644 > --- a/src/acpica/source/components/executer/exresop.c > +++ b/src/acpica/source/components/executer/exresop.c > @@ -429,6 +429,7 @@ AcpiExResolveOperands ( > case ARGI_OBJECT_REF: > case ARGI_DEVICE_REF: > case ARGI_TARGETREF: /* Allows implicit conversion rules before store */ > + case ARGI_FIXED_TARGET: /* No implicit conversion before store to target */ > case ARGI_SIMPLE_TARGET: /* Name, Local, or Arg - no implicit conversion */ > case ARGI_STORE_TARGET: > > diff --git a/src/acpica/source/components/namespace/nseval.c b/src/acpica/source/components/namespace/nseval.c > index 14fcb953..b1e1af9a 100644 > --- a/src/acpica/source/components/namespace/nseval.c > +++ b/src/acpica/source/components/namespace/nseval.c > @@ -308,6 +308,7 @@ AcpiNsEvaluate ( > */ > switch (AcpiNsGetType (Info->Node)) > { > + case ACPI_TYPE_ANY: > case ACPI_TYPE_DEVICE: > case ACPI_TYPE_EVENT: > case ACPI_TYPE_MUTEX: > @@ -315,13 +316,13 @@ AcpiNsEvaluate ( > case ACPI_TYPE_THERMAL: > case ACPI_TYPE_LOCAL_SCOPE: > /* > - * 1) Disallow evaluation of certain object types. For these, > - * object evaluation is undefined and not supported. > + * 1) Disallow evaluation of these object types. For these, > + * object evaluation is undefined. > */ > ACPI_ERROR ((AE_INFO, > - "%s: Evaluation of object type [%s] is not supported", > - Info->FullPathname, > - AcpiUtGetTypeName (Info->Node->Type))); > + "%s: This object type [%s] " > + "never contains data and cannot be evaluated", > + Info->FullPathname, AcpiUtGetTypeName (Info->Node->Type))); > > Status = AE_TYPE; > goto Cleanup; > diff --git a/src/acpica/source/components/namespace/nsinit.c b/src/acpica/source/components/namespace/nsinit.c > index 4a075bed..dc76db9f 100644 > --- a/src/acpica/source/components/namespace/nsinit.c > +++ b/src/acpica/source/components/namespace/nsinit.c > @@ -418,7 +418,7 @@ ErrorExit: > * RETURN: Status > * > * DESCRIPTION: Callback from AcpiWalkNamespace. Invoked for every object > - * within the namespace. > + * within the namespace. > * > * Currently, the only objects that require initialization are: > * 1) Methods > @@ -540,6 +540,10 @@ AcpiNsInitOneObject ( > break; > } > > + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_PARSE, > + "%s: Completing resolution of Package elements\n", > + ACPI_GET_FUNCTION_NAME)); > + > /* > * Resolve all named references in package objects (and all > * sub-packages). This action has been deferred until the entire > @@ -548,6 +552,7 @@ AcpiNsInitOneObject ( > */ > Status = AcpiUtWalkPackageTree (ObjDesc, NULL, > AcpiDsInitPackageElement, NULL); > + > ObjDesc->Package.Flags |= AOPOBJ_DATA_VALID; > break; > > diff --git a/src/acpica/source/components/namespace/nsnames.c b/src/acpica/source/components/namespace/nsnames.c > index b29eac42..097037cb 100644 > --- a/src/acpica/source/components/namespace/nsnames.c > +++ b/src/acpica/source/components/namespace/nsnames.c > @@ -511,6 +511,9 @@ AcpiNsGetNormalizedPathname ( > > (void) AcpiNsBuildNormalizedPath (Node, NameBuffer, Size, NoTrailing); > > + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_NAMES, "%s: Path \"%s\"\n", > + ACPI_GET_FUNCTION_NAME, NameBuffer)); > + > return_PTR (NameBuffer); > } > > diff --git a/src/acpica/source/components/namespace/nsparse.c b/src/acpica/source/components/namespace/nsparse.c > index baa37d26..bb24bab9 100644 > --- a/src/acpica/source/components/namespace/nsparse.c > +++ b/src/acpica/source/components/namespace/nsparse.c > @@ -232,8 +232,9 @@ AcpiNsExecuteTable ( > goto Cleanup; > } > > - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, > - "Create table code block: %p\n", MethodObj)); > + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_PARSE, > + "%s: Create table pseudo-method for [%4.4s] @%p, method %p\n", > + ACPI_GET_FUNCTION_NAME, Table->Signature, Table, MethodObj)); > > MethodObj->Method.AmlStart = AmlStart; > MethodObj->Method.AmlLength = AmlLength; > @@ -404,7 +405,8 @@ AcpiNsParseTable ( > > if (AcpiGbl_ParseTableAsTermList) > { > - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "**** Start load pass\n")); > + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_PARSE, > + "%s: **** Start table execution pass\n", ACPI_GET_FUNCTION_NAME)); > > Status = AcpiNsExecuteTable (TableIndex, StartNode); > if (ACPI_FAILURE (Status)) > diff --git a/src/acpica/source/components/parser/psargs.c b/src/acpica/source/components/parser/psargs.c > index 0e0b1002..c9c17371 100644 > --- a/src/acpica/source/components/parser/psargs.c > +++ b/src/acpica/source/components/parser/psargs.c > @@ -1067,10 +1067,9 @@ AcpiPsGetNextArg ( > case ARGP_DATAOBJ: > case ARGP_TERMARG: > > - > - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, > - "**** TermArg/DataObj: %s (%2.2X)\n", > - AcpiUtGetArgumentTypeName (ArgType), ArgType)); > + ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, > + "**** TermArg/DataObj: %s (%2.2X)\n", > + AcpiUtGetArgumentTypeName (ArgType), ArgType)); > > /* Single complex argument, nothing returned */ > > diff --git a/src/acpica/source/components/parser/psloop.c b/src/acpica/source/components/parser/psloop.c > index fd868f50..74e8f0d6 100644 > --- a/src/acpica/source/components/parser/psloop.c > +++ b/src/acpica/source/components/parser/psloop.c > @@ -283,7 +283,7 @@ AcpiPsGetArguments ( > } > > ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, > - "Final argument count: %u pass %u\n", > + "Final argument count: %8.8X pass %u\n", > WalkState->ArgCount, WalkState->PassNumber)); > > /* > @@ -697,7 +697,7 @@ AcpiPsParseLoop ( > /* Check for arguments that need to be processed */ > > ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, > - "Parseloop: argument count: %u\n", WalkState->ArgCount)); > + "Parseloop: argument count: %8.8X\n", WalkState->ArgCount)); > > if (WalkState->ArgCount) > { > diff --git a/src/acpica/source/components/parser/psparse.c b/src/acpica/source/components/parser/psparse.c > index ce7ae94a..0ad62b77 100644 > --- a/src/acpica/source/components/parser/psparse.c > +++ b/src/acpica/source/components/parser/psparse.c > @@ -576,7 +576,7 @@ AcpiPsParseAml ( > > if (!WalkState->ParserState.Aml) > { > - return_ACPI_STATUS (AE_NULL_OBJECT); > + return_ACPI_STATUS (AE_BAD_ADDRESS); > } > > /* Create and initialize a new thread state */ > diff --git a/src/acpica/source/components/parser/pstree.c b/src/acpica/source/components/parser/pstree.c > index da1d222d..baed9256 100644 > --- a/src/acpica/source/components/parser/pstree.c > +++ b/src/acpica/source/components/parser/pstree.c > @@ -438,6 +438,7 @@ AcpiPsGetChild ( > > case AML_BUFFER_OP: > case AML_PACKAGE_OP: > + case AML_VARIABLE_PACKAGE_OP: > case AML_METHOD_OP: > case AML_IF_OP: > case AML_WHILE_OP: > diff --git a/src/acpica/source/components/utilities/utcache.c b/src/acpica/source/components/utilities/utcache.c > index 881dbf35..b324f28c 100644 > --- a/src/acpica/source/components/utilities/utcache.c > +++ b/src/acpica/source/components/utilities/utcache.c > @@ -415,8 +415,9 @@ AcpiOsAcquireObject ( > Cache->CurrentDepth--; > > ACPI_MEM_TRACKING (Cache->Hits++); > - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, > - "Object %p from %s cache\n", Object, Cache->ListName)); > + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, > + "%s: Object %p from %s cache\n", > + ACPI_GET_FUNCTION_NAME, Object, Cache->ListName)); > > Status = AcpiUtReleaseMutex (ACPI_MTX_CACHES); > if (ACPI_FAILURE (Status)) > diff --git a/src/acpica/source/components/utilities/utdelete.c b/src/acpica/source/components/utilities/utdelete.c > index 377ddfe5..4565d8fa 100644 > --- a/src/acpica/source/components/utilities/utdelete.c > +++ b/src/acpica/source/components/utilities/utdelete.c > @@ -454,8 +454,8 @@ AcpiUtDeleteInternalObj ( > > /* Now the object can be safely deleted */ > > - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Deleting Object %p [%s]\n", > - Object, AcpiUtGetObjectTypeName (Object))); > + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ALLOCATIONS, "%s: Deleting Object %p [%s]\n", > + ACPI_GET_FUNCTION_NAME, Object, AcpiUtGetObjectTypeName (Object))); > > AcpiUtDeleteObjectDesc (Object); > return_VOID; > @@ -581,9 +581,9 @@ AcpiUtUpdateRefCount ( > Object)); > } > > - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, > - "Obj %p Type %.2X Refs %.2X [Decremented]\n", > - Object, Object->Common.Type, NewCount)); > + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ALLOCATIONS, > + "%s: Obj %p Type %.2X Refs %.2X [Decremented]\n", > + ACPI_GET_FUNCTION_NAME, Object, Object->Common.Type, NewCount)); > > /* Actually delete the object on a reference count of zero */ > > @@ -906,9 +906,9 @@ AcpiUtRemoveReference ( > return; > } > > - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, > - "Obj %p Current Refs=%X [To Be Decremented]\n", > - Object, Object->Common.ReferenceCount)); > + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ALLOCATIONS, > + "%s: Obj %p Current Refs=%X [To Be Decremented]\n", > + ACPI_GET_FUNCTION_NAME, Object, Object->Common.ReferenceCount)); > > /* > * Decrement the reference count, and only actually delete the object > diff --git a/src/acpica/source/include/acopcode.h b/src/acpica/source/include/acopcode.h > index 56f13663..6dbeac68 100644 > --- a/src/acpica/source/include/acopcode.h > +++ b/src/acpica/source/include/acopcode.h > @@ -361,7 +361,7 @@ > #define ARGI_FIELD_OP ARGI_INVALID_OPCODE > #define ARGI_FIND_SET_LEFT_BIT_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF) > #define ARGI_FIND_SET_RIGHT_BIT_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF) > -#define ARGI_FROM_BCD_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF) > +#define ARGI_FROM_BCD_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_FIXED_TARGET) > #define ARGI_IF_OP ARGI_INVALID_OPCODE > #define ARGI_INCREMENT_OP ARGI_LIST1 (ARGI_TARGETREF) > #define ARGI_INDEX_FIELD_OP ARGI_INVALID_OPCODE > @@ -425,12 +425,12 @@ > #define ARGI_SUBTRACT_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) > #define ARGI_THERMAL_ZONE_OP ARGI_INVALID_OPCODE > #define ARGI_TIMER_OP ARG_NONE > -#define ARGI_TO_BCD_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF) > -#define ARGI_TO_BUFFER_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_TARGETREF) > -#define ARGI_TO_DEC_STR_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_TARGETREF) > -#define ARGI_TO_HEX_STR_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_TARGETREF) > -#define ARGI_TO_INTEGER_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_TARGETREF) > -#define ARGI_TO_STRING_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_TARGETREF) > +#define ARGI_TO_BCD_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_FIXED_TARGET) > +#define ARGI_TO_BUFFER_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET) > +#define ARGI_TO_DEC_STR_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET) > +#define ARGI_TO_HEX_STR_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET) > +#define ARGI_TO_INTEGER_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET) > +#define ARGI_TO_STRING_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_FIXED_TARGET) > #define ARGI_UNLOAD_OP ARGI_LIST1 (ARGI_DDBHANDLE) > #define ARGI_VAR_PACKAGE_OP ARGI_LIST1 (ARGI_INTEGER) > #define ARGI_WAIT_OP ARGI_LIST2 (ARGI_EVENT, ARGI_INTEGER) > diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h > index 864d1275..2f0ac564 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 0x20180105 > +#define ACPI_CA_VERSION 0x20180209 > > #include "acconfig.h" > #include "actypes.h" > @@ -302,6 +302,8 @@ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_DoNotUseXsdt, FALSE); > > /* > * Optionally support group module level code. > + * NOTE, this is essentially obsolete and will be removed soon > + * (01/2018). > */ > ACPI_INIT_GLOBAL (UINT8, AcpiGbl_GroupModuleLevelCode, FALSE); > > @@ -309,8 +311,10 @@ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_GroupModuleLevelCode, FALSE); > * Optionally support module level code by parsing the entire table as > * a TermList. Default is FALSE, do not execute entire table until some > * lock order issues are fixed. > + * NOTE, this is essentially obsolete and will be removed soon > + * (01/2018). > */ > -ACPI_INIT_GLOBAL (UINT8, AcpiGbl_ParseTableAsTermList, FALSE); > +ACPI_INIT_GLOBAL (UINT8, AcpiGbl_ParseTableAsTermList, TRUE); > > /* > * Optionally use 32-bit FADT addresses if and when there is a conflict > diff --git a/src/acpica/source/include/actbl1.h b/src/acpica/source/include/actbl1.h > index a9db6fc7..4f03ab05 100644 > --- a/src/acpica/source/include/actbl1.h > +++ b/src/acpica/source/include/actbl1.h > @@ -155,13 +155,11 @@ > > /******************************************************************************* > * > - * Additional ACPI Tables (1) > + * Additional ACPI Tables > * > * These tables are not consumed directly by the ACPICA subsystem, but are > * included here to support device drivers and the AML disassembler. > * > - * The tables in this file are fully defined within the ACPI specification. > - * > ******************************************************************************/ > > > @@ -170,24 +168,44 @@ > * file. Useful because they make it more difficult to inadvertently type in > * the wrong signature. > */ > +#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 */ > +#define ACPI_SIG_BOOT "BOOT" /* Simple Boot Flag Table */ > #define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */ > +#define ACPI_SIG_CSRT "CSRT" /* Core System Resource Table */ > +#define ACPI_SIG_DBG2 "DBG2" /* Debug Port table type 2 */ > +#define ACPI_SIG_DBGP "DBGP" /* Debug Port table */ > +#define ACPI_SIG_DMAR "DMAR" /* DMA Remapping table */ > +#define ACPI_SIG_DRTM "DRTM" /* Dynamic Root of Trust for Measurement table */ > #define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */ > #define ACPI_SIG_EINJ "EINJ" /* Error Injection table */ > #define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */ > -#define ACPI_SIG_HMAT "HMAT" /* Heterogeneous Memory Attributes Table */ > +#define ACPI_SIG_FPDT "FPDT" /* Firmware Performance Data Table */ > +#define ACPI_SIG_GTDT "GTDT" /* Generic Timer Description Table */ > #define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */ > -#define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ > -#define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */ > -#define ACPI_SIG_PDTT "PDTT" /* Platform Debug Trigger Table */ > -#define ACPI_SIG_PPTT "PPTT" /* Processor Properties Topology Table */ > -#define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ > -#define ACPI_SIG_SDEV "SDEV" /* Secure Devices table */ > -#define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */ > -#define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */ > -#define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */ > +#define ACPI_SIG_HMAT "HMAT" /* Heterogeneous Memory Attributes Table */ > +#define ACPI_SIG_HPET "HPET" /* High Precision Event Timer table */ > +#define ACPI_SIG_IBFT "IBFT" /* iSCSI Boot Firmware Table */ > + > +#define ACPI_SIG_S3PT "S3PT" /* S3 Performance (sub)Table */ > +#define ACPI_SIG_PCCS "PCC" /* PCC Shared Memory Region */ > > > +/* Reserved table signatures */ > + > +#define ACPI_SIG_MATR "MATR" /* Memory Address Translation Table */ > +#define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ > + > +/* > + * These tables have been seen in the field, but no definition has been found > + */ > +#ifdef ACPI_UNDEFINED_TABLES > +#define ACPI_SIG_ATKG "ATKG" > +#define ACPI_SIG_GSCI "GSCI" /* GMCH SCI table */ > +#define ACPI_SIG_IEIT "IEIT" > +#endif > + > /* > * All tables must be byte-packed to match the ACPI specification, since > * the tables are provided by the system BIOS. > @@ -238,6 +256,146 @@ typedef struct acpi_whea_header > } ACPI_WHEA_HEADER; > > > +/******************************************************************************* > + * > + * ASF - Alert Standard Format table (Signature "ASF!") > + * Revision 0x10 > + * > + * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003 > + * > + ******************************************************************************/ > + > +typedef struct acpi_table_asf > +{ > + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > + > +} ACPI_TABLE_ASF; > + > + > +/* ASF subtable header */ > + > +typedef struct acpi_asf_header > +{ > + UINT8 Type; > + UINT8 Reserved; > + UINT16 Length; > + > +} ACPI_ASF_HEADER; > + > + > +/* Values for Type field above */ > + > +enum AcpiAsfType > +{ > + ACPI_ASF_TYPE_INFO = 0, > + ACPI_ASF_TYPE_ALERT = 1, > + ACPI_ASF_TYPE_CONTROL = 2, > + ACPI_ASF_TYPE_BOOT = 3, > + ACPI_ASF_TYPE_ADDRESS = 4, > + ACPI_ASF_TYPE_RESERVED = 5 > +}; > + > +/* > + * ASF subtables > + */ > + > +/* 0: ASF Information */ > + > +typedef struct acpi_asf_info > +{ > + ACPI_ASF_HEADER Header; > + UINT8 MinResetValue; > + UINT8 MinPollInterval; > + UINT16 SystemId; > + UINT32 MfgId; > + UINT8 Flags; > + UINT8 Reserved2[3]; > + > +} ACPI_ASF_INFO; > + > +/* Masks for Flags field above */ > + > +#define ACPI_ASF_SMBUS_PROTOCOLS (1) > + > + > +/* 1: ASF Alerts */ > + > +typedef struct acpi_asf_alert > +{ > + ACPI_ASF_HEADER Header; > + UINT8 AssertMask; > + UINT8 DeassertMask; > + UINT8 Alerts; > + UINT8 DataLength; > + > +} ACPI_ASF_ALERT; > + > +typedef struct acpi_asf_alert_data > +{ > + UINT8 Address; > + UINT8 Command; > + UINT8 Mask; > + UINT8 Value; > + UINT8 SensorType; > + UINT8 Type; > + UINT8 Offset; > + UINT8 SourceType; > + UINT8 Severity; > + UINT8 SensorNumber; > + UINT8 Entity; > + UINT8 Instance; > + > +} ACPI_ASF_ALERT_DATA; > + > + > +/* 2: ASF Remote Control */ > + > +typedef struct acpi_asf_remote > +{ > + ACPI_ASF_HEADER Header; > + UINT8 Controls; > + UINT8 DataLength; > + UINT16 Reserved2; > + > +} ACPI_ASF_REMOTE; > + > +typedef struct acpi_asf_control_data > +{ > + UINT8 Function; > + UINT8 Address; > + UINT8 Command; > + UINT8 Value; > + > +} ACPI_ASF_CONTROL_DATA; > + > + > +/* 3: ASF RMCP Boot Options */ > + > +typedef struct acpi_asf_rmcp > +{ > + ACPI_ASF_HEADER Header; > + UINT8 Capabilities[7]; > + UINT8 CompletionCode; > + UINT32 EnterpriseId; > + UINT8 Command; > + UINT16 Parameter; > + UINT16 BootOptions; > + UINT16 OemParameters; > + > +} ACPI_ASF_RMCP; > + > + > +/* 4: ASF Address */ > + > +typedef struct acpi_asf_address > +{ > + ACPI_ASF_HEADER Header; > + UINT8 EpromAddress; > + UINT8 Devices; > + > +} ACPI_ASF_ADDRESS; > + > + > /******************************************************************************* > * > * BERT - Boot Error Record Table (ACPI 4.0) > @@ -291,6 +449,49 @@ enum AcpiBertErrorSeverity > */ > > > +/******************************************************************************* > + * > + * BGRT - Boot Graphics Resource Table (ACPI 5.0) > + * Version 1 > + * > + ******************************************************************************/ > + > +typedef struct acpi_table_bgrt > +{ > + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > + UINT16 Version; > + UINT8 Status; > + UINT8 ImageType; > + UINT64 ImageAddress; > + UINT32 ImageOffsetX; > + UINT32 ImageOffsetY; > + > +} ACPI_TABLE_BGRT; > + > +/* Flags for Status field above */ > + > +#define ACPI_BGRT_DISPLAYED (1) > +#define ACPI_BGRT_ORIENTATION_OFFSET (3 << 1) > + > + > +/******************************************************************************* > + * > + * BOOT - Simple Boot Flag Table > + * Version 1 > + * > + * Conforms to the "Simple Boot Flag Specification", Version 2.1 > + * > + ******************************************************************************/ > + > +typedef struct acpi_table_boot > +{ > + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > + UINT8 CmosIndex; /* Index in CMOS RAM for the boot register */ > + UINT8 Reserved[3]; > + > +} ACPI_TABLE_BOOT; > + > + > /******************************************************************************* > * > * CPEP - Corrected Platform Error Polling table (ACPI 4.0) > @@ -320,1725 +521,1522 @@ typedef struct acpi_cpep_polling > > /******************************************************************************* > * > - * ECDT - Embedded Controller Boot Resources Table > - * Version 1 > + * CSRT - Core System Resource Table > + * Version 0 > + * > + * Conforms to the "Core System Resource Table (CSRT)", November 14, 2011 > * > ******************************************************************************/ > > -typedef struct acpi_table_ecdt > +typedef struct acpi_table_csrt > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - ACPI_GENERIC_ADDRESS Control; /* Address of EC command/status register */ > - ACPI_GENERIC_ADDRESS Data; /* Address of EC data register */ > - UINT32 Uid; /* Unique ID - must be same as the EC _UID method */ > - UINT8 Gpe; /* The GPE for the EC */ > - UINT8 Id[1]; /* Full namepath of the EC in the ACPI namespace */ > > -} ACPI_TABLE_ECDT; > +} ACPI_TABLE_CSRT; > > > -/******************************************************************************* > - * > - * EINJ - Error Injection Table (ACPI 4.0) > - * Version 1 > - * > - ******************************************************************************/ > +/* Resource Group subtable */ > > -typedef struct acpi_table_einj > +typedef struct acpi_csrt_group > { > - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT32 HeaderLength; > - UINT8 Flags; > - UINT8 Reserved[3]; > - UINT32 Entries; > + UINT32 Length; > + UINT32 VendorId; > + UINT32 SubvendorId; > + UINT16 DeviceId; > + UINT16 SubdeviceId; > + UINT16 Revision; > + UINT16 Reserved; > + UINT32 SharedInfoLength; > > -} ACPI_TABLE_EINJ; > + /* Shared data immediately follows (Length = SharedInfoLength) */ > > +} ACPI_CSRT_GROUP; > > -/* EINJ Injection Instruction Entries (actions) */ > +/* Shared Info subtable */ > > -typedef struct acpi_einj_entry > +typedef struct acpi_csrt_shared_info > { > - ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ > - > -} ACPI_EINJ_ENTRY; > + UINT16 MajorVersion; > + UINT16 MinorVersion; > + UINT32 MmioBaseLow; > + UINT32 MmioBaseHigh; > + UINT32 GsiInterrupt; > + UINT8 InterruptPolarity; > + UINT8 InterruptMode; > + UINT8 NumChannels; > + UINT8 DmaAddressWidth; > + UINT16 BaseRequestLine; > + UINT16 NumHandshakeSignals; > + UINT32 MaxBlockSize; > > -/* Masks for Flags field above */ > + /* Resource descriptors immediately follow (Length = Group Length - SharedInfoLength) */ > > -#define ACPI_EINJ_PRESERVE (1) > +} ACPI_CSRT_SHARED_INFO; > > -/* Values for Action field above */ > +/* Resource Descriptor subtable */ > > -enum AcpiEinjActions > +typedef struct acpi_csrt_descriptor > { > - ACPI_EINJ_BEGIN_OPERATION = 0, > - ACPI_EINJ_GET_TRIGGER_TABLE = 1, > - ACPI_EINJ_SET_ERROR_TYPE = 2, > - ACPI_EINJ_GET_ERROR_TYPE = 3, > - ACPI_EINJ_END_OPERATION = 4, > - ACPI_EINJ_EXECUTE_OPERATION = 5, > - ACPI_EINJ_CHECK_BUSY_STATUS = 6, > - ACPI_EINJ_GET_COMMAND_STATUS = 7, > - ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8, > - ACPI_EINJ_GET_EXECUTE_TIMINGS = 9, > - ACPI_EINJ_ACTION_RESERVED = 10, /* 10 and greater are reserved */ > - ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */ > -}; > + UINT32 Length; > + UINT16 Type; > + UINT16 Subtype; > + UINT32 Uid; > > -/* Values for Instruction field above */ > + /* Resource-specific information immediately follows */ > > -enum AcpiEinjInstructions > -{ > - ACPI_EINJ_READ_REGISTER = 0, > - ACPI_EINJ_READ_REGISTER_VALUE = 1, > - ACPI_EINJ_WRITE_REGISTER = 2, > - ACPI_EINJ_WRITE_REGISTER_VALUE = 3, > - ACPI_EINJ_NOOP = 4, > - ACPI_EINJ_FLUSH_CACHELINE = 5, > - ACPI_EINJ_INSTRUCTION_RESERVED = 6 /* 6 and greater are reserved */ > -}; > +} ACPI_CSRT_DESCRIPTOR; > > -typedef struct acpi_einj_error_type_with_addr > + > +/* Resource Types */ > + > +#define ACPI_CSRT_TYPE_INTERRUPT 0x0001 > +#define ACPI_CSRT_TYPE_TIMER 0x0002 > +#define ACPI_CSRT_TYPE_DMA 0x0003 > + > +/* Resource Subtypes */ > + > +#define ACPI_CSRT_XRUPT_LINE 0x0000 > +#define ACPI_CSRT_XRUPT_CONTROLLER 0x0001 > +#define ACPI_CSRT_TIMER 0x0000 > +#define ACPI_CSRT_DMA_CHANNEL 0x0000 > +#define ACPI_CSRT_DMA_CONTROLLER 0x0001 > + > + > +/******************************************************************************* > + * > + * DBG2 - Debug Port Table 2 > + * Version 0 (Both main table and subtables) > + * > + * Conforms to "Microsoft Debug Port Table 2 (DBG2)", December 10, 2015 > + * > + ******************************************************************************/ > + > +typedef struct acpi_table_dbg2 > { > - UINT32 ErrorType; > - UINT32 VendorStructOffset; > - UINT32 Flags; > - UINT32 ApicId; > - UINT64 Address; > - UINT64 Range; > - UINT32 PcieId; > + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > + UINT32 InfoOffset; > + UINT32 InfoCount; > > -} ACPI_EINJ_ERROR_TYPE_WITH_ADDR; > +} ACPI_TABLE_DBG2; > > -typedef struct acpi_einj_vendor > + > +typedef struct acpi_dbg2_header > { > - UINT32 Length; > - UINT32 PcieId; > - UINT16 VendorId; > - UINT16 DeviceId; > - UINT8 RevisionId; > - UINT8 Reserved[3]; > + UINT32 InfoOffset; > + UINT32 InfoCount; > > -} ACPI_EINJ_VENDOR; > +} ACPI_DBG2_HEADER; > > > -/* EINJ Trigger Error Action Table */ > +/* Debug Device Information Subtable */ > > -typedef struct acpi_einj_trigger > +typedef struct acpi_dbg2_device > { > - UINT32 HeaderSize; > - UINT32 Revision; > - UINT32 TableSize; > - UINT32 EntryCount; > + UINT8 Revision; > + UINT16 Length; > + UINT8 RegisterCount; /* Number of BaseAddress registers */ > + UINT16 NamepathLength; > + UINT16 NamepathOffset; > + UINT16 OemDataLength; > + UINT16 OemDataOffset; > + UINT16 PortType; > + UINT16 PortSubtype; > + UINT16 Reserved; > + UINT16 BaseAddressOffset; > + UINT16 AddressSizeOffset; > + /* > + * Data that follows: > + * BaseAddress (required) - Each in 12-byte Generic Address Structure format. > + * AddressSize (required) - Array of UINT32 sizes corresponding to each BaseAddress register. > + * Namepath (required) - Null terminated string. Single dot if not supported. > + * OemData (optional) - Length is OemDataLength. > + */ > +} ACPI_DBG2_DEVICE; > > -} ACPI_EINJ_TRIGGER; > +/* Types for PortType field above */ > > -/* Command status return values */ > +#define ACPI_DBG2_SERIAL_PORT 0x8000 > +#define ACPI_DBG2_1394_PORT 0x8001 > +#define ACPI_DBG2_USB_PORT 0x8002 > +#define ACPI_DBG2_NET_PORT 0x8003 > > -enum AcpiEinjCommandStatus > -{ > - ACPI_EINJ_SUCCESS = 0, > - ACPI_EINJ_FAILURE = 1, > - ACPI_EINJ_INVALID_ACCESS = 2, > - ACPI_EINJ_STATUS_RESERVED = 3 /* 3 and greater are reserved */ > -}; > +/* Subtypes for PortSubtype field above */ > > +#define ACPI_DBG2_16550_COMPATIBLE 0x0000 > +#define ACPI_DBG2_16550_SUBSET 0x0001 > +#define ACPI_DBG2_ARM_PL011 0x0003 > +#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 > > -/* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */ > +#define ACPI_DBG2_1394_STANDARD 0x0000 > > -#define ACPI_EINJ_PROCESSOR_CORRECTABLE (1) > -#define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1) > -#define ACPI_EINJ_PROCESSOR_FATAL (1<<2) > -#define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3) > -#define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4) > -#define ACPI_EINJ_MEMORY_FATAL (1<<5) > -#define ACPI_EINJ_PCIX_CORRECTABLE (1<<6) > -#define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7) > -#define ACPI_EINJ_PCIX_FATAL (1<<8) > -#define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9) > -#define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10) > -#define ACPI_EINJ_PLATFORM_FATAL (1<<11) > -#define ACPI_EINJ_VENDOR_DEFINED (1<<31) > +#define ACPI_DBG2_USB_XHCI 0x0000 > +#define ACPI_DBG2_USB_EHCI 0x0001 > > > /******************************************************************************* > * > - * ERST - Error Record Serialization Table (ACPI 4.0) > + * DBGP - Debug Port table > * Version 1 > * > + * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000 > + * > ******************************************************************************/ > > -typedef struct acpi_table_erst > +typedef struct acpi_table_dbgp > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT32 HeaderLength; > - UINT32 Reserved; > - UINT32 Entries; > + UINT8 Type; /* 0=full 16550, 1=subset of 16550 */ > + UINT8 Reserved[3]; > + ACPI_GENERIC_ADDRESS DebugPort; > > -} ACPI_TABLE_ERST; > +} ACPI_TABLE_DBGP; > > > -/* ERST Serialization Entries (actions) */ > +/******************************************************************************* > + * > + * DMAR - DMA Remapping table > + * Version 1 > + * > + * Conforms to "Intel Virtualization Technology for Directed I/O", > + * Version 2.3, October 2014 > + * > + ******************************************************************************/ > > -typedef struct acpi_erst_entry > +typedef struct acpi_table_dmar > { > - ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ > + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > + UINT8 Width; /* Host Address Width */ > + UINT8 Flags; > + UINT8 Reserved[10]; > > -} ACPI_ERST_ENTRY; > +} ACPI_TABLE_DMAR; > > /* Masks for Flags field above */ > > -#define ACPI_ERST_PRESERVE (1) > +#define ACPI_DMAR_INTR_REMAP (1) > +#define ACPI_DMAR_X2APIC_OPT_OUT (1<<1) > +#define ACPI_DMAR_X2APIC_MODE (1<<2) > > -/* Values for Action field above */ > > -enum AcpiErstActions > +/* DMAR subtable header */ > + > +typedef struct acpi_dmar_header > { > - ACPI_ERST_BEGIN_WRITE = 0, > - ACPI_ERST_BEGIN_READ = 1, > - ACPI_ERST_BEGIN_CLEAR = 2, > - ACPI_ERST_END = 3, > - ACPI_ERST_SET_RECORD_OFFSET = 4, > - ACPI_ERST_EXECUTE_OPERATION = 5, > - ACPI_ERST_CHECK_BUSY_STATUS = 6, > - ACPI_ERST_GET_COMMAND_STATUS = 7, > - ACPI_ERST_GET_RECORD_ID = 8, > - ACPI_ERST_SET_RECORD_ID = 9, > - ACPI_ERST_GET_RECORD_COUNT = 10, > - ACPI_ERST_BEGIN_DUMMY_WRIITE = 11, > - ACPI_ERST_NOT_USED = 12, > - ACPI_ERST_GET_ERROR_RANGE = 13, > - ACPI_ERST_GET_ERROR_LENGTH = 14, > - ACPI_ERST_GET_ERROR_ATTRIBUTES = 15, > - ACPI_ERST_EXECUTE_TIMINGS = 16, > - ACPI_ERST_ACTION_RESERVED = 17 /* 17 and greater are reserved */ > -}; > + UINT16 Type; > + UINT16 Length; > > -/* Values for Instruction field above */ > +} ACPI_DMAR_HEADER; > > -enum AcpiErstInstructions > -{ > - ACPI_ERST_READ_REGISTER = 0, > - ACPI_ERST_READ_REGISTER_VALUE = 1, > - ACPI_ERST_WRITE_REGISTER = 2, > - ACPI_ERST_WRITE_REGISTER_VALUE = 3, > - ACPI_ERST_NOOP = 4, > - ACPI_ERST_LOAD_VAR1 = 5, > - ACPI_ERST_LOAD_VAR2 = 6, > - ACPI_ERST_STORE_VAR1 = 7, > - ACPI_ERST_ADD = 8, > - ACPI_ERST_SUBTRACT = 9, > - ACPI_ERST_ADD_VALUE = 10, > - ACPI_ERST_SUBTRACT_VALUE = 11, > - ACPI_ERST_STALL = 12, > - ACPI_ERST_STALL_WHILE_TRUE = 13, > - ACPI_ERST_SKIP_NEXT_IF_TRUE = 14, > - ACPI_ERST_GOTO = 15, > - ACPI_ERST_SET_SRC_ADDRESS_BASE = 16, > - ACPI_ERST_SET_DST_ADDRESS_BASE = 17, > - ACPI_ERST_MOVE_DATA = 18, > - ACPI_ERST_INSTRUCTION_RESERVED = 19 /* 19 and greater are reserved */ > -}; > - > -/* Command status return values */ > +/* Values for subtable type in ACPI_DMAR_HEADER */ > > -enum AcpiErstCommandStatus > +enum AcpiDmarType > { > - ACPI_ERST_SUCESS = 0, > - ACPI_ERST_NO_SPACE = 1, > - ACPI_ERST_NOT_AVAILABLE = 2, > - ACPI_ERST_FAILURE = 3, > - ACPI_ERST_RECORD_EMPTY = 4, > - ACPI_ERST_NOT_FOUND = 5, > - ACPI_ERST_STATUS_RESERVED = 6 /* 6 and greater are reserved */ > + ACPI_DMAR_TYPE_HARDWARE_UNIT = 0, > + ACPI_DMAR_TYPE_RESERVED_MEMORY = 1, > + ACPI_DMAR_TYPE_ROOT_ATS = 2, > + ACPI_DMAR_TYPE_HARDWARE_AFFINITY = 3, > + ACPI_DMAR_TYPE_NAMESPACE = 4, > + ACPI_DMAR_TYPE_RESERVED = 5 /* 5 and greater are reserved */ > }; > > > -/* Error Record Serialization Information */ > +/* DMAR Device Scope structure */ > > -typedef struct acpi_erst_info > +typedef struct acpi_dmar_device_scope > { > - UINT16 Signature; /* Should be "ER" */ > - UINT8 Data[48]; > - > -} ACPI_ERST_INFO; > + UINT8 EntryType; > + UINT8 Length; > + UINT16 Reserved; > + UINT8 EnumerationId; > + UINT8 Bus; > > +} ACPI_DMAR_DEVICE_SCOPE; > > -/******************************************************************************* > - * > - * HEST - Hardware Error Source Table (ACPI 4.0) > - * Version 1 > - * > - ******************************************************************************/ > +/* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE - device types */ > > -typedef struct acpi_table_hest > +enum AcpiDmarScopeType > { > - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT32 ErrorSourceCount; > - > -} ACPI_TABLE_HEST; > - > - > -/* HEST subtable header */ > + ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0, > + ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1, > + ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2, > + ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3, > + ACPI_DMAR_SCOPE_TYPE_HPET = 4, > + ACPI_DMAR_SCOPE_TYPE_NAMESPACE = 5, > + ACPI_DMAR_SCOPE_TYPE_RESERVED = 6 /* 6 and greater are reserved */ > +}; > > -typedef struct acpi_hest_header > +typedef struct acpi_dmar_pci_path > { > - UINT16 Type; > - UINT16 SourceId; > - > -} ACPI_HEST_HEADER; > + UINT8 Device; > + UINT8 Function; > > - > -/* Values for Type field above for subtables */ > - > -enum AcpiHestTypes > -{ > - ACPI_HEST_TYPE_IA32_CHECK = 0, > - ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1, > - ACPI_HEST_TYPE_IA32_NMI = 2, > - ACPI_HEST_TYPE_NOT_USED3 = 3, > - ACPI_HEST_TYPE_NOT_USED4 = 4, > - ACPI_HEST_TYPE_NOT_USED5 = 5, > - ACPI_HEST_TYPE_AER_ROOT_PORT = 6, > - ACPI_HEST_TYPE_AER_ENDPOINT = 7, > - ACPI_HEST_TYPE_AER_BRIDGE = 8, > - ACPI_HEST_TYPE_GENERIC_ERROR = 9, > - ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10, > - ACPI_HEST_TYPE_IA32_DEFERRED_CHECK = 11, > - ACPI_HEST_TYPE_RESERVED = 12 /* 12 and greater are reserved */ > -}; > +} ACPI_DMAR_PCI_PATH; > > > /* > - * HEST substructures contained in subtables > + * DMAR Subtables, correspond to Type in ACPI_DMAR_HEADER > */ > > -/* > - * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and > - * ACPI_HEST_IA_CORRECTED structures. > - */ > -typedef struct acpi_hest_ia_error_bank > -{ > - UINT8 BankNumber; > - UINT8 ClearStatusOnInit; > - UINT8 StatusFormat; > - UINT8 Reserved; > - UINT32 ControlRegister; > - UINT64 ControlData; > - UINT32 StatusRegister; > - UINT32 AddressRegister; > - UINT32 MiscRegister; > - > -} ACPI_HEST_IA_ERROR_BANK; > - > - > -/* Common HEST sub-structure for PCI/AER structures below (6,7,8) */ > +/* 0: Hardware Unit Definition */ > > -typedef struct acpi_hest_aer_common > +typedef struct acpi_dmar_hardware_unit > { > - UINT16 Reserved1; > + ACPI_DMAR_HEADER Header; > UINT8 Flags; > - UINT8 Enabled; > - UINT32 RecordsToPreallocate; > - UINT32 MaxSectionsPerRecord; > - UINT32 Bus; /* Bus and Segment numbers */ > - UINT16 Device; > - UINT16 Function; > - UINT16 DeviceControl; > - UINT16 Reserved2; > - UINT32 UncorrectableMask; > - UINT32 UncorrectableSeverity; > - UINT32 CorrectableMask; > - UINT32 AdvancedCapabilities; > - > -} ACPI_HEST_AER_COMMON; > - > -/* Masks for HEST Flags fields */ > - > -#define ACPI_HEST_FIRMWARE_FIRST (1) > -#define ACPI_HEST_GLOBAL (1<<1) > -#define ACPI_HEST_GHES_ASSIST (1<<2) > - > -/* > - * Macros to access the bus/segment numbers in Bus field above: > - * Bus number is encoded in bits 7:0 > - * Segment number is encoded in bits 23:8 > - */ > -#define ACPI_HEST_BUS(Bus) ((Bus) & 0xFF) > -#define ACPI_HEST_SEGMENT(Bus) (((Bus) >> 8) & 0xFFFF) > + UINT8 Reserved; > + UINT16 Segment; > + UINT64 Address; /* Register Base Address */ > > +} ACPI_DMAR_HARDWARE_UNIT; > > -/* Hardware Error Notification */ > +/* Masks for Flags field above */ > > -typedef struct acpi_hest_notify > -{ > - UINT8 Type; > - UINT8 Length; > - UINT16 ConfigWriteEnable; > - UINT32 PollInterval; > - UINT32 Vector; > - UINT32 PollingThresholdValue; > - UINT32 PollingThresholdWindow; > - UINT32 ErrorThresholdValue; > - UINT32 ErrorThresholdWindow; > +#define ACPI_DMAR_INCLUDE_ALL (1) > > -} ACPI_HEST_NOTIFY; > > -/* Values for Notify Type field above */ > +/* 1: Reserved Memory Defininition */ > > -enum AcpiHestNotifyTypes > +typedef struct acpi_dmar_reserved_memory > { > - ACPI_HEST_NOTIFY_POLLED = 0, > - ACPI_HEST_NOTIFY_EXTERNAL = 1, > - ACPI_HEST_NOTIFY_LOCAL = 2, > - ACPI_HEST_NOTIFY_SCI = 3, > - ACPI_HEST_NOTIFY_NMI = 4, > - ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */ > - ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */ > - ACPI_HEST_NOTIFY_GPIO = 7, /* ACPI 6.0 */ > - ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */ > - ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */ > - ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */ > - ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11, /* ACPI 6.2 */ > - ACPI_HEST_NOTIFY_RESERVED = 12 /* 12 and greater are reserved */ > -}; > + ACPI_DMAR_HEADER Header; > + UINT16 Reserved; > + UINT16 Segment; > + UINT64 BaseAddress; /* 4K aligned base address */ > + UINT64 EndAddress; /* 4K aligned limit address */ > > -/* Values for ConfigWriteEnable bitfield above */ > +} ACPI_DMAR_RESERVED_MEMORY; > > -#define ACPI_HEST_TYPE (1) > -#define ACPI_HEST_POLL_INTERVAL (1<<1) > -#define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2) > -#define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3) > -#define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4) > -#define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5) > +/* Masks for Flags field above */ > > +#define ACPI_DMAR_ALLOW_ALL (1) > > -/* > - * HEST subtables > - */ > > -/* 0: IA32 Machine Check Exception */ > +/* 2: Root Port ATS Capability Reporting Structure */ > > -typedef struct acpi_hest_ia_machine_check > +typedef struct acpi_dmar_atsr > { > - ACPI_HEST_HEADER Header; > - UINT16 Reserved1; > - UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ > - UINT8 Enabled; > - UINT32 RecordsToPreallocate; > - UINT32 MaxSectionsPerRecord; > - UINT64 GlobalCapabilityData; > - UINT64 GlobalControlData; > - UINT8 NumHardwareBanks; > - UINT8 Reserved3[7]; > - > -} ACPI_HEST_IA_MACHINE_CHECK; > - > + ACPI_DMAR_HEADER Header; > + UINT8 Flags; > + UINT8 Reserved; > + UINT16 Segment; > > -/* 1: IA32 Corrected Machine Check */ > +} ACPI_DMAR_ATSR; > > -typedef struct acpi_hest_ia_corrected > -{ > - ACPI_HEST_HEADER Header; > - UINT16 Reserved1; > - UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ > - UINT8 Enabled; > - UINT32 RecordsToPreallocate; > - UINT32 MaxSectionsPerRecord; > - ACPI_HEST_NOTIFY Notify; > - UINT8 NumHardwareBanks; > - UINT8 Reserved2[3]; > +/* Masks for Flags field above */ > > -} ACPI_HEST_IA_CORRECTED; > +#define ACPI_DMAR_ALL_PORTS (1) > > > -/* 2: IA32 Non-Maskable Interrupt */ > +/* 3: Remapping Hardware Static Affinity Structure */ > > -typedef struct acpi_hest_ia_nmi > +typedef struct acpi_dmar_rhsa > { > - ACPI_HEST_HEADER Header; > + ACPI_DMAR_HEADER Header; > UINT32 Reserved; > - UINT32 RecordsToPreallocate; > - UINT32 MaxSectionsPerRecord; > - UINT32 MaxRawDataLength; > + UINT64 BaseAddress; > + UINT32 ProximityDomain; > > -} ACPI_HEST_IA_NMI; > +} ACPI_DMAR_RHSA; > > > -/* 3,4,5: Not used */ > +/* 4: ACPI Namespace Device Declaration Structure */ > > -/* 6: PCI Express Root Port AER */ > - > -typedef struct acpi_hest_aer_root > +typedef struct acpi_dmar_andd > { > - ACPI_HEST_HEADER Header; > - ACPI_HEST_AER_COMMON Aer; > - UINT32 RootErrorCommand; > + ACPI_DMAR_HEADER Header; > + UINT8 Reserved[3]; > + UINT8 DeviceNumber; > + char DeviceName[1]; > > -} ACPI_HEST_AER_ROOT; > +} ACPI_DMAR_ANDD; > > > -/* 7: PCI Express AER (AER Endpoint) */ > +/******************************************************************************* > + * > + * DRTM - Dynamic Root of Trust for Measurement table > + * Conforms to "TCG D-RTM Architecture" June 17 2013, Version 1.0.0 > + * Table version 1 > + * > + ******************************************************************************/ > > -typedef struct acpi_hest_aer > +typedef struct acpi_table_drtm > { > - ACPI_HEST_HEADER Header; > - ACPI_HEST_AER_COMMON Aer; > - > -} ACPI_HEST_AER; > + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > + UINT64 EntryBaseAddress; > + UINT64 EntryLength; > + UINT32 EntryAddress32; > + UINT64 EntryAddress64; > + UINT64 ExitAddress; > + UINT64 LogAreaAddress; > + UINT32 LogAreaLength; > + UINT64 ArchDependentAddress; > + UINT32 Flags; > > +} ACPI_TABLE_DRTM; > > -/* 8: PCI Express/PCI-X Bridge AER */ > - > -typedef struct acpi_hest_aer_bridge > -{ > - ACPI_HEST_HEADER Header; > - ACPI_HEST_AER_COMMON Aer; > - UINT32 UncorrectableMask2; > - UINT32 UncorrectableSeverity2; > - UINT32 AdvancedCapabilities2; > +/* Flag Definitions for above */ > > -} ACPI_HEST_AER_BRIDGE; > +#define ACPI_DRTM_ACCESS_ALLOWED (1) > +#define ACPI_DRTM_ENABLE_GAP_CODE (1<<1) > +#define ACPI_DRTM_INCOMPLETE_MEASUREMENTS (1<<2) > +#define ACPI_DRTM_AUTHORITY_ORDER (1<<3) > > > -/* 9: Generic Hardware Error Source */ > +/* 1) Validated Tables List (64-bit addresses) */ > > -typedef struct acpi_hest_generic > +typedef struct acpi_drtm_vtable_list > { > - ACPI_HEST_HEADER Header; > - UINT16 RelatedSourceId; > - UINT8 Reserved; > - UINT8 Enabled; > - UINT32 RecordsToPreallocate; > - UINT32 MaxSectionsPerRecord; > - UINT32 MaxRawDataLength; > - ACPI_GENERIC_ADDRESS ErrorStatusAddress; > - ACPI_HEST_NOTIFY Notify; > - UINT32 ErrorBlockLength; > + UINT32 ValidatedTableCount; > + UINT64 ValidatedTables[1]; > > -} ACPI_HEST_GENERIC; > +} ACPI_DRTM_VTABLE_LIST; > > +/* 2) Resources List (of Resource Descriptors) */ > > -/* 10: Generic Hardware Error Source, version 2 */ > +/* Resource Descriptor */ > > -typedef struct acpi_hest_generic_v2 > +typedef struct acpi_drtm_resource > { > - ACPI_HEST_HEADER Header; > - UINT16 RelatedSourceId; > - UINT8 Reserved; > - UINT8 Enabled; > - UINT32 RecordsToPreallocate; > - UINT32 MaxSectionsPerRecord; > - UINT32 MaxRawDataLength; > - ACPI_GENERIC_ADDRESS ErrorStatusAddress; > - ACPI_HEST_NOTIFY Notify; > - UINT32 ErrorBlockLength; > - ACPI_GENERIC_ADDRESS ReadAckRegister; > - UINT64 ReadAckPreserve; > - UINT64 ReadAckWrite; > - > -} ACPI_HEST_GENERIC_V2; > - > - > -/* Generic Error Status block */ > - > -typedef struct acpi_hest_generic_status > -{ > - UINT32 BlockStatus; > - UINT32 RawDataOffset; > - UINT32 RawDataLength; > - UINT32 DataLength; > - UINT32 ErrorSeverity; > - > -} ACPI_HEST_GENERIC_STATUS; > - > -/* Values for BlockStatus flags above */ > - > -#define ACPI_HEST_UNCORRECTABLE (1) > -#define ACPI_HEST_CORRECTABLE (1<<1) > -#define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2) > -#define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3) > -#define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ > + UINT8 Size[7]; > + UINT8 Type; > + UINT64 Address; > > +} ACPI_DRTM_RESOURCE; > > -/* Generic Error Data entry */ > - > -typedef struct acpi_hest_generic_data > +typedef struct acpi_drtm_resource_list > { > - UINT8 SectionType[16]; > - UINT32 ErrorSeverity; > - UINT16 Revision; > - UINT8 ValidationBits; > - UINT8 Flags; > - UINT32 ErrorDataLength; > - UINT8 FruId[16]; > - UINT8 FruText[20]; > + UINT32 ResourceCount; > + ACPI_DRTM_RESOURCE Resources[1]; > > -} ACPI_HEST_GENERIC_DATA; > +} ACPI_DRTM_RESOURCE_LIST; > > -/* Extension for revision 0x0300 */ > +/* 3) Platform-specific Identifiers List */ > > -typedef struct acpi_hest_generic_data_v300 > +typedef struct acpi_drtm_dps_id > { > - UINT8 SectionType[16]; > - UINT32 ErrorSeverity; > - UINT16 Revision; > - UINT8 ValidationBits; > - UINT8 Flags; > - UINT32 ErrorDataLength; > - UINT8 FruId[16]; > - UINT8 FruText[20]; > - UINT64 TimeStamp; > + UINT32 DpsIdLength; > + UINT8 DpsId[16]; > > -} ACPI_HEST_GENERIC_DATA_V300; > +} ACPI_DRTM_DPS_ID; > > -/* Values for ErrorSeverity above */ > > -#define ACPI_HEST_GEN_ERROR_RECOVERABLE 0 > -#define ACPI_HEST_GEN_ERROR_FATAL 1 > -#define ACPI_HEST_GEN_ERROR_CORRECTED 2 > -#define ACPI_HEST_GEN_ERROR_NONE 3 > - > -/* Flags for ValidationBits above */ > - > -#define ACPI_HEST_GEN_VALID_FRU_ID (1) > -#define ACPI_HEST_GEN_VALID_FRU_STRING (1<<1) > -#define ACPI_HEST_GEN_VALID_TIMESTAMP (1<<2) > - > - > -/* 11: IA32 Deferred Machine Check Exception (ACPI 6.2) */ > +/******************************************************************************* > + * > + * ECDT - Embedded Controller Boot Resources Table > + * Version 1 > + * > + ******************************************************************************/ > > -typedef struct acpi_hest_ia_deferred_check > +typedef struct acpi_table_ecdt > { > - ACPI_HEST_HEADER Header; > - UINT16 Reserved1; > - UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ > - UINT8 Enabled; > - UINT32 RecordsToPreallocate; > - UINT32 MaxSectionsPerRecord; > - ACPI_HEST_NOTIFY Notify; > - UINT8 NumHardwareBanks; > - UINT8 Reserved2[3]; > + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > + ACPI_GENERIC_ADDRESS Control; /* Address of EC command/status register */ > + ACPI_GENERIC_ADDRESS Data; /* Address of EC data register */ > + UINT32 Uid; /* Unique ID - must be same as the EC _UID method */ > + UINT8 Gpe; /* The GPE for the EC */ > + UINT8 Id[1]; /* Full namepath of the EC in the ACPI namespace */ > > -} ACPI_HEST_IA_DEFERRED_CHECK; > +} ACPI_TABLE_ECDT; > > > /******************************************************************************* > * > - * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.2) > + * EINJ - Error Injection Table (ACPI 4.0) > * Version 1 > * > ******************************************************************************/ > > -typedef struct acpi_table_hmat > +typedef struct acpi_table_einj > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT32 Reserved; > + UINT32 HeaderLength; > + UINT8 Flags; > + UINT8 Reserved[3]; > + UINT32 Entries; > > -} ACPI_TABLE_HMAT; > +} ACPI_TABLE_EINJ; > > > -/* Values for HMAT structure types */ > - > -enum AcpiHmatType > -{ > - ACPI_HMAT_TYPE_ADDRESS_RANGE = 0, /* Memory subystem address range */ > - ACPI_HMAT_TYPE_LOCALITY = 1, /* System locality latency and bandwidth information */ > - ACPI_HMAT_TYPE_CACHE = 2, /* Memory side cache information */ > - ACPI_HMAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */ > -}; > +/* EINJ Injection Instruction Entries (actions) */ > > -typedef struct acpi_hmat_structure > +typedef struct acpi_einj_entry > { > - UINT16 Type; > - UINT16 Reserved; > - UINT32 Length; > + ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ > > -} ACPI_HMAT_STRUCTURE; > +} ACPI_EINJ_ENTRY; > > +/* Masks for Flags field above */ > > -/* > - * HMAT Structures, correspond to Type in ACPI_HMAT_STRUCTURE > - */ > +#define ACPI_EINJ_PRESERVE (1) > > -/* 0: Memory subystem address range */ > +/* Values for Action field above */ > > -typedef struct acpi_hmat_address_range > +enum AcpiEinjActions > { > - ACPI_HMAT_STRUCTURE Header; > - UINT16 Flags; > - UINT16 Reserved1; > - UINT32 ProcessorPD; /* Processor proximity domain */ > - UINT32 MemoryPD; /* Memory proximity domain */ > - UINT32 Reserved2; > - UINT64 PhysicalAddressBase; /* Physical address range base */ > - UINT64 PhysicalAddressLength; /* Physical address range length */ > - > -} ACPI_HMAT_ADDRESS_RANGE; > - > -/* Masks for Flags field above */ > - > -#define ACPI_HMAT_PROCESSOR_PD_VALID (1) /* 1: ProcessorPD field is valid */ > -#define ACPI_HMAT_MEMORY_PD_VALID (1<<1) /* 1: MemoryPD field is valid */ > -#define ACPI_HMAT_RESERVATION_HINT (1<<2) /* 1: Reservation hint */ > - > + ACPI_EINJ_BEGIN_OPERATION = 0, > + ACPI_EINJ_GET_TRIGGER_TABLE = 1, > + ACPI_EINJ_SET_ERROR_TYPE = 2, > + ACPI_EINJ_GET_ERROR_TYPE = 3, > + ACPI_EINJ_END_OPERATION = 4, > + ACPI_EINJ_EXECUTE_OPERATION = 5, > + ACPI_EINJ_CHECK_BUSY_STATUS = 6, > + ACPI_EINJ_GET_COMMAND_STATUS = 7, > + ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8, > + ACPI_EINJ_GET_EXECUTE_TIMINGS = 9, > + ACPI_EINJ_ACTION_RESERVED = 10, /* 10 and greater are reserved */ > + ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */ > +}; > > -/* 1: System locality latency and bandwidth information */ > +/* Values for Instruction field above */ > > -typedef struct acpi_hmat_locality > +enum AcpiEinjInstructions > { > - ACPI_HMAT_STRUCTURE Header; > - UINT8 Flags; > - UINT8 DataType; > - UINT16 Reserved1; > - UINT32 NumberOfInitiatorPDs; > - UINT32 NumberOfTargetPDs; > - UINT32 Reserved2; > - UINT64 EntryBaseUnit; > - > -} ACPI_HMAT_LOCALITY; > - > -/* Masks for Flags field above */ > - > -#define ACPI_HMAT_MEMORY_HIERARCHY (0x0F) > + ACPI_EINJ_READ_REGISTER = 0, > + ACPI_EINJ_READ_REGISTER_VALUE = 1, > + ACPI_EINJ_WRITE_REGISTER = 2, > + ACPI_EINJ_WRITE_REGISTER_VALUE = 3, > + ACPI_EINJ_NOOP = 4, > + ACPI_EINJ_FLUSH_CACHELINE = 5, > + ACPI_EINJ_INSTRUCTION_RESERVED = 6 /* 6 and greater are reserved */ > +}; > > -/* Values for Memory Hierarchy flag */ > +typedef struct acpi_einj_error_type_with_addr > +{ > + UINT32 ErrorType; > + UINT32 VendorStructOffset; > + UINT32 Flags; > + UINT32 ApicId; > + UINT64 Address; > + UINT64 Range; > + UINT32 PcieId; > > -#define ACPI_HMAT_MEMORY 0 > -#define ACPI_HMAT_LAST_LEVEL_CACHE 1 > -#define ACPI_HMAT_1ST_LEVEL_CACHE 2 > -#define ACPI_HMAT_2ND_LEVEL_CACHE 3 > -#define ACPI_HMAT_3RD_LEVEL_CACHE 4 > +} ACPI_EINJ_ERROR_TYPE_WITH_ADDR; > > -/* Values for DataType field above */ > +typedef struct acpi_einj_vendor > +{ > + UINT32 Length; > + UINT32 PcieId; > + UINT16 VendorId; > + UINT16 DeviceId; > + UINT8 RevisionId; > + UINT8 Reserved[3]; > > -#define ACPI_HMAT_ACCESS_LATENCY 0 > -#define ACPI_HMAT_READ_LATENCY 1 > -#define ACPI_HMAT_WRITE_LATENCY 2 > -#define ACPI_HMAT_ACCESS_BANDWIDTH 3 > -#define ACPI_HMAT_READ_BANDWIDTH 4 > -#define ACPI_HMAT_WRITE_BANDWIDTH 5 > +} ACPI_EINJ_VENDOR; > > > -/* 2: Memory side cache information */ > +/* EINJ Trigger Error Action Table */ > > -typedef struct acpi_hmat_cache > +typedef struct acpi_einj_trigger > { > - ACPI_HMAT_STRUCTURE Header; > - UINT32 MemoryPD; > - UINT32 Reserved1; > - UINT64 CacheSize; > - UINT32 CacheAttributes; > - UINT16 Reserved2; > - UINT16 NumberOfSMBIOSHandles; > - > -} ACPI_HMAT_CACHE; > + UINT32 HeaderSize; > + UINT32 Revision; > + UINT32 TableSize; > + UINT32 EntryCount; > > -/* Masks for CacheAttributes field above */ > +} ACPI_EINJ_TRIGGER; > > -#define ACPI_HMAT_TOTAL_CACHE_LEVEL (0x0000000F) > -#define ACPI_HMAT_CACHE_LEVEL (0x000000F0) > -#define ACPI_HMAT_CACHE_ASSOCIATIVITY (0x00000F00) > -#define ACPI_HMAT_WRITE_POLICY (0x0000F000) > -#define ACPI_HMAT_CACHE_LINE_SIZE (0xFFFF0000) > +/* Command status return values */ > > -/* Values for cache associativity flag */ > +enum AcpiEinjCommandStatus > +{ > + ACPI_EINJ_SUCCESS = 0, > + ACPI_EINJ_FAILURE = 1, > + ACPI_EINJ_INVALID_ACCESS = 2, > + ACPI_EINJ_STATUS_RESERVED = 3 /* 3 and greater are reserved */ > +}; > > -#define ACPI_HMAT_CA_NONE (0) > -#define ACPI_HMAT_CA_DIRECT_MAPPED (1) > -#define ACPI_HMAT_CA_COMPLEX_CACHE_INDEXING (2) > > -/* Values for write policy flag */ > +/* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */ > > -#define ACPI_HMAT_CP_NONE (0) > -#define ACPI_HMAT_CP_WB (1) > -#define ACPI_HMAT_CP_WT (2) > +#define ACPI_EINJ_PROCESSOR_CORRECTABLE (1) > +#define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1) > +#define ACPI_EINJ_PROCESSOR_FATAL (1<<2) > +#define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3) > +#define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4) > +#define ACPI_EINJ_MEMORY_FATAL (1<<5) > +#define ACPI_EINJ_PCIX_CORRECTABLE (1<<6) > +#define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7) > +#define ACPI_EINJ_PCIX_FATAL (1<<8) > +#define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9) > +#define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10) > +#define ACPI_EINJ_PLATFORM_FATAL (1<<11) > +#define ACPI_EINJ_VENDOR_DEFINED (1<<31) > > > /******************************************************************************* > * > - * MADT - Multiple APIC Description Table > - * Version 3 > + * ERST - Error Record Serialization Table (ACPI 4.0) > + * Version 1 > * > ******************************************************************************/ > > -typedef struct acpi_table_madt > +typedef struct acpi_table_erst > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT32 Address; /* Physical address of local APIC */ > - UINT32 Flags; > + UINT32 HeaderLength; > + UINT32 Reserved; > + UINT32 Entries; > + > +} ACPI_TABLE_ERST; > > -} ACPI_TABLE_MADT; > > -/* Masks for Flags field above */ > +/* ERST Serialization Entries (actions) */ > > -#define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ > +typedef struct acpi_erst_entry > +{ > + ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ > > -/* Values for PCATCompat flag */ > +} ACPI_ERST_ENTRY; > > -#define ACPI_MADT_DUAL_PIC 1 > -#define ACPI_MADT_MULTIPLE_APIC 0 > +/* Masks for Flags field above */ > > +#define ACPI_ERST_PRESERVE (1) > > -/* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */ > +/* Values for Action field above */ > > -enum AcpiMadtType > +enum AcpiErstActions > { > - ACPI_MADT_TYPE_LOCAL_APIC = 0, > - ACPI_MADT_TYPE_IO_APIC = 1, > - ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, > - ACPI_MADT_TYPE_NMI_SOURCE = 3, > - ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, > - ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, > - ACPI_MADT_TYPE_IO_SAPIC = 6, > - ACPI_MADT_TYPE_LOCAL_SAPIC = 7, > - ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, > - ACPI_MADT_TYPE_LOCAL_X2APIC = 9, > - ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, > - ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, > - ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, > - ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13, > - ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14, > - ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15, > - ACPI_MADT_TYPE_RESERVED = 16 /* 16 and greater are reserved */ > + ACPI_ERST_BEGIN_WRITE = 0, > + ACPI_ERST_BEGIN_READ = 1, > + ACPI_ERST_BEGIN_CLEAR = 2, > + ACPI_ERST_END = 3, > + ACPI_ERST_SET_RECORD_OFFSET = 4, > + ACPI_ERST_EXECUTE_OPERATION = 5, > + ACPI_ERST_CHECK_BUSY_STATUS = 6, > + ACPI_ERST_GET_COMMAND_STATUS = 7, > + ACPI_ERST_GET_RECORD_ID = 8, > + ACPI_ERST_SET_RECORD_ID = 9, > + ACPI_ERST_GET_RECORD_COUNT = 10, > + ACPI_ERST_BEGIN_DUMMY_WRIITE = 11, > + ACPI_ERST_NOT_USED = 12, > + ACPI_ERST_GET_ERROR_RANGE = 13, > + ACPI_ERST_GET_ERROR_LENGTH = 14, > + ACPI_ERST_GET_ERROR_ATTRIBUTES = 15, > + ACPI_ERST_EXECUTE_TIMINGS = 16, > + ACPI_ERST_ACTION_RESERVED = 17 /* 17 and greater are reserved */ > }; > > +/* Values for Instruction field above */ > > -/* > - * MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER > - */ > - > -/* 0: Processor Local APIC */ > - > -typedef struct acpi_madt_local_apic > +enum AcpiErstInstructions > { > - ACPI_SUBTABLE_HEADER Header; > - UINT8 ProcessorId; /* ACPI processor id */ > - UINT8 Id; /* Processor's local APIC id */ > - UINT32 LapicFlags; > - > -} ACPI_MADT_LOCAL_APIC; > - > + ACPI_ERST_READ_REGISTER = 0, > + ACPI_ERST_READ_REGISTER_VALUE = 1, > + ACPI_ERST_WRITE_REGISTER = 2, > + ACPI_ERST_WRITE_REGISTER_VALUE = 3, > + ACPI_ERST_NOOP = 4, > + ACPI_ERST_LOAD_VAR1 = 5, > + ACPI_ERST_LOAD_VAR2 = 6, > + ACPI_ERST_STORE_VAR1 = 7, > + ACPI_ERST_ADD = 8, > + ACPI_ERST_SUBTRACT = 9, > + ACPI_ERST_ADD_VALUE = 10, > + ACPI_ERST_SUBTRACT_VALUE = 11, > + ACPI_ERST_STALL = 12, > + ACPI_ERST_STALL_WHILE_TRUE = 13, > + ACPI_ERST_SKIP_NEXT_IF_TRUE = 14, > + ACPI_ERST_GOTO = 15, > + ACPI_ERST_SET_SRC_ADDRESS_BASE = 16, > + ACPI_ERST_SET_DST_ADDRESS_BASE = 17, > + ACPI_ERST_MOVE_DATA = 18, > + ACPI_ERST_INSTRUCTION_RESERVED = 19 /* 19 and greater are reserved */ > +}; > > -/* 1: IO APIC */ > +/* Command status return values */ > > -typedef struct acpi_madt_io_apic > +enum AcpiErstCommandStatus > { > - ACPI_SUBTABLE_HEADER Header; > - UINT8 Id; /* I/O APIC ID */ > - UINT8 Reserved; /* Reserved - must be zero */ > - UINT32 Address; /* APIC physical address */ > - UINT32 GlobalIrqBase; /* Global system interrupt where INTI lines start */ > - > -} ACPI_MADT_IO_APIC; > + ACPI_ERST_SUCESS = 0, > + ACPI_ERST_NO_SPACE = 1, > + ACPI_ERST_NOT_AVAILABLE = 2, > + ACPI_ERST_FAILURE = 3, > + ACPI_ERST_RECORD_EMPTY = 4, > + ACPI_ERST_NOT_FOUND = 5, > + ACPI_ERST_STATUS_RESERVED = 6 /* 6 and greater are reserved */ > +}; > > > -/* 2: Interrupt Override */ > +/* Error Record Serialization Information */ > > -typedef struct acpi_madt_interrupt_override > +typedef struct acpi_erst_info > { > - ACPI_SUBTABLE_HEADER Header; > - UINT8 Bus; /* 0 - ISA */ > - UINT8 SourceIrq; /* Interrupt source (IRQ) */ > - UINT32 GlobalIrq; /* Global system interrupt */ > - UINT16 IntiFlags; > + UINT16 Signature; /* Should be "ER" */ > + UINT8 Data[48]; > > -} ACPI_MADT_INTERRUPT_OVERRIDE; > +} ACPI_ERST_INFO; > > > -/* 3: NMI Source */ > +/******************************************************************************* > + * > + * FPDT - Firmware Performance Data Table (ACPI 5.0) > + * Version 1 > + * > + ******************************************************************************/ > > -typedef struct acpi_madt_nmi_source > +typedef struct acpi_table_fpdt > { > - ACPI_SUBTABLE_HEADER Header; > - UINT16 IntiFlags; > - UINT32 GlobalIrq; /* Global system interrupt */ > + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > > -} ACPI_MADT_NMI_SOURCE; > +} ACPI_TABLE_FPDT; > > > -/* 4: Local APIC NMI */ > +/* FPDT subtable header (Performance Record Structure) */ > > -typedef struct acpi_madt_local_apic_nmi > +typedef struct acpi_fpdt_header > { > - ACPI_SUBTABLE_HEADER Header; > - UINT8 ProcessorId; /* ACPI processor id */ > - UINT16 IntiFlags; > - UINT8 Lint; /* LINTn to which NMI is connected */ > - > -} ACPI_MADT_LOCAL_APIC_NMI; > + UINT16 Type; > + UINT8 Length; > + UINT8 Revision; > > +} ACPI_FPDT_HEADER; > > -/* 5: Address Override */ > +/* Values for Type field above */ > > -typedef struct acpi_madt_local_apic_override > +enum AcpiFpdtType > { > - ACPI_SUBTABLE_HEADER Header; > - UINT16 Reserved; /* Reserved, must be zero */ > - UINT64 Address; /* APIC physical address */ > + ACPI_FPDT_TYPE_BOOT = 0, > + ACPI_FPDT_TYPE_S3PERF = 1 > +}; > > -} ACPI_MADT_LOCAL_APIC_OVERRIDE; > > +/* > + * FPDT subtables > + */ > > -/* 6: I/O Sapic */ > +/* 0: Firmware Basic Boot Performance Record */ > > -typedef struct acpi_madt_io_sapic > +typedef struct acpi_fpdt_boot_pointer > { > - ACPI_SUBTABLE_HEADER Header; > - UINT8 Id; /* I/O SAPIC ID */ > - UINT8 Reserved; /* Reserved, must be zero */ > - UINT32 GlobalIrqBase; /* Global interrupt for SAPIC start */ > - UINT64 Address; /* SAPIC physical address */ > + ACPI_FPDT_HEADER Header; > + UINT8 Reserved[4]; > + UINT64 Address; > > -} ACPI_MADT_IO_SAPIC; > +} ACPI_FPDT_BOOT_POINTER; > > > -/* 7: Local Sapic */ > +/* 1: S3 Performance Table Pointer Record */ > > -typedef struct acpi_madt_local_sapic > +typedef struct acpi_fpdt_s3pt_pointer > { > - ACPI_SUBTABLE_HEADER Header; > - UINT8 ProcessorId; /* ACPI processor id */ > - UINT8 Id; /* SAPIC ID */ > - UINT8 Eid; /* SAPIC EID */ > - UINT8 Reserved[3]; /* Reserved, must be zero */ > - UINT32 LapicFlags; > - UINT32 Uid; /* Numeric UID - ACPI 3.0 */ > - char UidString[1]; /* String UID - ACPI 3.0 */ > - > -} ACPI_MADT_LOCAL_SAPIC; > + ACPI_FPDT_HEADER Header; > + UINT8 Reserved[4]; > + UINT64 Address; > > +} ACPI_FPDT_S3PT_POINTER; > > -/* 8: Platform Interrupt Source */ > > -typedef struct acpi_madt_interrupt_source > +/* > + * S3PT - S3 Performance Table. This table is pointed to by the > + * S3 Pointer Record above. > + */ > +typedef struct acpi_table_s3pt > { > - ACPI_SUBTABLE_HEADER Header; > - UINT16 IntiFlags; > - UINT8 Type; /* 1=PMI, 2=INIT, 3=corrected */ > - UINT8 Id; /* Processor ID */ > - UINT8 Eid; /* Processor EID */ > - UINT8 IoSapicVector; /* Vector value for PMI interrupts */ > - UINT32 GlobalIrq; /* Global system interrupt */ > - UINT32 Flags; /* Interrupt Source Flags */ > - > -} ACPI_MADT_INTERRUPT_SOURCE; > + UINT8 Signature[4]; /* "S3PT" */ > + UINT32 Length; > > -/* Masks for Flags field above */ > +} ACPI_TABLE_S3PT; > > -#define ACPI_MADT_CPEI_OVERRIDE (1) > > +/* > + * S3PT Subtables (Not part of the actual FPDT) > + */ > > -/* 9: Processor Local X2APIC (ACPI 4.0) */ > +/* Values for Type field in S3PT header */ > > -typedef struct acpi_madt_local_x2apic > +enum AcpiS3ptType > { > - ACPI_SUBTABLE_HEADER Header; > - UINT16 Reserved; /* Reserved - must be zero */ > - UINT32 LocalApicId; /* Processor x2APIC ID */ > - UINT32 LapicFlags; > - UINT32 Uid; /* ACPI processor UID */ > - > -} ACPI_MADT_LOCAL_X2APIC; > + ACPI_S3PT_TYPE_RESUME = 0, > + ACPI_S3PT_TYPE_SUSPEND = 1, > + ACPI_FPDT_BOOT_PERFORMANCE = 2 > +}; > > +typedef struct acpi_s3pt_resume > +{ > + ACPI_FPDT_HEADER Header; > + UINT32 ResumeCount; > + UINT64 FullResume; > + UINT64 AverageResume; > > -/* 10: Local X2APIC NMI (ACPI 4.0) */ > +} ACPI_S3PT_RESUME; > > -typedef struct acpi_madt_local_x2apic_nmi > +typedef struct acpi_s3pt_suspend > { > - ACPI_SUBTABLE_HEADER Header; > - UINT16 IntiFlags; > - UINT32 Uid; /* ACPI processor UID */ > - UINT8 Lint; /* LINTn to which NMI is connected */ > - UINT8 Reserved[3]; /* Reserved - must be zero */ > + ACPI_FPDT_HEADER Header; > + UINT64 SuspendStart; > + UINT64 SuspendEnd; > > -} ACPI_MADT_LOCAL_X2APIC_NMI; > +} ACPI_S3PT_SUSPEND; > > > -/* 11: Generic Interrupt (ACPI 5.0 + ACPI 6.0 changes) */ > - > -typedef struct acpi_madt_generic_interrupt > +/* > + * FPDT Boot Performance Record (Not part of the actual FPDT) > + */ > +typedef struct acpi_fpdt_boot > { > - ACPI_SUBTABLE_HEADER Header; > - UINT16 Reserved; /* Reserved - must be zero */ > - UINT32 CpuInterfaceNumber; > - UINT32 Uid; > - UINT32 Flags; > - UINT32 ParkingVersion; > - UINT32 PerformanceInterrupt; > - UINT64 ParkedAddress; > - UINT64 BaseAddress; > - UINT64 GicvBaseAddress; > - UINT64 GichBaseAddress; > - UINT32 VgicInterrupt; > - UINT64 GicrBaseAddress; > - UINT64 ArmMpidr; > - UINT8 EfficiencyClass; > - UINT8 Reserved2[3]; > - > -} ACPI_MADT_GENERIC_INTERRUPT; > - > -/* Masks for Flags field above */ > + ACPI_FPDT_HEADER Header; > + UINT8 Reserved[4]; > + UINT64 ResetEnd; > + UINT64 LoadStart; > + UINT64 StartupStart; > + UINT64 ExitServicesEntry; > + UINT64 ExitServicesExit; > > -/* ACPI_MADT_ENABLED (1) Processor is usable if set */ > -#define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */ > -#define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */ > +} ACPI_FPDT_BOOT; > > > -/* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */ > +/******************************************************************************* > + * > + * GTDT - Generic Timer Description Table (ACPI 5.1) > + * Version 2 > + * > + ******************************************************************************/ > > -typedef struct acpi_madt_generic_distributor > +typedef struct acpi_table_gtdt > { > - ACPI_SUBTABLE_HEADER Header; > - UINT16 Reserved; /* Reserved - must be zero */ > - UINT32 GicId; > - UINT64 BaseAddress; > - UINT32 GlobalIrqBase; > - UINT8 Version; > - UINT8 Reserved2[3]; /* Reserved - must be zero */ > + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > + UINT64 CounterBlockAddresss; > + UINT32 Reserved; > + UINT32 SecureEl1Interrupt; > + UINT32 SecureEl1Flags; > + UINT32 NonSecureEl1Interrupt; > + UINT32 NonSecureEl1Flags; > + UINT32 VirtualTimerInterrupt; > + UINT32 VirtualTimerFlags; > + UINT32 NonSecureEl2Interrupt; > + UINT32 NonSecureEl2Flags; > + UINT64 CounterReadBlockAddress; > + UINT32 PlatformTimerCount; > + UINT32 PlatformTimerOffset; > > -} ACPI_MADT_GENERIC_DISTRIBUTOR; > +} ACPI_TABLE_GTDT; > > -/* Values for Version field above */ > +/* Flag Definitions: Timer Block Physical Timers and Virtual timers */ > > -enum AcpiMadtGicVersion > -{ > - ACPI_MADT_GIC_VERSION_NONE = 0, > - ACPI_MADT_GIC_VERSION_V1 = 1, > - ACPI_MADT_GIC_VERSION_V2 = 2, > - ACPI_MADT_GIC_VERSION_V3 = 3, > - ACPI_MADT_GIC_VERSION_V4 = 4, > - ACPI_MADT_GIC_VERSION_RESERVED = 5 /* 5 and greater are reserved */ > -}; > +#define ACPI_GTDT_INTERRUPT_MODE (1) > +#define ACPI_GTDT_INTERRUPT_POLARITY (1<<1) > +#define ACPI_GTDT_ALWAYS_ON (1<<2) > > > -/* 13: Generic MSI Frame (ACPI 5.1) */ > +/* Common GTDT subtable header */ > > -typedef struct acpi_madt_generic_msi_frame > +typedef struct acpi_gtdt_header > { > - ACPI_SUBTABLE_HEADER Header; > - UINT16 Reserved; /* Reserved - must be zero */ > - UINT32 MsiFrameId; > - UINT64 BaseAddress; > - UINT32 Flags; > - UINT16 SpiCount; > - UINT16 SpiBase; > + UINT8 Type; > + UINT16 Length; > > -} ACPI_MADT_GENERIC_MSI_FRAME; > +} ACPI_GTDT_HEADER; > > -/* Masks for Flags field above */ > +/* Values for GTDT subtable type above */ > + > +enum AcpiGtdtType > +{ > + ACPI_GTDT_TYPE_TIMER_BLOCK = 0, > + ACPI_GTDT_TYPE_WATCHDOG = 1, > + ACPI_GTDT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ > +}; > > -#define ACPI_MADT_OVERRIDE_SPI_VALUES (1) > > +/* GTDT Subtables, correspond to Type in acpi_gtdt_header */ > > -/* 14: Generic Redistributor (ACPI 5.1) */ > +/* 0: Generic Timer Block */ > > -typedef struct acpi_madt_generic_redistributor > +typedef struct acpi_gtdt_timer_block > { > - ACPI_SUBTABLE_HEADER Header; > - UINT16 Reserved; /* reserved - must be zero */ > - UINT64 BaseAddress; > - UINT32 Length; > - > -} ACPI_MADT_GENERIC_REDISTRIBUTOR; > + ACPI_GTDT_HEADER Header; > + UINT8 Reserved; > + UINT64 BlockAddress; > + UINT32 TimerCount; > + UINT32 TimerOffset; > > +} ACPI_GTDT_TIMER_BLOCK; > > -/* 15: Generic Translator (ACPI 6.0) */ > +/* Timer Sub-Structure, one per timer */ > > -typedef struct acpi_madt_generic_translator > +typedef struct acpi_gtdt_timer_entry > { > - ACPI_SUBTABLE_HEADER Header; > - UINT16 Reserved; /* reserved - must be zero */ > - UINT32 TranslationId; > + UINT8 FrameNumber; > + UINT8 Reserved[3]; > UINT64 BaseAddress; > - UINT32 Reserved2; > + UINT64 El0BaseAddress; > + UINT32 TimerInterrupt; > + UINT32 TimerFlags; > + UINT32 VirtualTimerInterrupt; > + UINT32 VirtualTimerFlags; > + UINT32 CommonFlags; > > -} ACPI_MADT_GENERIC_TRANSLATOR; > +} ACPI_GTDT_TIMER_ENTRY; > > +/* Flag Definitions: TimerFlags and VirtualTimerFlags above */ > > -/* > - * Common flags fields for MADT subtables > - */ > +#define ACPI_GTDT_GT_IRQ_MODE (1) > +#define ACPI_GTDT_GT_IRQ_POLARITY (1<<1) > + > +/* Flag Definitions: CommonFlags above */ > > -/* MADT Local APIC flags */ > +#define ACPI_GTDT_GT_IS_SECURE_TIMER (1) > +#define ACPI_GTDT_GT_ALWAYS_ON (1<<1) > > -#define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ > > -/* MADT MPS INTI flags (IntiFlags) */ > +/* 1: SBSA Generic Watchdog Structure */ > > -#define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ > -#define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ > +typedef struct acpi_gtdt_watchdog > +{ > + ACPI_GTDT_HEADER Header; > + UINT8 Reserved; > + UINT64 RefreshFrameAddress; > + UINT64 ControlFrameAddress; > + UINT32 TimerInterrupt; > + UINT32 TimerFlags; > > -/* Values for MPS INTI flags */ > +} ACPI_GTDT_WATCHDOG; > > -#define ACPI_MADT_POLARITY_CONFORMS 0 > -#define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 > -#define ACPI_MADT_POLARITY_RESERVED 2 > -#define ACPI_MADT_POLARITY_ACTIVE_LOW 3 > +/* Flag Definitions: TimerFlags above */ > > -#define ACPI_MADT_TRIGGER_CONFORMS (0) > -#define ACPI_MADT_TRIGGER_EDGE (1<<2) > -#define ACPI_MADT_TRIGGER_RESERVED (2<<2) > -#define ACPI_MADT_TRIGGER_LEVEL (3<<2) > +#define ACPI_GTDT_WATCHDOG_IRQ_MODE (1) > +#define ACPI_GTDT_WATCHDOG_IRQ_POLARITY (1<<1) > +#define ACPI_GTDT_WATCHDOG_SECURE (1<<2) > > > /******************************************************************************* > * > - * MSCT - Maximum System Characteristics Table (ACPI 4.0) > + * HEST - Hardware Error Source Table (ACPI 4.0) > * Version 1 > * > ******************************************************************************/ > > -typedef struct acpi_table_msct > +typedef struct acpi_table_hest > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT32 ProximityOffset; /* Location of proximity info struct(s) */ > - UINT32 MaxProximityDomains;/* Max number of proximity domains */ > - UINT32 MaxClockDomains; /* Max number of clock domains */ > - UINT64 MaxAddress; /* Max physical address in system */ > + UINT32 ErrorSourceCount; > > -} ACPI_TABLE_MSCT; > +} ACPI_TABLE_HEST; > > > -/* Subtable - Maximum Proximity Domain Information. Version 1 */ > +/* HEST subtable header */ > > -typedef struct acpi_msct_proximity > +typedef struct acpi_hest_header > { > - UINT8 Revision; > - UINT8 Length; > - UINT32 RangeStart; /* Start of domain range */ > - UINT32 RangeEnd; /* End of domain range */ > - UINT32 ProcessorCapacity; > - UINT64 MemoryCapacity; /* In bytes */ > + UINT16 Type; > + UINT16 SourceId; > > -} ACPI_MSCT_PROXIMITY; > +} ACPI_HEST_HEADER; > > > -/******************************************************************************* > - * > - * NFIT - NVDIMM Interface Table (ACPI 6.0+) > - * Version 1 > - * > - ******************************************************************************/ > +/* Values for Type field above for subtables */ > > -typedef struct acpi_table_nfit > +enum AcpiHestTypes > { > - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT32 Reserved; /* Reserved, must be zero */ > + ACPI_HEST_TYPE_IA32_CHECK = 0, > + ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1, > + ACPI_HEST_TYPE_IA32_NMI = 2, > + ACPI_HEST_TYPE_NOT_USED3 = 3, > + ACPI_HEST_TYPE_NOT_USED4 = 4, > + ACPI_HEST_TYPE_NOT_USED5 = 5, > + ACPI_HEST_TYPE_AER_ROOT_PORT = 6, > + ACPI_HEST_TYPE_AER_ENDPOINT = 7, > + ACPI_HEST_TYPE_AER_BRIDGE = 8, > + ACPI_HEST_TYPE_GENERIC_ERROR = 9, > + ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10, > + ACPI_HEST_TYPE_IA32_DEFERRED_CHECK = 11, > + ACPI_HEST_TYPE_RESERVED = 12 /* 12 and greater are reserved */ > +}; > > -} ACPI_TABLE_NFIT; > > -/* Subtable header for NFIT */ > +/* > + * HEST substructures contained in subtables > + */ > > -typedef struct acpi_nfit_header > +/* > + * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and > + * ACPI_HEST_IA_CORRECTED structures. > + */ > +typedef struct acpi_hest_ia_error_bank > { > - UINT16 Type; > - UINT16 Length; > + UINT8 BankNumber; > + UINT8 ClearStatusOnInit; > + UINT8 StatusFormat; > + UINT8 Reserved; > + UINT32 ControlRegister; > + UINT64 ControlData; > + UINT32 StatusRegister; > + UINT32 AddressRegister; > + UINT32 MiscRegister; > > -} ACPI_NFIT_HEADER; > +} ACPI_HEST_IA_ERROR_BANK; > > > -/* Values for subtable type in ACPI_NFIT_HEADER */ > +/* Common HEST sub-structure for PCI/AER structures below (6,7,8) */ > > -enum AcpiNfitType > +typedef struct acpi_hest_aer_common > { > - ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0, > - ACPI_NFIT_TYPE_MEMORY_MAP = 1, > - ACPI_NFIT_TYPE_INTERLEAVE = 2, > - ACPI_NFIT_TYPE_SMBIOS = 3, > - ACPI_NFIT_TYPE_CONTROL_REGION = 4, > - ACPI_NFIT_TYPE_DATA_REGION = 5, > - ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6, > - ACPI_NFIT_TYPE_CAPABILITIES = 7, > - ACPI_NFIT_TYPE_RESERVED = 8 /* 8 and greater are reserved */ > -}; > + UINT16 Reserved1; > + UINT8 Flags; > + UINT8 Enabled; > + UINT32 RecordsToPreallocate; > + UINT32 MaxSectionsPerRecord; > + UINT32 Bus; /* Bus and Segment numbers */ > + UINT16 Device; > + UINT16 Function; > + UINT16 DeviceControl; > + UINT16 Reserved2; > + UINT32 UncorrectableMask; > + UINT32 UncorrectableSeverity; > + UINT32 CorrectableMask; > + UINT32 AdvancedCapabilities; > + > +} ACPI_HEST_AER_COMMON; > + > +/* Masks for HEST Flags fields */ > + > +#define ACPI_HEST_FIRMWARE_FIRST (1) > +#define ACPI_HEST_GLOBAL (1<<1) > +#define ACPI_HEST_GHES_ASSIST (1<<2) > > /* > - * NFIT Subtables > + * Macros to access the bus/segment numbers in Bus field above: > + * Bus number is encoded in bits 7:0 > + * Segment number is encoded in bits 23:8 > */ > +#define ACPI_HEST_BUS(Bus) ((Bus) & 0xFF) > +#define ACPI_HEST_SEGMENT(Bus) (((Bus) >> 8) & 0xFFFF) > + > > -/* 0: System Physical Address Range Structure */ > +/* Hardware Error Notification */ > > -typedef struct acpi_nfit_system_address > +typedef struct acpi_hest_notify > { > - ACPI_NFIT_HEADER Header; > - UINT16 RangeIndex; > - UINT16 Flags; > - UINT32 Reserved; /* Reserved, must be zero */ > - UINT32 ProximityDomain; > - UINT8 RangeGuid[16]; > - UINT64 Address; > - UINT64 Length; > - UINT64 MemoryMapping; > + UINT8 Type; > + UINT8 Length; > + UINT16 ConfigWriteEnable; > + UINT32 PollInterval; > + UINT32 Vector; > + UINT32 PollingThresholdValue; > + UINT32 PollingThresholdWindow; > + UINT32 ErrorThresholdValue; > + UINT32 ErrorThresholdWindow; > > -} ACPI_NFIT_SYSTEM_ADDRESS; > +} ACPI_HEST_NOTIFY; > > -/* Flags */ > +/* Values for Notify Type field above */ > > -#define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */ > -#define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */ > +enum AcpiHestNotifyTypes > +{ > + ACPI_HEST_NOTIFY_POLLED = 0, > + ACPI_HEST_NOTIFY_EXTERNAL = 1, > + ACPI_HEST_NOTIFY_LOCAL = 2, > + ACPI_HEST_NOTIFY_SCI = 3, > + ACPI_HEST_NOTIFY_NMI = 4, > + ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */ > + ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */ > + ACPI_HEST_NOTIFY_GPIO = 7, /* ACPI 6.0 */ > + ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */ > + ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */ > + ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */ > + ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11, /* ACPI 6.2 */ > + ACPI_HEST_NOTIFY_RESERVED = 12 /* 12 and greater are reserved */ > +}; > > -/* Range Type GUIDs appear in the include/acuuid.h file */ > +/* Values for ConfigWriteEnable bitfield above */ > > +#define ACPI_HEST_TYPE (1) > +#define ACPI_HEST_POLL_INTERVAL (1<<1) > +#define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2) > +#define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3) > +#define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4) > +#define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5) > > -/* 1: Memory Device to System Address Range Map Structure */ > > -typedef struct acpi_nfit_memory_map > -{ > - ACPI_NFIT_HEADER Header; > - UINT32 DeviceHandle; > - UINT16 PhysicalId; > - UINT16 RegionId; > - UINT16 RangeIndex; > - UINT16 RegionIndex; > - UINT64 RegionSize; > - UINT64 RegionOffset; > - UINT64 Address; > - UINT16 InterleaveIndex; > - UINT16 InterleaveWays; > - UINT16 Flags; > - UINT16 Reserved; /* Reserved, must be zero */ > +/* > + * HEST subtables > + */ > > -} ACPI_NFIT_MEMORY_MAP; > +/* 0: IA32 Machine Check Exception */ > > -/* Flags */ > +typedef struct acpi_hest_ia_machine_check > +{ > + ACPI_HEST_HEADER Header; > + UINT16 Reserved1; > + UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ > + UINT8 Enabled; > + UINT32 RecordsToPreallocate; > + UINT32 MaxSectionsPerRecord; > + UINT64 GlobalCapabilityData; > + UINT64 GlobalControlData; > + UINT8 NumHardwareBanks; > + UINT8 Reserved3[7]; > > -#define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */ > -#define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */ > -#define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */ > -#define ACPI_NFIT_MEM_NOT_ARMED (1<<3) /* 03: Memory Device is not armed */ > -#define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */ > -#define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */ > -#define ACPI_NFIT_MEM_MAP_FAILED (1<<6) /* 06: Mapping to SPA failed */ > +} ACPI_HEST_IA_MACHINE_CHECK; > > > -/* 2: Interleave Structure */ > +/* 1: IA32 Corrected Machine Check */ > > -typedef struct acpi_nfit_interleave > +typedef struct acpi_hest_ia_corrected > { > - ACPI_NFIT_HEADER Header; > - UINT16 InterleaveIndex; > - UINT16 Reserved; /* Reserved, must be zero */ > - UINT32 LineCount; > - UINT32 LineSize; > - UINT32 LineOffset[1]; /* Variable length */ > + ACPI_HEST_HEADER Header; > + UINT16 Reserved1; > + UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ > + UINT8 Enabled; > + UINT32 RecordsToPreallocate; > + UINT32 MaxSectionsPerRecord; > + ACPI_HEST_NOTIFY Notify; > + UINT8 NumHardwareBanks; > + UINT8 Reserved2[3]; > > -} ACPI_NFIT_INTERLEAVE; > +} ACPI_HEST_IA_CORRECTED; > > > -/* 3: SMBIOS Management Information Structure */ > +/* 2: IA32 Non-Maskable Interrupt */ > > -typedef struct acpi_nfit_smbios > +typedef struct acpi_hest_ia_nmi > { > - ACPI_NFIT_HEADER Header; > - UINT32 Reserved; /* Reserved, must be zero */ > - UINT8 Data[1]; /* Variable length */ > + ACPI_HEST_HEADER Header; > + UINT32 Reserved; > + UINT32 RecordsToPreallocate; > + UINT32 MaxSectionsPerRecord; > + UINT32 MaxRawDataLength; > + > +} ACPI_HEST_IA_NMI; > > -} ACPI_NFIT_SMBIOS; > > +/* 3,4,5: Not used */ > > -/* 4: NVDIMM Control Region Structure */ > +/* 6: PCI Express Root Port AER */ > > -typedef struct acpi_nfit_control_region > +typedef struct acpi_hest_aer_root > { > - ACPI_NFIT_HEADER Header; > - UINT16 RegionIndex; > - UINT16 VendorId; > - UINT16 DeviceId; > - UINT16 RevisionId; > - UINT16 SubsystemVendorId; > - UINT16 SubsystemDeviceId; > - UINT16 SubsystemRevisionId; > - UINT8 ValidFields; > - UINT8 ManufacturingLocation; > - UINT16 ManufacturingDate; > - UINT8 Reserved[2]; /* Reserved, must be zero */ > - UINT32 SerialNumber; > - UINT16 Code; > - UINT16 Windows; > - UINT64 WindowSize; > - UINT64 CommandOffset; > - UINT64 CommandSize; > - UINT64 StatusOffset; > - UINT64 StatusSize; > - UINT16 Flags; > - UINT8 Reserved1[6]; /* Reserved, must be zero */ > + ACPI_HEST_HEADER Header; > + ACPI_HEST_AER_COMMON Aer; > + UINT32 RootErrorCommand; > > -} ACPI_NFIT_CONTROL_REGION; > +} ACPI_HEST_AER_ROOT; > > -/* Flags */ > > -#define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */ > +/* 7: PCI Express AER (AER Endpoint) */ > > -/* ValidFields bits */ > +typedef struct acpi_hest_aer > +{ > + ACPI_HEST_HEADER Header; > + ACPI_HEST_AER_COMMON Aer; > > -#define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1) /* Manufacturing fields are valid */ > +} ACPI_HEST_AER; > > > -/* 5: NVDIMM Block Data Window Region Structure */ > +/* 8: PCI Express/PCI-X Bridge AER */ > > -typedef struct acpi_nfit_data_region > +typedef struct acpi_hest_aer_bridge > { > - ACPI_NFIT_HEADER Header; > - UINT16 RegionIndex; > - UINT16 Windows; > - UINT64 Offset; > - UINT64 Size; > - UINT64 Capacity; > - UINT64 StartAddress; > + ACPI_HEST_HEADER Header; > + ACPI_HEST_AER_COMMON Aer; > + UINT32 UncorrectableMask2; > + UINT32 UncorrectableSeverity2; > + UINT32 AdvancedCapabilities2; > > -} ACPI_NFIT_DATA_REGION; > +} ACPI_HEST_AER_BRIDGE; > > > -/* 6: Flush Hint Address Structure */ > +/* 9: Generic Hardware Error Source */ > > -typedef struct acpi_nfit_flush_address > +typedef struct acpi_hest_generic > { > - ACPI_NFIT_HEADER Header; > - UINT32 DeviceHandle; > - UINT16 HintCount; > - UINT8 Reserved[6]; /* Reserved, must be zero */ > - UINT64 HintAddress[1]; /* Variable length */ > + ACPI_HEST_HEADER Header; > + UINT16 RelatedSourceId; > + UINT8 Reserved; > + UINT8 Enabled; > + UINT32 RecordsToPreallocate; > + UINT32 MaxSectionsPerRecord; > + UINT32 MaxRawDataLength; > + ACPI_GENERIC_ADDRESS ErrorStatusAddress; > + ACPI_HEST_NOTIFY Notify; > + UINT32 ErrorBlockLength; > > -} ACPI_NFIT_FLUSH_ADDRESS; > +} ACPI_HEST_GENERIC; > > > -/* 7: Platform Capabilities Structure */ > +/* 10: Generic Hardware Error Source, version 2 */ > > -typedef struct acpi_nfit_capabilities > +typedef struct acpi_hest_generic_v2 > { > - ACPI_NFIT_HEADER Header; > - UINT8 HighestCapability; > - UINT8 Reserved[3]; /* Reserved, must be zero */ > - UINT32 Capabilities; > - UINT32 Reserved2; > - > -} ACPI_NFIT_CAPABILITIES; > + ACPI_HEST_HEADER Header; > + UINT16 RelatedSourceId; > + UINT8 Reserved; > + UINT8 Enabled; > + UINT32 RecordsToPreallocate; > + UINT32 MaxSectionsPerRecord; > + UINT32 MaxRawDataLength; > + ACPI_GENERIC_ADDRESS ErrorStatusAddress; > + ACPI_HEST_NOTIFY Notify; > + UINT32 ErrorBlockLength; > + ACPI_GENERIC_ADDRESS ReadAckRegister; > + UINT64 ReadAckPreserve; > + UINT64 ReadAckWrite; > > -/* Capabilities Flags */ > +} ACPI_HEST_GENERIC_V2; > > -#define ACPI_NFIT_CAPABILITY_CACHE_FLUSH (1) /* 00: Cache Flush to NVDIMM capable */ > -#define ACPI_NFIT_CAPABILITY_MEM_FLUSH (1<<1) /* 01: Memory Flush to NVDIMM capable */ > -#define ACPI_NFIT_CAPABILITY_MEM_MIRRORING (1<<2) /* 02: Memory Mirroring capable */ > > +/* Generic Error Status block */ > > -/* > - * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM > - */ > -typedef struct nfit_device_handle > +typedef struct acpi_hest_generic_status > { > - UINT32 Handle; > - > -} NFIT_DEVICE_HANDLE; > + UINT32 BlockStatus; > + UINT32 RawDataOffset; > + UINT32 RawDataLength; > + UINT32 DataLength; > + UINT32 ErrorSeverity; > > -/* Device handle construction and extraction macros */ > +} ACPI_HEST_GENERIC_STATUS; > > -#define ACPI_NFIT_DIMM_NUMBER_MASK 0x0000000F > -#define ACPI_NFIT_CHANNEL_NUMBER_MASK 0x000000F0 > -#define ACPI_NFIT_MEMORY_ID_MASK 0x00000F00 > -#define ACPI_NFIT_SOCKET_ID_MASK 0x0000F000 > -#define ACPI_NFIT_NODE_ID_MASK 0x0FFF0000 > +/* Values for BlockStatus flags above */ > > -#define ACPI_NFIT_DIMM_NUMBER_OFFSET 0 > -#define ACPI_NFIT_CHANNEL_NUMBER_OFFSET 4 > -#define ACPI_NFIT_MEMORY_ID_OFFSET 8 > -#define ACPI_NFIT_SOCKET_ID_OFFSET 12 > -#define ACPI_NFIT_NODE_ID_OFFSET 16 > +#define ACPI_HEST_UNCORRECTABLE (1) > +#define ACPI_HEST_CORRECTABLE (1<<1) > +#define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2) > +#define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3) > +#define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ > > -/* Macro to construct a NFIT/NVDIMM device handle */ > > -#define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \ > - ((dimm) | \ > - ((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET) | \ > - ((memory) << ACPI_NFIT_MEMORY_ID_OFFSET) | \ > - ((socket) << ACPI_NFIT_SOCKET_ID_OFFSET) | \ > - ((node) << ACPI_NFIT_NODE_ID_OFFSET)) > +/* Generic Error Data entry */ > > -/* Macros to extract individual fields from a NFIT/NVDIMM device handle */ > +typedef struct acpi_hest_generic_data > +{ > + UINT8 SectionType[16]; > + UINT32 ErrorSeverity; > + UINT16 Revision; > + UINT8 ValidationBits; > + UINT8 Flags; > + UINT32 ErrorDataLength; > + UINT8 FruId[16]; > + UINT8 FruText[20]; > > -#define ACPI_NFIT_GET_DIMM_NUMBER(handle) \ > - ((handle) & ACPI_NFIT_DIMM_NUMBER_MASK) > +} ACPI_HEST_GENERIC_DATA; > > -#define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \ > - (((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET) > +/* Extension for revision 0x0300 */ > > -#define ACPI_NFIT_GET_MEMORY_ID(handle) \ > - (((handle) & ACPI_NFIT_MEMORY_ID_MASK) >> ACPI_NFIT_MEMORY_ID_OFFSET) > +typedef struct acpi_hest_generic_data_v300 > +{ > + UINT8 SectionType[16]; > + UINT32 ErrorSeverity; > + UINT16 Revision; > + UINT8 ValidationBits; > + UINT8 Flags; > + UINT32 ErrorDataLength; > + UINT8 FruId[16]; > + UINT8 FruText[20]; > + UINT64 TimeStamp; > > -#define ACPI_NFIT_GET_SOCKET_ID(handle) \ > - (((handle) & ACPI_NFIT_SOCKET_ID_MASK) >> ACPI_NFIT_SOCKET_ID_OFFSET) > +} ACPI_HEST_GENERIC_DATA_V300; > > -#define ACPI_NFIT_GET_NODE_ID(handle) \ > - (((handle) & ACPI_NFIT_NODE_ID_MASK) >> ACPI_NFIT_NODE_ID_OFFSET) > +/* Values for ErrorSeverity above */ > > +#define ACPI_HEST_GEN_ERROR_RECOVERABLE 0 > +#define ACPI_HEST_GEN_ERROR_FATAL 1 > +#define ACPI_HEST_GEN_ERROR_CORRECTED 2 > +#define ACPI_HEST_GEN_ERROR_NONE 3 > > -/******************************************************************************* > - * > - * PDTT - Platform Debug Trigger Table (ACPI 6.2) > - * Version 0 > - * > - ******************************************************************************/ > +/* Flags for ValidationBits above */ > > -typedef struct acpi_table_pdtt > -{ > - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT8 TriggerCount; > - UINT8 Reserved[3]; > - UINT32 ArrayOffset; > +#define ACPI_HEST_GEN_VALID_FRU_ID (1) > +#define ACPI_HEST_GEN_VALID_FRU_STRING (1<<1) > +#define ACPI_HEST_GEN_VALID_TIMESTAMP (1<<2) > > -} ACPI_TABLE_PDTT; > > +/* 11: IA32 Deferred Machine Check Exception (ACPI 6.2) */ > > -/* > - * PDTT Communication Channel Identifier Structure. > - * The number of these structures is defined by TriggerCount above, > - * starting at ArrayOffset. > - */ > -typedef struct acpi_pdtt_channel > +typedef struct acpi_hest_ia_deferred_check > { > - UINT8 SubchannelId; > - UINT8 Flags; > - > -} ACPI_PDTT_CHANNEL; > - > -/* Flags for above */ > + ACPI_HEST_HEADER Header; > + UINT16 Reserved1; > + UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ > + UINT8 Enabled; > + UINT32 RecordsToPreallocate; > + UINT32 MaxSectionsPerRecord; > + ACPI_HEST_NOTIFY Notify; > + UINT8 NumHardwareBanks; > + UINT8 Reserved2[3]; > > -#define ACPI_PDTT_RUNTIME_TRIGGER (1) > -#define ACPI_PDTT_WAIT_COMPLETION (1<<1) > +} ACPI_HEST_IA_DEFERRED_CHECK; > > > /******************************************************************************* > * > - * PPTT - Processor Properties Topology Table (ACPI 6.2) > + * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.2) > * Version 1 > * > ******************************************************************************/ > > -typedef struct acpi_table_pptt > +typedef struct acpi_table_hmat > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > + UINT32 Reserved; > > -} ACPI_TABLE_PPTT; > +} ACPI_TABLE_HMAT; > > -/* Values for Type field above */ > > -enum AcpiPpttType > +/* Values for HMAT structure types */ > + > +enum AcpiHmatType > { > - ACPI_PPTT_TYPE_PROCESSOR = 0, > - ACPI_PPTT_TYPE_CACHE = 1, > - ACPI_PPTT_TYPE_ID = 2, > - ACPI_PPTT_TYPE_RESERVED = 3 > + ACPI_HMAT_TYPE_ADDRESS_RANGE = 0, /* Memory subystem address range */ > + ACPI_HMAT_TYPE_LOCALITY = 1, /* System locality latency and bandwidth information */ > + ACPI_HMAT_TYPE_CACHE = 2, /* Memory side cache information */ > + ACPI_HMAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */ > }; > > +typedef struct acpi_hmat_structure > +{ > + UINT16 Type; > + UINT16 Reserved; > + UINT32 Length; > + > +} ACPI_HMAT_STRUCTURE; > + > + > +/* > + * HMAT Structures, correspond to Type in ACPI_HMAT_STRUCTURE > + */ > > -/* 0: Processor Hierarchy Node Structure */ > +/* 0: Memory subystem address range */ > > -typedef struct acpi_pptt_processor > +typedef struct acpi_hmat_address_range > { > - ACPI_SUBTABLE_HEADER Header; > - UINT16 Reserved; > - UINT32 Flags; > - UINT32 Parent; > - UINT32 AcpiProcessorId; > - UINT32 NumberOfPrivResources; > + ACPI_HMAT_STRUCTURE Header; > + UINT16 Flags; > + UINT16 Reserved1; > + UINT32 ProcessorPD; /* Processor proximity domain */ > + UINT32 MemoryPD; /* Memory proximity domain */ > + UINT32 Reserved2; > + UINT64 PhysicalAddressBase; /* Physical address range base */ > + UINT64 PhysicalAddressLength; /* Physical address range length */ > > -} ACPI_PPTT_PROCESSOR; > +} ACPI_HMAT_ADDRESS_RANGE; > > -/* Flags */ > +/* Masks for Flags field above */ > > -#define ACPI_PPTT_PHYSICAL_PACKAGE (1) /* Physical package */ > -#define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (2) /* ACPI Processor ID valid */ > +#define ACPI_HMAT_PROCESSOR_PD_VALID (1) /* 1: ProcessorPD field is valid */ > +#define ACPI_HMAT_MEMORY_PD_VALID (1<<1) /* 1: MemoryPD field is valid */ > +#define ACPI_HMAT_RESERVATION_HINT (1<<2) /* 1: Reservation hint */ > > > -/* 1: Cache Type Structure */ > +/* 1: System locality latency and bandwidth information */ > > -typedef struct acpi_pptt_cache > +typedef struct acpi_hmat_locality > { > - ACPI_SUBTABLE_HEADER Header; > - UINT16 Reserved; > - UINT32 Flags; > - UINT32 NextLevelOfCache; > - UINT32 Size; > - UINT32 NumberOfSets; > - UINT8 Associativity; > - UINT8 Attributes; > - UINT16 LineSize; > + ACPI_HMAT_STRUCTURE Header; > + UINT8 Flags; > + UINT8 DataType; > + UINT16 Reserved1; > + UINT32 NumberOfInitiatorPDs; > + UINT32 NumberOfTargetPDs; > + UINT32 Reserved2; > + UINT64 EntryBaseUnit; > > -} ACPI_PPTT_CACHE; > +} ACPI_HMAT_LOCALITY; > > -/* Flags */ > +/* Masks for Flags field above */ > > -#define ACPI_PPTT_SIZE_PROPERTY_VALID (1) /* Physical property valid */ > -#define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1) /* Number of sets valid */ > -#define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2) /* Associativity valid */ > -#define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3) /* Allocation type valid */ > -#define ACPI_PPTT_CACHE_TYPE_VALID (1<<4) /* Cache type valid */ > -#define ACPI_PPTT_WRITE_POLICY_VALID (1<<5) /* Write policy valid */ > -#define ACPI_PPTT_LINE_SIZE_VALID (1<<6) /* Line size valid */ > +#define ACPI_HMAT_MEMORY_HIERARCHY (0x0F) > > -/* Masks for Attributes */ > +/* Values for Memory Hierarchy flag */ > > -#define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03) /* Allocation type */ > -#define ACPI_PPTT_MASK_CACHE_TYPE (0x0C) /* Cache type */ > -#define ACPI_PPTT_MASK_WRITE_POLICY (0x10) /* Write policy */ > +#define ACPI_HMAT_MEMORY 0 > +#define ACPI_HMAT_LAST_LEVEL_CACHE 1 > +#define ACPI_HMAT_1ST_LEVEL_CACHE 2 > +#define ACPI_HMAT_2ND_LEVEL_CACHE 3 > +#define ACPI_HMAT_3RD_LEVEL_CACHE 4 > > -/* Attributes describing cache */ > -#define ACPI_PPTT_CACHE_READ_ALLOCATE (0x0) /* Cache line is allocated on read */ > -#define ACPI_PPTT_CACHE_WRITE_ALLOCATE (0x01) /* Cache line is allocated on write */ > -#define ACPI_PPTT_CACHE_RW_ALLOCATE (0x02) /* Cache line is allocated on read and write */ > -#define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT (0x03) /* Alternate representation of above */ > +/* Values for DataType field above */ > > -#define ACPI_PPTT_CACHE_TYPE_DATA (0x0) /* Data cache */ > -#define ACPI_PPTT_CACHE_TYPE_INSTR (1<<2) /* Instruction cache */ > -#define ACPI_PPTT_CACHE_TYPE_UNIFIED (2<<2) /* Unified I & D cache */ > -#define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT (3<<2) /* Alternate representation of above */ > +#define ACPI_HMAT_ACCESS_LATENCY 0 > +#define ACPI_HMAT_READ_LATENCY 1 > +#define ACPI_HMAT_WRITE_LATENCY 2 > +#define ACPI_HMAT_ACCESS_BANDWIDTH 3 > +#define ACPI_HMAT_READ_BANDWIDTH 4 > +#define ACPI_HMAT_WRITE_BANDWIDTH 5 > > -#define ACPI_PPTT_CACHE_POLICY_WB (0x0) /* Cache is write back */ > -#define ACPI_PPTT_CACHE_POLICY_WT (1<<4) /* Cache is write through */ > > -/* 2: ID Structure */ > +/* 2: Memory side cache information */ > > -typedef struct acpi_pptt_id > +typedef struct acpi_hmat_cache > { > - ACPI_SUBTABLE_HEADER Header; > - UINT16 Reserved; > - UINT32 VendorId; > - UINT64 Level1Id; > - UINT64 Level2Id; > - UINT16 MajorRev; > - UINT16 MinorRev; > - UINT16 SpinRev; > + ACPI_HMAT_STRUCTURE Header; > + UINT32 MemoryPD; > + UINT32 Reserved1; > + UINT64 CacheSize; > + UINT32 CacheAttributes; > + UINT16 Reserved2; > + UINT16 NumberOfSMBIOSHandles; > + > +} ACPI_HMAT_CACHE; > > -} ACPI_PPTT_ID; > +/* Masks for CacheAttributes field above */ > > +#define ACPI_HMAT_TOTAL_CACHE_LEVEL (0x0000000F) > +#define ACPI_HMAT_CACHE_LEVEL (0x000000F0) > +#define ACPI_HMAT_CACHE_ASSOCIATIVITY (0x00000F00) > +#define ACPI_HMAT_WRITE_POLICY (0x0000F000) > +#define ACPI_HMAT_CACHE_LINE_SIZE (0xFFFF0000) > > -/******************************************************************************* > - * > - * SBST - Smart Battery Specification Table > - * Version 1 > - * > - ******************************************************************************/ > +/* Values for cache associativity flag */ > > -typedef struct acpi_table_sbst > -{ > - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT32 WarningLevel; > - UINT32 LowLevel; > - UINT32 CriticalLevel; > +#define ACPI_HMAT_CA_NONE (0) > +#define ACPI_HMAT_CA_DIRECT_MAPPED (1) > +#define ACPI_HMAT_CA_COMPLEX_CACHE_INDEXING (2) > + > +/* Values for write policy flag */ > > -} ACPI_TABLE_SBST; > +#define ACPI_HMAT_CP_NONE (0) > +#define ACPI_HMAT_CP_WB (1) > +#define ACPI_HMAT_CP_WT (2) > > > /******************************************************************************* > * > - * SDEV - Secure Devices Table (ACPI 6.2) > + * HPET - High Precision Event Timer table > * Version 1 > * > + * Conforms to "IA-PC HPET (High Precision Event Timers) Specification", > + * Version 1.0a, October 2004 > + * > ******************************************************************************/ > > -typedef struct acpi_table_sdev > +typedef struct acpi_table_hpet > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - > -} ACPI_TABLE_SDEV; > - > - > -typedef struct acpi_sdev_header > -{ > - UINT8 Type; > + UINT32 Id; /* Hardware ID of event timer block */ > + ACPI_GENERIC_ADDRESS Address; /* Address of event timer block */ > + UINT8 Sequence; /* HPET sequence number */ > + UINT16 MinimumTick; /* Main counter min tick, periodic mode */ > UINT8 Flags; > - UINT16 Length; > - > -} ACPI_SDEV_HEADER; > - > - > -/* Values for subtable type above */ > > -enum AcpiSdevType > -{ > - ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0, > - ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1, > - ACPI_SDEV_TYPE_RESERVED = 2 /* 2 and greater are reserved */ > -}; > - > -/* Values for flags above */ > - > -#define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS (1) > - > -/* > - * SDEV subtables > - */ > - > -/* 0: Namespace Device Based Secure Device Structure */ > +} ACPI_TABLE_HPET; > > -typedef struct acpi_sdev_namespace > -{ > - ACPI_SDEV_HEADER Header; > - UINT16 DeviceIdOffset; > - UINT16 DeviceIdLength; > - UINT16 VendorDataOffset; > - UINT16 VendorDataLength; > - > -} ACPI_SDEV_NAMESPACE; > - > -/* 1: PCIe Endpoint Device Based Device Structure */ > - > -typedef struct acpi_sdev_pcie > -{ > - ACPI_SDEV_HEADER Header; > - UINT16 Segment; > - UINT16 StartBus; > - UINT16 PathOffset; > - UINT16 PathLength; > - UINT16 VendorDataOffset; > - UINT16 VendorDataLength; > +/* Masks for Flags field above */ > > -} ACPI_SDEV_PCIE; > +#define ACPI_HPET_PAGE_PROTECT_MASK (3) > > -/* 1a: PCIe Endpoint path entry */ > +/* Values for Page Protect flags */ > > -typedef struct acpi_sdev_pcie_path > +enum AcpiHpetPageProtect > { > - UINT8 Device; > - UINT8 Function; > - > -} ACPI_SDEV_PCIE_PATH; > + ACPI_HPET_NO_PAGE_PROTECT = 0, > + ACPI_HPET_PAGE_PROTECT4 = 1, > + ACPI_HPET_PAGE_PROTECT64 = 2 > +}; > > > /******************************************************************************* > * > - * SLIT - System Locality Distance Information Table > + * IBFT - Boot Firmware Table > * Version 1 > * > - ******************************************************************************/ > - > -typedef struct acpi_table_slit > -{ > - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT64 LocalityCount; > - UINT8 Entry[1]; /* Real size = localities^2 */ > - > -} ACPI_TABLE_SLIT; > - > - > -/******************************************************************************* > + * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b > + * Specification", Version 1.01, March 1, 2007 > * > - * SRAT - System Resource Affinity Table > - * Version 3 > + * Note: It appears that this table is not intended to appear in the RSDT/XSDT. > + * Therefore, it is not currently supported by the disassembler. > * > ******************************************************************************/ > > -typedef struct acpi_table_srat > +typedef struct acpi_table_ibft > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT32 TableRevision; /* Must be value '1' */ > - UINT64 Reserved; /* Reserved, must be zero */ > - > -} ACPI_TABLE_SRAT; > - > -/* Values for subtable type in ACPI_SUBTABLE_HEADER */ > - > -enum AcpiSratType > -{ > - ACPI_SRAT_TYPE_CPU_AFFINITY = 0, > - ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1, > - ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2, > - ACPI_SRAT_TYPE_GICC_AFFINITY = 3, > - ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4, /* ACPI 6.2 */ > - ACPI_SRAT_TYPE_RESERVED = 5 /* 5 and greater are reserved */ > -}; > - > -/* > - * SRAT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER > - */ > - > -/* 0: Processor Local APIC/SAPIC Affinity */ > - > -typedef struct acpi_srat_cpu_affinity > -{ > - ACPI_SUBTABLE_HEADER Header; > - UINT8 ProximityDomainLo; > - UINT8 ApicId; > - UINT32 Flags; > - UINT8 LocalSapicEid; > - UINT8 ProximityDomainHi[3]; > - UINT32 ClockDomain; > - > -} ACPI_SRAT_CPU_AFFINITY; > - > -/* Flags */ > - > -#define ACPI_SRAT_CPU_USE_AFFINITY (1) /* 00: Use affinity structure */ > - > - > -/* 1: Memory Affinity */ > - > -typedef struct acpi_srat_mem_affinity > -{ > - ACPI_SUBTABLE_HEADER Header; > - UINT32 ProximityDomain; > - UINT16 Reserved; /* Reserved, must be zero */ > - UINT64 BaseAddress; > - UINT64 Length; > - UINT32 Reserved1; > - UINT32 Flags; > - UINT64 Reserved2; /* Reserved, must be zero */ > + UINT8 Reserved[12]; > > -} ACPI_SRAT_MEM_AFFINITY; > +} ACPI_TABLE_IBFT; > > -/* Flags */ > > -#define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */ > -#define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */ > -#define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */ > +/* IBFT common subtable header */ > > - > -/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ > - > -typedef struct acpi_srat_x2apic_cpu_affinity > +typedef struct acpi_ibft_header > { > - ACPI_SUBTABLE_HEADER Header; > - UINT16 Reserved; /* Reserved, must be zero */ > - UINT32 ProximityDomain; > - UINT32 ApicId; > - UINT32 Flags; > - UINT32 ClockDomain; > - UINT32 Reserved2; > - > -} ACPI_SRAT_X2APIC_CPU_AFFINITY; > - > -/* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */ > - > -#define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */ > + UINT8 Type; > + UINT8 Version; > + UINT16 Length; > + UINT8 Index; > + UINT8 Flags; > > +} ACPI_IBFT_HEADER; > > -/* 3: GICC Affinity (ACPI 5.1) */ > +/* Values for Type field above */ > > -typedef struct acpi_srat_gicc_affinity > +enum AcpiIbftType > { > - ACPI_SUBTABLE_HEADER Header; > - UINT32 ProximityDomain; > - UINT32 AcpiProcessorUid; > - UINT32 Flags; > - UINT32 ClockDomain; > - > -} ACPI_SRAT_GICC_AFFINITY; > - > -/* Flags for ACPI_SRAT_GICC_AFFINITY */ > - > -#define ACPI_SRAT_GICC_ENABLED (1) /* 00: Use affinity structure */ > - > - > -/* 4: GCC ITS Affinity (ACPI 6.2) */ > + ACPI_IBFT_TYPE_NOT_USED = 0, > + ACPI_IBFT_TYPE_CONTROL = 1, > + ACPI_IBFT_TYPE_INITIATOR = 2, > + ACPI_IBFT_TYPE_NIC = 3, > + ACPI_IBFT_TYPE_TARGET = 4, > + ACPI_IBFT_TYPE_EXTENSIONS = 5, > + ACPI_IBFT_TYPE_RESERVED = 6 /* 6 and greater are reserved */ > +}; > > -typedef struct acpi_srat_gic_its_affinity > -{ > - ACPI_SUBTABLE_HEADER Header; > - UINT32 ProximityDomain; > - UINT16 Reserved; > - UINT32 ItsId; > > -} ACPI_SRAT_GIC_ITS_AFFINITY; > +/* IBFT subtables */ > + > +typedef struct acpi_ibft_control > +{ > + ACPI_IBFT_HEADER Header; > + UINT16 Extensions; > + UINT16 InitiatorOffset; > + UINT16 Nic0Offset; > + UINT16 Target0Offset; > + UINT16 Nic1Offset; > + UINT16 Target1Offset; > + > +} ACPI_IBFT_CONTROL; > + > +typedef struct acpi_ibft_initiator > +{ > + ACPI_IBFT_HEADER Header; > + UINT8 SnsServer[16]; > + UINT8 SlpServer[16]; > + UINT8 PrimaryServer[16]; > + UINT8 SecondaryServer[16]; > + UINT16 NameLength; > + UINT16 NameOffset; > + > +} ACPI_IBFT_INITIATOR; > + > +typedef struct acpi_ibft_nic > +{ > + ACPI_IBFT_HEADER Header; > + UINT8 IpAddress[16]; > + UINT8 SubnetMaskPrefix; > + UINT8 Origin; > + UINT8 Gateway[16]; > + UINT8 PrimaryDns[16]; > + UINT8 SecondaryDns[16]; > + UINT8 Dhcp[16]; > + UINT16 Vlan; > + UINT8 MacAddress[6]; > + UINT16 PciAddress; > + UINT16 NameLength; > + UINT16 NameOffset; > + > +} ACPI_IBFT_NIC; > + > +typedef struct acpi_ibft_target > +{ > + ACPI_IBFT_HEADER Header; > + UINT8 TargetIpAddress[16]; > + UINT16 TargetIpSocket; > + UINT8 TargetBootLun[8]; > + UINT8 ChapType; > + UINT8 NicAssociation; > + UINT16 TargetNameLength; > + UINT16 TargetNameOffset; > + UINT16 ChapNameLength; > + UINT16 ChapNameOffset; > + UINT16 ChapSecretLength; > + UINT16 ChapSecretOffset; > + UINT16 ReverseChapNameLength; > + UINT16 ReverseChapNameOffset; > + UINT16 ReverseChapSecretLength; > + UINT16 ReverseChapSecretOffset; > + > +} ACPI_IBFT_TARGET; > > > /* Reset to default packing */ > diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h > index cad2fb24..4b3d460d 100644 > --- a/src/acpica/source/include/actbl2.h > +++ b/src/acpica/source/include/actbl2.h > @@ -160,9 +160,6 @@ > * These tables are not consumed directly by the ACPICA subsystem, but are > * included here to support device drivers and the AML disassembler. > * > - * Generally, the tables in this file are defined by third-party specifications, > - * and are not defined directly by the ACPI specification itself. > - * > ******************************************************************************/ > > > @@ -171,44 +168,26 @@ > * file. Useful because they make it more difficult to inadvertently type in > * the wrong signature. > */ > -#define ACPI_SIG_ASF "ASF!" /* Alert Standard Format table */ > -#define ACPI_SIG_BOOT "BOOT" /* Simple Boot Flag Table */ > -#define ACPI_SIG_CSRT "CSRT" /* Core System Resource Table */ > -#define ACPI_SIG_DBG2 "DBG2" /* Debug Port table type 2 */ > -#define ACPI_SIG_DBGP "DBGP" /* Debug Port table */ > -#define ACPI_SIG_DMAR "DMAR" /* DMA Remapping table */ > -#define ACPI_SIG_HPET "HPET" /* High Precision Event Timer table */ > -#define ACPI_SIG_IBFT "IBFT" /* iSCSI Boot Firmware Table */ > #define ACPI_SIG_IORT "IORT" /* IO Remapping Table */ > #define ACPI_SIG_IVRS "IVRS" /* I/O Virtualization Reporting Structure */ > #define ACPI_SIG_LPIT "LPIT" /* Low Power Idle Table */ > +#define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ > #define ACPI_SIG_MCFG "MCFG" /* PCI Memory Mapped Configuration table */ > #define ACPI_SIG_MCHI "MCHI" /* Management Controller Host Interface table */ > +#define ACPI_SIG_MPST "MPST" /* Memory Power State Table */ > +#define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */ > #define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ > #define ACPI_SIG_MTMR "MTMR" /* MID Timer table */ > +#define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */ > +#define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */ > +#define ACPI_SIG_PDTT "PDTT" /* Platform Debug Trigger Table */ > +#define ACPI_SIG_PMTT "PMTT" /* Platform Memory Topology Table */ > +#define ACPI_SIG_PPTT "PPTT" /* Processor Properties Topology Table */ > +#define ACPI_SIG_RASF "RASF" /* RAS Feature table */ > +#define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ > #define ACPI_SIG_SDEI "SDEI" /* Software Delegated Exception Interface Table */ > -#define ACPI_SIG_SLIC "SLIC" /* Software Licensing Description Table */ > -#define ACPI_SIG_SPCR "SPCR" /* Serial Port Console Redirection table */ > -#define ACPI_SIG_SPMI "SPMI" /* Server Platform Management Interface table */ > -#define ACPI_SIG_TCPA "TCPA" /* Trusted Computing Platform Alliance table */ > -#define ACPI_SIG_TPM2 "TPM2" /* Trusted Platform Module 2.0 H/W interface table */ > -#define ACPI_SIG_UEFI "UEFI" /* Uefi Boot Optimization Table */ > -#define ACPI_SIG_VRTC "VRTC" /* Virtual Real Time Clock Table */ > -#define ACPI_SIG_WAET "WAET" /* Windows ACPI Emulated devices Table */ > -#define ACPI_SIG_WDAT "WDAT" /* Watchdog Action Table */ > -#define ACPI_SIG_WDDT "WDDT" /* Watchdog Timer Description Table */ > -#define ACPI_SIG_WDRT "WDRT" /* Watchdog Resource Table */ > -#define ACPI_SIG_WSMT "WSMT" /* Windows SMM Security Migrations Table */ > -#define ACPI_SIG_XXXX "XXXX" /* Intermediate AML header for ASL/ASL+ converter */ > - > -#ifdef ACPI_UNDEFINED_TABLES > -/* > - * These tables have been seen in the field, but no definition has been found > - */ > -#define ACPI_SIG_ATKG "ATKG" > -#define ACPI_SIG_GSCI "GSCI" /* GMCH SCI table */ > -#define ACPI_SIG_IEIT "IEIT" > -#endif > +#define ACPI_SIG_SDEV "SDEV" /* Secure Devices table */ > + > > /* > * All tables must be byte-packed to match the ACPI specification, since > @@ -231,1712 +210,1937 @@ > > /******************************************************************************* > * > - * ASF - Alert Standard Format table (Signature "ASF!") > - * Revision 0x10 > + * IORT - IO Remapping Table > * > - * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003 > + * Conforms to "IO Remapping Table System Software on ARM Platforms", > + * Document number: ARM DEN 0049C, May 2017 > * > ******************************************************************************/ > > -typedef struct acpi_table_asf > +typedef struct acpi_table_iort > { > - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - > -} ACPI_TABLE_ASF; > + ACPI_TABLE_HEADER Header; > + UINT32 NodeCount; > + UINT32 NodeOffset; > + UINT32 Reserved; > > +} ACPI_TABLE_IORT; > > -/* ASF subtable header */ > > -typedef struct acpi_asf_header > +/* > + * IORT subtables > + */ > +typedef struct acpi_iort_node > { > UINT8 Type; > - UINT8 Reserved; > UINT16 Length; > + UINT8 Revision; > + UINT32 Reserved; > + UINT32 MappingCount; > + UINT32 MappingOffset; > + char NodeData[1]; > > -} ACPI_ASF_HEADER; > - > +} ACPI_IORT_NODE; > > -/* Values for Type field above */ > +/* Values for subtable Type above */ > > -enum AcpiAsfType > +enum AcpiIortNodeType > { > - ACPI_ASF_TYPE_INFO = 0, > - ACPI_ASF_TYPE_ALERT = 1, > - ACPI_ASF_TYPE_CONTROL = 2, > - ACPI_ASF_TYPE_BOOT = 3, > - ACPI_ASF_TYPE_ADDRESS = 4, > - ACPI_ASF_TYPE_RESERVED = 5 > + ACPI_IORT_NODE_ITS_GROUP = 0x00, > + ACPI_IORT_NODE_NAMED_COMPONENT = 0x01, > + ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02, > + ACPI_IORT_NODE_SMMU = 0x03, > + ACPI_IORT_NODE_SMMU_V3 = 0x04 > }; > > -/* > - * ASF subtables > - */ > - > -/* 0: ASF Information */ > > -typedef struct acpi_asf_info > +typedef struct acpi_iort_id_mapping > { > - ACPI_ASF_HEADER Header; > - UINT8 MinResetValue; > - UINT8 MinPollInterval; > - UINT16 SystemId; > - UINT32 MfgId; > - UINT8 Flags; > - UINT8 Reserved2[3]; > - > -} ACPI_ASF_INFO; > - > -/* Masks for Flags field above */ > - > -#define ACPI_ASF_SMBUS_PROTOCOLS (1) > + UINT32 InputBase; /* Lowest value in input range */ > + UINT32 IdCount; /* Number of IDs */ > + UINT32 OutputBase; /* Lowest value in output range */ > + UINT32 OutputReference; /* A reference to the output node */ > + UINT32 Flags; > > +} ACPI_IORT_ID_MAPPING; > > -/* 1: ASF Alerts */ > +/* Masks for Flags field above for IORT subtable */ > > -typedef struct acpi_asf_alert > -{ > - ACPI_ASF_HEADER Header; > - UINT8 AssertMask; > - UINT8 DeassertMask; > - UINT8 Alerts; > - UINT8 DataLength; > +#define ACPI_IORT_ID_SINGLE_MAPPING (1) > > -} ACPI_ASF_ALERT; > > -typedef struct acpi_asf_alert_data > +typedef struct acpi_iort_memory_access > { > - UINT8 Address; > - UINT8 Command; > - UINT8 Mask; > - UINT8 Value; > - UINT8 SensorType; > - UINT8 Type; > - UINT8 Offset; > - UINT8 SourceType; > - UINT8 Severity; > - UINT8 SensorNumber; > - UINT8 Entity; > - UINT8 Instance; > - > -} ACPI_ASF_ALERT_DATA; > + UINT32 CacheCoherency; > + UINT8 Hints; > + UINT16 Reserved; > + UINT8 MemoryFlags; > > +} ACPI_IORT_MEMORY_ACCESS; > > -/* 2: ASF Remote Control */ > +/* Values for CacheCoherency field above */ > > -typedef struct acpi_asf_remote > -{ > - ACPI_ASF_HEADER Header; > - UINT8 Controls; > - UINT8 DataLength; > - UINT16 Reserved2; > +#define ACPI_IORT_NODE_COHERENT 0x00000001 /* The device node is fully coherent */ > +#define ACPI_IORT_NODE_NOT_COHERENT 0x00000000 /* The device node is not coherent */ > > -} ACPI_ASF_REMOTE; > +/* Masks for Hints field above */ > > -typedef struct acpi_asf_control_data > -{ > - UINT8 Function; > - UINT8 Address; > - UINT8 Command; > - UINT8 Value; > +#define ACPI_IORT_HT_TRANSIENT (1) > +#define ACPI_IORT_HT_WRITE (1<<1) > +#define ACPI_IORT_HT_READ (1<<2) > +#define ACPI_IORT_HT_OVERRIDE (1<<3) > > -} ACPI_ASF_CONTROL_DATA; > +/* Masks for MemoryFlags field above */ > > +#define ACPI_IORT_MF_COHERENCY (1) > +#define ACPI_IORT_MF_ATTRIBUTES (1<<1) > > -/* 3: ASF RMCP Boot Options */ > > -typedef struct acpi_asf_rmcp > +/* > + * IORT node specific subtables > + */ > +typedef struct acpi_iort_its_group > { > - ACPI_ASF_HEADER Header; > - UINT8 Capabilities[7]; > - UINT8 CompletionCode; > - UINT32 EnterpriseId; > - UINT8 Command; > - UINT16 Parameter; > - UINT16 BootOptions; > - UINT16 OemParameters; > - > -} ACPI_ASF_RMCP; > + UINT32 ItsCount; > + UINT32 Identifiers[1]; /* GIC ITS identifier arrary */ > > +} ACPI_IORT_ITS_GROUP; > > -/* 4: ASF Address */ > > -typedef struct acpi_asf_address > +typedef struct acpi_iort_named_component > { > - ACPI_ASF_HEADER Header; > - UINT8 EpromAddress; > - UINT8 Devices; > - > -} ACPI_ASF_ADDRESS; > + UINT32 NodeFlags; > + UINT64 MemoryProperties; /* Memory access properties */ > + UINT8 MemoryAddressLimit; /* Memory address size limit */ > + char DeviceName[1]; /* Path of namespace object */ > > +} ACPI_IORT_NAMED_COMPONENT; > > -/******************************************************************************* > - * > - * BOOT - Simple Boot Flag Table > - * Version 1 > - * > - * Conforms to the "Simple Boot Flag Specification", Version 2.1 > - * > - ******************************************************************************/ > > -typedef struct acpi_table_boot > +typedef struct acpi_iort_root_complex > { > - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT8 CmosIndex; /* Index in CMOS RAM for the boot register */ > - UINT8 Reserved[3]; > + UINT64 MemoryProperties; /* Memory access properties */ > + UINT32 AtsAttribute; > + UINT32 PciSegmentNumber; > > -} ACPI_TABLE_BOOT; > +} ACPI_IORT_ROOT_COMPLEX; > > +/* Values for AtsAttribute field above */ > > -/******************************************************************************* > - * > - * CSRT - Core System Resource Table > - * Version 0 > - * > - * Conforms to the "Core System Resource Table (CSRT)", November 14, 2011 > - * > - ******************************************************************************/ > +#define ACPI_IORT_ATS_SUPPORTED 0x00000001 /* The root complex supports ATS */ > +#define ACPI_IORT_ATS_UNSUPPORTED 0x00000000 /* The root complex doesn't support ATS */ > > -typedef struct acpi_table_csrt > -{ > - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > > -} ACPI_TABLE_CSRT; > +typedef struct acpi_iort_smmu > +{ > + UINT64 BaseAddress; /* SMMU base address */ > + UINT64 Span; /* Length of memory range */ > + UINT32 Model; > + UINT32 Flags; > + UINT32 GlobalInterruptOffset; > + UINT32 ContextInterruptCount; > + UINT32 ContextInterruptOffset; > + UINT32 PmuInterruptCount; > + UINT32 PmuInterruptOffset; > + UINT64 Interrupts[1]; /* Interrupt array */ > > +} ACPI_IORT_SMMU; > > -/* Resource Group subtable */ > +/* Values for Model field above */ > > -typedef struct acpi_csrt_group > -{ > - UINT32 Length; > - UINT32 VendorId; > - UINT32 SubvendorId; > - UINT16 DeviceId; > - UINT16 SubdeviceId; > - UINT16 Revision; > - UINT16 Reserved; > - UINT32 SharedInfoLength; > +#define ACPI_IORT_SMMU_V1 0x00000000 /* Generic SMMUv1 */ > +#define ACPI_IORT_SMMU_V2 0x00000001 /* Generic SMMUv2 */ > +#define ACPI_IORT_SMMU_CORELINK_MMU400 0x00000002 /* ARM Corelink MMU-400 */ > +#define ACPI_IORT_SMMU_CORELINK_MMU500 0x00000003 /* ARM Corelink MMU-500 */ > +#define ACPI_IORT_SMMU_CORELINK_MMU401 0x00000004 /* ARM Corelink MMU-401 */ > +#define ACPI_IORT_SMMU_CAVIUM_THUNDERX 0x00000005 /* Cavium ThunderX SMMUv2 */ > > - /* Shared data immediately follows (Length = SharedInfoLength) */ > +/* Masks for Flags field above */ > > -} ACPI_CSRT_GROUP; > +#define ACPI_IORT_SMMU_DVM_SUPPORTED (1) > +#define ACPI_IORT_SMMU_COHERENT_WALK (1<<1) > > -/* Shared Info subtable */ > +/* Global interrupt format */ > > -typedef struct acpi_csrt_shared_info > +typedef struct acpi_iort_smmu_gsi > { > - UINT16 MajorVersion; > - UINT16 MinorVersion; > - UINT32 MmioBaseLow; > - UINT32 MmioBaseHigh; > - UINT32 GsiInterrupt; > - UINT8 InterruptPolarity; > - UINT8 InterruptMode; > - UINT8 NumChannels; > - UINT8 DmaAddressWidth; > - UINT16 BaseRequestLine; > - UINT16 NumHandshakeSignals; > - UINT32 MaxBlockSize; > - > - /* Resource descriptors immediately follow (Length = Group Length - SharedInfoLength) */ > + UINT32 NSgIrpt; > + UINT32 NSgIrptFlags; > + UINT32 NSgCfgIrpt; > + UINT32 NSgCfgIrptFlags; > > -} ACPI_CSRT_SHARED_INFO; > +} ACPI_IORT_SMMU_GSI; > > -/* Resource Descriptor subtable */ > > -typedef struct acpi_csrt_descriptor > +typedef struct acpi_iort_smmu_v3 > { > - UINT32 Length; > - UINT16 Type; > - UINT16 Subtype; > - UINT32 Uid; > - > - /* Resource-specific information immediately follows */ > - > -} ACPI_CSRT_DESCRIPTOR; > + UINT64 BaseAddress; /* SMMUv3 base address */ > + UINT32 Flags; > + UINT32 Reserved; > + UINT64 VatosAddress; > + UINT32 Model; > + UINT32 EventGsiv; > + UINT32 PriGsiv; > + UINT32 GerrGsiv; > + UINT32 SyncGsiv; > + UINT8 Pxm; > + UINT8 Reserved1; > + UINT16 Reserved2; > + UINT32 IdMappingIndex; > > +} ACPI_IORT_SMMU_V3; > > -/* Resource Types */ > +/* Values for Model field above */ > > -#define ACPI_CSRT_TYPE_INTERRUPT 0x0001 > -#define ACPI_CSRT_TYPE_TIMER 0x0002 > -#define ACPI_CSRT_TYPE_DMA 0x0003 > +#define ACPI_IORT_SMMU_V3_GENERIC 0x00000000 /* Generic SMMUv3 */ > +#define ACPI_IORT_SMMU_V3_HISILICON_HI161X 0x00000001 /* HiSilicon Hi161x SMMUv3 */ > +#define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX 0x00000002 /* Cavium CN99xx SMMUv3 */ > > -/* Resource Subtypes */ > +/* Masks for Flags field above */ > > -#define ACPI_CSRT_XRUPT_LINE 0x0000 > -#define ACPI_CSRT_XRUPT_CONTROLLER 0x0001 > -#define ACPI_CSRT_TIMER 0x0000 > -#define ACPI_CSRT_DMA_CHANNEL 0x0000 > -#define ACPI_CSRT_DMA_CONTROLLER 0x0001 > +#define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE (1) > +#define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE (1<<1) > +#define ACPI_IORT_SMMU_V3_PXM_VALID (1<<3) > > > /******************************************************************************* > * > - * DBG2 - Debug Port Table 2 > - * Version 0 (Both main table and subtables) > + * IVRS - I/O Virtualization Reporting Structure > + * Version 1 > * > - * Conforms to "Microsoft Debug Port Table 2 (DBG2)", December 10, 2015 > + * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification", > + * Revision 1.26, February 2009. > * > ******************************************************************************/ > > -typedef struct acpi_table_dbg2 > +typedef struct acpi_table_ivrs > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT32 InfoOffset; > - UINT32 InfoCount; > - > -} ACPI_TABLE_DBG2; > + UINT32 Info; /* Common virtualization info */ > + UINT64 Reserved; > > +} ACPI_TABLE_IVRS; > > -typedef struct acpi_dbg2_header > -{ > - UINT32 InfoOffset; > - UINT32 InfoCount; > +/* Values for Info field above */ > > -} ACPI_DBG2_HEADER; > +#define ACPI_IVRS_PHYSICAL_SIZE 0x00007F00 /* 7 bits, physical address size */ > +#define ACPI_IVRS_VIRTUAL_SIZE 0x003F8000 /* 7 bits, virtual address size */ > +#define ACPI_IVRS_ATS_RESERVED 0x00400000 /* ATS address translation range reserved */ > > > -/* Debug Device Information Subtable */ > +/* IVRS subtable header */ > > -typedef struct acpi_dbg2_device > +typedef struct acpi_ivrs_header > { > - UINT8 Revision; > - UINT16 Length; > - UINT8 RegisterCount; /* Number of BaseAddress registers */ > - UINT16 NamepathLength; > - UINT16 NamepathOffset; > - UINT16 OemDataLength; > - UINT16 OemDataOffset; > - UINT16 PortType; > - UINT16 PortSubtype; > - UINT16 Reserved; > - UINT16 BaseAddressOffset; > - UINT16 AddressSizeOffset; > - /* > - * Data that follows: > - * BaseAddress (required) - Each in 12-byte Generic Address Structure format. > - * AddressSize (required) - Array of UINT32 sizes corresponding to each BaseAddress register. > - * Namepath (required) - Null terminated string. Single dot if not supported. > - * OemData (optional) - Length is OemDataLength. > - */ > -} ACPI_DBG2_DEVICE; > - > -/* Types for PortType field above */ > - > -#define ACPI_DBG2_SERIAL_PORT 0x8000 > -#define ACPI_DBG2_1394_PORT 0x8001 > -#define ACPI_DBG2_USB_PORT 0x8002 > -#define ACPI_DBG2_NET_PORT 0x8003 > + UINT8 Type; /* Subtable type */ > + UINT8 Flags; > + UINT16 Length; /* Subtable length */ > + UINT16 DeviceId; /* ID of IOMMU */ > > -/* Subtypes for PortSubtype field above */ > +} ACPI_IVRS_HEADER; > > -#define ACPI_DBG2_16550_COMPATIBLE 0x0000 > -#define ACPI_DBG2_16550_SUBSET 0x0001 > -#define ACPI_DBG2_ARM_PL011 0x0003 > -#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 > +/* Values for subtable Type above */ > > -#define ACPI_DBG2_1394_STANDARD 0x0000 > +enum AcpiIvrsType > +{ > + ACPI_IVRS_TYPE_HARDWARE = 0x10, > + ACPI_IVRS_TYPE_MEMORY1 = 0x20, > + ACPI_IVRS_TYPE_MEMORY2 = 0x21, > + ACPI_IVRS_TYPE_MEMORY3 = 0x22 > +}; > > -#define ACPI_DBG2_USB_XHCI 0x0000 > -#define ACPI_DBG2_USB_EHCI 0x0001 > +/* Masks for Flags field above for IVHD subtable */ > > +#define ACPI_IVHD_TT_ENABLE (1) > +#define ACPI_IVHD_PASS_PW (1<<1) > +#define ACPI_IVHD_RES_PASS_PW (1<<2) > +#define ACPI_IVHD_ISOC (1<<3) > +#define ACPI_IVHD_IOTLB (1<<4) > > -/******************************************************************************* > - * > - * DBGP - Debug Port table > - * Version 1 > - * > - * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000 > - * > - ******************************************************************************/ > +/* Masks for Flags field above for IVMD subtable */ > > -typedef struct acpi_table_dbgp > -{ > - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT8 Type; /* 0=full 16550, 1=subset of 16550 */ > - UINT8 Reserved[3]; > - ACPI_GENERIC_ADDRESS DebugPort; > +#define ACPI_IVMD_UNITY (1) > +#define ACPI_IVMD_READ (1<<1) > +#define ACPI_IVMD_WRITE (1<<2) > +#define ACPI_IVMD_EXCLUSION_RANGE (1<<3) > > -} ACPI_TABLE_DBGP; > > +/* > + * IVRS subtables, correspond to Type in ACPI_IVRS_HEADER > + */ > > -/******************************************************************************* > - * > - * DMAR - DMA Remapping table > - * Version 1 > - * > - * Conforms to "Intel Virtualization Technology for Directed I/O", > - * Version 2.3, October 2014 > - * > - ******************************************************************************/ > +/* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */ > > -typedef struct acpi_table_dmar > +typedef struct acpi_ivrs_hardware > { > - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT8 Width; /* Host Address Width */ > - UINT8 Flags; > - UINT8 Reserved[10]; > + ACPI_IVRS_HEADER Header; > + UINT16 CapabilityOffset; /* Offset for IOMMU control fields */ > + UINT64 BaseAddress; /* IOMMU control registers */ > + UINT16 PciSegmentGroup; > + UINT16 Info; /* MSI number and unit ID */ > + UINT32 Reserved; > > -} ACPI_TABLE_DMAR; > +} ACPI_IVRS_HARDWARE; > > -/* Masks for Flags field above */ > - > -#define ACPI_DMAR_INTR_REMAP (1) > -#define ACPI_DMAR_X2APIC_OPT_OUT (1<<1) > -#define ACPI_DMAR_X2APIC_MODE (1<<2) > +/* Masks for Info field above */ > > +#define ACPI_IVHD_MSI_NUMBER_MASK 0x001F /* 5 bits, MSI message number */ > +#define ACPI_IVHD_UNIT_ID_MASK 0x1F00 /* 5 bits, UnitID */ > > -/* DMAR subtable header */ > > -typedef struct acpi_dmar_header > +/* > + * Device Entries for IVHD subtable, appear after ACPI_IVRS_HARDWARE structure. > + * Upper two bits of the Type field are the (encoded) length of the structure. > + * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries > + * are reserved for future use but not defined. > + */ > +typedef struct acpi_ivrs_de_header > { > - UINT16 Type; > - UINT16 Length; > - > -} ACPI_DMAR_HEADER; > + UINT8 Type; > + UINT16 Id; > + UINT8 DataSetting; > > -/* Values for subtable type in ACPI_DMAR_HEADER */ > +} ACPI_IVRS_DE_HEADER; > > -enum AcpiDmarType > -{ > - ACPI_DMAR_TYPE_HARDWARE_UNIT = 0, > - ACPI_DMAR_TYPE_RESERVED_MEMORY = 1, > - ACPI_DMAR_TYPE_ROOT_ATS = 2, > - ACPI_DMAR_TYPE_HARDWARE_AFFINITY = 3, > - ACPI_DMAR_TYPE_NAMESPACE = 4, > - ACPI_DMAR_TYPE_RESERVED = 5 /* 5 and greater are reserved */ > -}; > +/* Length of device entry is in the top two bits of Type field above */ > > +#define ACPI_IVHD_ENTRY_LENGTH 0xC0 > > -/* DMAR Device Scope structure */ > +/* Values for device entry Type field above */ > > -typedef struct acpi_dmar_device_scope > +enum AcpiIvrsDeviceEntryType > { > - UINT8 EntryType; > - UINT8 Length; > - UINT16 Reserved; > - UINT8 EnumerationId; > - UINT8 Bus; > + /* 4-byte device entries, all use ACPI_IVRS_DEVICE4 */ > > -} ACPI_DMAR_DEVICE_SCOPE; > + ACPI_IVRS_TYPE_PAD4 = 0, > + ACPI_IVRS_TYPE_ALL = 1, > + ACPI_IVRS_TYPE_SELECT = 2, > + ACPI_IVRS_TYPE_START = 3, > + ACPI_IVRS_TYPE_END = 4, > > -/* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE - device types */ > + /* 8-byte device entries */ > > -enum AcpiDmarScopeType > -{ > - ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0, > - ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1, > - ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2, > - ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3, > - ACPI_DMAR_SCOPE_TYPE_HPET = 4, > - ACPI_DMAR_SCOPE_TYPE_NAMESPACE = 5, > - ACPI_DMAR_SCOPE_TYPE_RESERVED = 6 /* 6 and greater are reserved */ > + ACPI_IVRS_TYPE_PAD8 = 64, > + ACPI_IVRS_TYPE_NOT_USED = 65, > + ACPI_IVRS_TYPE_ALIAS_SELECT = 66, /* Uses ACPI_IVRS_DEVICE8A */ > + ACPI_IVRS_TYPE_ALIAS_START = 67, /* Uses ACPI_IVRS_DEVICE8A */ > + ACPI_IVRS_TYPE_EXT_SELECT = 70, /* Uses ACPI_IVRS_DEVICE8B */ > + ACPI_IVRS_TYPE_EXT_START = 71, /* Uses ACPI_IVRS_DEVICE8B */ > + ACPI_IVRS_TYPE_SPECIAL = 72 /* Uses ACPI_IVRS_DEVICE8C */ > }; > > -typedef struct acpi_dmar_pci_path > -{ > - UINT8 Device; > - UINT8 Function; > - > -} ACPI_DMAR_PCI_PATH; > +/* Values for Data field above */ > > +#define ACPI_IVHD_INIT_PASS (1) > +#define ACPI_IVHD_EINT_PASS (1<<1) > +#define ACPI_IVHD_NMI_PASS (1<<2) > +#define ACPI_IVHD_SYSTEM_MGMT (3<<4) > +#define ACPI_IVHD_LINT0_PASS (1<<6) > +#define ACPI_IVHD_LINT1_PASS (1<<7) > > -/* > - * DMAR Subtables, correspond to Type in ACPI_DMAR_HEADER > - */ > > -/* 0: Hardware Unit Definition */ > +/* Types 0-4: 4-byte device entry */ > > -typedef struct acpi_dmar_hardware_unit > +typedef struct acpi_ivrs_device4 > { > - ACPI_DMAR_HEADER Header; > - UINT8 Flags; > - UINT8 Reserved; > - UINT16 Segment; > - UINT64 Address; /* Register Base Address */ > + ACPI_IVRS_DE_HEADER Header; > > -} ACPI_DMAR_HARDWARE_UNIT; > +} ACPI_IVRS_DEVICE4; > > -/* Masks for Flags field above */ > +/* Types 66-67: 8-byte device entry */ > > -#define ACPI_DMAR_INCLUDE_ALL (1) > +typedef struct acpi_ivrs_device8a > +{ > + ACPI_IVRS_DE_HEADER Header; > + UINT8 Reserved1; > + UINT16 UsedId; > + UINT8 Reserved2; > > +} ACPI_IVRS_DEVICE8A; > > -/* 1: Reserved Memory Defininition */ > +/* Types 70-71: 8-byte device entry */ > > -typedef struct acpi_dmar_reserved_memory > +typedef struct acpi_ivrs_device8b > { > - ACPI_DMAR_HEADER Header; > - UINT16 Reserved; > - UINT16 Segment; > - UINT64 BaseAddress; /* 4K aligned base address */ > - UINT64 EndAddress; /* 4K aligned limit address */ > - > -} ACPI_DMAR_RESERVED_MEMORY; > + ACPI_IVRS_DE_HEADER Header; > + UINT32 ExtendedData; > > -/* Masks for Flags field above */ > +} ACPI_IVRS_DEVICE8B; > > -#define ACPI_DMAR_ALLOW_ALL (1) > +/* Values for ExtendedData above */ > > +#define ACPI_IVHD_ATS_DISABLED (1<<31) > > -/* 2: Root Port ATS Capability Reporting Structure */ > +/* Type 72: 8-byte device entry */ > > -typedef struct acpi_dmar_atsr > +typedef struct acpi_ivrs_device8c > { > - ACPI_DMAR_HEADER Header; > - UINT8 Flags; > - UINT8 Reserved; > - UINT16 Segment; > - > -} ACPI_DMAR_ATSR; > - > -/* Masks for Flags field above */ > - > -#define ACPI_DMAR_ALL_PORTS (1) > - > + ACPI_IVRS_DE_HEADER Header; > + UINT8 Handle; > + UINT16 UsedId; > + UINT8 Variety; > > -/* 3: Remapping Hardware Static Affinity Structure */ > +} ACPI_IVRS_DEVICE8C; > > -typedef struct acpi_dmar_rhsa > -{ > - ACPI_DMAR_HEADER Header; > - UINT32 Reserved; > - UINT64 BaseAddress; > - UINT32 ProximityDomain; > +/* Values for Variety field above */ > > -} ACPI_DMAR_RHSA; > +#define ACPI_IVHD_IOAPIC 1 > +#define ACPI_IVHD_HPET 2 > > > -/* 4: ACPI Namespace Device Declaration Structure */ > +/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */ > > -typedef struct acpi_dmar_andd > +typedef struct acpi_ivrs_memory > { > - ACPI_DMAR_HEADER Header; > - UINT8 Reserved[3]; > - UINT8 DeviceNumber; > - char DeviceName[1]; > + ACPI_IVRS_HEADER Header; > + UINT16 AuxData; > + UINT64 Reserved; > + UINT64 StartAddress; > + UINT64 MemoryLength; > > -} ACPI_DMAR_ANDD; > +} ACPI_IVRS_MEMORY; > > > /******************************************************************************* > * > - * HPET - High Precision Event Timer table > - * Version 1 > + * LPIT - Low Power Idle Table > * > - * Conforms to "IA-PC HPET (High Precision Event Timers) Specification", > - * Version 1.0a, October 2004 > + * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014. > * > ******************************************************************************/ > > -typedef struct acpi_table_hpet > +typedef struct acpi_table_lpit > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT32 Id; /* Hardware ID of event timer block */ > - ACPI_GENERIC_ADDRESS Address; /* Address of event timer block */ > - UINT8 Sequence; /* HPET sequence number */ > - UINT16 MinimumTick; /* Main counter min tick, periodic mode */ > - UINT8 Flags; > > -} ACPI_TABLE_HPET; > +} ACPI_TABLE_LPIT; > > -/* Masks for Flags field above */ > > -#define ACPI_HPET_PAGE_PROTECT_MASK (3) > +/* LPIT subtable header */ > + > +typedef struct acpi_lpit_header > +{ > + UINT32 Type; /* Subtable type */ > + UINT32 Length; /* Subtable length */ > + UINT16 UniqueId; > + UINT16 Reserved; > + UINT32 Flags; > + > +} ACPI_LPIT_HEADER; > > -/* Values for Page Protect flags */ > +/* Values for subtable Type above */ > > -enum AcpiHpetPageProtect > +enum AcpiLpitType > { > - ACPI_HPET_NO_PAGE_PROTECT = 0, > - ACPI_HPET_PAGE_PROTECT4 = 1, > - ACPI_HPET_PAGE_PROTECT64 = 2 > + ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00, > + ACPI_LPIT_TYPE_RESERVED = 0x01 /* 1 and above are reserved */ > }; > > +/* Masks for Flags field above */ > + > +#define ACPI_LPIT_STATE_DISABLED (1) > +#define ACPI_LPIT_NO_COUNTER (1<<1) > + > +/* > + * LPIT subtables, correspond to Type in ACPI_LPIT_HEADER > + */ > + > +/* 0x00: Native C-state instruction based LPI structure */ > + > +typedef struct acpi_lpit_native > +{ > + ACPI_LPIT_HEADER Header; > + ACPI_GENERIC_ADDRESS EntryTrigger; > + UINT32 Residency; > + UINT32 Latency; > + ACPI_GENERIC_ADDRESS ResidencyCounter; > + UINT64 CounterFrequency; > + > +} ACPI_LPIT_NATIVE; > + > > /******************************************************************************* > * > - * IBFT - Boot Firmware Table > - * Version 1 > - * > - * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b > - * Specification", Version 1.01, March 1, 2007 > - * > - * Note: It appears that this table is not intended to appear in the RSDT/XSDT. > - * Therefore, it is not currently supported by the disassembler. > + * MADT - Multiple APIC Description Table > + * Version 3 > * > ******************************************************************************/ > > -typedef struct acpi_table_ibft > +typedef struct acpi_table_madt > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT8 Reserved[12]; > + UINT32 Address; /* Physical address of local APIC */ > + UINT32 Flags; > + > +} ACPI_TABLE_MADT; > > -} ACPI_TABLE_IBFT; > +/* Masks for Flags field above */ > > +#define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ > > -/* IBFT common subtable header */ > +/* Values for PCATCompat flag */ > > -typedef struct acpi_ibft_header > -{ > - UINT8 Type; > - UINT8 Version; > - UINT16 Length; > - UINT8 Index; > - UINT8 Flags; > +#define ACPI_MADT_DUAL_PIC 1 > +#define ACPI_MADT_MULTIPLE_APIC 0 > > -} ACPI_IBFT_HEADER; > > -/* Values for Type field above */ > +/* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */ > > -enum AcpiIbftType > +enum AcpiMadtType > { > - ACPI_IBFT_TYPE_NOT_USED = 0, > - ACPI_IBFT_TYPE_CONTROL = 1, > - ACPI_IBFT_TYPE_INITIATOR = 2, > - ACPI_IBFT_TYPE_NIC = 3, > - ACPI_IBFT_TYPE_TARGET = 4, > - ACPI_IBFT_TYPE_EXTENSIONS = 5, > - ACPI_IBFT_TYPE_RESERVED = 6 /* 6 and greater are reserved */ > + ACPI_MADT_TYPE_LOCAL_APIC = 0, > + ACPI_MADT_TYPE_IO_APIC = 1, > + ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, > + ACPI_MADT_TYPE_NMI_SOURCE = 3, > + ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, > + ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, > + ACPI_MADT_TYPE_IO_SAPIC = 6, > + ACPI_MADT_TYPE_LOCAL_SAPIC = 7, > + ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, > + ACPI_MADT_TYPE_LOCAL_X2APIC = 9, > + ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, > + ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, > + ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, > + ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13, > + ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14, > + ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15, > + ACPI_MADT_TYPE_RESERVED = 16 /* 16 and greater are reserved */ > }; > > > -/* IBFT subtables */ > - > -typedef struct acpi_ibft_control > -{ > - ACPI_IBFT_HEADER Header; > - UINT16 Extensions; > - UINT16 InitiatorOffset; > - UINT16 Nic0Offset; > - UINT16 Target0Offset; > - UINT16 Nic1Offset; > - UINT16 Target1Offset; > - > -} ACPI_IBFT_CONTROL; > - > -typedef struct acpi_ibft_initiator > -{ > - ACPI_IBFT_HEADER Header; > - UINT8 SnsServer[16]; > - UINT8 SlpServer[16]; > - UINT8 PrimaryServer[16]; > - UINT8 SecondaryServer[16]; > - UINT16 NameLength; > - UINT16 NameOffset; > - > -} ACPI_IBFT_INITIATOR; > - > -typedef struct acpi_ibft_nic > -{ > - ACPI_IBFT_HEADER Header; > - UINT8 IpAddress[16]; > - UINT8 SubnetMaskPrefix; > - UINT8 Origin; > - UINT8 Gateway[16]; > - UINT8 PrimaryDns[16]; > - UINT8 SecondaryDns[16]; > - UINT8 Dhcp[16]; > - UINT16 Vlan; > - UINT8 MacAddress[6]; > - UINT16 PciAddress; > - UINT16 NameLength; > - UINT16 NameOffset; > - > -} ACPI_IBFT_NIC; > - > -typedef struct acpi_ibft_target > -{ > - ACPI_IBFT_HEADER Header; > - UINT8 TargetIpAddress[16]; > - UINT16 TargetIpSocket; > - UINT8 TargetBootLun[8]; > - UINT8 ChapType; > - UINT8 NicAssociation; > - UINT16 TargetNameLength; > - UINT16 TargetNameOffset; > - UINT16 ChapNameLength; > - UINT16 ChapNameOffset; > - UINT16 ChapSecretLength; > - UINT16 ChapSecretOffset; > - UINT16 ReverseChapNameLength; > - UINT16 ReverseChapNameOffset; > - UINT16 ReverseChapSecretLength; > - UINT16 ReverseChapSecretOffset; > - > -} ACPI_IBFT_TARGET; > - > +/* > + * MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER > + */ > > -/******************************************************************************* > - * > - * IORT - IO Remapping Table > - * > - * Conforms to "IO Remapping Table System Software on ARM Platforms", > - * Document number: ARM DEN 0049C, May 2017 > - * > - ******************************************************************************/ > +/* 0: Processor Local APIC */ > > -typedef struct acpi_table_iort > +typedef struct acpi_madt_local_apic > { > - ACPI_TABLE_HEADER Header; > - UINT32 NodeCount; > - UINT32 NodeOffset; > - UINT32 Reserved; > + ACPI_SUBTABLE_HEADER Header; > + UINT8 ProcessorId; /* ACPI processor id */ > + UINT8 Id; /* Processor's local APIC id */ > + UINT32 LapicFlags; > > -} ACPI_TABLE_IORT; > +} ACPI_MADT_LOCAL_APIC; > > > -/* > - * IORT subtables > - */ > -typedef struct acpi_iort_node > +/* 1: IO APIC */ > + > +typedef struct acpi_madt_io_apic > { > - UINT8 Type; > - UINT16 Length; > - UINT8 Revision; > - UINT32 Reserved; > - UINT32 MappingCount; > - UINT32 MappingOffset; > - char NodeData[1]; > + ACPI_SUBTABLE_HEADER Header; > + UINT8 Id; /* I/O APIC ID */ > + UINT8 Reserved; /* Reserved - must be zero */ > + UINT32 Address; /* APIC physical address */ > + UINT32 GlobalIrqBase; /* Global system interrupt where INTI lines start */ > > -} ACPI_IORT_NODE; > +} ACPI_MADT_IO_APIC; > > -/* Values for subtable Type above */ > > -enum AcpiIortNodeType > +/* 2: Interrupt Override */ > + > +typedef struct acpi_madt_interrupt_override > { > - ACPI_IORT_NODE_ITS_GROUP = 0x00, > - ACPI_IORT_NODE_NAMED_COMPONENT = 0x01, > - ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02, > - ACPI_IORT_NODE_SMMU = 0x03, > - ACPI_IORT_NODE_SMMU_V3 = 0x04 > -}; > + ACPI_SUBTABLE_HEADER Header; > + UINT8 Bus; /* 0 - ISA */ > + UINT8 SourceIrq; /* Interrupt source (IRQ) */ > + UINT32 GlobalIrq; /* Global system interrupt */ > + UINT16 IntiFlags; > > +} ACPI_MADT_INTERRUPT_OVERRIDE; > > -typedef struct acpi_iort_id_mapping > -{ > - UINT32 InputBase; /* Lowest value in input range */ > - UINT32 IdCount; /* Number of IDs */ > - UINT32 OutputBase; /* Lowest value in output range */ > - UINT32 OutputReference; /* A reference to the output node */ > - UINT32 Flags; > > -} ACPI_IORT_ID_MAPPING; > +/* 3: NMI Source */ > > -/* Masks for Flags field above for IORT subtable */ > +typedef struct acpi_madt_nmi_source > +{ > + ACPI_SUBTABLE_HEADER Header; > + UINT16 IntiFlags; > + UINT32 GlobalIrq; /* Global system interrupt */ > > -#define ACPI_IORT_ID_SINGLE_MAPPING (1) > +} ACPI_MADT_NMI_SOURCE; > > > -typedef struct acpi_iort_memory_access > -{ > - UINT32 CacheCoherency; > - UINT8 Hints; > - UINT16 Reserved; > - UINT8 MemoryFlags; > +/* 4: Local APIC NMI */ > > -} ACPI_IORT_MEMORY_ACCESS; > +typedef struct acpi_madt_local_apic_nmi > +{ > + ACPI_SUBTABLE_HEADER Header; > + UINT8 ProcessorId; /* ACPI processor id */ > + UINT16 IntiFlags; > + UINT8 Lint; /* LINTn to which NMI is connected */ > > -/* Values for CacheCoherency field above */ > +} ACPI_MADT_LOCAL_APIC_NMI; > > -#define ACPI_IORT_NODE_COHERENT 0x00000001 /* The device node is fully coherent */ > -#define ACPI_IORT_NODE_NOT_COHERENT 0x00000000 /* The device node is not coherent */ > > -/* Masks for Hints field above */ > +/* 5: Address Override */ > > -#define ACPI_IORT_HT_TRANSIENT (1) > -#define ACPI_IORT_HT_WRITE (1<<1) > -#define ACPI_IORT_HT_READ (1<<2) > -#define ACPI_IORT_HT_OVERRIDE (1<<3) > +typedef struct acpi_madt_local_apic_override > +{ > + ACPI_SUBTABLE_HEADER Header; > + UINT16 Reserved; /* Reserved, must be zero */ > + UINT64 Address; /* APIC physical address */ > > -/* Masks for MemoryFlags field above */ > +} ACPI_MADT_LOCAL_APIC_OVERRIDE; > > -#define ACPI_IORT_MF_COHERENCY (1) > -#define ACPI_IORT_MF_ATTRIBUTES (1<<1) > > +/* 6: I/O Sapic */ > > -/* > - * IORT node specific subtables > - */ > -typedef struct acpi_iort_its_group > +typedef struct acpi_madt_io_sapic > { > - UINT32 ItsCount; > - UINT32 Identifiers[1]; /* GIC ITS identifier arrary */ > + ACPI_SUBTABLE_HEADER Header; > + UINT8 Id; /* I/O SAPIC ID */ > + UINT8 Reserved; /* Reserved, must be zero */ > + UINT32 GlobalIrqBase; /* Global interrupt for SAPIC start */ > + UINT64 Address; /* SAPIC physical address */ > > -} ACPI_IORT_ITS_GROUP; > +} ACPI_MADT_IO_SAPIC; > > > -typedef struct acpi_iort_named_component > +/* 7: Local Sapic */ > + > +typedef struct acpi_madt_local_sapic > { > - UINT32 NodeFlags; > - UINT64 MemoryProperties; /* Memory access properties */ > - UINT8 MemoryAddressLimit; /* Memory address size limit */ > - char DeviceName[1]; /* Path of namespace object */ > + ACPI_SUBTABLE_HEADER Header; > + UINT8 ProcessorId; /* ACPI processor id */ > + UINT8 Id; /* SAPIC ID */ > + UINT8 Eid; /* SAPIC EID */ > + UINT8 Reserved[3]; /* Reserved, must be zero */ > + UINT32 LapicFlags; > + UINT32 Uid; /* Numeric UID - ACPI 3.0 */ > + char UidString[1]; /* String UID - ACPI 3.0 */ > > -} ACPI_IORT_NAMED_COMPONENT; > +} ACPI_MADT_LOCAL_SAPIC; > > > -typedef struct acpi_iort_root_complex > +/* 8: Platform Interrupt Source */ > + > +typedef struct acpi_madt_interrupt_source > { > - UINT64 MemoryProperties; /* Memory access properties */ > - UINT32 AtsAttribute; > - UINT32 PciSegmentNumber; > + ACPI_SUBTABLE_HEADER Header; > + UINT16 IntiFlags; > + UINT8 Type; /* 1=PMI, 2=INIT, 3=corrected */ > + UINT8 Id; /* Processor ID */ > + UINT8 Eid; /* Processor EID */ > + UINT8 IoSapicVector; /* Vector value for PMI interrupts */ > + UINT32 GlobalIrq; /* Global system interrupt */ > + UINT32 Flags; /* Interrupt Source Flags */ > > -} ACPI_IORT_ROOT_COMPLEX; > +} ACPI_MADT_INTERRUPT_SOURCE; > > -/* Values for AtsAttribute field above */ > +/* Masks for Flags field above */ > > -#define ACPI_IORT_ATS_SUPPORTED 0x00000001 /* The root complex supports ATS */ > -#define ACPI_IORT_ATS_UNSUPPORTED 0x00000000 /* The root complex doesn't support ATS */ > +#define ACPI_MADT_CPEI_OVERRIDE (1) > > > -typedef struct acpi_iort_smmu > +/* 9: Processor Local X2APIC (ACPI 4.0) */ > + > +typedef struct acpi_madt_local_x2apic > { > - UINT64 BaseAddress; /* SMMU base address */ > - UINT64 Span; /* Length of memory range */ > - UINT32 Model; > - UINT32 Flags; > - UINT32 GlobalInterruptOffset; > - UINT32 ContextInterruptCount; > - UINT32 ContextInterruptOffset; > - UINT32 PmuInterruptCount; > - UINT32 PmuInterruptOffset; > - UINT64 Interrupts[1]; /* Interrupt array */ > + ACPI_SUBTABLE_HEADER Header; > + UINT16 Reserved; /* Reserved - must be zero */ > + UINT32 LocalApicId; /* Processor x2APIC ID */ > + UINT32 LapicFlags; > + UINT32 Uid; /* ACPI processor UID */ > > -} ACPI_IORT_SMMU; > +} ACPI_MADT_LOCAL_X2APIC; > > -/* Values for Model field above */ > > -#define ACPI_IORT_SMMU_V1 0x00000000 /* Generic SMMUv1 */ > -#define ACPI_IORT_SMMU_V2 0x00000001 /* Generic SMMUv2 */ > -#define ACPI_IORT_SMMU_CORELINK_MMU400 0x00000002 /* ARM Corelink MMU-400 */ > -#define ACPI_IORT_SMMU_CORELINK_MMU500 0x00000003 /* ARM Corelink MMU-500 */ > -#define ACPI_IORT_SMMU_CORELINK_MMU401 0x00000004 /* ARM Corelink MMU-401 */ > -#define ACPI_IORT_SMMU_CAVIUM_THUNDERX 0x00000005 /* Cavium ThunderX SMMUv2 */ > +/* 10: Local X2APIC NMI (ACPI 4.0) */ > + > +typedef struct acpi_madt_local_x2apic_nmi > +{ > + ACPI_SUBTABLE_HEADER Header; > + UINT16 IntiFlags; > + UINT32 Uid; /* ACPI processor UID */ > + UINT8 Lint; /* LINTn to which NMI is connected */ > + UINT8 Reserved[3]; /* Reserved - must be zero */ > + > +} ACPI_MADT_LOCAL_X2APIC_NMI; > + > + > +/* 11: Generic Interrupt (ACPI 5.0 + ACPI 6.0 changes) */ > + > +typedef struct acpi_madt_generic_interrupt > +{ > + ACPI_SUBTABLE_HEADER Header; > + UINT16 Reserved; /* Reserved - must be zero */ > + UINT32 CpuInterfaceNumber; > + UINT32 Uid; > + UINT32 Flags; > + UINT32 ParkingVersion; > + UINT32 PerformanceInterrupt; > + UINT64 ParkedAddress; > + UINT64 BaseAddress; > + UINT64 GicvBaseAddress; > + UINT64 GichBaseAddress; > + UINT32 VgicInterrupt; > + UINT64 GicrBaseAddress; > + UINT64 ArmMpidr; > + UINT8 EfficiencyClass; > + UINT8 Reserved2[3]; > + > +} ACPI_MADT_GENERIC_INTERRUPT; > > /* Masks for Flags field above */ > > -#define ACPI_IORT_SMMU_DVM_SUPPORTED (1) > -#define ACPI_IORT_SMMU_COHERENT_WALK (1<<1) > +/* ACPI_MADT_ENABLED (1) Processor is usable if set */ > +#define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */ > +#define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */ > > -/* Global interrupt format */ > > -typedef struct acpi_iort_smmu_gsi > +/* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */ > + > +typedef struct acpi_madt_generic_distributor > { > - UINT32 NSgIrpt; > - UINT32 NSgIrptFlags; > - UINT32 NSgCfgIrpt; > - UINT32 NSgCfgIrptFlags; > + ACPI_SUBTABLE_HEADER Header; > + UINT16 Reserved; /* Reserved - must be zero */ > + UINT32 GicId; > + UINT64 BaseAddress; > + UINT32 GlobalIrqBase; > + UINT8 Version; > + UINT8 Reserved2[3]; /* Reserved - must be zero */ > > -} ACPI_IORT_SMMU_GSI; > +} ACPI_MADT_GENERIC_DISTRIBUTOR; > > +/* Values for Version field above */ > > -typedef struct acpi_iort_smmu_v3 > +enum AcpiMadtGicVersion > { > - UINT64 BaseAddress; /* SMMUv3 base address */ > - UINT32 Flags; > - UINT32 Reserved; > - UINT64 VatosAddress; > - UINT32 Model; > - UINT32 EventGsiv; > - UINT32 PriGsiv; > - UINT32 GerrGsiv; > - UINT32 SyncGsiv; > - UINT8 Pxm; > - UINT8 Reserved1; > - UINT16 Reserved2; > - UINT32 IdMappingIndex; > + ACPI_MADT_GIC_VERSION_NONE = 0, > + ACPI_MADT_GIC_VERSION_V1 = 1, > + ACPI_MADT_GIC_VERSION_V2 = 2, > + ACPI_MADT_GIC_VERSION_V3 = 3, > + ACPI_MADT_GIC_VERSION_V4 = 4, > + ACPI_MADT_GIC_VERSION_RESERVED = 5 /* 5 and greater are reserved */ > +}; > > -} ACPI_IORT_SMMU_V3; > > -/* Values for Model field above */ > +/* 13: Generic MSI Frame (ACPI 5.1) */ > > -#define ACPI_IORT_SMMU_V3_GENERIC 0x00000000 /* Generic SMMUv3 */ > -#define ACPI_IORT_SMMU_V3_HISILICON_HI161X 0x00000001 /* HiSilicon Hi161x SMMUv3 */ > -#define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX 0x00000002 /* Cavium CN99xx SMMUv3 */ > +typedef struct acpi_madt_generic_msi_frame > +{ > + ACPI_SUBTABLE_HEADER Header; > + UINT16 Reserved; /* Reserved - must be zero */ > + UINT32 MsiFrameId; > + UINT64 BaseAddress; > + UINT32 Flags; > + UINT16 SpiCount; > + UINT16 SpiBase; > + > +} ACPI_MADT_GENERIC_MSI_FRAME; > > /* Masks for Flags field above */ > > -#define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE (1) > -#define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE (1<<1) > -#define ACPI_IORT_SMMU_V3_PXM_VALID (1<<3) > +#define ACPI_MADT_OVERRIDE_SPI_VALUES (1) > + > + > +/* 14: Generic Redistributor (ACPI 5.1) */ > + > +typedef struct acpi_madt_generic_redistributor > +{ > + ACPI_SUBTABLE_HEADER Header; > + UINT16 Reserved; /* reserved - must be zero */ > + UINT64 BaseAddress; > + UINT32 Length; > + > +} ACPI_MADT_GENERIC_REDISTRIBUTOR; > + > + > +/* 15: Generic Translator (ACPI 6.0) */ > + > +typedef struct acpi_madt_generic_translator > +{ > + ACPI_SUBTABLE_HEADER Header; > + UINT16 Reserved; /* reserved - must be zero */ > + UINT32 TranslationId; > + UINT64 BaseAddress; > + UINT32 Reserved2; > + > +} ACPI_MADT_GENERIC_TRANSLATOR; > + > + > +/* > + * Common flags fields for MADT subtables > + */ > + > +/* MADT Local APIC flags */ > + > +#define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ > + > +/* MADT MPS INTI flags (IntiFlags) */ > + > +#define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ > +#define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ > + > +/* Values for MPS INTI flags */ > + > +#define ACPI_MADT_POLARITY_CONFORMS 0 > +#define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 > +#define ACPI_MADT_POLARITY_RESERVED 2 > +#define ACPI_MADT_POLARITY_ACTIVE_LOW 3 > + > +#define ACPI_MADT_TRIGGER_CONFORMS (0) > +#define ACPI_MADT_TRIGGER_EDGE (1<<2) > +#define ACPI_MADT_TRIGGER_RESERVED (2<<2) > +#define ACPI_MADT_TRIGGER_LEVEL (3<<2) > > > /******************************************************************************* > * > - * IVRS - I/O Virtualization Reporting Structure > + * MCFG - PCI Memory Mapped Configuration table and subtable > * Version 1 > * > - * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification", > - * Revision 1.26, February 2009. > + * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005 > * > ******************************************************************************/ > > -typedef struct acpi_table_ivrs > +typedef struct acpi_table_mcfg > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT32 Info; /* Common virtualization info */ > - UINT64 Reserved; > + UINT8 Reserved[8]; > > -} ACPI_TABLE_IVRS; > +} ACPI_TABLE_MCFG; > > -/* Values for Info field above */ > > -#define ACPI_IVRS_PHYSICAL_SIZE 0x00007F00 /* 7 bits, physical address size */ > -#define ACPI_IVRS_VIRTUAL_SIZE 0x003F8000 /* 7 bits, virtual address size */ > -#define ACPI_IVRS_ATS_RESERVED 0x00400000 /* ATS address translation range reserved */ > +/* Subtable */ > > +typedef struct acpi_mcfg_allocation > +{ > + UINT64 Address; /* Base address, processor-relative */ > + UINT16 PciSegment; /* PCI segment group number */ > + UINT8 StartBusNumber; /* Starting PCI Bus number */ > + UINT8 EndBusNumber; /* Final PCI Bus number */ > + UINT32 Reserved; > > -/* IVRS subtable header */ > +} ACPI_MCFG_ALLOCATION; > > -typedef struct acpi_ivrs_header > + > +/******************************************************************************* > + * > + * MCHI - Management Controller Host Interface Table > + * Version 1 > + * > + * Conforms to "Management Component Transport Protocol (MCTP) Host > + * Interface Specification", Revision 1.0.0a, October 13, 2009 > + * > + ******************************************************************************/ > + > +typedef struct acpi_table_mchi > { > - UINT8 Type; /* Subtable type */ > - UINT8 Flags; > - UINT16 Length; /* Subtable length */ > - UINT16 DeviceId; /* ID of IOMMU */ > + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > + UINT8 InterfaceType; > + UINT8 Protocol; > + UINT64 ProtocolData; > + UINT8 InterruptType; > + UINT8 Gpe; > + UINT8 PciDeviceFlag; > + UINT32 GlobalInterrupt; > + ACPI_GENERIC_ADDRESS ControlRegister; > + UINT8 PciSegment; > + UINT8 PciBus; > + UINT8 PciDevice; > + UINT8 PciFunction; > > -} ACPI_IVRS_HEADER; > +} ACPI_TABLE_MCHI; > > -/* Values for subtable Type above */ > > -enum AcpiIvrsType > +/******************************************************************************* > + * > + * MPST - Memory Power State Table (ACPI 5.0) > + * Version 1 > + * > + ******************************************************************************/ > + > +#define ACPI_MPST_CHANNEL_INFO \ > + UINT8 ChannelId; \ > + UINT8 Reserved1[3]; \ > + UINT16 PowerNodeCount; \ > + UINT16 Reserved2; > + > +/* Main table */ > + > +typedef struct acpi_table_mpst > { > - ACPI_IVRS_TYPE_HARDWARE = 0x10, > - ACPI_IVRS_TYPE_MEMORY1 = 0x20, > - ACPI_IVRS_TYPE_MEMORY2 = 0x21, > - ACPI_IVRS_TYPE_MEMORY3 = 0x22 > -}; > + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > + ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ > > -/* Masks for Flags field above for IVHD subtable */ > +} ACPI_TABLE_MPST; > > -#define ACPI_IVHD_TT_ENABLE (1) > -#define ACPI_IVHD_PASS_PW (1<<1) > -#define ACPI_IVHD_RES_PASS_PW (1<<2) > -#define ACPI_IVHD_ISOC (1<<3) > -#define ACPI_IVHD_IOTLB (1<<4) > > -/* Masks for Flags field above for IVMD subtable */ > +/* Memory Platform Communication Channel Info */ > > -#define ACPI_IVMD_UNITY (1) > -#define ACPI_IVMD_READ (1<<1) > -#define ACPI_IVMD_WRITE (1<<2) > -#define ACPI_IVMD_EXCLUSION_RANGE (1<<3) > +typedef struct acpi_mpst_channel > +{ > + ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ > > +} ACPI_MPST_CHANNEL; > > -/* > - * IVRS subtables, correspond to Type in ACPI_IVRS_HEADER > - */ > > -/* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */ > +/* Memory Power Node Structure */ > > -typedef struct acpi_ivrs_hardware > +typedef struct acpi_mpst_power_node > { > - ACPI_IVRS_HEADER Header; > - UINT16 CapabilityOffset; /* Offset for IOMMU control fields */ > - UINT64 BaseAddress; /* IOMMU control registers */ > - UINT16 PciSegmentGroup; > - UINT16 Info; /* MSI number and unit ID */ > - UINT32 Reserved; > + UINT8 Flags; > + UINT8 Reserved1; > + UINT16 NodeId; > + UINT32 Length; > + UINT64 RangeAddress; > + UINT64 RangeLength; > + UINT32 NumPowerStates; > + UINT32 NumPhysicalComponents; > > -} ACPI_IVRS_HARDWARE; > +} ACPI_MPST_POWER_NODE; > > -/* Masks for Info field above */ > +/* Values for Flags field above */ > > -#define ACPI_IVHD_MSI_NUMBER_MASK 0x001F /* 5 bits, MSI message number */ > -#define ACPI_IVHD_UNIT_ID_MASK 0x1F00 /* 5 bits, UnitID */ > +#define ACPI_MPST_ENABLED 1 > +#define ACPI_MPST_POWER_MANAGED 2 > +#define ACPI_MPST_HOT_PLUG_CAPABLE 4 > > > -/* > - * Device Entries for IVHD subtable, appear after ACPI_IVRS_HARDWARE structure. > - * Upper two bits of the Type field are the (encoded) length of the structure. > - * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries > - * are reserved for future use but not defined. > - */ > -typedef struct acpi_ivrs_de_header > +/* Memory Power State Structure (follows POWER_NODE above) */ > + > +typedef struct acpi_mpst_power_state > { > - UINT8 Type; > - UINT16 Id; > - UINT8 DataSetting; > + UINT8 PowerState; > + UINT8 InfoIndex; > > -} ACPI_IVRS_DE_HEADER; > +} ACPI_MPST_POWER_STATE; > > -/* Length of device entry is in the top two bits of Type field above */ > > -#define ACPI_IVHD_ENTRY_LENGTH 0xC0 > +/* Physical Component ID Structure (follows POWER_STATE above) */ > > -/* Values for device entry Type field above */ > +typedef struct acpi_mpst_component > +{ > + UINT16 ComponentId; > > -enum AcpiIvrsDeviceEntryType > +} ACPI_MPST_COMPONENT; > + > + > +/* Memory Power State Characteristics Structure (follows all POWER_NODEs) */ > + > +typedef struct acpi_mpst_data_hdr > { > - /* 4-byte device entries, all use ACPI_IVRS_DEVICE4 */ > + UINT16 CharacteristicsCount; > + UINT16 Reserved; > > - ACPI_IVRS_TYPE_PAD4 = 0, > - ACPI_IVRS_TYPE_ALL = 1, > - ACPI_IVRS_TYPE_SELECT = 2, > - ACPI_IVRS_TYPE_START = 3, > - ACPI_IVRS_TYPE_END = 4, > +} ACPI_MPST_DATA_HDR; > > - /* 8-byte device entries */ > +typedef struct acpi_mpst_power_data > +{ > + UINT8 StructureId; > + UINT8 Flags; > + UINT16 Reserved1; > + UINT32 AveragePower; > + UINT32 PowerSaving; > + UINT64 ExitLatency; > + UINT64 Reserved2; > > - ACPI_IVRS_TYPE_PAD8 = 64, > - ACPI_IVRS_TYPE_NOT_USED = 65, > - ACPI_IVRS_TYPE_ALIAS_SELECT = 66, /* Uses ACPI_IVRS_DEVICE8A */ > - ACPI_IVRS_TYPE_ALIAS_START = 67, /* Uses ACPI_IVRS_DEVICE8A */ > - ACPI_IVRS_TYPE_EXT_SELECT = 70, /* Uses ACPI_IVRS_DEVICE8B */ > - ACPI_IVRS_TYPE_EXT_START = 71, /* Uses ACPI_IVRS_DEVICE8B */ > - ACPI_IVRS_TYPE_SPECIAL = 72 /* Uses ACPI_IVRS_DEVICE8C */ > -}; > +} ACPI_MPST_POWER_DATA; > > -/* Values for Data field above */ > +/* Values for Flags field above */ > > -#define ACPI_IVHD_INIT_PASS (1) > -#define ACPI_IVHD_EINT_PASS (1<<1) > -#define ACPI_IVHD_NMI_PASS (1<<2) > -#define ACPI_IVHD_SYSTEM_MGMT (3<<4) > -#define ACPI_IVHD_LINT0_PASS (1<<6) > -#define ACPI_IVHD_LINT1_PASS (1<<7) > +#define ACPI_MPST_PRESERVE 1 > +#define ACPI_MPST_AUTOENTRY 2 > +#define ACPI_MPST_AUTOEXIT 4 > > > -/* Types 0-4: 4-byte device entry */ > +/* Shared Memory Region (not part of an ACPI table) */ > > -typedef struct acpi_ivrs_device4 > +typedef struct acpi_mpst_shared > { > - ACPI_IVRS_DE_HEADER Header; > + UINT32 Signature; > + UINT16 PccCommand; > + UINT16 PccStatus; > + UINT32 CommandRegister; > + UINT32 StatusRegister; > + UINT32 PowerStateId; > + UINT32 PowerNodeId; > + UINT64 EnergyConsumed; > + UINT64 AveragePower; > > -} ACPI_IVRS_DEVICE4; > +} ACPI_MPST_SHARED; > > -/* Types 66-67: 8-byte device entry */ > > -typedef struct acpi_ivrs_device8a > +/******************************************************************************* > + * > + * MSCT - Maximum System Characteristics Table (ACPI 4.0) > + * Version 1 > + * > + ******************************************************************************/ > + > +typedef struct acpi_table_msct > { > - ACPI_IVRS_DE_HEADER Header; > - UINT8 Reserved1; > - UINT16 UsedId; > - UINT8 Reserved2; > + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > + UINT32 ProximityOffset; /* Location of proximity info struct(s) */ > + UINT32 MaxProximityDomains;/* Max number of proximity domains */ > + UINT32 MaxClockDomains; /* Max number of clock domains */ > + UINT64 MaxAddress; /* Max physical address in system */ > > -} ACPI_IVRS_DEVICE8A; > +} ACPI_TABLE_MSCT; > > -/* Types 70-71: 8-byte device entry */ > > -typedef struct acpi_ivrs_device8b > +/* Subtable - Maximum Proximity Domain Information. Version 1 */ > + > +typedef struct acpi_msct_proximity > { > - ACPI_IVRS_DE_HEADER Header; > - UINT32 ExtendedData; > + UINT8 Revision; > + UINT8 Length; > + UINT32 RangeStart; /* Start of domain range */ > + UINT32 RangeEnd; /* End of domain range */ > + UINT32 ProcessorCapacity; > + UINT64 MemoryCapacity; /* In bytes */ > > -} ACPI_IVRS_DEVICE8B; > +} ACPI_MSCT_PROXIMITY; > > -/* Values for ExtendedData above */ > > -#define ACPI_IVHD_ATS_DISABLED (1<<31) > +/******************************************************************************* > + * > + * MSDM - Microsoft Data Management table > + * > + * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", > + * November 29, 2011. Copyright 2011 Microsoft > + * > + ******************************************************************************/ > > -/* Type 72: 8-byte device entry */ > +/* Basic MSDM table is only the common ACPI header */ > > -typedef struct acpi_ivrs_device8c > +typedef struct acpi_table_msdm > { > - ACPI_IVRS_DE_HEADER Header; > - UINT8 Handle; > - UINT16 UsedId; > - UINT8 Variety; > + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > > -} ACPI_IVRS_DEVICE8C; > +} ACPI_TABLE_MSDM; > > -/* Values for Variety field above */ > > -#define ACPI_IVHD_IOAPIC 1 > -#define ACPI_IVHD_HPET 2 > +/******************************************************************************* > + * > + * MTMR - MID Timer Table > + * Version 1 > + * > + * Conforms to "Simple Firmware Interface Specification", > + * Draft 0.8.2, Oct 19, 2010 > + * NOTE: The ACPI MTMR is equivalent to the SFI MTMR table. > + * > + ******************************************************************************/ > + > +typedef struct acpi_table_mtmr > +{ > + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > > +} ACPI_TABLE_MTMR; > > -/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */ > +/* MTMR entry */ > > -typedef struct acpi_ivrs_memory > +typedef struct acpi_mtmr_entry > { > - ACPI_IVRS_HEADER Header; > - UINT16 AuxData; > - UINT64 Reserved; > - UINT64 StartAddress; > - UINT64 MemoryLength; > + ACPI_GENERIC_ADDRESS PhysicalAddress; > + UINT32 Frequency; > + UINT32 Irq; > > -} ACPI_IVRS_MEMORY; > +} ACPI_MTMR_ENTRY; > > > /******************************************************************************* > * > - * LPIT - Low Power Idle Table > - * > - * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014. > + * NFIT - NVDIMM Interface Table (ACPI 6.0+) > + * Version 1 > * > ******************************************************************************/ > > -typedef struct acpi_table_lpit > +typedef struct acpi_table_nfit > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > + UINT32 Reserved; /* Reserved, must be zero */ > > -} ACPI_TABLE_LPIT; > - > +} ACPI_TABLE_NFIT; > > -/* LPIT subtable header */ > +/* Subtable header for NFIT */ > > -typedef struct acpi_lpit_header > +typedef struct acpi_nfit_header > { > - UINT32 Type; /* Subtable type */ > - UINT32 Length; /* Subtable length */ > - UINT16 UniqueId; > - UINT16 Reserved; > - UINT32 Flags; > + UINT16 Type; > + UINT16 Length; > > -} ACPI_LPIT_HEADER; > +} ACPI_NFIT_HEADER; > > -/* Values for subtable Type above */ > > -enum AcpiLpitType > +/* Values for subtable type in ACPI_NFIT_HEADER */ > + > +enum AcpiNfitType > { > - ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00, > - ACPI_LPIT_TYPE_RESERVED = 0x01 /* 1 and above are reserved */ > + ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0, > + ACPI_NFIT_TYPE_MEMORY_MAP = 1, > + ACPI_NFIT_TYPE_INTERLEAVE = 2, > + ACPI_NFIT_TYPE_SMBIOS = 3, > + ACPI_NFIT_TYPE_CONTROL_REGION = 4, > + ACPI_NFIT_TYPE_DATA_REGION = 5, > + ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6, > + ACPI_NFIT_TYPE_CAPABILITIES = 7, > + ACPI_NFIT_TYPE_RESERVED = 8 /* 8 and greater are reserved */ > }; > > -/* Masks for Flags field above */ > - > -#define ACPI_LPIT_STATE_DISABLED (1) > -#define ACPI_LPIT_NO_COUNTER (1<<1) > - > /* > - * LPIT subtables, correspond to Type in ACPI_LPIT_HEADER > + * NFIT Subtables > */ > > -/* 0x00: Native C-state instruction based LPI structure */ > +/* 0: System Physical Address Range Structure */ > > -typedef struct acpi_lpit_native > +typedef struct acpi_nfit_system_address > { > - ACPI_LPIT_HEADER Header; > - ACPI_GENERIC_ADDRESS EntryTrigger; > - UINT32 Residency; > - UINT32 Latency; > - ACPI_GENERIC_ADDRESS ResidencyCounter; > - UINT64 CounterFrequency; > + ACPI_NFIT_HEADER Header; > + UINT16 RangeIndex; > + UINT16 Flags; > + UINT32 Reserved; /* Reserved, must be zero */ > + UINT32 ProximityDomain; > + UINT8 RangeGuid[16]; > + UINT64 Address; > + UINT64 Length; > + UINT64 MemoryMapping; > > -} ACPI_LPIT_NATIVE; > +} ACPI_NFIT_SYSTEM_ADDRESS; > > +/* Flags */ > > -/******************************************************************************* > - * > - * MCFG - PCI Memory Mapped Configuration table and subtable > - * Version 1 > - * > - * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005 > - * > - ******************************************************************************/ > +#define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */ > +#define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */ > > -typedef struct acpi_table_mcfg > +/* Range Type GUIDs appear in the include/acuuid.h file */ > + > + > +/* 1: Memory Device to System Address Range Map Structure */ > + > +typedef struct acpi_nfit_memory_map > { > - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT8 Reserved[8]; > + ACPI_NFIT_HEADER Header; > + UINT32 DeviceHandle; > + UINT16 PhysicalId; > + UINT16 RegionId; > + UINT16 RangeIndex; > + UINT16 RegionIndex; > + UINT64 RegionSize; > + UINT64 RegionOffset; > + UINT64 Address; > + UINT16 InterleaveIndex; > + UINT16 InterleaveWays; > + UINT16 Flags; > + UINT16 Reserved; /* Reserved, must be zero */ > > -} ACPI_TABLE_MCFG; > +} ACPI_NFIT_MEMORY_MAP; > > +/* Flags */ > > -/* Subtable */ > +#define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */ > +#define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */ > +#define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */ > +#define ACPI_NFIT_MEM_NOT_ARMED (1<<3) /* 03: Memory Device is not armed */ > +#define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */ > +#define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */ > +#define ACPI_NFIT_MEM_MAP_FAILED (1<<6) /* 06: Mapping to SPA failed */ > > -typedef struct acpi_mcfg_allocation > + > +/* 2: Interleave Structure */ > + > +typedef struct acpi_nfit_interleave > { > - UINT64 Address; /* Base address, processor-relative */ > - UINT16 PciSegment; /* PCI segment group number */ > - UINT8 StartBusNumber; /* Starting PCI Bus number */ > - UINT8 EndBusNumber; /* Final PCI Bus number */ > - UINT32 Reserved; > + ACPI_NFIT_HEADER Header; > + UINT16 InterleaveIndex; > + UINT16 Reserved; /* Reserved, must be zero */ > + UINT32 LineCount; > + UINT32 LineSize; > + UINT32 LineOffset[1]; /* Variable length */ > > -} ACPI_MCFG_ALLOCATION; > +} ACPI_NFIT_INTERLEAVE; > + > + > +/* 3: SMBIOS Management Information Structure */ > + > +typedef struct acpi_nfit_smbios > +{ > + ACPI_NFIT_HEADER Header; > + UINT32 Reserved; /* Reserved, must be zero */ > + UINT8 Data[1]; /* Variable length */ > + > +} ACPI_NFIT_SMBIOS; > + > + > +/* 4: NVDIMM Control Region Structure */ > + > +typedef struct acpi_nfit_control_region > +{ > + ACPI_NFIT_HEADER Header; > + UINT16 RegionIndex; > + UINT16 VendorId; > + UINT16 DeviceId; > + UINT16 RevisionId; > + UINT16 SubsystemVendorId; > + UINT16 SubsystemDeviceId; > + UINT16 SubsystemRevisionId; > + UINT8 ValidFields; > + UINT8 ManufacturingLocation; > + UINT16 ManufacturingDate; > + UINT8 Reserved[2]; /* Reserved, must be zero */ > + UINT32 SerialNumber; > + UINT16 Code; > + UINT16 Windows; > + UINT64 WindowSize; > + UINT64 CommandOffset; > + UINT64 CommandSize; > + UINT64 StatusOffset; > + UINT64 StatusSize; > + UINT16 Flags; > + UINT8 Reserved1[6]; /* Reserved, must be zero */ > + > +} ACPI_NFIT_CONTROL_REGION; > + > +/* Flags */ > + > +#define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */ > + > +/* ValidFields bits */ > + > +#define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1) /* Manufacturing fields are valid */ > + > + > +/* 5: NVDIMM Block Data Window Region Structure */ > + > +typedef struct acpi_nfit_data_region > +{ > + ACPI_NFIT_HEADER Header; > + UINT16 RegionIndex; > + UINT16 Windows; > + UINT64 Offset; > + UINT64 Size; > + UINT64 Capacity; > + UINT64 StartAddress; > + > +} ACPI_NFIT_DATA_REGION; > + > + > +/* 6: Flush Hint Address Structure */ > + > +typedef struct acpi_nfit_flush_address > +{ > + ACPI_NFIT_HEADER Header; > + UINT32 DeviceHandle; > + UINT16 HintCount; > + UINT8 Reserved[6]; /* Reserved, must be zero */ > + UINT64 HintAddress[1]; /* Variable length */ > + > +} ACPI_NFIT_FLUSH_ADDRESS; > + > + > +/* 7: Platform Capabilities Structure */ > + > +typedef struct acpi_nfit_capabilities > +{ > + ACPI_NFIT_HEADER Header; > + UINT8 HighestCapability; > + UINT8 Reserved[3]; /* Reserved, must be zero */ > + UINT32 Capabilities; > + UINT32 Reserved2; > + > +} ACPI_NFIT_CAPABILITIES; > + > +/* Capabilities Flags */ > + > +#define ACPI_NFIT_CAPABILITY_CACHE_FLUSH (1) /* 00: Cache Flush to NVDIMM capable */ > +#define ACPI_NFIT_CAPABILITY_MEM_FLUSH (1<<1) /* 01: Memory Flush to NVDIMM capable */ > +#define ACPI_NFIT_CAPABILITY_MEM_MIRRORING (1<<2) /* 02: Memory Mirroring capable */ > + > + > +/* > + * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM > + */ > +typedef struct nfit_device_handle > +{ > + UINT32 Handle; > + > +} NFIT_DEVICE_HANDLE; > + > +/* Device handle construction and extraction macros */ > + > +#define ACPI_NFIT_DIMM_NUMBER_MASK 0x0000000F > +#define ACPI_NFIT_CHANNEL_NUMBER_MASK 0x000000F0 > +#define ACPI_NFIT_MEMORY_ID_MASK 0x00000F00 > +#define ACPI_NFIT_SOCKET_ID_MASK 0x0000F000 > +#define ACPI_NFIT_NODE_ID_MASK 0x0FFF0000 > + > +#define ACPI_NFIT_DIMM_NUMBER_OFFSET 0 > +#define ACPI_NFIT_CHANNEL_NUMBER_OFFSET 4 > +#define ACPI_NFIT_MEMORY_ID_OFFSET 8 > +#define ACPI_NFIT_SOCKET_ID_OFFSET 12 > +#define ACPI_NFIT_NODE_ID_OFFSET 16 > + > +/* Macro to construct a NFIT/NVDIMM device handle */ > + > +#define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \ > + ((dimm) | \ > + ((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET) | \ > + ((memory) << ACPI_NFIT_MEMORY_ID_OFFSET) | \ > + ((socket) << ACPI_NFIT_SOCKET_ID_OFFSET) | \ > + ((node) << ACPI_NFIT_NODE_ID_OFFSET)) > + > +/* Macros to extract individual fields from a NFIT/NVDIMM device handle */ > + > +#define ACPI_NFIT_GET_DIMM_NUMBER(handle) \ > + ((handle) & ACPI_NFIT_DIMM_NUMBER_MASK) > + > +#define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \ > + (((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET) > + > +#define ACPI_NFIT_GET_MEMORY_ID(handle) \ > + (((handle) & ACPI_NFIT_MEMORY_ID_MASK) >> ACPI_NFIT_MEMORY_ID_OFFSET) > + > +#define ACPI_NFIT_GET_SOCKET_ID(handle) \ > + (((handle) & ACPI_NFIT_SOCKET_ID_MASK) >> ACPI_NFIT_SOCKET_ID_OFFSET) > + > +#define ACPI_NFIT_GET_NODE_ID(handle) \ > + (((handle) & ACPI_NFIT_NODE_ID_MASK) >> ACPI_NFIT_NODE_ID_OFFSET) > > > /******************************************************************************* > * > - * MCHI - Management Controller Host Interface Table > - * Version 1 > - * > - * Conforms to "Management Component Transport Protocol (MCTP) Host > - * Interface Specification", Revision 1.0.0a, October 13, 2009 > + * PCCT - Platform Communications Channel Table (ACPI 5.0) > + * Version 2 (ACPI 6.2) > * > ******************************************************************************/ > > -typedef struct acpi_table_mchi > +typedef struct acpi_table_pcct > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT8 InterfaceType; > - UINT8 Protocol; > - UINT64 ProtocolData; > - UINT8 InterruptType; > - UINT8 Gpe; > - UINT8 PciDeviceFlag; > - UINT32 GlobalInterrupt; > - ACPI_GENERIC_ADDRESS ControlRegister; > - UINT8 PciSegment; > - UINT8 PciBus; > - UINT8 PciDevice; > - UINT8 PciFunction; > + UINT32 Flags; > + UINT64 Reserved; > > -} ACPI_TABLE_MCHI; > +} ACPI_TABLE_PCCT; > + > +/* Values for Flags field above */ > + > +#define ACPI_PCCT_DOORBELL 1 > + > +/* Values for subtable type in ACPI_SUBTABLE_HEADER */ > + > +enum AcpiPcctType > +{ > + ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0, > + ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1, > + ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */ > + ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3, /* ACPI 6.2 */ > + ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4, /* ACPI 6.2 */ > + ACPI_PCCT_TYPE_RESERVED = 5 /* 5 and greater are reserved */ > +}; > + > +/* > + * PCCT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER > + */ > + > +/* 0: Generic Communications Subspace */ > + > +typedef struct acpi_pcct_subspace > +{ > + ACPI_SUBTABLE_HEADER Header; > + UINT8 Reserved[6]; > + UINT64 BaseAddress; > + UINT64 Length; > + ACPI_GENERIC_ADDRESS DoorbellRegister; > + UINT64 PreserveMask; > + UINT64 WriteMask; > + UINT32 Latency; > + UINT32 MaxAccessRate; > + UINT16 MinTurnaroundTime; > > +} ACPI_PCCT_SUBSPACE; > > -/******************************************************************************* > - * > - * MSDM - Microsoft Data Management table > - * > - * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", > - * November 29, 2011. Copyright 2011 Microsoft > - * > - ******************************************************************************/ > > -/* Basic MSDM table is only the common ACPI header */ > +/* 1: HW-reduced Communications Subspace (ACPI 5.1) */ > > -typedef struct acpi_table_msdm > +typedef struct acpi_pcct_hw_reduced > { > - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > + ACPI_SUBTABLE_HEADER Header; > + UINT32 PlatformInterrupt; > + UINT8 Flags; > + UINT8 Reserved; > + UINT64 BaseAddress; > + UINT64 Length; > + ACPI_GENERIC_ADDRESS DoorbellRegister; > + UINT64 PreserveMask; > + UINT64 WriteMask; > + UINT32 Latency; > + UINT32 MaxAccessRate; > + UINT16 MinTurnaroundTime; > > -} ACPI_TABLE_MSDM; > +} ACPI_PCCT_HW_REDUCED; > > > -/******************************************************************************* > - * > - * MTMR - MID Timer Table > - * Version 1 > - * > - * Conforms to "Simple Firmware Interface Specification", > - * Draft 0.8.2, Oct 19, 2010 > - * NOTE: The ACPI MTMR is equivalent to the SFI MTMR table. > - * > - ******************************************************************************/ > +/* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */ > > -typedef struct acpi_table_mtmr > +typedef struct acpi_pcct_hw_reduced_type2 > { > - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > + ACPI_SUBTABLE_HEADER Header; > + UINT32 PlatformInterrupt; > + UINT8 Flags; > + UINT8 Reserved; > + UINT64 BaseAddress; > + UINT64 Length; > + ACPI_GENERIC_ADDRESS DoorbellRegister; > + UINT64 PreserveMask; > + UINT64 WriteMask; > + UINT32 Latency; > + UINT32 MaxAccessRate; > + UINT16 MinTurnaroundTime; > + ACPI_GENERIC_ADDRESS PlatformAckRegister; > + UINT64 AckPreserveMask; > + UINT64 AckWriteMask; > > -} ACPI_TABLE_MTMR; > +} ACPI_PCCT_HW_REDUCED_TYPE2; > > -/* MTMR entry */ > > -typedef struct acpi_mtmr_entry > +/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */ > + > +typedef struct acpi_pcct_ext_pcc_master > { > - ACPI_GENERIC_ADDRESS PhysicalAddress; > - UINT32 Frequency; > - UINT32 Irq; > + ACPI_SUBTABLE_HEADER Header; > + UINT32 PlatformInterrupt; > + UINT8 Flags; > + UINT8 Reserved1; > + UINT64 BaseAddress; > + UINT32 Length; > + ACPI_GENERIC_ADDRESS DoorbellRegister; > + UINT64 PreserveMask; > + UINT64 WriteMask; > + UINT32 Latency; > + UINT32 MaxAccessRate; > + UINT32 MinTurnaroundTime; > + ACPI_GENERIC_ADDRESS PlatformAckRegister; > + UINT64 AckPreserveMask; > + UINT64 AckSetMask; > + UINT64 Reserved2; > + ACPI_GENERIC_ADDRESS CmdCompleteRegister; > + UINT64 CmdCompleteMask; > + ACPI_GENERIC_ADDRESS CmdUpdateRegister; > + UINT64 CmdUpdatePreserveMask; > + UINT64 CmdUpdateSetMask; > + ACPI_GENERIC_ADDRESS ErrorStatusRegister; > + UINT64 ErrorStatusMask; > > -} ACPI_MTMR_ENTRY; > +} ACPI_PCCT_EXT_PCC_MASTER; > > -/******************************************************************************* > - * > - * SDEI - Software Delegated Exception Interface Descriptor Table > - * > - * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A, > - * May 8th, 2017. Copyright 2017 ARM Ltd. > - * > - ******************************************************************************/ > > -typedef struct acpi_table_sdei > +/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */ > + > +typedef struct acpi_pcct_ext_pcc_slave > { > - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > + ACPI_SUBTABLE_HEADER Header; > + UINT32 PlatformInterrupt; > + UINT8 Flags; > + UINT8 Reserved1; > + UINT64 BaseAddress; > + UINT32 Length; > + ACPI_GENERIC_ADDRESS DoorbellRegister; > + UINT64 PreserveMask; > + UINT64 WriteMask; > + UINT32 Latency; > + UINT32 MaxAccessRate; > + UINT32 MinTurnaroundTime; > + ACPI_GENERIC_ADDRESS PlatformAckRegister; > + UINT64 AckPreserveMask; > + UINT64 AckSetMask; > + UINT64 Reserved2; > + ACPI_GENERIC_ADDRESS CmdCompleteRegister; > + UINT64 CmdCompleteMask; > + ACPI_GENERIC_ADDRESS CmdUpdateRegister; > + UINT64 CmdUpdatePreserveMask; > + UINT64 CmdUpdateSetMask; > + ACPI_GENERIC_ADDRESS ErrorStatusRegister; > + UINT64 ErrorStatusMask; > > -} ACPI_TABLE_SDEI; > +} ACPI_PCCT_EXT_PCC_SLAVE; > > > -/******************************************************************************* > - * > - * SLIC - Software Licensing Description Table > - * > - * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", > - * November 29, 2011. Copyright 2011 Microsoft > - * > - ******************************************************************************/ > +/* Values for doorbell flags above */ > > -/* Basic SLIC table is only the common ACPI header */ > +#define ACPI_PCCT_INTERRUPT_POLARITY (1) > +#define ACPI_PCCT_INTERRUPT_MODE (1<<1) > > -typedef struct acpi_table_slic > + > +/* > + * PCC memory structures (not part of the ACPI table) > + */ > + > +/* Shared Memory Region */ > + > +typedef struct acpi_pcct_shared_memory > { > - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > + UINT32 Signature; > + UINT16 Command; > + UINT16 Status; > + > +} ACPI_PCCT_SHARED_MEMORY; > > -} ACPI_TABLE_SLIC; > + > +/* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */ > + > +typedef struct acpi_pcct_ext_pcc_shared_memory > +{ > + UINT32 Signature; > + UINT32 Flags; > + UINT32 Length; > + UINT32 Command; > + > +} ACPI_PCCT_EXT_PCC_SHARED_MEMORY; > > > /******************************************************************************* > * > - * SPCR - Serial Port Console Redirection table > - * Version 2 > - * > - * Conforms to "Serial Port Console Redirection Table", > - * Version 1.03, August 10, 2015 > + * PDTT - Platform Debug Trigger Table (ACPI 6.2) > + * Version 0 > * > ******************************************************************************/ > > -typedef struct acpi_table_spcr > +typedef struct acpi_table_pdtt > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT8 InterfaceType; /* 0=full 16550, 1=subset of 16550 */ > + UINT8 TriggerCount; > UINT8 Reserved[3]; > - ACPI_GENERIC_ADDRESS SerialPort; > - UINT8 InterruptType; > - UINT8 PcInterrupt; > - UINT32 Interrupt; > - UINT8 BaudRate; > - UINT8 Parity; > - UINT8 StopBits; > - UINT8 FlowControl; > - UINT8 TerminalType; > - UINT8 Reserved1; > - UINT16 PciDeviceId; > - UINT16 PciVendorId; > - UINT8 PciBus; > - UINT8 PciDevice; > - UINT8 PciFunction; > - UINT32 PciFlags; > - UINT8 PciSegment; > - UINT32 Reserved2; > + UINT32 ArrayOffset; > + > +} ACPI_TABLE_PDTT; > > -} ACPI_TABLE_SPCR; > > -/* Masks for PciFlags field above */ > +/* > + * PDTT Communication Channel Identifier Structure. > + * The number of these structures is defined by TriggerCount above, > + * starting at ArrayOffset. > + */ > +typedef struct acpi_pdtt_channel > +{ > + UINT8 SubchannelId; > + UINT8 Flags; > > -#define ACPI_SPCR_DO_NOT_DISABLE (1) > +} ACPI_PDTT_CHANNEL; > > -/* Values for Interface Type: See the definition of the DBG2 table */ > +/* Flags for above */ > + > +#define ACPI_PDTT_RUNTIME_TRIGGER (1) > +#define ACPI_PDTT_WAIT_COMPLETION (1<<1) > > > /******************************************************************************* > * > - * SPMI - Server Platform Management Interface table > - * Version 5 > - * > - * Conforms to "Intelligent Platform Management Interface Specification > - * Second Generation v2.0", Document Revision 1.0, February 12, 2004 with > - * June 12, 2009 markup. > + * PMTT - Platform Memory Topology Table (ACPI 5.0) > + * Version 1 > * > ******************************************************************************/ > > -typedef struct acpi_table_spmi > +typedef struct acpi_table_pmtt > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT8 InterfaceType; > - UINT8 Reserved; /* Must be 1 */ > - UINT16 SpecRevision; /* Version of IPMI */ > - UINT8 InterruptType; > - UINT8 GpeNumber; /* GPE assigned */ > - UINT8 Reserved1; > - UINT8 PciDeviceFlag; > - UINT32 Interrupt; > - ACPI_GENERIC_ADDRESS IpmiRegister; > - UINT8 PciSegment; > - UINT8 PciBus; > - UINT8 PciDevice; > - UINT8 PciFunction; > - UINT8 Reserved2; > + UINT32 Reserved; > + > +} ACPI_TABLE_PMTT; > > -} ACPI_TABLE_SPMI; > > -/* Values for InterfaceType above */ > +/* Common header for PMTT subtables that follow main table */ > > -enum AcpiSpmiInterfaceTypes > +typedef struct acpi_pmtt_header > { > - ACPI_SPMI_NOT_USED = 0, > - ACPI_SPMI_KEYBOARD = 1, > - ACPI_SPMI_SMI = 2, > - ACPI_SPMI_BLOCK_TRANSFER = 3, > - ACPI_SPMI_SMBUS = 4, > - ACPI_SPMI_RESERVED = 5 /* 5 and above are reserved */ > -}; > + UINT8 Type; > + UINT8 Reserved1; > + UINT16 Length; > + UINT16 Flags; > + UINT16 Reserved2; > > +} ACPI_PMTT_HEADER; > > -/******************************************************************************* > - * > - * TCPA - Trusted Computing Platform Alliance table > - * Version 2 > - * > - * TCG Hardware Interface Table for TPM 1.2 Clients and Servers > - * > - * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0", > - * Version 1.2, Revision 8 > - * February 27, 2017 > - * > - * NOTE: There are two versions of the table with the same signature -- > - * the client version and the server version. The common PlatformClass > - * field is used to differentiate the two types of tables. > - * > - ******************************************************************************/ > +/* Values for Type field above */ > > -typedef struct acpi_table_tcpa_hdr > -{ > - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT16 PlatformClass; > +#define ACPI_PMTT_TYPE_SOCKET 0 > +#define ACPI_PMTT_TYPE_CONTROLLER 1 > +#define ACPI_PMTT_TYPE_DIMM 2 > +#define ACPI_PMTT_TYPE_RESERVED 3 /* 0x03-0xFF are reserved */ > + > +/* Values for Flags field above */ > + > +#define ACPI_PMTT_TOP_LEVEL 0x0001 > +#define ACPI_PMTT_PHYSICAL 0x0002 > +#define ACPI_PMTT_MEMORY_TYPE 0x000C > > -} ACPI_TABLE_TCPA_HDR; > > /* > - * Values for PlatformClass above. > - * This is how the client and server subtables are differentiated > + * PMTT subtables, correspond to Type in acpi_pmtt_header > */ > -#define ACPI_TCPA_CLIENT_TABLE 0 > -#define ACPI_TCPA_SERVER_TABLE 1 > > > -typedef struct acpi_table_tcpa_client > +/* 0: Socket Structure */ > + > +typedef struct acpi_pmtt_socket > { > - UINT32 MinimumLogLength; /* Minimum length for the event log area */ > - UINT64 LogAddress; /* Address of the event log area */ > + ACPI_PMTT_HEADER Header; > + UINT16 SocketId; > + UINT16 Reserved; > + > +} ACPI_PMTT_SOCKET; > > -} ACPI_TABLE_TCPA_CLIENT; > > -typedef struct acpi_table_tcpa_server > +/* 1: Memory Controller subtable */ > + > +typedef struct acpi_pmtt_controller > { > + ACPI_PMTT_HEADER Header; > + UINT32 ReadLatency; > + UINT32 WriteLatency; > + UINT32 ReadBandwidth; > + UINT32 WriteBandwidth; > + UINT16 AccessWidth; > + UINT16 Alignment; > UINT16 Reserved; > - UINT64 MinimumLogLength; /* Minimum length for the event log area */ > - UINT64 LogAddress; /* Address of the event log area */ > - UINT16 SpecRevision; > - UINT8 DeviceFlags; > - UINT8 InterruptFlags; > - UINT8 GpeNumber; > - UINT8 Reserved2[3]; > - UINT32 GlobalInterrupt; > - ACPI_GENERIC_ADDRESS Address; > - UINT32 Reserved3; > - ACPI_GENERIC_ADDRESS ConfigAddress; > - UINT8 Group; > - UINT8 Bus; /* PCI Bus/Segment/Function numbers */ > - UINT8 Device; > - UINT8 Function; > + UINT16 DomainCount; > + > +} ACPI_PMTT_CONTROLLER; > + > +/* 1a: Proximity Domain substructure */ > + > +typedef struct acpi_pmtt_domain > +{ > + UINT32 ProximityDomain; > > -} ACPI_TABLE_TCPA_SERVER; > +} ACPI_PMTT_DOMAIN; > > -/* Values for DeviceFlags above */ > > -#define ACPI_TCPA_PCI_DEVICE (1) > -#define ACPI_TCPA_BUS_PNP (1<<1) > -#define ACPI_TCPA_ADDRESS_VALID (1<<2) > +/* 2: Physical Component Identifier (DIMM) */ > > -/* Values for InterruptFlags above */ > +typedef struct acpi_pmtt_physical_component > +{ > + ACPI_PMTT_HEADER Header; > + UINT16 ComponentId; > + UINT16 Reserved; > + UINT32 MemorySize; > + UINT32 BiosHandle; > > -#define ACPI_TCPA_INTERRUPT_MODE (1) > -#define ACPI_TCPA_INTERRUPT_POLARITY (1<<1) > -#define ACPI_TCPA_SCI_VIA_GPE (1<<2) > -#define ACPI_TCPA_GLOBAL_INTERRUPT (1<<3) > +} ACPI_PMTT_PHYSICAL_COMPONENT; > > > /******************************************************************************* > * > - * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table > - * Version 4 > - * > - * TCG Hardware Interface Table for TPM 2.0 Clients and Servers > - * > - * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0", > - * Version 1.2, Revision 8 > - * February 27, 2017 > + * PPTT - Processor Properties Topology Table (ACPI 6.2) > + * Version 1 > * > ******************************************************************************/ > > -typedef struct acpi_table_tpm2 > +typedef struct acpi_table_pptt > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT16 PlatformClass; > - UINT16 Reserved; > - UINT64 ControlAddress; > - UINT32 StartMethod; > > - /* Platform-specific data follows */ > +} ACPI_TABLE_PPTT; > > -} ACPI_TABLE_TPM2; > - > -/* Values for StartMethod above */ > +/* Values for Type field above */ > > -#define ACPI_TPM2_NOT_ALLOWED 0 > -#define ACPI_TPM2_RESERVED1 1 > -#define ACPI_TPM2_START_METHOD 2 > -#define ACPI_TPM2_RESERVED3 3 > -#define ACPI_TPM2_RESERVED4 4 > -#define ACPI_TPM2_RESERVED5 5 > -#define ACPI_TPM2_MEMORY_MAPPED 6 > -#define ACPI_TPM2_COMMAND_BUFFER 7 > -#define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD 8 > -#define ACPI_TPM2_RESERVED9 9 > -#define ACPI_TPM2_RESERVED10 10 > -#define ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC 11 /* V1.2 Rev 8 */ > -#define ACPI_TPM2_RESERVED 12 > +enum AcpiPpttType > +{ > + ACPI_PPTT_TYPE_PROCESSOR = 0, > + ACPI_PPTT_TYPE_CACHE = 1, > + ACPI_PPTT_TYPE_ID = 2, > + ACPI_PPTT_TYPE_RESERVED = 3 > +}; > > > -/* Optional trailer appears after any StartMethod subtables */ > +/* 0: Processor Hierarchy Node Structure */ > > -typedef struct acpi_tpm2_trailer > +typedef struct acpi_pptt_processor > { > - UINT8 MethodParameters[12]; > - UINT32 MinimumLogLength; /* Minimum length for the event log area */ > - UINT64 LogAddress; /* Address of the event log area */ > + ACPI_SUBTABLE_HEADER Header; > + UINT16 Reserved; > + UINT32 Flags; > + UINT32 Parent; > + UINT32 AcpiProcessorId; > + UINT32 NumberOfPrivResources; > > -} ACPI_TPM2_TRAILER; > +} ACPI_PPTT_PROCESSOR; > > +/* Flags */ > > -/* > - * Subtables (StartMethod-specific) > - */ > +#define ACPI_PPTT_PHYSICAL_PACKAGE (1) /* Physical package */ > +#define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (2) /* ACPI Processor ID valid */ > > -/* 11: Start Method for ARM SMC (V1.2 Rev 8) */ > > -typedef struct acpi_tpm2_arm_smc > +/* 1: Cache Type Structure */ > + > +typedef struct acpi_pptt_cache > { > - UINT32 GlobalInterrupt; > - UINT8 InterruptFlags; > - UINT8 OperationFlags; > + ACPI_SUBTABLE_HEADER Header; > UINT16 Reserved; > - UINT32 FunctionId; > + UINT32 Flags; > + UINT32 NextLevelOfCache; > + UINT32 Size; > + UINT32 NumberOfSets; > + UINT8 Associativity; > + UINT8 Attributes; > + UINT16 LineSize; > > -} ACPI_TPM2_ARM_SMC; > +} ACPI_PPTT_CACHE; > > -/* Values for InterruptFlags above */ > +/* Flags */ > > -#define ACPI_TPM2_INTERRUPT_SUPPORT (1) > +#define ACPI_PPTT_SIZE_PROPERTY_VALID (1) /* Physical property valid */ > +#define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1) /* Number of sets valid */ > +#define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2) /* Associativity valid */ > +#define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3) /* Allocation type valid */ > +#define ACPI_PPTT_CACHE_TYPE_VALID (1<<4) /* Cache type valid */ > +#define ACPI_PPTT_WRITE_POLICY_VALID (1<<5) /* Write policy valid */ > +#define ACPI_PPTT_LINE_SIZE_VALID (1<<6) /* Line size valid */ > > -/* Values for OperationFlags above */ > +/* Masks for Attributes */ > > -#define ACPI_TPM2_IDLE_SUPPORT (1) > +#define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03) /* Allocation type */ > +#define ACPI_PPTT_MASK_CACHE_TYPE (0x0C) /* Cache type */ > +#define ACPI_PPTT_MASK_WRITE_POLICY (0x10) /* Write policy */ > > +/* Attributes describing cache */ > +#define ACPI_PPTT_CACHE_READ_ALLOCATE (0x0) /* Cache line is allocated on read */ > +#define ACPI_PPTT_CACHE_WRITE_ALLOCATE (0x01) /* Cache line is allocated on write */ > +#define ACPI_PPTT_CACHE_RW_ALLOCATE (0x02) /* Cache line is allocated on read and write */ > +#define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT (0x03) /* Alternate representation of above */ > > -/******************************************************************************* > - * > - * UEFI - UEFI Boot optimization Table > - * Version 1 > - * > - * Conforms to "Unified Extensible Firmware Interface Specification", > - * Version 2.3, May 8, 2009 > - * > - ******************************************************************************/ > +#define ACPI_PPTT_CACHE_TYPE_DATA (0x0) /* Data cache */ > +#define ACPI_PPTT_CACHE_TYPE_INSTR (1<<2) /* Instruction cache */ > +#define ACPI_PPTT_CACHE_TYPE_UNIFIED (2<<2) /* Unified I & D cache */ > +#define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT (3<<2) /* Alternate representation of above */ > + > +#define ACPI_PPTT_CACHE_POLICY_WB (0x0) /* Cache is write back */ > +#define ACPI_PPTT_CACHE_POLICY_WT (1<<4) /* Cache is write through */ > > -typedef struct acpi_table_uefi > +/* 2: ID Structure */ > + > +typedef struct acpi_pptt_id > { > - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT8 Identifier[16]; /* UUID identifier */ > - UINT16 DataOffset; /* Offset of remaining data in table */ > + ACPI_SUBTABLE_HEADER Header; > + UINT16 Reserved; > + UINT32 VendorId; > + UINT64 Level1Id; > + UINT64 Level2Id; > + UINT16 MajorRev; > + UINT16 MinorRev; > + UINT16 SpinRev; > > -} ACPI_TABLE_UEFI; > +} ACPI_PPTT_ID; > > > /******************************************************************************* > * > - * VRTC - Virtual Real Time Clock Table > + * RASF - RAS Feature Table (ACPI 5.0) > * Version 1 > * > - * Conforms to "Simple Firmware Interface Specification", > - * Draft 0.8.2, Oct 19, 2010 > - * NOTE: The ACPI VRTC is equivalent to The SFI MRTC table. > - * > ******************************************************************************/ > > -typedef struct acpi_table_vrtc > +typedef struct acpi_table_rasf > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > + UINT8 ChannelId[12]; > > -} ACPI_TABLE_VRTC; > +} ACPI_TABLE_RASF; > > -/* VRTC entry */ > +/* RASF Platform Communication Channel Shared Memory Region */ > > -typedef struct acpi_vrtc_entry > +typedef struct acpi_rasf_shared_memory > { > - ACPI_GENERIC_ADDRESS PhysicalAddress; > - UINT32 Irq; > - > -} ACPI_VRTC_ENTRY; > + UINT32 Signature; > + UINT16 Command; > + UINT16 Status; > + UINT16 Version; > + UINT8 Capabilities[16]; > + UINT8 SetCapabilities[16]; > + UINT16 NumParameterBlocks; > + UINT32 SetCapabilitiesStatus; > > +} ACPI_RASF_SHARED_MEMORY; > > -/******************************************************************************* > - * > - * WAET - Windows ACPI Emulated devices Table > - * Version 1 > - * > - * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009 > - * > - ******************************************************************************/ > +/* RASF Parameter Block Structure Header */ > > -typedef struct acpi_table_waet > +typedef struct acpi_rasf_parameter_block > { > - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT32 Flags; > + UINT16 Type; > + UINT16 Version; > + UINT16 Length; > > -} ACPI_TABLE_WAET; > +} ACPI_RASF_PARAMETER_BLOCK; > > -/* Masks for Flags field above */ > +/* RASF Parameter Block Structure for PATROL_SCRUB */ > > -#define ACPI_WAET_RTC_NO_ACK (1) /* RTC requires no int acknowledge */ > -#define ACPI_WAET_TIMER_ONE_READ (1<<1) /* PM timer requires only one read */ > +typedef struct acpi_rasf_patrol_scrub_parameter > +{ > + ACPI_RASF_PARAMETER_BLOCK Header; > + UINT16 PatrolScrubCommand; > + UINT64 RequestedAddressRange[2]; > + UINT64 ActualAddressRange[2]; > + UINT16 Flags; > + UINT8 RequestedSpeed; > > +} ACPI_RASF_PATROL_SCRUB_PARAMETER; > > -/******************************************************************************* > - * > - * WDAT - Watchdog Action Table > - * Version 1 > - * > - * Conforms to "Hardware Watchdog Timers Design Specification", > - * Copyright 2006 Microsoft Corporation. > - * > - ******************************************************************************/ > +/* Masks for Flags and Speed fields above */ > > -typedef struct acpi_table_wdat > -{ > - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT32 HeaderLength; /* Watchdog Header Length */ > - UINT16 PciSegment; /* PCI Segment number */ > - UINT8 PciBus; /* PCI Bus number */ > - UINT8 PciDevice; /* PCI Device number */ > - UINT8 PciFunction; /* PCI Function number */ > - UINT8 Reserved[3]; > - UINT32 TimerPeriod; /* Period of one timer count (msec) */ > - UINT32 MaxCount; /* Maximum counter value supported */ > - UINT32 MinCount; /* Minimum counter value */ > - UINT8 Flags; > - UINT8 Reserved2[3]; > - UINT32 Entries; /* Number of watchdog entries that follow */ > +#define ACPI_RASF_SCRUBBER_RUNNING 1 > +#define ACPI_RASF_SPEED (7<<1) > +#define ACPI_RASF_SPEED_SLOW (0<<1) > +#define ACPI_RASF_SPEED_MEDIUM (4<<1) > +#define ACPI_RASF_SPEED_FAST (7<<1) > > -} ACPI_TABLE_WDAT; > +/* Channel Commands */ > > -/* Masks for Flags field above */ > +enum AcpiRasfCommands > +{ > + ACPI_RASF_EXECUTE_RASF_COMMAND = 1 > +}; > > -#define ACPI_WDAT_ENABLED (1) > -#define ACPI_WDAT_STOPPED 0x80 > +/* Platform RAS Capabilities */ > > +enum AcpiRasfCapabiliities > +{ > + ACPI_HW_PATROL_SCRUB_SUPPORTED = 0, > + ACPI_SW_PATROL_SCRUB_EXPOSED = 1 > +}; > > -/* WDAT Instruction Entries (actions) */ > +/* Patrol Scrub Commands */ > > -typedef struct acpi_wdat_entry > +enum AcpiRasfPatrolScrubCommands > { > - UINT8 Action; > - UINT8 Instruction; > - UINT16 Reserved; > - ACPI_GENERIC_ADDRESS RegisterRegion; > - UINT32 Value; /* Value used with Read/Write register */ > - UINT32 Mask; /* Bitmask required for this register instruction */ > - > -} ACPI_WDAT_ENTRY; > - > -/* Values for Action field above */ > - > -enum AcpiWdatActions > -{ > - ACPI_WDAT_RESET = 1, > - ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4, > - ACPI_WDAT_GET_COUNTDOWN = 5, > - ACPI_WDAT_SET_COUNTDOWN = 6, > - ACPI_WDAT_GET_RUNNING_STATE = 8, > - ACPI_WDAT_SET_RUNNING_STATE = 9, > - ACPI_WDAT_GET_STOPPED_STATE = 10, > - ACPI_WDAT_SET_STOPPED_STATE = 11, > - ACPI_WDAT_GET_REBOOT = 16, > - ACPI_WDAT_SET_REBOOT = 17, > - ACPI_WDAT_GET_SHUTDOWN = 18, > - ACPI_WDAT_SET_SHUTDOWN = 19, > - ACPI_WDAT_GET_STATUS = 32, > - ACPI_WDAT_SET_STATUS = 33, > - ACPI_WDAT_ACTION_RESERVED = 34 /* 34 and greater are reserved */ > + ACPI_RASF_GET_PATROL_PARAMETERS = 1, > + ACPI_RASF_START_PATROL_SCRUBBER = 2, > + ACPI_RASF_STOP_PATROL_SCRUBBER = 3 > }; > > -/* Values for Instruction field above */ > +/* Channel Command flags */ > > -enum AcpiWdatInstructions > +#define ACPI_RASF_GENERATE_SCI (1<<15) > + > +/* Status values */ > + > +enum AcpiRasfStatus > { > - ACPI_WDAT_READ_VALUE = 0, > - ACPI_WDAT_READ_COUNTDOWN = 1, > - ACPI_WDAT_WRITE_VALUE = 2, > - ACPI_WDAT_WRITE_COUNTDOWN = 3, > - ACPI_WDAT_INSTRUCTION_RESERVED = 4, /* 4 and greater are reserved */ > - ACPI_WDAT_PRESERVE_REGISTER = 0x80 /* Except for this value */ > + ACPI_RASF_SUCCESS = 0, > + ACPI_RASF_NOT_VALID = 1, > + ACPI_RASF_NOT_SUPPORTED = 2, > + ACPI_RASF_BUSY = 3, > + ACPI_RASF_FAILED = 4, > + ACPI_RASF_ABORTED = 5, > + ACPI_RASF_INVALID_DATA = 6 > }; > > +/* Status flags */ > + > +#define ACPI_RASF_COMMAND_COMPLETE (1) > +#define ACPI_RASF_SCI_DOORBELL (1<<1) > +#define ACPI_RASF_ERROR (1<<2) > +#define ACPI_RASF_STATUS (0x1F<<3) > + > > /******************************************************************************* > * > - * WDDT - Watchdog Descriptor Table > + * SBST - Smart Battery Specification Table > * Version 1 > * > - * Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)", > - * Version 001, September 2002 > - * > ******************************************************************************/ > > -typedef struct acpi_table_wddt > +typedef struct acpi_table_sbst > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT16 SpecVersion; > - UINT16 TableVersion; > - UINT16 PciVendorId; > - ACPI_GENERIC_ADDRESS Address; > - UINT16 MaxCount; /* Maximum counter value supported */ > - UINT16 MinCount; /* Minimum counter value supported */ > - UINT16 Period; > - UINT16 Status; > - UINT16 Capability; > - > -} ACPI_TABLE_WDDT; > - > -/* Flags for Status field above */ > + UINT32 WarningLevel; > + UINT32 LowLevel; > + UINT32 CriticalLevel; > > -#define ACPI_WDDT_AVAILABLE (1) > -#define ACPI_WDDT_ACTIVE (1<<1) > -#define ACPI_WDDT_TCO_OS_OWNED (1<<2) > -#define ACPI_WDDT_USER_RESET (1<<11) > -#define ACPI_WDDT_WDT_RESET (1<<12) > -#define ACPI_WDDT_POWER_FAIL (1<<13) > -#define ACPI_WDDT_UNKNOWN_RESET (1<<14) > - > -/* Flags for Capability field above */ > - > -#define ACPI_WDDT_AUTO_RESET (1) > -#define ACPI_WDDT_ALERT_SUPPORT (1<<1) > +} ACPI_TABLE_SBST; > > > /******************************************************************************* > * > - * WDRT - Watchdog Resource Table > - * Version 1 > + * SDEI - Software Delegated Exception Interface Descriptor Table > * > - * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003", > - * Version 1.01, August 28, 2006 > + * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A, > + * May 8th, 2017. Copyright 2017 ARM Ltd. > * > ******************************************************************************/ > > -typedef struct acpi_table_wdrt > +typedef struct acpi_table_sdei > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - ACPI_GENERIC_ADDRESS ControlRegister; > - ACPI_GENERIC_ADDRESS CountRegister; > - UINT16 PciDeviceId; > - UINT16 PciVendorId; > - UINT8 PciBus; /* PCI Bus number */ > - UINT8 PciDevice; /* PCI Device number */ > - UINT8 PciFunction; /* PCI Function number */ > - UINT8 PciSegment; /* PCI Segment number */ > - UINT16 MaxCount; /* Maximum counter value supported */ > - UINT8 Units; > > -} ACPI_TABLE_WDRT; > +} ACPI_TABLE_SDEI; > > > /******************************************************************************* > * > - * WSMT - Windows SMM Security Migrations Table > + * SDEV - Secure Devices Table (ACPI 6.2) > * Version 1 > * > - * Conforms to "Windows SMM Security Migrations Table", > - * Version 1.0, April 18, 2016 > - * > ******************************************************************************/ > > -typedef struct acpi_table_wsmt > +typedef struct acpi_table_sdev > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT32 ProtectionFlags; > > -} ACPI_TABLE_WSMT; > +} ACPI_TABLE_SDEV; > + > + > +typedef struct acpi_sdev_header > +{ > + UINT8 Type; > + UINT8 Flags; > + UINT16 Length; > + > +} ACPI_SDEV_HEADER; > + > + > +/* Values for subtable type above */ > + > +enum AcpiSdevType > +{ > + ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0, > + ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1, > + ACPI_SDEV_TYPE_RESERVED = 2 /* 2 and greater are reserved */ > +}; > + > +/* Values for flags above */ > + > +#define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS (1) > > -/* Flags for ProtectionFlags field above */ > +/* > + * SDEV subtables > + */ > + > +/* 0: Namespace Device Based Secure Device Structure */ > + > +typedef struct acpi_sdev_namespace > +{ > + ACPI_SDEV_HEADER Header; > + UINT16 DeviceIdOffset; > + UINT16 DeviceIdLength; > + UINT16 VendorDataOffset; > + UINT16 VendorDataLength; > + > +} ACPI_SDEV_NAMESPACE; > + > +/* 1: PCIe Endpoint Device Based Device Structure */ > + > +typedef struct acpi_sdev_pcie > +{ > + ACPI_SDEV_HEADER Header; > + UINT16 Segment; > + UINT16 StartBus; > + UINT16 PathOffset; > + UINT16 PathLength; > + UINT16 VendorDataOffset; > + UINT16 VendorDataLength; > + > +} ACPI_SDEV_PCIE; > + > +/* 1a: PCIe Endpoint path entry */ > + > +typedef struct acpi_sdev_pcie_path > +{ > + UINT8 Device; > + UINT8 Function; > > -#define ACPI_WSMT_FIXED_COMM_BUFFERS (1) > -#define ACPI_WSMT_COMM_BUFFER_NESTED_PTR_PROTECTION (2) > -#define ACPI_WSMT_SYSTEM_RESOURCE_PROTECTION (4) > +} ACPI_SDEV_PCIE_PATH; > > > /* Reset to default packing */ > diff --git a/src/acpica/source/include/actbl3.h b/src/acpica/source/include/actbl3.h > index 91a0026c..d4c15838 100644 > --- a/src/acpica/source/include/actbl3.h > +++ b/src/acpica/source/include/actbl3.h > @@ -155,14 +155,11 @@ > > /******************************************************************************* > * > - * Additional ACPI Tables (3) > + * Additional ACPI Tables > * > * These tables are not consumed directly by the ACPICA subsystem, but are > * included here to support device drivers and the AML disassembler. > * > - * In general, the tables in this file are fully defined within the ACPI > - * specification. > - * > ******************************************************************************/ > > > @@ -171,25 +168,24 @@ > * file. Useful because they make it more difficult to inadvertently type in > * the wrong signature. > */ > -#define ACPI_SIG_BGRT "BGRT" /* Boot Graphics Resource Table */ > -#define ACPI_SIG_DRTM "DRTM" /* Dynamic Root of Trust for Measurement table */ > -#define ACPI_SIG_FPDT "FPDT" /* Firmware Performance Data Table */ > -#define ACPI_SIG_GTDT "GTDT" /* Generic Timer Description Table */ > -#define ACPI_SIG_MPST "MPST" /* Memory Power State Table */ > -#define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */ > -#define ACPI_SIG_PMTT "PMTT" /* Platform Memory Topology Table */ > -#define ACPI_SIG_RASF "RASF" /* RAS Feature table */ > +#define ACPI_SIG_SLIC "SLIC" /* Software Licensing Description Table */ > +#define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */ > +#define ACPI_SIG_SPCR "SPCR" /* Serial Port Console Redirection table */ > +#define ACPI_SIG_SPMI "SPMI" /* Server Platform Management Interface table */ > +#define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */ > #define ACPI_SIG_STAO "STAO" /* Status Override table */ > +#define ACPI_SIG_TCPA "TCPA" /* Trusted Computing Platform Alliance table */ > +#define ACPI_SIG_TPM2 "TPM2" /* Trusted Platform Module 2.0 H/W interface table */ > +#define ACPI_SIG_UEFI "UEFI" /* Uefi Boot Optimization Table */ > +#define ACPI_SIG_VRTC "VRTC" /* Virtual Real Time Clock Table */ > +#define ACPI_SIG_WAET "WAET" /* Windows ACPI Emulated devices Table */ > +#define ACPI_SIG_WDAT "WDAT" /* Watchdog Action Table */ > +#define ACPI_SIG_WDDT "WDDT" /* Watchdog Timer Description Table */ > +#define ACPI_SIG_WDRT "WDRT" /* Watchdog Resource Table */ > #define ACPI_SIG_WPBT "WPBT" /* Windows Platform Binary Table */ > +#define ACPI_SIG_WSMT "WSMT" /* Windows SMM Security Migrations Table */ > #define ACPI_SIG_XENV "XENV" /* Xen Environment table */ > - > -#define ACPI_SIG_S3PT "S3PT" /* S3 Performance (sub)Table */ > -#define ACPI_SIG_PCCS "PCC" /* PCC Shared Memory Region */ > - > -/* Reserved table signatures */ > - > -#define ACPI_SIG_MATR "MATR" /* Memory Address Translation Table */ > -#define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ > +#define ACPI_SIG_XXXX "XXXX" /* Intermediate AML header for ASL/ASL+ converter */ > > /* > * All tables must be byte-packed to match the ACPI specification, since > @@ -212,858 +208,630 @@ > > /******************************************************************************* > * > - * BGRT - Boot Graphics Resource Table (ACPI 5.0) > - * Version 1 > + * SLIC - Software Licensing Description Table > + * > + * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", > + * November 29, 2011. Copyright 2011 Microsoft > * > ******************************************************************************/ > > -typedef struct acpi_table_bgrt > +/* Basic SLIC table is only the common ACPI header */ > + > +typedef struct acpi_table_slic > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT16 Version; > - UINT8 Status; > - UINT8 ImageType; > - UINT64 ImageAddress; > - UINT32 ImageOffsetX; > - UINT32 ImageOffsetY; > - > -} ACPI_TABLE_BGRT; > - > -/* Flags for Status field above */ > > -#define ACPI_BGRT_DISPLAYED (1) > -#define ACPI_BGRT_ORIENTATION_OFFSET (3 << 1) > +} ACPI_TABLE_SLIC; > > > /******************************************************************************* > * > - * DRTM - Dynamic Root of Trust for Measurement table > - * Conforms to "TCG D-RTM Architecture" June 17 2013, Version 1.0.0 > - * Table version 1 > + * SLIT - System Locality Distance Information Table > + * Version 1 > * > ******************************************************************************/ > > -typedef struct acpi_table_drtm > +typedef struct acpi_table_slit > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT64 EntryBaseAddress; > - UINT64 EntryLength; > - UINT32 EntryAddress32; > - UINT64 EntryAddress64; > - UINT64 ExitAddress; > - UINT64 LogAreaAddress; > - UINT32 LogAreaLength; > - UINT64 ArchDependentAddress; > - UINT32 Flags; > - > -} ACPI_TABLE_DRTM; > - > -/* Flag Definitions for above */ > - > -#define ACPI_DRTM_ACCESS_ALLOWED (1) > -#define ACPI_DRTM_ENABLE_GAP_CODE (1<<1) > -#define ACPI_DRTM_INCOMPLETE_MEASUREMENTS (1<<2) > -#define ACPI_DRTM_AUTHORITY_ORDER (1<<3) > - > - > -/* 1) Validated Tables List (64-bit addresses) */ > - > -typedef struct acpi_drtm_vtable_list > -{ > - UINT32 ValidatedTableCount; > - UINT64 ValidatedTables[1]; > + UINT64 LocalityCount; > + UINT8 Entry[1]; /* Real size = localities^2 */ > > -} ACPI_DRTM_VTABLE_LIST; > - > -/* 2) Resources List (of Resource Descriptors) */ > - > -/* Resource Descriptor */ > - > -typedef struct acpi_drtm_resource > -{ > - UINT8 Size[7]; > - UINT8 Type; > - UINT64 Address; > - > -} ACPI_DRTM_RESOURCE; > - > -typedef struct acpi_drtm_resource_list > -{ > - UINT32 ResourceCount; > - ACPI_DRTM_RESOURCE Resources[1]; > - > -} ACPI_DRTM_RESOURCE_LIST; > - > -/* 3) Platform-specific Identifiers List */ > - > -typedef struct acpi_drtm_dps_id > -{ > - UINT32 DpsIdLength; > - UINT8 DpsId[16]; > - > -} ACPI_DRTM_DPS_ID; > +} ACPI_TABLE_SLIT; > > > /******************************************************************************* > * > - * FPDT - Firmware Performance Data Table (ACPI 5.0) > - * Version 1 > + * SPCR - Serial Port Console Redirection table > + * Version 2 > + * > + * Conforms to "Serial Port Console Redirection Table", > + * Version 1.03, August 10, 2015 > * > ******************************************************************************/ > > -typedef struct acpi_table_fpdt > +typedef struct acpi_table_spcr > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > + UINT8 InterfaceType; /* 0=full 16550, 1=subset of 16550 */ > + UINT8 Reserved[3]; > + ACPI_GENERIC_ADDRESS SerialPort; > + UINT8 InterruptType; > + UINT8 PcInterrupt; > + UINT32 Interrupt; > + UINT8 BaudRate; > + UINT8 Parity; > + UINT8 StopBits; > + UINT8 FlowControl; > + UINT8 TerminalType; > + UINT8 Reserved1; > + UINT16 PciDeviceId; > + UINT16 PciVendorId; > + UINT8 PciBus; > + UINT8 PciDevice; > + UINT8 PciFunction; > + UINT32 PciFlags; > + UINT8 PciSegment; > + UINT32 Reserved2; > > -} ACPI_TABLE_FPDT; > +} ACPI_TABLE_SPCR; > > +/* Masks for PciFlags field above */ > > -/* FPDT subtable header (Performance Record Structure) */ > +#define ACPI_SPCR_DO_NOT_DISABLE (1) > > -typedef struct acpi_fpdt_header > -{ > - UINT16 Type; > - UINT8 Length; > - UINT8 Revision; > +/* Values for Interface Type: See the definition of the DBG2 table */ > > -} ACPI_FPDT_HEADER; > > -/* Values for Type field above */ > +/******************************************************************************* > + * > + * SPMI - Server Platform Management Interface table > + * Version 5 > + * > + * Conforms to "Intelligent Platform Management Interface Specification > + * Second Generation v2.0", Document Revision 1.0, February 12, 2004 with > + * June 12, 2009 markup. > + * > + ******************************************************************************/ > > -enum AcpiFpdtType > +typedef struct acpi_table_spmi > { > - ACPI_FPDT_TYPE_BOOT = 0, > - ACPI_FPDT_TYPE_S3PERF = 1 > + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > + UINT8 InterfaceType; > + UINT8 Reserved; /* Must be 1 */ > + UINT16 SpecRevision; /* Version of IPMI */ > + UINT8 InterruptType; > + UINT8 GpeNumber; /* GPE assigned */ > + UINT8 Reserved1; > + UINT8 PciDeviceFlag; > + UINT32 Interrupt; > + ACPI_GENERIC_ADDRESS IpmiRegister; > + UINT8 PciSegment; > + UINT8 PciBus; > + UINT8 PciDevice; > + UINT8 PciFunction; > + UINT8 Reserved2; > + > +} ACPI_TABLE_SPMI; > + > +/* Values for InterfaceType above */ > + > +enum AcpiSpmiInterfaceTypes > +{ > + ACPI_SPMI_NOT_USED = 0, > + ACPI_SPMI_KEYBOARD = 1, > + ACPI_SPMI_SMI = 2, > + ACPI_SPMI_BLOCK_TRANSFER = 3, > + ACPI_SPMI_SMBUS = 4, > + ACPI_SPMI_RESERVED = 5 /* 5 and above are reserved */ > }; > > > -/* > - * FPDT subtables > - */ > - > -/* 0: Firmware Basic Boot Performance Record */ > - > -typedef struct acpi_fpdt_boot_pointer > -{ > - ACPI_FPDT_HEADER Header; > - UINT8 Reserved[4]; > - UINT64 Address; > - > -} ACPI_FPDT_BOOT_POINTER; > - > - > -/* 1: S3 Performance Table Pointer Record */ > +/******************************************************************************* > + * > + * SRAT - System Resource Affinity Table > + * Version 3 > + * > + ******************************************************************************/ > > -typedef struct acpi_fpdt_s3pt_pointer > +typedef struct acpi_table_srat > { > - ACPI_FPDT_HEADER Header; > - UINT8 Reserved[4]; > - UINT64 Address; > + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > + UINT32 TableRevision; /* Must be value '1' */ > + UINT64 Reserved; /* Reserved, must be zero */ > > -} ACPI_FPDT_S3PT_POINTER; > +} ACPI_TABLE_SRAT; > > +/* Values for subtable type in ACPI_SUBTABLE_HEADER */ > > -/* > - * S3PT - S3 Performance Table. This table is pointed to by the > - * S3 Pointer Record above. > - */ > -typedef struct acpi_table_s3pt > +enum AcpiSratType > { > - UINT8 Signature[4]; /* "S3PT" */ > - UINT32 Length; > - > -} ACPI_TABLE_S3PT; > - > + ACPI_SRAT_TYPE_CPU_AFFINITY = 0, > + ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1, > + ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2, > + ACPI_SRAT_TYPE_GICC_AFFINITY = 3, > + ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4, /* ACPI 6.2 */ > + ACPI_SRAT_TYPE_RESERVED = 5 /* 5 and greater are reserved */ > +}; > > /* > - * S3PT Subtables (Not part of the actual FPDT) > + * SRAT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER > */ > > -/* Values for Type field in S3PT header */ > +/* 0: Processor Local APIC/SAPIC Affinity */ > > -enum AcpiS3ptType > +typedef struct acpi_srat_cpu_affinity > { > - ACPI_S3PT_TYPE_RESUME = 0, > - ACPI_S3PT_TYPE_SUSPEND = 1, > - ACPI_FPDT_BOOT_PERFORMANCE = 2 > -}; > + ACPI_SUBTABLE_HEADER Header; > + UINT8 ProximityDomainLo; > + UINT8 ApicId; > + UINT32 Flags; > + UINT8 LocalSapicEid; > + UINT8 ProximityDomainHi[3]; > + UINT32 ClockDomain; > > -typedef struct acpi_s3pt_resume > -{ > - ACPI_FPDT_HEADER Header; > - UINT32 ResumeCount; > - UINT64 FullResume; > - UINT64 AverageResume; > +} ACPI_SRAT_CPU_AFFINITY; > > -} ACPI_S3PT_RESUME; > +/* Flags */ > > -typedef struct acpi_s3pt_suspend > -{ > - ACPI_FPDT_HEADER Header; > - UINT64 SuspendStart; > - UINT64 SuspendEnd; > +#define ACPI_SRAT_CPU_USE_AFFINITY (1) /* 00: Use affinity structure */ > > -} ACPI_S3PT_SUSPEND; > > +/* 1: Memory Affinity */ > > -/* > - * FPDT Boot Performance Record (Not part of the actual FPDT) > - */ > -typedef struct acpi_fpdt_boot > +typedef struct acpi_srat_mem_affinity > { > - ACPI_FPDT_HEADER Header; > - UINT8 Reserved[4]; > - UINT64 ResetEnd; > - UINT64 LoadStart; > - UINT64 StartupStart; > - UINT64 ExitServicesEntry; > - UINT64 ExitServicesExit; > - > -} ACPI_FPDT_BOOT; > - > - > -/******************************************************************************* > - * > - * GTDT - Generic Timer Description Table (ACPI 5.1) > - * Version 2 > - * > - ******************************************************************************/ > - > -typedef struct acpi_table_gtdt > -{ > - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT64 CounterBlockAddresss; > - UINT32 Reserved; > - UINT32 SecureEl1Interrupt; > - UINT32 SecureEl1Flags; > - UINT32 NonSecureEl1Interrupt; > - UINT32 NonSecureEl1Flags; > - UINT32 VirtualTimerInterrupt; > - UINT32 VirtualTimerFlags; > - UINT32 NonSecureEl2Interrupt; > - UINT32 NonSecureEl2Flags; > - UINT64 CounterReadBlockAddress; > - UINT32 PlatformTimerCount; > - UINT32 PlatformTimerOffset; > - > -} ACPI_TABLE_GTDT; > - > -/* Flag Definitions: Timer Block Physical Timers and Virtual timers */ > - > -#define ACPI_GTDT_INTERRUPT_MODE (1) > -#define ACPI_GTDT_INTERRUPT_POLARITY (1<<1) > -#define ACPI_GTDT_ALWAYS_ON (1<<2) > + ACPI_SUBTABLE_HEADER Header; > + UINT32 ProximityDomain; > + UINT16 Reserved; /* Reserved, must be zero */ > + UINT64 BaseAddress; > + UINT64 Length; > + UINT32 Reserved1; > + UINT32 Flags; > + UINT64 Reserved2; /* Reserved, must be zero */ > > +} ACPI_SRAT_MEM_AFFINITY; > > -/* Common GTDT subtable header */ > +/* Flags */ > > -typedef struct acpi_gtdt_header > -{ > - UINT8 Type; > - UINT16 Length; > +#define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */ > +#define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */ > +#define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */ > > -} ACPI_GTDT_HEADER; > > -/* Values for GTDT subtable type above */ > +/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ > > -enum AcpiGtdtType > +typedef struct acpi_srat_x2apic_cpu_affinity > { > - ACPI_GTDT_TYPE_TIMER_BLOCK = 0, > - ACPI_GTDT_TYPE_WATCHDOG = 1, > - ACPI_GTDT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ > -}; > - > + ACPI_SUBTABLE_HEADER Header; > + UINT16 Reserved; /* Reserved, must be zero */ > + UINT32 ProximityDomain; > + UINT32 ApicId; > + UINT32 Flags; > + UINT32 ClockDomain; > + UINT32 Reserved2; > > -/* GTDT Subtables, correspond to Type in acpi_gtdt_header */ > +} ACPI_SRAT_X2APIC_CPU_AFFINITY; > > -/* 0: Generic Timer Block */ > +/* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */ > > -typedef struct acpi_gtdt_timer_block > -{ > - ACPI_GTDT_HEADER Header; > - UINT8 Reserved; > - UINT64 BlockAddress; > - UINT32 TimerCount; > - UINT32 TimerOffset; > +#define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */ > > -} ACPI_GTDT_TIMER_BLOCK; > > -/* Timer Sub-Structure, one per timer */ > +/* 3: GICC Affinity (ACPI 5.1) */ > > -typedef struct acpi_gtdt_timer_entry > +typedef struct acpi_srat_gicc_affinity > { > - UINT8 FrameNumber; > - UINT8 Reserved[3]; > - UINT64 BaseAddress; > - UINT64 El0BaseAddress; > - UINT32 TimerInterrupt; > - UINT32 TimerFlags; > - UINT32 VirtualTimerInterrupt; > - UINT32 VirtualTimerFlags; > - UINT32 CommonFlags; > - > -} ACPI_GTDT_TIMER_ENTRY; > - > -/* Flag Definitions: TimerFlags and VirtualTimerFlags above */ > + ACPI_SUBTABLE_HEADER Header; > + UINT32 ProximityDomain; > + UINT32 AcpiProcessorUid; > + UINT32 Flags; > + UINT32 ClockDomain; > > -#define ACPI_GTDT_GT_IRQ_MODE (1) > -#define ACPI_GTDT_GT_IRQ_POLARITY (1<<1) > +} ACPI_SRAT_GICC_AFFINITY; > > -/* Flag Definitions: CommonFlags above */ > +/* Flags for ACPI_SRAT_GICC_AFFINITY */ > > -#define ACPI_GTDT_GT_IS_SECURE_TIMER (1) > -#define ACPI_GTDT_GT_ALWAYS_ON (1<<1) > +#define ACPI_SRAT_GICC_ENABLED (1) /* 00: Use affinity structure */ > > > -/* 1: SBSA Generic Watchdog Structure */ > +/* 4: GCC ITS Affinity (ACPI 6.2) */ > > -typedef struct acpi_gtdt_watchdog > +typedef struct acpi_srat_gic_its_affinity > { > - ACPI_GTDT_HEADER Header; > - UINT8 Reserved; > - UINT64 RefreshFrameAddress; > - UINT64 ControlFrameAddress; > - UINT32 TimerInterrupt; > - UINT32 TimerFlags; > - > -} ACPI_GTDT_WATCHDOG; > - > -/* Flag Definitions: TimerFlags above */ > + ACPI_SUBTABLE_HEADER Header; > + UINT32 ProximityDomain; > + UINT16 Reserved; > + UINT32 ItsId; > > -#define ACPI_GTDT_WATCHDOG_IRQ_MODE (1) > -#define ACPI_GTDT_WATCHDOG_IRQ_POLARITY (1<<1) > -#define ACPI_GTDT_WATCHDOG_SECURE (1<<2) > +} ACPI_SRAT_GIC_ITS_AFFINITY; > > > /******************************************************************************* > * > - * MPST - Memory Power State Table (ACPI 5.0) > + * STAO - Status Override Table (_STA override) - ACPI 6.0 > * Version 1 > * > + * Conforms to "ACPI Specification for Status Override Table" > + * 6 January 2015 > + * > ******************************************************************************/ > > -#define ACPI_MPST_CHANNEL_INFO \ > - UINT8 ChannelId; \ > - UINT8 Reserved1[3]; \ > - UINT16 PowerNodeCount; \ > - UINT16 Reserved2; > - > -/* Main table */ > - > -typedef struct acpi_table_mpst > +typedef struct acpi_table_stao > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ > - > -} ACPI_TABLE_MPST; > - > - > -/* Memory Platform Communication Channel Info */ > - > -typedef struct acpi_mpst_channel > -{ > - ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ > - > -} ACPI_MPST_CHANNEL; > - > - > -/* Memory Power Node Structure */ > - > -typedef struct acpi_mpst_power_node > -{ > - UINT8 Flags; > - UINT8 Reserved1; > - UINT16 NodeId; > - UINT32 Length; > - UINT64 RangeAddress; > - UINT64 RangeLength; > - UINT32 NumPowerStates; > - UINT32 NumPhysicalComponents; > - > -} ACPI_MPST_POWER_NODE; > - > -/* Values for Flags field above */ > + UINT8 IgnoreUart; > > -#define ACPI_MPST_ENABLED 1 > -#define ACPI_MPST_POWER_MANAGED 2 > -#define ACPI_MPST_HOT_PLUG_CAPABLE 4 > +} ACPI_TABLE_STAO; > > > -/* Memory Power State Structure (follows POWER_NODE above) */ > +/******************************************************************************* > + * > + * TCPA - Trusted Computing Platform Alliance table > + * Version 2 > + * > + * TCG Hardware Interface Table for TPM 1.2 Clients and Servers > + * > + * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0", > + * Version 1.2, Revision 8 > + * February 27, 2017 > + * > + * NOTE: There are two versions of the table with the same signature -- > + * the client version and the server version. The common PlatformClass > + * field is used to differentiate the two types of tables. > + * > + ******************************************************************************/ > > -typedef struct acpi_mpst_power_state > +typedef struct acpi_table_tcpa_hdr > { > - UINT8 PowerState; > - UINT8 InfoIndex; > + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > + UINT16 PlatformClass; > > -} ACPI_MPST_POWER_STATE; > +} ACPI_TABLE_TCPA_HDR; > > +/* > + * Values for PlatformClass above. > + * This is how the client and server subtables are differentiated > + */ > +#define ACPI_TCPA_CLIENT_TABLE 0 > +#define ACPI_TCPA_SERVER_TABLE 1 > > -/* Physical Component ID Structure (follows POWER_STATE above) */ > > -typedef struct acpi_mpst_component > +typedef struct acpi_table_tcpa_client > { > - UINT16 ComponentId; > - > -} ACPI_MPST_COMPONENT; > + UINT32 MinimumLogLength; /* Minimum length for the event log area */ > + UINT64 LogAddress; /* Address of the event log area */ > > +} ACPI_TABLE_TCPA_CLIENT; > > -/* Memory Power State Characteristics Structure (follows all POWER_NODEs) */ > - > -typedef struct acpi_mpst_data_hdr > +typedef struct acpi_table_tcpa_server > { > - UINT16 CharacteristicsCount; > UINT16 Reserved; > - > -} ACPI_MPST_DATA_HDR; > - > -typedef struct acpi_mpst_power_data > -{ > - UINT8 StructureId; > - UINT8 Flags; > - UINT16 Reserved1; > - UINT32 AveragePower; > - UINT32 PowerSaving; > - UINT64 ExitLatency; > - UINT64 Reserved2; > - > -} ACPI_MPST_POWER_DATA; > - > -/* Values for Flags field above */ > - > -#define ACPI_MPST_PRESERVE 1 > -#define ACPI_MPST_AUTOENTRY 2 > -#define ACPI_MPST_AUTOEXIT 4 > - > - > -/* Shared Memory Region (not part of an ACPI table) */ > - > -typedef struct acpi_mpst_shared > -{ > - UINT32 Signature; > - UINT16 PccCommand; > - UINT16 PccStatus; > - UINT32 CommandRegister; > - UINT32 StatusRegister; > - UINT32 PowerStateId; > - UINT32 PowerNodeId; > - UINT64 EnergyConsumed; > - UINT64 AveragePower; > - > -} ACPI_MPST_SHARED; > + UINT64 MinimumLogLength; /* Minimum length for the event log area */ > + UINT64 LogAddress; /* Address of the event log area */ > + UINT16 SpecRevision; > + UINT8 DeviceFlags; > + UINT8 InterruptFlags; > + UINT8 GpeNumber; > + UINT8 Reserved2[3]; > + UINT32 GlobalInterrupt; > + ACPI_GENERIC_ADDRESS Address; > + UINT32 Reserved3; > + ACPI_GENERIC_ADDRESS ConfigAddress; > + UINT8 Group; > + UINT8 Bus; /* PCI Bus/Segment/Function numbers */ > + UINT8 Device; > + UINT8 Function; > + > +} ACPI_TABLE_TCPA_SERVER; > + > +/* Values for DeviceFlags above */ > + > +#define ACPI_TCPA_PCI_DEVICE (1) > +#define ACPI_TCPA_BUS_PNP (1<<1) > +#define ACPI_TCPA_ADDRESS_VALID (1<<2) > + > +/* Values for InterruptFlags above */ > + > +#define ACPI_TCPA_INTERRUPT_MODE (1) > +#define ACPI_TCPA_INTERRUPT_POLARITY (1<<1) > +#define ACPI_TCPA_SCI_VIA_GPE (1<<2) > +#define ACPI_TCPA_GLOBAL_INTERRUPT (1<<3) > > > /******************************************************************************* > * > - * PCCT - Platform Communications Channel Table (ACPI 5.0) > - * Version 2 (ACPI 6.2) > + * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table > + * Version 4 > + * > + * TCG Hardware Interface Table for TPM 2.0 Clients and Servers > + * > + * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0", > + * Version 1.2, Revision 8 > + * February 27, 2017 > * > ******************************************************************************/ > > -typedef struct acpi_table_pcct > +typedef struct acpi_table_tpm2 > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT32 Flags; > - UINT64 Reserved; > - > -} ACPI_TABLE_PCCT; > - > -/* Values for Flags field above */ > - > -#define ACPI_PCCT_DOORBELL 1 > - > -/* Values for subtable type in ACPI_SUBTABLE_HEADER */ > - > -enum AcpiPcctType > -{ > - ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0, > - ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1, > - ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */ > - ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3, /* ACPI 6.2 */ > - ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4, /* ACPI 6.2 */ > - ACPI_PCCT_TYPE_RESERVED = 5 /* 5 and greater are reserved */ > -}; > - > -/* > - * PCCT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER > - */ > - > -/* 0: Generic Communications Subspace */ > - > -typedef struct acpi_pcct_subspace > -{ > - ACPI_SUBTABLE_HEADER Header; > - UINT8 Reserved[6]; > - UINT64 BaseAddress; > - UINT64 Length; > - ACPI_GENERIC_ADDRESS DoorbellRegister; > - UINT64 PreserveMask; > - UINT64 WriteMask; > - UINT32 Latency; > - UINT32 MaxAccessRate; > - UINT16 MinTurnaroundTime; > - > -} ACPI_PCCT_SUBSPACE; > + UINT16 PlatformClass; > + UINT16 Reserved; > + UINT64 ControlAddress; > + UINT32 StartMethod; > > + /* Platform-specific data follows */ > > -/* 1: HW-reduced Communications Subspace (ACPI 5.1) */ > +} ACPI_TABLE_TPM2; > > -typedef struct acpi_pcct_hw_reduced > -{ > - ACPI_SUBTABLE_HEADER Header; > - UINT32 PlatformInterrupt; > - UINT8 Flags; > - UINT8 Reserved; > - UINT64 BaseAddress; > - UINT64 Length; > - ACPI_GENERIC_ADDRESS DoorbellRegister; > - UINT64 PreserveMask; > - UINT64 WriteMask; > - UINT32 Latency; > - UINT32 MaxAccessRate; > - UINT16 MinTurnaroundTime; > +/* Values for StartMethod above */ > > -} ACPI_PCCT_HW_REDUCED; > +#define ACPI_TPM2_NOT_ALLOWED 0 > +#define ACPI_TPM2_RESERVED1 1 > +#define ACPI_TPM2_START_METHOD 2 > +#define ACPI_TPM2_RESERVED3 3 > +#define ACPI_TPM2_RESERVED4 4 > +#define ACPI_TPM2_RESERVED5 5 > +#define ACPI_TPM2_MEMORY_MAPPED 6 > +#define ACPI_TPM2_COMMAND_BUFFER 7 > +#define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD 8 > +#define ACPI_TPM2_RESERVED9 9 > +#define ACPI_TPM2_RESERVED10 10 > +#define ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC 11 /* V1.2 Rev 8 */ > +#define ACPI_TPM2_RESERVED 12 > > > -/* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */ > +/* Optional trailer appears after any StartMethod subtables */ > > -typedef struct acpi_pcct_hw_reduced_type2 > +typedef struct acpi_tpm2_trailer > { > - ACPI_SUBTABLE_HEADER Header; > - UINT32 PlatformInterrupt; > - UINT8 Flags; > - UINT8 Reserved; > - UINT64 BaseAddress; > - UINT64 Length; > - ACPI_GENERIC_ADDRESS DoorbellRegister; > - UINT64 PreserveMask; > - UINT64 WriteMask; > - UINT32 Latency; > - UINT32 MaxAccessRate; > - UINT16 MinTurnaroundTime; > - ACPI_GENERIC_ADDRESS PlatformAckRegister; > - UINT64 AckPreserveMask; > - UINT64 AckWriteMask; > + UINT8 MethodParameters[12]; > + UINT32 MinimumLogLength; /* Minimum length for the event log area */ > + UINT64 LogAddress; /* Address of the event log area */ > > -} ACPI_PCCT_HW_REDUCED_TYPE2; > - > - > -/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */ > - > -typedef struct acpi_pcct_ext_pcc_master > -{ > - ACPI_SUBTABLE_HEADER Header; > - UINT32 PlatformInterrupt; > - UINT8 Flags; > - UINT8 Reserved1; > - UINT64 BaseAddress; > - UINT32 Length; > - ACPI_GENERIC_ADDRESS DoorbellRegister; > - UINT64 PreserveMask; > - UINT64 WriteMask; > - UINT32 Latency; > - UINT32 MaxAccessRate; > - UINT32 MinTurnaroundTime; > - ACPI_GENERIC_ADDRESS PlatformAckRegister; > - UINT64 AckPreserveMask; > - UINT64 AckSetMask; > - UINT64 Reserved2; > - ACPI_GENERIC_ADDRESS CmdCompleteRegister; > - UINT64 CmdCompleteMask; > - ACPI_GENERIC_ADDRESS CmdUpdateRegister; > - UINT64 CmdUpdatePreserveMask; > - UINT64 CmdUpdateSetMask; > - ACPI_GENERIC_ADDRESS ErrorStatusRegister; > - UINT64 ErrorStatusMask; > - > -} ACPI_PCCT_EXT_PCC_MASTER; > - > - > -/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */ > - > -typedef struct acpi_pcct_ext_pcc_slave > -{ > - ACPI_SUBTABLE_HEADER Header; > - UINT32 PlatformInterrupt; > - UINT8 Flags; > - UINT8 Reserved1; > - UINT64 BaseAddress; > - UINT32 Length; > - ACPI_GENERIC_ADDRESS DoorbellRegister; > - UINT64 PreserveMask; > - UINT64 WriteMask; > - UINT32 Latency; > - UINT32 MaxAccessRate; > - UINT32 MinTurnaroundTime; > - ACPI_GENERIC_ADDRESS PlatformAckRegister; > - UINT64 AckPreserveMask; > - UINT64 AckSetMask; > - UINT64 Reserved2; > - ACPI_GENERIC_ADDRESS CmdCompleteRegister; > - UINT64 CmdCompleteMask; > - ACPI_GENERIC_ADDRESS CmdUpdateRegister; > - UINT64 CmdUpdatePreserveMask; > - UINT64 CmdUpdateSetMask; > - ACPI_GENERIC_ADDRESS ErrorStatusRegister; > - UINT64 ErrorStatusMask; > - > -} ACPI_PCCT_EXT_PCC_SLAVE; > - > - > -/* Values for doorbell flags above */ > - > -#define ACPI_PCCT_INTERRUPT_POLARITY (1) > -#define ACPI_PCCT_INTERRUPT_MODE (1<<1) > +} ACPI_TPM2_TRAILER; > > > /* > - * PCC memory structures (not part of the ACPI table) > + * Subtables (StartMethod-specific) > */ > > -/* Shared Memory Region */ > +/* 11: Start Method for ARM SMC (V1.2 Rev 8) */ > > -typedef struct acpi_pcct_shared_memory > +typedef struct acpi_tpm2_arm_smc > { > - UINT32 Signature; > - UINT16 Command; > - UINT16 Status; > + UINT32 GlobalInterrupt; > + UINT8 InterruptFlags; > + UINT8 OperationFlags; > + UINT16 Reserved; > + UINT32 FunctionId; > > -} ACPI_PCCT_SHARED_MEMORY; > +} ACPI_TPM2_ARM_SMC; > > +/* Values for InterruptFlags above */ > > -/* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */ > +#define ACPI_TPM2_INTERRUPT_SUPPORT (1) > > -typedef struct acpi_pcct_ext_pcc_shared_memory > -{ > - UINT32 Signature; > - UINT32 Flags; > - UINT32 Length; > - UINT32 Command; > +/* Values for OperationFlags above */ > > -} ACPI_PCCT_EXT_PCC_SHARED_MEMORY; > +#define ACPI_TPM2_IDLE_SUPPORT (1) > > > /******************************************************************************* > * > - * PMTT - Platform Memory Topology Table (ACPI 5.0) > + * UEFI - UEFI Boot optimization Table > * Version 1 > * > + * Conforms to "Unified Extensible Firmware Interface Specification", > + * Version 2.3, May 8, 2009 > + * > ******************************************************************************/ > > -typedef struct acpi_table_pmtt > +typedef struct acpi_table_uefi > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT32 Reserved; > - > -} ACPI_TABLE_PMTT; > - > - > -/* Common header for PMTT subtables that follow main table */ > - > -typedef struct acpi_pmtt_header > -{ > - UINT8 Type; > - UINT8 Reserved1; > - UINT16 Length; > - UINT16 Flags; > - UINT16 Reserved2; > - > -} ACPI_PMTT_HEADER; > - > -/* Values for Type field above */ > - > -#define ACPI_PMTT_TYPE_SOCKET 0 > -#define ACPI_PMTT_TYPE_CONTROLLER 1 > -#define ACPI_PMTT_TYPE_DIMM 2 > -#define ACPI_PMTT_TYPE_RESERVED 3 /* 0x03-0xFF are reserved */ > + UINT8 Identifier[16]; /* UUID identifier */ > + UINT16 DataOffset; /* Offset of remaining data in table */ > > -/* Values for Flags field above */ > +} ACPI_TABLE_UEFI; > > -#define ACPI_PMTT_TOP_LEVEL 0x0001 > -#define ACPI_PMTT_PHYSICAL 0x0002 > -#define ACPI_PMTT_MEMORY_TYPE 0x000C > - > - > -/* > - * PMTT subtables, correspond to Type in acpi_pmtt_header > - */ > > +/******************************************************************************* > + * > + * VRTC - Virtual Real Time Clock Table > + * Version 1 > + * > + * Conforms to "Simple Firmware Interface Specification", > + * Draft 0.8.2, Oct 19, 2010 > + * NOTE: The ACPI VRTC is equivalent to The SFI MRTC table. > + * > + ******************************************************************************/ > > -/* 0: Socket Structure */ > - > -typedef struct acpi_pmtt_socket > -{ > - ACPI_PMTT_HEADER Header; > - UINT16 SocketId; > - UINT16 Reserved; > - > -} ACPI_PMTT_SOCKET; > - > - > -/* 1: Memory Controller subtable */ > - > -typedef struct acpi_pmtt_controller > -{ > - ACPI_PMTT_HEADER Header; > - UINT32 ReadLatency; > - UINT32 WriteLatency; > - UINT32 ReadBandwidth; > - UINT32 WriteBandwidth; > - UINT16 AccessWidth; > - UINT16 Alignment; > - UINT16 Reserved; > - UINT16 DomainCount; > - > -} ACPI_PMTT_CONTROLLER; > - > -/* 1a: Proximity Domain substructure */ > - > -typedef struct acpi_pmtt_domain > +typedef struct acpi_table_vrtc > { > - UINT32 ProximityDomain; > - > -} ACPI_PMTT_DOMAIN; > + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > > +} ACPI_TABLE_VRTC; > > -/* 2: Physical Component Identifier (DIMM) */ > +/* VRTC entry */ > > -typedef struct acpi_pmtt_physical_component > +typedef struct acpi_vrtc_entry > { > - ACPI_PMTT_HEADER Header; > - UINT16 ComponentId; > - UINT16 Reserved; > - UINT32 MemorySize; > - UINT32 BiosHandle; > + ACPI_GENERIC_ADDRESS PhysicalAddress; > + UINT32 Irq; > > -} ACPI_PMTT_PHYSICAL_COMPONENT; > +} ACPI_VRTC_ENTRY; > > > /******************************************************************************* > * > - * RASF - RAS Feature Table (ACPI 5.0) > + * WAET - Windows ACPI Emulated devices Table > * Version 1 > * > + * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009 > + * > ******************************************************************************/ > > -typedef struct acpi_table_rasf > +typedef struct acpi_table_waet > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT8 ChannelId[12]; > + UINT32 Flags; > > -} ACPI_TABLE_RASF; > +} ACPI_TABLE_WAET; > > -/* RASF Platform Communication Channel Shared Memory Region */ > +/* Masks for Flags field above */ > > -typedef struct acpi_rasf_shared_memory > -{ > - UINT32 Signature; > - UINT16 Command; > - UINT16 Status; > - UINT16 Version; > - UINT8 Capabilities[16]; > - UINT8 SetCapabilities[16]; > - UINT16 NumParameterBlocks; > - UINT32 SetCapabilitiesStatus; > +#define ACPI_WAET_RTC_NO_ACK (1) /* RTC requires no int acknowledge */ > +#define ACPI_WAET_TIMER_ONE_READ (1<<1) /* PM timer requires only one read */ > > -} ACPI_RASF_SHARED_MEMORY; > > -/* RASF Parameter Block Structure Header */ > +/******************************************************************************* > + * > + * WDAT - Watchdog Action Table > + * Version 1 > + * > + * Conforms to "Hardware Watchdog Timers Design Specification", > + * Copyright 2006 Microsoft Corporation. > + * > + ******************************************************************************/ > > -typedef struct acpi_rasf_parameter_block > +typedef struct acpi_table_wdat > { > - UINT16 Type; > - UINT16 Version; > - UINT16 Length; > - > -} ACPI_RASF_PARAMETER_BLOCK; > + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > + UINT32 HeaderLength; /* Watchdog Header Length */ > + UINT16 PciSegment; /* PCI Segment number */ > + UINT8 PciBus; /* PCI Bus number */ > + UINT8 PciDevice; /* PCI Device number */ > + UINT8 PciFunction; /* PCI Function number */ > + UINT8 Reserved[3]; > + UINT32 TimerPeriod; /* Period of one timer count (msec) */ > + UINT32 MaxCount; /* Maximum counter value supported */ > + UINT32 MinCount; /* Minimum counter value */ > + UINT8 Flags; > + UINT8 Reserved2[3]; > + UINT32 Entries; /* Number of watchdog entries that follow */ > > -/* RASF Parameter Block Structure for PATROL_SCRUB */ > +} ACPI_TABLE_WDAT; > > -typedef struct acpi_rasf_patrol_scrub_parameter > -{ > - ACPI_RASF_PARAMETER_BLOCK Header; > - UINT16 PatrolScrubCommand; > - UINT64 RequestedAddressRange[2]; > - UINT64 ActualAddressRange[2]; > - UINT16 Flags; > - UINT8 RequestedSpeed; > +/* Masks for Flags field above */ > > -} ACPI_RASF_PATROL_SCRUB_PARAMETER; > +#define ACPI_WDAT_ENABLED (1) > +#define ACPI_WDAT_STOPPED 0x80 > > -/* Masks for Flags and Speed fields above */ > > -#define ACPI_RASF_SCRUBBER_RUNNING 1 > -#define ACPI_RASF_SPEED (7<<1) > -#define ACPI_RASF_SPEED_SLOW (0<<1) > -#define ACPI_RASF_SPEED_MEDIUM (4<<1) > -#define ACPI_RASF_SPEED_FAST (7<<1) > +/* WDAT Instruction Entries (actions) */ > > -/* Channel Commands */ > - > -enum AcpiRasfCommands > +typedef struct acpi_wdat_entry > { > - ACPI_RASF_EXECUTE_RASF_COMMAND = 1 > + UINT8 Action; > + UINT8 Instruction; > + UINT16 Reserved; > + ACPI_GENERIC_ADDRESS RegisterRegion; > + UINT32 Value; /* Value used with Read/Write register */ > + UINT32 Mask; /* Bitmask required for this register instruction */ > + > +} ACPI_WDAT_ENTRY; > + > +/* Values for Action field above */ > + > +enum AcpiWdatActions > +{ > + ACPI_WDAT_RESET = 1, > + ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4, > + ACPI_WDAT_GET_COUNTDOWN = 5, > + ACPI_WDAT_SET_COUNTDOWN = 6, > + ACPI_WDAT_GET_RUNNING_STATE = 8, > + ACPI_WDAT_SET_RUNNING_STATE = 9, > + ACPI_WDAT_GET_STOPPED_STATE = 10, > + ACPI_WDAT_SET_STOPPED_STATE = 11, > + ACPI_WDAT_GET_REBOOT = 16, > + ACPI_WDAT_SET_REBOOT = 17, > + ACPI_WDAT_GET_SHUTDOWN = 18, > + ACPI_WDAT_SET_SHUTDOWN = 19, > + ACPI_WDAT_GET_STATUS = 32, > + ACPI_WDAT_SET_STATUS = 33, > + ACPI_WDAT_ACTION_RESERVED = 34 /* 34 and greater are reserved */ > }; > > -/* Platform RAS Capabilities */ > +/* Values for Instruction field above */ > > -enum AcpiRasfCapabiliities > +enum AcpiWdatInstructions > { > - ACPI_HW_PATROL_SCRUB_SUPPORTED = 0, > - ACPI_SW_PATROL_SCRUB_EXPOSED = 1 > + ACPI_WDAT_READ_VALUE = 0, > + ACPI_WDAT_READ_COUNTDOWN = 1, > + ACPI_WDAT_WRITE_VALUE = 2, > + ACPI_WDAT_WRITE_COUNTDOWN = 3, > + ACPI_WDAT_INSTRUCTION_RESERVED = 4, /* 4 and greater are reserved */ > + ACPI_WDAT_PRESERVE_REGISTER = 0x80 /* Except for this value */ > }; > > -/* Patrol Scrub Commands */ > > -enum AcpiRasfPatrolScrubCommands > -{ > - ACPI_RASF_GET_PATROL_PARAMETERS = 1, > - ACPI_RASF_START_PATROL_SCRUBBER = 2, > - ACPI_RASF_STOP_PATROL_SCRUBBER = 3 > -}; > +/******************************************************************************* > + * > + * WDDT - Watchdog Descriptor Table > + * Version 1 > + * > + * Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)", > + * Version 001, September 2002 > + * > + ******************************************************************************/ > > -/* Channel Command flags */ > +typedef struct acpi_table_wddt > +{ > + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > + UINT16 SpecVersion; > + UINT16 TableVersion; > + UINT16 PciVendorId; > + ACPI_GENERIC_ADDRESS Address; > + UINT16 MaxCount; /* Maximum counter value supported */ > + UINT16 MinCount; /* Minimum counter value supported */ > + UINT16 Period; > + UINT16 Status; > + UINT16 Capability; > > -#define ACPI_RASF_GENERATE_SCI (1<<15) > +} ACPI_TABLE_WDDT; > > -/* Status values */ > +/* Flags for Status field above */ > > -enum AcpiRasfStatus > -{ > - ACPI_RASF_SUCCESS = 0, > - ACPI_RASF_NOT_VALID = 1, > - ACPI_RASF_NOT_SUPPORTED = 2, > - ACPI_RASF_BUSY = 3, > - ACPI_RASF_FAILED = 4, > - ACPI_RASF_ABORTED = 5, > - ACPI_RASF_INVALID_DATA = 6 > -}; > +#define ACPI_WDDT_AVAILABLE (1) > +#define ACPI_WDDT_ACTIVE (1<<1) > +#define ACPI_WDDT_TCO_OS_OWNED (1<<2) > +#define ACPI_WDDT_USER_RESET (1<<11) > +#define ACPI_WDDT_WDT_RESET (1<<12) > +#define ACPI_WDDT_POWER_FAIL (1<<13) > +#define ACPI_WDDT_UNKNOWN_RESET (1<<14) > > -/* Status flags */ > +/* Flags for Capability field above */ > > -#define ACPI_RASF_COMMAND_COMPLETE (1) > -#define ACPI_RASF_SCI_DOORBELL (1<<1) > -#define ACPI_RASF_ERROR (1<<2) > -#define ACPI_RASF_STATUS (0x1F<<3) > +#define ACPI_WDDT_AUTO_RESET (1) > +#define ACPI_WDDT_ALERT_SUPPORT (1<<1) > > > /******************************************************************************* > * > - * STAO - Status Override Table (_STA override) - ACPI 6.0 > + * WDRT - Watchdog Resource Table > * Version 1 > * > - * Conforms to "ACPI Specification for Status Override Table" > - * 6 January 2015 > + * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003", > + * Version 1.01, August 28, 2006 > * > ******************************************************************************/ > > -typedef struct acpi_table_stao > +typedef struct acpi_table_wdrt > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT8 IgnoreUart; > + ACPI_GENERIC_ADDRESS ControlRegister; > + ACPI_GENERIC_ADDRESS CountRegister; > + UINT16 PciDeviceId; > + UINT16 PciVendorId; > + UINT8 PciBus; /* PCI Bus number */ > + UINT8 PciDevice; /* PCI Device number */ > + UINT8 PciFunction; /* PCI Function number */ > + UINT8 PciSegment; /* PCI Segment number */ > + UINT16 MaxCount; /* Maximum counter value supported */ > + UINT8 Units; > > -} ACPI_TABLE_STAO; > +} ACPI_TABLE_WDRT; > > > /******************************************************************************* > @@ -1087,6 +855,30 @@ typedef struct acpi_table_wpbt > } ACPI_TABLE_WPBT; > > > +/******************************************************************************* > + * > + * WSMT - Windows SMM Security Migrations Table > + * Version 1 > + * > + * Conforms to "Windows SMM Security Migrations Table", > + * Version 1.0, April 18, 2016 > + * > + ******************************************************************************/ > + > +typedef struct acpi_table_wsmt > +{ > + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > + UINT32 ProtectionFlags; > + > +} ACPI_TABLE_WSMT; > + > +/* Flags for ProtectionFlags field above */ > + > +#define ACPI_WSMT_FIXED_COMM_BUFFERS (1) > +#define ACPI_WSMT_COMM_BUFFER_NESTED_PTR_PROTECTION (2) > +#define ACPI_WSMT_SYSTEM_RESOURCE_PROTECTION (4) > + > + > /******************************************************************************* > * > * XENV - Xen Environment Table (ACPI 6.0) > diff --git a/src/acpica/source/include/amlcode.h b/src/acpica/source/include/amlcode.h > index 3b27c92e..6507ae67 100644 > --- a/src/acpica/source/include/amlcode.h > +++ b/src/acpica/source/include/amlcode.h > @@ -386,24 +386,9 @@ > #define ARGI_DEVICE_REF 0x0D > #define ARGI_REFERENCE 0x0E > #define ARGI_TARGETREF 0x0F /* Target, subject to implicit conversion */ > -#define ARGI_SIMPLE_TARGET 0x10 /* Name, Local, Arg -- no implicit conversion */ > -#define ARGI_STORE_TARGET 0x11 /* Target for store is TARGETREF + package objects */ > -/* > - * #define ARGI_FIXED_TARGET 0x10 Target, no implicit conversion > - * > - * Removed 10/2016. ARGI_FIXED_TARGET was used for these operators: > - * FromBCD > - * ToBCD > - * ToDecimalString > - * ToHexString > - * ToInteger > - * ToBuffer > - * The purpose of this type was to disable "implicit result conversion", > - * but this was incorrect per the ACPI spec and other ACPI implementations. > - * These operators now have the target operand defined as a normal > - * ARGI_TARGETREF. > - */ > - > +#define ARGI_FIXED_TARGET 0x10 /* Target, no implicit conversion */ > +#define ARGI_SIMPLE_TARGET 0x11 /* Name, Local, Arg -- no implicit conversion */ > +#define ARGI_STORE_TARGET 0x12 /* Target for store is TARGETREF + package objects */ > > /* Multiple/complex types */ > > diff --git a/src/acpica/source/include/platform/aclinux.h b/src/acpica/source/include/platform/aclinux.h > index 1d7fdaa8..836b5eb5 100644 > --- a/src/acpica/source/include/platform/aclinux.h > +++ b/src/acpica/source/include/platform/aclinux.h > @@ -166,6 +166,7 @@ > > #define ACPI_USE_SYSTEM_CLIBRARY > #define ACPI_USE_DO_WHILE_0 > +#define ACPI_IGNORE_PACKAGE_RESOLUTION_ERRORS > > > #ifdef __KERNEL__ > Acked-by: Ivan Hu <ivan.hu@canonical.com>
diff --git a/src/acpica/source/common/dmtbdump.c b/src/acpica/source/common/dmtbdump.c index c9699d5f..cf2ed6d6 100644 --- a/src/acpica/source/common/dmtbdump.c +++ b/src/acpica/source/common/dmtbdump.c @@ -603,3832 +603,3 @@ AcpiDmValidateFadtLength ( "found %X expected %X\n", Revision, Length, ExpectedLength); } - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpAsf - * - * PARAMETERS: Table - A ASF table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a ASF table - * - ******************************************************************************/ - -void -AcpiDmDumpAsf ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - UINT32 Offset = sizeof (ACPI_TABLE_HEADER); - ACPI_ASF_INFO *Subtable; - ACPI_DMTABLE_INFO *InfoTable; - ACPI_DMTABLE_INFO *DataInfoTable = NULL; - UINT8 *DataTable = NULL; - UINT32 DataCount = 0; - UINT32 DataLength = 0; - UINT32 DataOffset = 0; - UINT32 i; - UINT8 Type; - - - /* No main table, only subtables */ - - Subtable = ACPI_ADD_PTR (ACPI_ASF_INFO, Table, Offset); - while (Offset < Table->Length) - { - /* Common subtable header */ - - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, - Subtable->Header.Length, AcpiDmTableInfoAsfHdr); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* The actual type is the lower 7 bits of Type */ - - Type = (UINT8) (Subtable->Header.Type & 0x7F); - - switch (Type) - { - case ACPI_ASF_TYPE_INFO: - - InfoTable = AcpiDmTableInfoAsf0; - break; - - case ACPI_ASF_TYPE_ALERT: - - InfoTable = AcpiDmTableInfoAsf1; - DataInfoTable = AcpiDmTableInfoAsf1a; - DataTable = ACPI_ADD_PTR (UINT8, Subtable, sizeof (ACPI_ASF_ALERT)); - DataCount = ACPI_CAST_PTR (ACPI_ASF_ALERT, Subtable)->Alerts; - DataLength = ACPI_CAST_PTR (ACPI_ASF_ALERT, Subtable)->DataLength; - DataOffset = Offset + sizeof (ACPI_ASF_ALERT); - break; - - case ACPI_ASF_TYPE_CONTROL: - - InfoTable = AcpiDmTableInfoAsf2; - DataInfoTable = AcpiDmTableInfoAsf2a; - DataTable = ACPI_ADD_PTR (UINT8, Subtable, sizeof (ACPI_ASF_REMOTE)); - DataCount = ACPI_CAST_PTR (ACPI_ASF_REMOTE, Subtable)->Controls; - DataLength = ACPI_CAST_PTR (ACPI_ASF_REMOTE, Subtable)->DataLength; - DataOffset = Offset + sizeof (ACPI_ASF_REMOTE); - break; - - case ACPI_ASF_TYPE_BOOT: - - InfoTable = AcpiDmTableInfoAsf3; - break; - - case ACPI_ASF_TYPE_ADDRESS: - - InfoTable = AcpiDmTableInfoAsf4; - DataTable = ACPI_ADD_PTR (UINT8, Subtable, sizeof (ACPI_ASF_ADDRESS)); - DataLength = ACPI_CAST_PTR (ACPI_ASF_ADDRESS, Subtable)->Devices; - DataOffset = Offset + sizeof (ACPI_ASF_ADDRESS); - break; - - default: - - AcpiOsPrintf ("\n**** Unknown ASF subtable type 0x%X\n", - Subtable->Header.Type); - return; - } - - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, - Subtable->Header.Length, InfoTable); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Dump variable-length extra data */ - - switch (Type) - { - case ACPI_ASF_TYPE_ALERT: - case ACPI_ASF_TYPE_CONTROL: - - for (i = 0; i < DataCount; i++) - { - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Table->Length, DataOffset, - DataTable, DataLength, DataInfoTable); - if (ACPI_FAILURE (Status)) - { - return; - } - - DataTable = ACPI_ADD_PTR (UINT8, DataTable, DataLength); - DataOffset += DataLength; - } - break; - - case ACPI_ASF_TYPE_ADDRESS: - - for (i = 0; i < DataLength; i++) - { - if (!(i % 16)) - { - AcpiDmLineHeader (DataOffset, 1, "Addresses"); - } - - AcpiOsPrintf ("%2.2X ", *DataTable); - DataTable++; - DataOffset++; - - if (DataOffset > Table->Length) - { - AcpiOsPrintf ( - "**** ACPI table terminates in the middle of a " - "data structure! (ASF! table)\n"); - return; - } - } - - AcpiOsPrintf ("\n"); - break; - - default: - - break; - } - - AcpiOsPrintf ("\n"); - - /* Point to next subtable */ - - if (!Subtable->Header.Length) - { - AcpiOsPrintf ("Invalid zero subtable header length\n"); - return; - } - - Offset += Subtable->Header.Length; - Subtable = ACPI_ADD_PTR (ACPI_ASF_INFO, Subtable, - Subtable->Header.Length); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpCpep - * - * PARAMETERS: Table - A CPEP table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a CPEP. This table type consists - * of an open-ended number of subtables. - * - ******************************************************************************/ - -void -AcpiDmDumpCpep ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - ACPI_CPEP_POLLING *Subtable; - UINT32 Length = Table->Length; - UINT32 Offset = sizeof (ACPI_TABLE_CPEP); - - - /* Main table */ - - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoCpep); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Subtables */ - - Subtable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Table, Offset); - while (Offset < Table->Length) - { - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Length, Offset, Subtable, - Subtable->Header.Length, AcpiDmTableInfoCpep0); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Point to next subtable */ - - Offset += Subtable->Header.Length; - Subtable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Subtable, - Subtable->Header.Length); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpCsrt - * - * PARAMETERS: Table - A CSRT table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a CSRT. This table type consists - * of an open-ended number of subtables. - * - ******************************************************************************/ - -void -AcpiDmDumpCsrt ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - ACPI_CSRT_GROUP *Subtable; - ACPI_CSRT_SHARED_INFO *SharedInfoTable; - ACPI_CSRT_DESCRIPTOR *SubSubtable; - UINT32 Length = Table->Length; - UINT32 Offset = sizeof (ACPI_TABLE_CSRT); - UINT32 SubOffset; - UINT32 SubSubOffset; - UINT32 InfoLength; - - - /* The main table only contains the ACPI header, thus already handled */ - - /* Subtables (Resource Groups) */ - - Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Table, Offset); - while (Offset < Table->Length) - { - /* Resource group subtable */ - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Length, Offset, Subtable, - Subtable->Length, AcpiDmTableInfoCsrt0); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Shared info subtable (One per resource group) */ - - SubOffset = sizeof (ACPI_CSRT_GROUP); - SharedInfoTable = ACPI_ADD_PTR (ACPI_CSRT_SHARED_INFO, Table, - Offset + SubOffset); - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Length, Offset + SubOffset, SharedInfoTable, - sizeof (ACPI_CSRT_SHARED_INFO), AcpiDmTableInfoCsrt1); - if (ACPI_FAILURE (Status)) - { - return; - } - - SubOffset += Subtable->SharedInfoLength; - - /* Sub-Subtables (Resource Descriptors) */ - - SubSubtable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, Table, - Offset + SubOffset); - - while ((SubOffset < Subtable->Length) && - ((Offset + SubOffset) < Table->Length)) - { - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubtable, - SubSubtable->Length, AcpiDmTableInfoCsrt2); - if (ACPI_FAILURE (Status)) - { - return; - } - - SubSubOffset = sizeof (ACPI_CSRT_DESCRIPTOR); - - /* Resource-specific info buffer */ - - InfoLength = SubSubtable->Length - SubSubOffset; - if (InfoLength) - { - Status = AcpiDmDumpTable (Length, - Offset + SubOffset + SubSubOffset, Table, - InfoLength, AcpiDmTableInfoCsrt2a); - if (ACPI_FAILURE (Status)) - { - return; - } - SubSubOffset += InfoLength; - } - - /* Point to next sub-subtable */ - - SubOffset += SubSubtable->Length; - SubSubtable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, SubSubtable, - SubSubtable->Length); - } - - /* Point to next subtable */ - - Offset += Subtable->Length; - Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Subtable, - Subtable->Length); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpDbg2 - * - * PARAMETERS: Table - A DBG2 table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a DBG2. This table type consists - * of an open-ended number of subtables. - * - ******************************************************************************/ - -void -AcpiDmDumpDbg2 ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - ACPI_DBG2_DEVICE *Subtable; - UINT32 Length = Table->Length; - UINT32 Offset = sizeof (ACPI_TABLE_DBG2); - UINT32 i; - UINT32 ArrayOffset; - UINT32 AbsoluteOffset; - UINT8 *Array; - - - /* Main table */ - - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDbg2); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Subtables */ - - Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Table, Offset); - while (Offset < Table->Length) - { - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Length, Offset, Subtable, - Subtable->Length, AcpiDmTableInfoDbg2Device); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Dump the BaseAddress array */ - - for (i = 0; i < Subtable->RegisterCount; i++) - { - ArrayOffset = Subtable->BaseAddressOffset + - (sizeof (ACPI_GENERIC_ADDRESS) * i); - AbsoluteOffset = Offset + ArrayOffset; - Array = (UINT8 *) Subtable + ArrayOffset; - - Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, - Subtable->Length, AcpiDmTableInfoDbg2Addr); - if (ACPI_FAILURE (Status)) - { - return; - } - } - - /* Dump the AddressSize array */ - - for (i = 0; i < Subtable->RegisterCount; i++) - { - ArrayOffset = Subtable->AddressSizeOffset + - (sizeof (UINT32) * i); - AbsoluteOffset = Offset + ArrayOffset; - Array = (UINT8 *) Subtable + ArrayOffset; - - Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, - Subtable->Length, AcpiDmTableInfoDbg2Size); - if (ACPI_FAILURE (Status)) - { - return; - } - } - - /* Dump the Namestring (required) */ - - AcpiOsPrintf ("\n"); - ArrayOffset = Subtable->NamepathOffset; - AbsoluteOffset = Offset + ArrayOffset; - Array = (UINT8 *) Subtable + ArrayOffset; - - Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, - Subtable->Length, AcpiDmTableInfoDbg2Name); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Dump the OemData (optional) */ - - if (Subtable->OemDataOffset) - { - Status = AcpiDmDumpTable (Length, Offset + Subtable->OemDataOffset, - Table, Subtable->OemDataLength, - AcpiDmTableInfoDbg2OemData); - if (ACPI_FAILURE (Status)) - { - return; - } - } - - /* Point to next subtable */ - - Offset += Subtable->Length; - Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Subtable, - Subtable->Length); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpDmar - * - * PARAMETERS: Table - A DMAR table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a DMAR. This table type consists - * of an open-ended number of subtables. - * - ******************************************************************************/ - -void -AcpiDmDumpDmar ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - ACPI_DMAR_HEADER *Subtable; - UINT32 Length = Table->Length; - UINT32 Offset = sizeof (ACPI_TABLE_DMAR); - ACPI_DMTABLE_INFO *InfoTable; - ACPI_DMAR_DEVICE_SCOPE *ScopeTable; - UINT32 ScopeOffset; - UINT8 *PciPath; - UINT32 PathOffset; - - - /* Main table */ - - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDmar); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Subtables */ - - Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Table, Offset); - while (Offset < Table->Length) - { - /* Common subtable header */ - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Length, Offset, Subtable, - Subtable->Length, AcpiDmTableInfoDmarHdr); - if (ACPI_FAILURE (Status)) - { - return; - } - - AcpiOsPrintf ("\n"); - - switch (Subtable->Type) - { - case ACPI_DMAR_TYPE_HARDWARE_UNIT: - - InfoTable = AcpiDmTableInfoDmar0; - ScopeOffset = sizeof (ACPI_DMAR_HARDWARE_UNIT); - break; - - case ACPI_DMAR_TYPE_RESERVED_MEMORY: - - InfoTable = AcpiDmTableInfoDmar1; - ScopeOffset = sizeof (ACPI_DMAR_RESERVED_MEMORY); - break; - - case ACPI_DMAR_TYPE_ROOT_ATS: - - InfoTable = AcpiDmTableInfoDmar2; - ScopeOffset = sizeof (ACPI_DMAR_ATSR); - break; - - case ACPI_DMAR_TYPE_HARDWARE_AFFINITY: - - InfoTable = AcpiDmTableInfoDmar3; - ScopeOffset = sizeof (ACPI_DMAR_RHSA); - break; - - case ACPI_DMAR_TYPE_NAMESPACE: - - InfoTable = AcpiDmTableInfoDmar4; - ScopeOffset = sizeof (ACPI_DMAR_ANDD); - break; - - default: - - AcpiOsPrintf ("\n**** Unknown DMAR subtable type 0x%X\n\n", - Subtable->Type); - return; - } - - Status = AcpiDmDumpTable (Length, Offset, Subtable, - Subtable->Length, InfoTable); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* - * Dump the optional device scope entries - */ - if ((Subtable->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) || - (Subtable->Type == ACPI_DMAR_TYPE_NAMESPACE)) - { - /* These types do not support device scopes */ - - goto NextSubtable; - } - - ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, Subtable, ScopeOffset); - while (ScopeOffset < Subtable->Length) - { - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Length, Offset + ScopeOffset, ScopeTable, - ScopeTable->Length, AcpiDmTableInfoDmarScope); - if (ACPI_FAILURE (Status)) - { - return; - } - AcpiOsPrintf ("\n"); - - /* Dump the PCI Path entries for this device scope */ - - PathOffset = sizeof (ACPI_DMAR_DEVICE_SCOPE); /* Path entries start at this offset */ - - PciPath = ACPI_ADD_PTR (UINT8, ScopeTable, - sizeof (ACPI_DMAR_DEVICE_SCOPE)); - - while (PathOffset < ScopeTable->Length) - { - AcpiDmLineHeader ((PathOffset + ScopeOffset + Offset), 2, - "PCI Path"); - AcpiOsPrintf ("%2.2X,%2.2X\n", PciPath[0], PciPath[1]); - - /* Point to next PCI Path entry */ - - PathOffset += 2; - PciPath += 2; - AcpiOsPrintf ("\n"); - } - - /* Point to next device scope entry */ - - ScopeOffset += ScopeTable->Length; - ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, - ScopeTable, ScopeTable->Length); - } - -NextSubtable: - /* Point to next subtable */ - - Offset += Subtable->Length; - Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Subtable, - Subtable->Length); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpDrtm - * - * PARAMETERS: Table - A DRTM table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a DRTM. - * - ******************************************************************************/ - -void -AcpiDmDumpDrtm ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - UINT32 Offset; - ACPI_DRTM_VTABLE_LIST *DrtmVtl; - ACPI_DRTM_RESOURCE_LIST *DrtmRl; - ACPI_DRTM_DPS_ID *DrtmDps; - UINT32 Count; - - - /* Main table */ - - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, - AcpiDmTableInfoDrtm); - if (ACPI_FAILURE (Status)) - { - return; - } - - Offset = sizeof (ACPI_TABLE_DRTM); - - /* Sub-tables */ - - /* Dump ValidatedTable length */ - - DrtmVtl = ACPI_ADD_PTR (ACPI_DRTM_VTABLE_LIST, Table, Offset); - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Table->Length, Offset, - DrtmVtl, ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST, ValidatedTables), - AcpiDmTableInfoDrtm0); - if (ACPI_FAILURE (Status)) - { - return; - } - - Offset += ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST, ValidatedTables); - - /* Dump Validated table addresses */ - - Count = 0; - while ((Offset < Table->Length) && - (DrtmVtl->ValidatedTableCount > Count)) - { - Status = AcpiDmDumpTable (Table->Length, Offset, - ACPI_ADD_PTR (void, Table, Offset), sizeof (UINT64), - AcpiDmTableInfoDrtm0a); - if (ACPI_FAILURE (Status)) - { - return; - } - - Offset += sizeof (UINT64); - Count++; - } - - /* Dump ResourceList length */ - - DrtmRl = ACPI_ADD_PTR (ACPI_DRTM_RESOURCE_LIST, Table, Offset); - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Table->Length, Offset, - DrtmRl, ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST, Resources), - AcpiDmTableInfoDrtm1); - if (ACPI_FAILURE (Status)) - { - return; - } - - Offset += ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST, Resources); - - /* Dump the Resource List */ - - Count = 0; - while ((Offset < Table->Length) && - (DrtmRl->ResourceCount > Count)) - { - Status = AcpiDmDumpTable (Table->Length, Offset, - ACPI_ADD_PTR (void, Table, Offset), - sizeof (ACPI_DRTM_RESOURCE), AcpiDmTableInfoDrtm1a); - if (ACPI_FAILURE (Status)) - { - return; - } - - Offset += sizeof (ACPI_DRTM_RESOURCE); - Count++; - } - - /* Dump DPS */ - - DrtmDps = ACPI_ADD_PTR (ACPI_DRTM_DPS_ID, Table, Offset); - AcpiOsPrintf ("\n"); - (void) AcpiDmDumpTable (Table->Length, Offset, - DrtmDps, sizeof (ACPI_DRTM_DPS_ID), AcpiDmTableInfoDrtm2); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpEinj - * - * PARAMETERS: Table - A EINJ table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a EINJ. This table type consists - * of an open-ended number of subtables. - * - ******************************************************************************/ - -void -AcpiDmDumpEinj ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - ACPI_WHEA_HEADER *Subtable; - UINT32 Length = Table->Length; - UINT32 Offset = sizeof (ACPI_TABLE_EINJ); - - - /* Main table */ - - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoEinj); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Subtables */ - - Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset); - while (Offset < Table->Length) - { - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Length, Offset, Subtable, - sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoEinj0); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Point to next subtable (each subtable is of fixed length) */ - - Offset += sizeof (ACPI_WHEA_HEADER); - Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Subtable, - sizeof (ACPI_WHEA_HEADER)); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpErst - * - * PARAMETERS: Table - A ERST table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a ERST. This table type consists - * of an open-ended number of subtables. - * - ******************************************************************************/ - -void -AcpiDmDumpErst ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - ACPI_WHEA_HEADER *Subtable; - UINT32 Length = Table->Length; - UINT32 Offset = sizeof (ACPI_TABLE_ERST); - - - /* Main table */ - - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoErst); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Subtables */ - - Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset); - while (Offset < Table->Length) - { - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Length, Offset, Subtable, - sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoErst0); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Point to next subtable (each subtable is of fixed length) */ - - Offset += sizeof (ACPI_WHEA_HEADER); - Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Subtable, - sizeof (ACPI_WHEA_HEADER)); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpFpdt - * - * PARAMETERS: Table - A FPDT table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a FPDT. This table type consists - * of an open-ended number of subtables. - * - ******************************************************************************/ - -void -AcpiDmDumpFpdt ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - ACPI_FPDT_HEADER *Subtable; - UINT32 Length = Table->Length; - UINT32 Offset = sizeof (ACPI_TABLE_FPDT); - ACPI_DMTABLE_INFO *InfoTable; - - - /* There is no main table (other than the standard ACPI header) */ - - /* Subtables */ - - Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Table, Offset); - while (Offset < Table->Length) - { - /* Common subtable header */ - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Length, Offset, Subtable, - Subtable->Length, AcpiDmTableInfoFpdtHdr); - if (ACPI_FAILURE (Status)) - { - return; - } - - switch (Subtable->Type) - { - case ACPI_FPDT_TYPE_BOOT: - - InfoTable = AcpiDmTableInfoFpdt0; - break; - - case ACPI_FPDT_TYPE_S3PERF: - - InfoTable = AcpiDmTableInfoFpdt1; - break; - - default: - - AcpiOsPrintf ("\n**** Unknown FPDT subtable type 0x%X\n\n", - Subtable->Type); - - /* Attempt to continue */ - - if (!Subtable->Length) - { - AcpiOsPrintf ("Invalid zero length subtable\n"); - return; - } - goto NextSubtable; - } - - Status = AcpiDmDumpTable (Length, Offset, Subtable, - Subtable->Length, InfoTable); - if (ACPI_FAILURE (Status)) - { - return; - } - -NextSubtable: - /* Point to next subtable */ - - Offset += Subtable->Length; - Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Subtable, - Subtable->Length); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpGtdt - * - * PARAMETERS: Table - A GTDT table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a GTDT. This table type consists - * of an open-ended number of subtables. - * - ******************************************************************************/ - -void -AcpiDmDumpGtdt ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - ACPI_GTDT_HEADER *Subtable; - UINT32 Length = Table->Length; - UINT32 Offset = sizeof (ACPI_TABLE_GTDT); - ACPI_DMTABLE_INFO *InfoTable; - UINT32 SubtableLength; - UINT32 GtCount; - ACPI_GTDT_TIMER_ENTRY *GtxTable; - - - /* Main table */ - - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoGtdt); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Subtables */ - - Subtable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Table, Offset); - while (Offset < Table->Length) - { - /* Common subtable header */ - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Length, Offset, Subtable, - Subtable->Length, AcpiDmTableInfoGtdtHdr); - if (ACPI_FAILURE (Status)) - { - return; - } - - GtCount = 0; - switch (Subtable->Type) - { - case ACPI_GTDT_TYPE_TIMER_BLOCK: - - SubtableLength = sizeof (ACPI_GTDT_TIMER_BLOCK); - GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK, - Subtable))->TimerCount; - - InfoTable = AcpiDmTableInfoGtdt0; - break; - - case ACPI_GTDT_TYPE_WATCHDOG: - - SubtableLength = sizeof (ACPI_GTDT_WATCHDOG); - - InfoTable = AcpiDmTableInfoGtdt1; - break; - - default: - - /* Cannot continue on unknown type - no length */ - - AcpiOsPrintf ("\n**** Unknown GTDT subtable type 0x%X\n", - Subtable->Type); - return; - } - - Status = AcpiDmDumpTable (Length, Offset, Subtable, - Subtable->Length, InfoTable); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Point to end of current subtable (each subtable above is of fixed length) */ - - Offset += SubtableLength; - - /* If there are any Gt Timer Blocks from above, dump them now */ - - if (GtCount) - { - GtxTable = ACPI_ADD_PTR ( - ACPI_GTDT_TIMER_ENTRY, Subtable, SubtableLength); - SubtableLength += GtCount * sizeof (ACPI_GTDT_TIMER_ENTRY); - - while (GtCount) - { - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Length, Offset, GtxTable, - sizeof (ACPI_GTDT_TIMER_ENTRY), AcpiDmTableInfoGtdt0a); - if (ACPI_FAILURE (Status)) - { - return; - } - Offset += sizeof (ACPI_GTDT_TIMER_ENTRY); - GtxTable++; - GtCount--; - } - } - - /* Point to next subtable */ - - Subtable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Subtable, SubtableLength); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpHest - * - * PARAMETERS: Table - A HEST table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a HEST. This table type consists - * of an open-ended number of subtables. - * - ******************************************************************************/ - -void -AcpiDmDumpHest ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - ACPI_HEST_HEADER *Subtable; - UINT32 Length = Table->Length; - UINT32 Offset = sizeof (ACPI_TABLE_HEST); - ACPI_DMTABLE_INFO *InfoTable; - UINT32 SubtableLength; - UINT32 BankCount; - ACPI_HEST_IA_ERROR_BANK *BankTable; - - - /* Main table */ - - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoHest); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Subtables */ - - Subtable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Table, Offset); - while (Offset < Table->Length) - { - BankCount = 0; - switch (Subtable->Type) - { - case ACPI_HEST_TYPE_IA32_CHECK: - - InfoTable = AcpiDmTableInfoHest0; - SubtableLength = sizeof (ACPI_HEST_IA_MACHINE_CHECK); - BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_MACHINE_CHECK, - Subtable))->NumHardwareBanks; - break; - - case ACPI_HEST_TYPE_IA32_CORRECTED_CHECK: - - InfoTable = AcpiDmTableInfoHest1; - SubtableLength = sizeof (ACPI_HEST_IA_CORRECTED); - BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_CORRECTED, - Subtable))->NumHardwareBanks; - break; - - case ACPI_HEST_TYPE_IA32_NMI: - - InfoTable = AcpiDmTableInfoHest2; - SubtableLength = sizeof (ACPI_HEST_IA_NMI); - break; - - case ACPI_HEST_TYPE_AER_ROOT_PORT: - - InfoTable = AcpiDmTableInfoHest6; - SubtableLength = sizeof (ACPI_HEST_AER_ROOT); - break; - - case ACPI_HEST_TYPE_AER_ENDPOINT: - - InfoTable = AcpiDmTableInfoHest7; - SubtableLength = sizeof (ACPI_HEST_AER); - break; - - case ACPI_HEST_TYPE_AER_BRIDGE: - - InfoTable = AcpiDmTableInfoHest8; - SubtableLength = sizeof (ACPI_HEST_AER_BRIDGE); - break; - - case ACPI_HEST_TYPE_GENERIC_ERROR: - - InfoTable = AcpiDmTableInfoHest9; - SubtableLength = sizeof (ACPI_HEST_GENERIC); - break; - - case ACPI_HEST_TYPE_GENERIC_ERROR_V2: - - InfoTable = AcpiDmTableInfoHest10; - SubtableLength = sizeof (ACPI_HEST_GENERIC_V2); - break; - - case ACPI_HEST_TYPE_IA32_DEFERRED_CHECK: - - InfoTable = AcpiDmTableInfoHest11; - SubtableLength = sizeof (ACPI_HEST_IA_DEFERRED_CHECK); - BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_DEFERRED_CHECK, - Subtable))->NumHardwareBanks; - break; - - default: - - /* Cannot continue on unknown type - no length */ - - AcpiOsPrintf ("\n**** Unknown HEST subtable type 0x%X\n", - Subtable->Type); - return; - } - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Length, Offset, Subtable, - SubtableLength, InfoTable); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Point to end of current subtable (each subtable above is of fixed length) */ - - Offset += SubtableLength; - - /* If there are any (fixed-length) Error Banks from above, dump them now */ - - if (BankCount) - { - BankTable = ACPI_ADD_PTR (ACPI_HEST_IA_ERROR_BANK, Subtable, - SubtableLength); - SubtableLength += BankCount * sizeof (ACPI_HEST_IA_ERROR_BANK); - - while (BankCount) - { - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Length, Offset, BankTable, - sizeof (ACPI_HEST_IA_ERROR_BANK), AcpiDmTableInfoHestBank); - if (ACPI_FAILURE (Status)) - { - return; - } - - Offset += sizeof (ACPI_HEST_IA_ERROR_BANK); - BankTable++; - BankCount--; - } - } - - /* Point to next subtable */ - - Subtable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Subtable, SubtableLength); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpHmat - * - * PARAMETERS: Table - A HMAT table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a HMAT. - * - ******************************************************************************/ - -void -AcpiDmDumpHmat ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - ACPI_HMAT_STRUCTURE *HmatStruct; - ACPI_HMAT_LOCALITY *HmatLocality; - ACPI_HMAT_CACHE *HmatCache; - UINT32 Offset; - UINT32 SubtableOffset; - UINT32 Length; - ACPI_DMTABLE_INFO *InfoTable; - UINT32 i, j; - - - /* Main table */ - - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoHmat); - if (ACPI_FAILURE (Status)) - { - return; - } - Offset = sizeof (ACPI_TABLE_HMAT); - - while (Offset < Table->Length) - { - AcpiOsPrintf ("\n"); - SubtableOffset = 0; - - /* Dump HMAT structure header */ - - HmatStruct = ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, Table, Offset); - if (HmatStruct->Length < sizeof (ACPI_HMAT_STRUCTURE)) - { - AcpiOsPrintf ("Invalid HMAT structure length\n"); - return; - } - Status = AcpiDmDumpTable (Table->Length, Offset, HmatStruct, - HmatStruct->Length, AcpiDmTableInfoHmatHdr); - if (ACPI_FAILURE (Status)) - { - return; - } - - switch (HmatStruct->Type) - { - case ACPI_HMAT_TYPE_ADDRESS_RANGE: - - InfoTable = AcpiDmTableInfoHmat0; - Length = sizeof (ACPI_HMAT_ADDRESS_RANGE); - break; - - case ACPI_HMAT_TYPE_LOCALITY: - - InfoTable = AcpiDmTableInfoHmat1; - Length = sizeof (ACPI_HMAT_LOCALITY); - break; - - case ACPI_HMAT_TYPE_CACHE: - - InfoTable = AcpiDmTableInfoHmat2; - Length = sizeof (ACPI_HMAT_CACHE); - break; - - default: - - AcpiOsPrintf ("\n**** Unknown HMAT structure type 0x%X\n", - HmatStruct->Type); - - /* Attempt to continue */ - - goto NextSubtable; - } - - /* Dump HMAT structure body */ - - if (HmatStruct->Length < Length) - { - AcpiOsPrintf ("Invalid HMAT structure length\n"); - return; - } - Status = AcpiDmDumpTable (Table->Length, Offset, HmatStruct, - HmatStruct->Length, InfoTable); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Dump HMAT structure additionals */ - - switch (HmatStruct->Type) - { - case ACPI_HMAT_TYPE_LOCALITY: - - HmatLocality = ACPI_CAST_PTR (ACPI_HMAT_LOCALITY, HmatStruct); - SubtableOffset = sizeof (ACPI_HMAT_LOCALITY); - - /* Dump initiator proximity domains */ - - if ((UINT32)(HmatStruct->Length - SubtableOffset) < - (UINT32)(HmatLocality->NumberOfInitiatorPDs * 4)) - { - AcpiOsPrintf ("Invalid initiator proximity domain number\n"); - return; - } - for (i = 0; i < HmatLocality->NumberOfInitiatorPDs; i++) - { - Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, - ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), - 4, AcpiDmTableInfoHmat1a); - SubtableOffset += 4; - } - - /* Dump target proximity domains */ - - if ((UINT32)(HmatStruct->Length - SubtableOffset) < - (UINT32)(HmatLocality->NumberOfTargetPDs * 4)) - { - AcpiOsPrintf ("Invalid target proximity domain number\n"); - return; - } - for (i = 0; i < HmatLocality->NumberOfTargetPDs; i++) - { - Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, - ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), - 4, AcpiDmTableInfoHmat1b); - SubtableOffset += 4; - } - - /* Dump latency/bandwidth entris */ - - if ((UINT32)(HmatStruct->Length - SubtableOffset) < - (UINT32)(HmatLocality->NumberOfInitiatorPDs * - HmatLocality->NumberOfTargetPDs * 2)) - { - AcpiOsPrintf ("Invalid latency/bandwidth entry number\n"); - return; - } - for (i = 0; i < HmatLocality->NumberOfInitiatorPDs; i++) - { - for (j = 0; j < HmatLocality->NumberOfTargetPDs; j++) - { - Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, - ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), - 2, AcpiDmTableInfoHmat1c); - SubtableOffset += 2; - } - } - break; - - case ACPI_HMAT_TYPE_CACHE: - - HmatCache = ACPI_CAST_PTR (ACPI_HMAT_CACHE, HmatStruct); - SubtableOffset = sizeof (ACPI_HMAT_CACHE); - - /* Dump SMBIOS handles */ - - if ((UINT32)(HmatStruct->Length - SubtableOffset) < - (UINT32)(HmatCache->NumberOfSMBIOSHandles * 2)) - { - AcpiOsPrintf ("Invalid SMBIOS handle number\n"); - return; - } - for (i = 0; i < HmatCache->NumberOfSMBIOSHandles; i++) - { - Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, - ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), - 2, AcpiDmTableInfoHmat2a); - SubtableOffset += 2; - } - break; - - default: - - break; - } - -NextSubtable: - /* Point to next HMAT structure subtable */ - - Offset += (HmatStruct->Length); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpIort - * - * PARAMETERS: Table - A IORT table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a IORT - * - ******************************************************************************/ - -void -AcpiDmDumpIort ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - ACPI_TABLE_IORT *Iort; - ACPI_IORT_NODE *IortNode; - ACPI_IORT_ITS_GROUP *IortItsGroup = NULL; - ACPI_IORT_SMMU *IortSmmu = NULL; - UINT32 Offset; - UINT32 NodeOffset; - UINT32 Length; - ACPI_DMTABLE_INFO *InfoTable; - char *String; - UINT32 i; - - - /* Main table */ - - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIort); - if (ACPI_FAILURE (Status)) - { - return; - } - - Iort = ACPI_CAST_PTR (ACPI_TABLE_IORT, Table); - Offset = sizeof (ACPI_TABLE_IORT); - - /* Dump the OptionalPadding (optional) */ - - if (Iort->NodeOffset > Offset) - { - Status = AcpiDmDumpTable (Table->Length, Offset, Table, - Iort->NodeOffset - Offset, AcpiDmTableInfoIortPad); - if (ACPI_FAILURE (Status)) - { - return; - } - } - - Offset = Iort->NodeOffset; - while (Offset < Table->Length) - { - /* Common subtable header */ - - IortNode = ACPI_ADD_PTR (ACPI_IORT_NODE, Table, Offset); - AcpiOsPrintf ("\n"); - Length = ACPI_OFFSET (ACPI_IORT_NODE, NodeData); - Status = AcpiDmDumpTable (Table->Length, Offset, - IortNode, Length, AcpiDmTableInfoIortHdr); - if (ACPI_FAILURE (Status)) - { - return; - } - - NodeOffset = Length; - - switch (IortNode->Type) - { - case ACPI_IORT_NODE_ITS_GROUP: - - InfoTable = AcpiDmTableInfoIort0; - Length = ACPI_OFFSET (ACPI_IORT_ITS_GROUP, Identifiers); - IortItsGroup = ACPI_ADD_PTR (ACPI_IORT_ITS_GROUP, IortNode, NodeOffset); - break; - - case ACPI_IORT_NODE_NAMED_COMPONENT: - - InfoTable = AcpiDmTableInfoIort1; - Length = ACPI_OFFSET (ACPI_IORT_NAMED_COMPONENT, DeviceName); - String = ACPI_ADD_PTR (char, IortNode, NodeOffset + Length); - Length += strlen (String) + 1; - break; - - case ACPI_IORT_NODE_PCI_ROOT_COMPLEX: - - InfoTable = AcpiDmTableInfoIort2; - Length = IortNode->Length - NodeOffset; - break; - - case ACPI_IORT_NODE_SMMU: - - InfoTable = AcpiDmTableInfoIort3; - Length = ACPI_OFFSET (ACPI_IORT_SMMU, Interrupts); - IortSmmu = ACPI_ADD_PTR (ACPI_IORT_SMMU, IortNode, NodeOffset); - break; - - case ACPI_IORT_NODE_SMMU_V3: - - InfoTable = AcpiDmTableInfoIort4; - Length = IortNode->Length - NodeOffset; - break; - - default: - - AcpiOsPrintf ("\n**** Unknown IORT node type 0x%X\n", - IortNode->Type); - - /* Attempt to continue */ - - if (!IortNode->Length) - { - AcpiOsPrintf ("Invalid zero length IORT node\n"); - return; - } - goto NextSubtable; - } - - /* Dump the node subtable header */ - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, - ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), - Length, InfoTable); - if (ACPI_FAILURE (Status)) - { - return; - } - - NodeOffset += Length; - - /* Dump the node specific data */ - - switch (IortNode->Type) - { - case ACPI_IORT_NODE_ITS_GROUP: - - /* Validate IortItsGroup to avoid compiler warnings */ - - if (IortItsGroup) - { - for (i = 0; i < IortItsGroup->ItsCount; i++) - { - Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, - ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), - 4, AcpiDmTableInfoIort0a); - NodeOffset += 4; - } - } - break; - - case ACPI_IORT_NODE_NAMED_COMPONENT: - - /* Dump the Padding (optional) */ - - if (IortNode->Length > NodeOffset) - { - Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, - Table, IortNode->Length - NodeOffset, - AcpiDmTableInfoIort1a); - if (ACPI_FAILURE (Status)) - { - return; - } - } - break; - - case ACPI_IORT_NODE_SMMU: - - AcpiOsPrintf ("\n"); - - /* Validate IortSmmu to avoid compiler warnings */ - - if (IortSmmu) - { - Length = 2 * sizeof (UINT64); - NodeOffset = IortSmmu->GlobalInterruptOffset; - Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, - ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), - Length, AcpiDmTableInfoIort3a); - if (ACPI_FAILURE (Status)) - { - return; - } - - NodeOffset = IortSmmu->ContextInterruptOffset; - for (i = 0; i < IortSmmu->ContextInterruptCount; i++) - { - Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, - ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), - 8, AcpiDmTableInfoIort3b); - if (ACPI_FAILURE (Status)) - { - return; - } - - NodeOffset += 8; - } - - NodeOffset = IortSmmu->PmuInterruptOffset; - for (i = 0; i < IortSmmu->PmuInterruptCount; i++) - { - Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, - ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), - 8, AcpiDmTableInfoIort3c); - if (ACPI_FAILURE (Status)) - { - return; - } - - NodeOffset += 8; - } - } - break; - - default: - - break; - } - - /* Dump the ID mappings */ - - NodeOffset = IortNode->MappingOffset; - for (i = 0; i < IortNode->MappingCount; i++) - { - AcpiOsPrintf ("\n"); - Length = sizeof (ACPI_IORT_ID_MAPPING); - Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, - ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), - Length, AcpiDmTableInfoIortMap); - if (ACPI_FAILURE (Status)) - { - return; - } - - NodeOffset += Length; - } - -NextSubtable: - /* Point to next node subtable */ - - Offset += IortNode->Length; - IortNode = ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, IortNode->Length); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpIvrs - * - * PARAMETERS: Table - A IVRS table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a IVRS - * - ******************************************************************************/ - -static UINT8 EntrySizes[] = {4,8,16,32}; - -void -AcpiDmDumpIvrs ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - UINT32 Offset = sizeof (ACPI_TABLE_IVRS); - UINT32 EntryOffset; - UINT32 EntryLength; - UINT32 EntryType; - ACPI_IVRS_DE_HEADER *DeviceEntry; - ACPI_IVRS_HEADER *Subtable; - ACPI_DMTABLE_INFO *InfoTable; - - - /* Main table */ - - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIvrs); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Subtables */ - - Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset); - while (Offset < Table->Length) - { - /* Common subtable header */ - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, - Subtable->Length, AcpiDmTableInfoIvrsHdr); - if (ACPI_FAILURE (Status)) - { - return; - } - - switch (Subtable->Type) - { - case ACPI_IVRS_TYPE_HARDWARE: - - InfoTable = AcpiDmTableInfoIvrs0; - break; - - case ACPI_IVRS_TYPE_MEMORY1: - case ACPI_IVRS_TYPE_MEMORY2: - case ACPI_IVRS_TYPE_MEMORY3: - - InfoTable = AcpiDmTableInfoIvrs1; - break; - - default: - - AcpiOsPrintf ("\n**** Unknown IVRS subtable type 0x%X\n", - Subtable->Type); - - /* Attempt to continue */ - - if (!Subtable->Length) - { - AcpiOsPrintf ("Invalid zero length subtable\n"); - return; - } - goto NextSubtable; - } - - /* Dump the subtable */ - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, - Subtable->Length, InfoTable); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* The hardware subtable can contain multiple device entries */ - - if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE) - { - EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE); - DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable, - sizeof (ACPI_IVRS_HARDWARE)); - - while (EntryOffset < (Offset + Subtable->Length)) - { - AcpiOsPrintf ("\n"); - /* - * Upper 2 bits of Type encode the length of the device entry - * - * 00 = 4 byte - * 01 = 8 byte - * 10 = 16 byte - currently no entries defined - * 11 = 32 byte - currently no entries defined - */ - EntryType = DeviceEntry->Type; - EntryLength = EntrySizes [EntryType >> 6]; - - switch (EntryType) - { - /* 4-byte device entries */ - - case ACPI_IVRS_TYPE_PAD4: - case ACPI_IVRS_TYPE_ALL: - case ACPI_IVRS_TYPE_SELECT: - case ACPI_IVRS_TYPE_START: - case ACPI_IVRS_TYPE_END: - - InfoTable = AcpiDmTableInfoIvrs4; - break; - - /* 8-byte entries, type A */ - - case ACPI_IVRS_TYPE_ALIAS_SELECT: - case ACPI_IVRS_TYPE_ALIAS_START: - - InfoTable = AcpiDmTableInfoIvrs8a; - break; - - /* 8-byte entries, type B */ - - case ACPI_IVRS_TYPE_PAD8: - case ACPI_IVRS_TYPE_EXT_SELECT: - case ACPI_IVRS_TYPE_EXT_START: - - InfoTable = AcpiDmTableInfoIvrs8b; - break; - - /* 8-byte entries, type C */ - - case ACPI_IVRS_TYPE_SPECIAL: - - InfoTable = AcpiDmTableInfoIvrs8c; - break; - - default: - InfoTable = AcpiDmTableInfoIvrs4; - AcpiOsPrintf ( - "\n**** Unknown IVRS device entry type/length: " - "0x%.2X/0x%X at offset 0x%.4X: (header below)\n", - EntryType, EntryLength, EntryOffset); - break; - } - - /* Dump the Device Entry */ - - Status = AcpiDmDumpTable (Table->Length, EntryOffset, - DeviceEntry, EntryLength, InfoTable); - if (ACPI_FAILURE (Status)) - { - return; - } - - EntryOffset += EntryLength; - DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, DeviceEntry, - EntryLength); - } - } - -NextSubtable: - /* Point to next subtable */ - - Offset += Subtable->Length; - Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Subtable, Subtable->Length); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpLpit - * - * PARAMETERS: Table - A LPIT table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a LPIT. This table type consists - * of an open-ended number of subtables. Note: There are no - * entries in the main table. An LPIT consists of the table - * header and then subtables only. - * - ******************************************************************************/ - -void -AcpiDmDumpLpit ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - ACPI_LPIT_HEADER *Subtable; - UINT32 Length = Table->Length; - UINT32 Offset = sizeof (ACPI_TABLE_LPIT); - ACPI_DMTABLE_INFO *InfoTable; - UINT32 SubtableLength; - - - /* Subtables */ - - Subtable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Table, Offset); - while (Offset < Table->Length) - { - /* Common subtable header */ - - Status = AcpiDmDumpTable (Length, Offset, Subtable, - sizeof (ACPI_LPIT_HEADER), AcpiDmTableInfoLpitHdr); - if (ACPI_FAILURE (Status)) - { - return; - } - - switch (Subtable->Type) - { - case ACPI_LPIT_TYPE_NATIVE_CSTATE: - - InfoTable = AcpiDmTableInfoLpit0; - SubtableLength = sizeof (ACPI_LPIT_NATIVE); - break; - - default: - - /* Cannot continue on unknown type - no length */ - - AcpiOsPrintf ("\n**** Unknown LPIT subtable type 0x%X\n", - Subtable->Type); - return; - } - - Status = AcpiDmDumpTable (Length, Offset, Subtable, - SubtableLength, InfoTable); - if (ACPI_FAILURE (Status)) - { - return; - } - - AcpiOsPrintf ("\n"); - - /* Point to next subtable */ - - Offset += SubtableLength; - Subtable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Subtable, SubtableLength); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpMadt - * - * PARAMETERS: Table - A MADT table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a MADT. This table type consists - * of an open-ended number of subtables. - * - ******************************************************************************/ - -void -AcpiDmDumpMadt ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - ACPI_SUBTABLE_HEADER *Subtable; - UINT32 Length = Table->Length; - UINT32 Offset = sizeof (ACPI_TABLE_MADT); - ACPI_DMTABLE_INFO *InfoTable; - - - /* Main table */ - - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMadt); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Subtables */ - - Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset); - while (Offset < Table->Length) - { - /* Common subtable header */ - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Length, Offset, Subtable, - Subtable->Length, AcpiDmTableInfoMadtHdr); - if (ACPI_FAILURE (Status)) - { - return; - } - - switch (Subtable->Type) - { - case ACPI_MADT_TYPE_LOCAL_APIC: - - InfoTable = AcpiDmTableInfoMadt0; - break; - - case ACPI_MADT_TYPE_IO_APIC: - - InfoTable = AcpiDmTableInfoMadt1; - break; - - case ACPI_MADT_TYPE_INTERRUPT_OVERRIDE: - - InfoTable = AcpiDmTableInfoMadt2; - break; - - case ACPI_MADT_TYPE_NMI_SOURCE: - - InfoTable = AcpiDmTableInfoMadt3; - break; - - case ACPI_MADT_TYPE_LOCAL_APIC_NMI: - - InfoTable = AcpiDmTableInfoMadt4; - break; - - case ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE: - - InfoTable = AcpiDmTableInfoMadt5; - break; - - case ACPI_MADT_TYPE_IO_SAPIC: - - InfoTable = AcpiDmTableInfoMadt6; - break; - - case ACPI_MADT_TYPE_LOCAL_SAPIC: - - InfoTable = AcpiDmTableInfoMadt7; - break; - - case ACPI_MADT_TYPE_INTERRUPT_SOURCE: - - InfoTable = AcpiDmTableInfoMadt8; - break; - - case ACPI_MADT_TYPE_LOCAL_X2APIC: - - InfoTable = AcpiDmTableInfoMadt9; - break; - - case ACPI_MADT_TYPE_LOCAL_X2APIC_NMI: - - InfoTable = AcpiDmTableInfoMadt10; - break; - - case ACPI_MADT_TYPE_GENERIC_INTERRUPT: - - InfoTable = AcpiDmTableInfoMadt11; - break; - - case ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR: - - InfoTable = AcpiDmTableInfoMadt12; - break; - - case ACPI_MADT_TYPE_GENERIC_MSI_FRAME: - - InfoTable = AcpiDmTableInfoMadt13; - break; - - case ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR: - - InfoTable = AcpiDmTableInfoMadt14; - break; - - case ACPI_MADT_TYPE_GENERIC_TRANSLATOR: - - InfoTable = AcpiDmTableInfoMadt15; - break; - - default: - - AcpiOsPrintf ("\n**** Unknown MADT subtable type 0x%X\n\n", - Subtable->Type); - - /* Attempt to continue */ - - if (!Subtable->Length) - { - AcpiOsPrintf ("Invalid zero length subtable\n"); - return; - } - - goto NextSubtable; - } - - Status = AcpiDmDumpTable (Length, Offset, Subtable, - Subtable->Length, InfoTable); - if (ACPI_FAILURE (Status)) - { - return; - } - -NextSubtable: - /* Point to next subtable */ - - Offset += Subtable->Length; - Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, - Subtable->Length); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpMcfg - * - * PARAMETERS: Table - A MCFG Table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a MCFG table - * - ******************************************************************************/ - -void -AcpiDmDumpMcfg ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - UINT32 Offset = sizeof (ACPI_TABLE_MCFG); - ACPI_MCFG_ALLOCATION *Subtable; - - - /* Main table */ - - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMcfg); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Subtables */ - - Subtable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Table, Offset); - while (Offset < Table->Length) - { - if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > Table->Length) - { - AcpiOsPrintf ("Warning: there are %u invalid trailing bytes\n", - sizeof (ACPI_MCFG_ALLOCATION) - (Offset - Table->Length)); - return; - } - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, - sizeof (ACPI_MCFG_ALLOCATION), AcpiDmTableInfoMcfg0); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Point to next subtable (each subtable is of fixed length) */ - - Offset += sizeof (ACPI_MCFG_ALLOCATION); - Subtable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Subtable, - sizeof (ACPI_MCFG_ALLOCATION)); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpMpst - * - * PARAMETERS: Table - A MPST Table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a MPST table - * - ******************************************************************************/ - -void -AcpiDmDumpMpst ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - UINT32 Offset = sizeof (ACPI_TABLE_MPST); - ACPI_MPST_POWER_NODE *Subtable0; - ACPI_MPST_POWER_STATE *Subtable0A; - ACPI_MPST_COMPONENT *Subtable0B; - ACPI_MPST_DATA_HDR *Subtable1; - ACPI_MPST_POWER_DATA *Subtable2; - UINT16 SubtableCount; - UINT32 PowerStateCount; - UINT32 ComponentCount; - - - /* Main table */ - - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMpst); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Subtable: Memory Power Node(s) */ - - SubtableCount = (ACPI_CAST_PTR (ACPI_TABLE_MPST, Table))->PowerNodeCount; - Subtable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Table, Offset); - - while ((Offset < Table->Length) && SubtableCount) - { - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0, - sizeof (ACPI_MPST_POWER_NODE), AcpiDmTableInfoMpst0); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Extract the sub-subtable counts */ - - PowerStateCount = Subtable0->NumPowerStates; - ComponentCount = Subtable0->NumPhysicalComponents; - Offset += sizeof (ACPI_MPST_POWER_NODE); - - /* Sub-subtables - Memory Power State Structure(s) */ - - Subtable0A = ACPI_ADD_PTR (ACPI_MPST_POWER_STATE, Subtable0, - sizeof (ACPI_MPST_POWER_NODE)); - - while (PowerStateCount) - { - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0A, - sizeof (ACPI_MPST_POWER_STATE), AcpiDmTableInfoMpst0A); - if (ACPI_FAILURE (Status)) - { - return; - } - - Subtable0A++; - PowerStateCount--; - Offset += sizeof (ACPI_MPST_POWER_STATE); - } - - /* Sub-subtables - Physical Component ID Structure(s) */ - - Subtable0B = ACPI_CAST_PTR (ACPI_MPST_COMPONENT, Subtable0A); - - if (ComponentCount) - { - AcpiOsPrintf ("\n"); - } - - while (ComponentCount) - { - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0B, - sizeof (ACPI_MPST_COMPONENT), AcpiDmTableInfoMpst0B); - if (ACPI_FAILURE (Status)) - { - return; - } - - Subtable0B++; - ComponentCount--; - Offset += sizeof (ACPI_MPST_COMPONENT); - } - - /* Point to next Memory Power Node subtable */ - - SubtableCount--; - Subtable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Subtable0, - sizeof (ACPI_MPST_POWER_NODE) + - (sizeof (ACPI_MPST_POWER_STATE) * Subtable0->NumPowerStates) + - (sizeof (ACPI_MPST_COMPONENT) * Subtable0->NumPhysicalComponents)); - } - - /* Subtable: Count of Memory Power State Characteristic structures */ - - AcpiOsPrintf ("\n"); - Subtable1 = ACPI_CAST_PTR (ACPI_MPST_DATA_HDR, Subtable0); - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable1, - sizeof (ACPI_MPST_DATA_HDR), AcpiDmTableInfoMpst1); - if (ACPI_FAILURE (Status)) - { - return; - } - - SubtableCount = Subtable1->CharacteristicsCount; - Offset += sizeof (ACPI_MPST_DATA_HDR); - - /* Subtable: Memory Power State Characteristics structure(s) */ - - Subtable2 = ACPI_ADD_PTR (ACPI_MPST_POWER_DATA, Subtable1, - sizeof (ACPI_MPST_DATA_HDR)); - - while ((Offset < Table->Length) && SubtableCount) - { - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable2, - sizeof (ACPI_MPST_POWER_DATA), AcpiDmTableInfoMpst2); - if (ACPI_FAILURE (Status)) - { - return; - } - - Subtable2++; - SubtableCount--; - Offset += sizeof (ACPI_MPST_POWER_DATA); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpMsct - * - * PARAMETERS: Table - A MSCT table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a MSCT - * - ******************************************************************************/ - -void -AcpiDmDumpMsct ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - UINT32 Offset = sizeof (ACPI_TABLE_MSCT); - ACPI_MSCT_PROXIMITY *Subtable; - - - /* Main table */ - - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMsct); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Subtables */ - - Subtable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Table, Offset); - while (Offset < Table->Length) - { - /* Common subtable header */ - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, - sizeof (ACPI_MSCT_PROXIMITY), AcpiDmTableInfoMsct0); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Point to next subtable */ - - Offset += sizeof (ACPI_MSCT_PROXIMITY); - Subtable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Subtable, - sizeof (ACPI_MSCT_PROXIMITY)); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpMtmr - * - * PARAMETERS: Table - A MTMR table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a MTMR - * - ******************************************************************************/ - -void -AcpiDmDumpMtmr ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - UINT32 Offset = sizeof (ACPI_TABLE_MTMR); - ACPI_MTMR_ENTRY *Subtable; - - - /* Main table */ - - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMtmr); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Subtables */ - - Subtable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Table, Offset); - while (Offset < Table->Length) - { - /* Common subtable header */ - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, - sizeof (ACPI_MTMR_ENTRY), AcpiDmTableInfoMtmr0); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Point to next subtable */ - - Offset += sizeof (ACPI_MTMR_ENTRY); - Subtable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Subtable, - sizeof (ACPI_MTMR_ENTRY)); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpNfit - * - * PARAMETERS: Table - A NFIT table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of an NFIT. - * - ******************************************************************************/ - -void -AcpiDmDumpNfit ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - UINT32 Offset = sizeof (ACPI_TABLE_NFIT); - UINT32 FieldOffset = 0; - UINT32 Length; - ACPI_NFIT_HEADER *Subtable; - ACPI_DMTABLE_INFO *InfoTable; - ACPI_NFIT_INTERLEAVE *Interleave = NULL; - ACPI_NFIT_SMBIOS *SmbiosInfo = NULL; - ACPI_NFIT_FLUSH_ADDRESS *Hint = NULL; - UINT32 i; - - - /* Main table */ - - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoNfit); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Subtables */ - - Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Table, Offset); - while (Offset < Table->Length) - { - /* NFIT subtable header */ - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, - Subtable->Length, AcpiDmTableInfoNfitHdr); - if (ACPI_FAILURE (Status)) - { - return; - } - - switch (Subtable->Type) - { - case ACPI_NFIT_TYPE_SYSTEM_ADDRESS: - - InfoTable = AcpiDmTableInfoNfit0; - break; - - case ACPI_NFIT_TYPE_MEMORY_MAP: - - InfoTable = AcpiDmTableInfoNfit1; - break; - - case ACPI_NFIT_TYPE_INTERLEAVE: - - /* Has a variable number of 32-bit values at the end */ - - InfoTable = AcpiDmTableInfoNfit2; - Interleave = ACPI_CAST_PTR (ACPI_NFIT_INTERLEAVE, Subtable); - FieldOffset = sizeof (ACPI_NFIT_INTERLEAVE); - break; - - case ACPI_NFIT_TYPE_SMBIOS: - - SmbiosInfo = ACPI_CAST_PTR (ACPI_NFIT_SMBIOS, Subtable); - InfoTable = AcpiDmTableInfoNfit3; - break; - - case ACPI_NFIT_TYPE_CONTROL_REGION: - - InfoTable = AcpiDmTableInfoNfit4; - break; - - case ACPI_NFIT_TYPE_DATA_REGION: - - InfoTable = AcpiDmTableInfoNfit5; - break; - - case ACPI_NFIT_TYPE_FLUSH_ADDRESS: - - /* Has a variable number of 64-bit addresses at the end */ - - InfoTable = AcpiDmTableInfoNfit6; - Hint = ACPI_CAST_PTR (ACPI_NFIT_FLUSH_ADDRESS, Subtable); - FieldOffset = sizeof (ACPI_NFIT_FLUSH_ADDRESS) - sizeof (UINT64); - break; - - case ACPI_NFIT_TYPE_CAPABILITIES: /* ACPI 6.0A */ - - InfoTable = AcpiDmTableInfoNfit7; - break; - - default: - AcpiOsPrintf ("\n**** Unknown NFIT subtable type 0x%X\n", - Subtable->Type); - - /* Attempt to continue */ - - if (!Subtable->Length) - { - AcpiOsPrintf ("Invalid zero length subtable\n"); - return; - } - goto NextSubtable; - } - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, - Subtable->Length, InfoTable); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Per-subtable variable-length fields */ - - switch (Subtable->Type) - { - case ACPI_NFIT_TYPE_INTERLEAVE: - - for (i = 0; i < Interleave->LineCount; i++) - { - Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset, - &Interleave->LineOffset[i], - sizeof (UINT32), AcpiDmTableInfoNfit2a); - if (ACPI_FAILURE (Status)) - { - return; - } - - FieldOffset += sizeof (UINT32); - } - break; - - case ACPI_NFIT_TYPE_SMBIOS: - - Length = Subtable->Length - - sizeof (ACPI_NFIT_SMBIOS) + sizeof (UINT8); - - if (Length) - { - Status = AcpiDmDumpTable (Table->Length, - sizeof (ACPI_NFIT_SMBIOS) - sizeof (UINT8), - SmbiosInfo, - Length, AcpiDmTableInfoNfit3a); - if (ACPI_FAILURE (Status)) - { - return; - } - } - - break; - - case ACPI_NFIT_TYPE_FLUSH_ADDRESS: - - for (i = 0; i < Hint->HintCount; i++) - { - Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset, - &Hint->HintAddress[i], - sizeof (UINT64), AcpiDmTableInfoNfit6a); - if (ACPI_FAILURE (Status)) - { - return; - } - - FieldOffset += sizeof (UINT64); - } - break; - - default: - break; - } - -NextSubtable: - /* Point to next subtable */ - - Offset += Subtable->Length; - Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Subtable, Subtable->Length); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpPcct - * - * PARAMETERS: Table - A PCCT table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a PCCT. This table type consists - * of an open-ended number of subtables. - * - ******************************************************************************/ - -void -AcpiDmDumpPcct ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - ACPI_PCCT_SUBSPACE *Subtable; - ACPI_DMTABLE_INFO *InfoTable; - UINT32 Length = Table->Length; - UINT32 Offset = sizeof (ACPI_TABLE_PCCT); - - - /* Main table */ - - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPcct); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Subtables */ - - Subtable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Table, Offset); - while (Offset < Table->Length) - { - /* Common subtable header */ - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Length, Offset, Subtable, - Subtable->Header.Length, AcpiDmTableInfoPcctHdr); - if (ACPI_FAILURE (Status)) - { - return; - } - - switch (Subtable->Header.Type) - { - case ACPI_PCCT_TYPE_GENERIC_SUBSPACE: - - InfoTable = AcpiDmTableInfoPcct0; - break; - - case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE: - - InfoTable = AcpiDmTableInfoPcct1; - break; - - case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2: - - InfoTable = AcpiDmTableInfoPcct2; - break; - - case ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE: - - InfoTable = AcpiDmTableInfoPcct3; - break; - - case ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE: - - InfoTable = AcpiDmTableInfoPcct4; - break; - - default: - - AcpiOsPrintf ( - "\n**** Unexpected or unknown PCCT subtable type 0x%X\n\n", - Subtable->Header.Type); - return; - } - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Length, Offset, Subtable, - Subtable->Header.Length, InfoTable); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Point to next subtable */ - - Offset += Subtable->Header.Length; - Subtable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Subtable, - Subtable->Header.Length); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpPdtt - * - * PARAMETERS: Table - A PDTT table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a Pdtt. This is a variable-length - * table that contains an open-ended number of IDs - * at the end of the table. - * - ******************************************************************************/ - -void -AcpiDmDumpPdtt ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - ACPI_PDTT_CHANNEL *Subtable; - UINT32 Length = Table->Length; - UINT32 Offset = sizeof (ACPI_TABLE_PDTT); - - - /* Main table */ - - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPdtt); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Subtables. Currently there is only one type, but can be multiples */ - - Subtable = ACPI_ADD_PTR (ACPI_PDTT_CHANNEL, Table, Offset); - while (Offset < Table->Length) - { - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Length, Offset, Subtable, - sizeof (ACPI_PDTT_CHANNEL), AcpiDmTableInfoPdtt0); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Point to next subtable */ - - Offset += sizeof (ACPI_PDTT_CHANNEL); - Subtable = ACPI_ADD_PTR (ACPI_PDTT_CHANNEL, Subtable, - sizeof (ACPI_PDTT_CHANNEL)); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpPmtt - * - * PARAMETERS: Table - A PMTT table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a PMTT. This table type consists - * of an open-ended number of subtables. - * - ******************************************************************************/ - -void -AcpiDmDumpPmtt ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - ACPI_PMTT_HEADER *Subtable; - ACPI_PMTT_HEADER *MemSubtable; - ACPI_PMTT_HEADER *DimmSubtable; - ACPI_PMTT_DOMAIN *DomainArray; - UINT32 Length = Table->Length; - UINT32 Offset = sizeof (ACPI_TABLE_PMTT); - UINT32 MemOffset; - UINT32 DimmOffset; - UINT32 DomainOffset; - UINT32 DomainCount; - - - /* Main table */ - - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPmtt); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Subtables */ - - Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Table, Offset); - while (Offset < Table->Length) - { - /* Common subtable header */ - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Length, Offset, Subtable, - Subtable->Length, AcpiDmTableInfoPmttHdr); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Only Socket subtables are expected at this level */ - - if (Subtable->Type != ACPI_PMTT_TYPE_SOCKET) - { - AcpiOsPrintf ( - "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n", - Subtable->Type); - return; - } - - /* Dump the fixed-length portion of the subtable */ - - Status = AcpiDmDumpTable (Length, Offset, Subtable, - Subtable->Length, AcpiDmTableInfoPmtt0); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Walk the memory controller subtables */ - - MemOffset = sizeof (ACPI_PMTT_SOCKET); - MemSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Subtable, - sizeof (ACPI_PMTT_SOCKET)); - - while (((Offset + MemOffset) < Table->Length) && - (MemOffset < Subtable->Length)) - { - /* Common subtable header */ - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Length, - Offset + MemOffset, MemSubtable, - MemSubtable->Length, AcpiDmTableInfoPmttHdr); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Only memory controller subtables are expected at this level */ - - if (MemSubtable->Type != ACPI_PMTT_TYPE_CONTROLLER) - { - AcpiOsPrintf ( - "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n", - MemSubtable->Type); - return; - } - - /* Dump the fixed-length portion of the controller subtable */ - - Status = AcpiDmDumpTable (Length, - Offset + MemOffset, MemSubtable, - MemSubtable->Length, AcpiDmTableInfoPmtt1); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Walk the variable count of proximity domains */ - - DomainCount = ((ACPI_PMTT_CONTROLLER *) MemSubtable)->DomainCount; - DomainOffset = sizeof (ACPI_PMTT_CONTROLLER); - DomainArray = ACPI_ADD_PTR (ACPI_PMTT_DOMAIN, MemSubtable, - sizeof (ACPI_PMTT_CONTROLLER)); - - while (((Offset + MemOffset + DomainOffset) < Table->Length) && - ((MemOffset + DomainOffset) < Subtable->Length) && - DomainCount) - { - Status = AcpiDmDumpTable (Length, - Offset + MemOffset + DomainOffset, DomainArray, - sizeof (ACPI_PMTT_DOMAIN), AcpiDmTableInfoPmtt1a); - if (ACPI_FAILURE (Status)) - { - return; - } - - DomainOffset += sizeof (ACPI_PMTT_DOMAIN); - DomainArray++; - DomainCount--; - } - - if (DomainCount) - { - AcpiOsPrintf ( - "\n**** DomainCount exceeds subtable length\n\n"); - } - - /* Walk the physical component (DIMM) subtables */ - - DimmOffset = DomainOffset; - DimmSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, MemSubtable, - DomainOffset); - - while (((Offset + MemOffset + DimmOffset) < Table->Length) && - (DimmOffset < MemSubtable->Length)) - { - /* Common subtable header */ - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Length, - Offset + MemOffset + DimmOffset, DimmSubtable, - DimmSubtable->Length, AcpiDmTableInfoPmttHdr); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Only DIMM subtables are expected at this level */ - - if (DimmSubtable->Type != ACPI_PMTT_TYPE_DIMM) - { - AcpiOsPrintf ( - "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n", - DimmSubtable->Type); - return; - } - - /* Dump the fixed-length DIMM subtable */ - - Status = AcpiDmDumpTable (Length, - Offset + MemOffset + DimmOffset, DimmSubtable, - DimmSubtable->Length, AcpiDmTableInfoPmtt2); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Point to next DIMM subtable */ - - DimmOffset += DimmSubtable->Length; - DimmSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, - DimmSubtable, DimmSubtable->Length); - } - - /* Point to next Controller subtable */ - - MemOffset += MemSubtable->Length; - MemSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, - MemSubtable, MemSubtable->Length); - } - - /* Point to next Socket subtable */ - - Offset += Subtable->Length; - Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, - Subtable, Subtable->Length); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpPptt - * - * PARAMETERS: Table - A PMTT table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a PPTT. This table type consists - * of an open-ended number of subtables. - * - ******************************************************************************/ - -void -AcpiDmDumpPptt ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - ACPI_SUBTABLE_HEADER *Subtable; - ACPI_PPTT_PROCESSOR *PpttProcessor; - UINT8 Length; - UINT8 SubtableOffset; - UINT32 Offset = sizeof (ACPI_TABLE_FPDT); - ACPI_DMTABLE_INFO *InfoTable; - UINT32 i; - - - /* There is no main table (other than the standard ACPI header) */ - - /* Subtables */ - - Offset = sizeof (ACPI_TABLE_HEADER); - while (Offset < Table->Length) - { - AcpiOsPrintf ("\n"); - - /* Common subtable header */ - - Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset); - if (Subtable->Length < sizeof (ACPI_SUBTABLE_HEADER)) - { - AcpiOsPrintf ("Invalid subtable length\n"); - return; - } - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, - Subtable->Length, AcpiDmTableInfoPpttHdr); - if (ACPI_FAILURE (Status)) - { - return; - } - - switch (Subtable->Type) - { - case ACPI_PPTT_TYPE_PROCESSOR: - - InfoTable = AcpiDmTableInfoPptt0; - Length = sizeof (ACPI_PPTT_PROCESSOR); - break; - - case ACPI_PPTT_TYPE_CACHE: - - InfoTable = AcpiDmTableInfoPptt1; - Length = sizeof (ACPI_PPTT_CACHE); - break; - - case ACPI_PPTT_TYPE_ID: - - InfoTable = AcpiDmTableInfoPptt2; - Length = sizeof (ACPI_PPTT_ID); - break; - - default: - - AcpiOsPrintf ("\n**** Unknown PPTT subtable type 0x%X\n\n", - Subtable->Type); - - /* Attempt to continue */ - - goto NextSubtable; - } - - if (Subtable->Length < Length) - { - AcpiOsPrintf ("Invalid subtable length\n"); - return; - } - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, - Subtable->Length, InfoTable); - if (ACPI_FAILURE (Status)) - { - return; - } - SubtableOffset = Length; - - switch (Subtable->Type) - { - case ACPI_PPTT_TYPE_PROCESSOR: - - PpttProcessor = ACPI_CAST_PTR (ACPI_PPTT_PROCESSOR, Subtable); - - /* Dump SMBIOS handles */ - - if ((UINT8)(Subtable->Length - SubtableOffset) < - (UINT8)(PpttProcessor->NumberOfPrivResources * 4)) - { - AcpiOsPrintf ("Invalid private resource number\n"); - return; - } - for (i = 0; i < PpttProcessor->NumberOfPrivResources; i++) - { - Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, - ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, SubtableOffset), - 4, AcpiDmTableInfoPptt0a); - SubtableOffset += 4; - } - break; - - default: - - break; - } - -NextSubtable: - /* Point to next subtable */ - - Offset += Subtable->Length; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpS3pt - * - * PARAMETERS: Table - A S3PT table - * - * RETURN: Length of the table - * - * DESCRIPTION: Format the contents of a S3PT - * - ******************************************************************************/ - -UINT32 -AcpiDmDumpS3pt ( - ACPI_TABLE_HEADER *Tables) -{ - ACPI_STATUS Status; - UINT32 Offset = sizeof (ACPI_TABLE_S3PT); - ACPI_FPDT_HEADER *Subtable; - ACPI_DMTABLE_INFO *InfoTable; - ACPI_TABLE_S3PT *S3ptTable = ACPI_CAST_PTR (ACPI_TABLE_S3PT, Tables); - - - /* Main table */ - - Status = AcpiDmDumpTable (Offset, 0, S3ptTable, 0, AcpiDmTableInfoS3pt); - if (ACPI_FAILURE (Status)) - { - return 0; - } - - Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, S3ptTable, Offset); - while (Offset < S3ptTable->Length) - { - /* Common subtable header */ - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (S3ptTable->Length, Offset, Subtable, - Subtable->Length, AcpiDmTableInfoS3ptHdr); - if (ACPI_FAILURE (Status)) - { - return 0; - } - - switch (Subtable->Type) - { - case ACPI_S3PT_TYPE_RESUME: - - InfoTable = AcpiDmTableInfoS3pt0; - break; - - case ACPI_S3PT_TYPE_SUSPEND: - - InfoTable = AcpiDmTableInfoS3pt1; - break; - - default: - - AcpiOsPrintf ("\n**** Unknown S3PT subtable type 0x%X\n", - Subtable->Type); - - /* Attempt to continue */ - - if (!Subtable->Length) - { - AcpiOsPrintf ("Invalid zero length subtable\n"); - return 0; - } - goto NextSubtable; - } - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (S3ptTable->Length, Offset, Subtable, - Subtable->Length, InfoTable); - if (ACPI_FAILURE (Status)) - { - return 0; - } - -NextSubtable: - /* Point to next subtable */ - - Offset += Subtable->Length; - Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Subtable, Subtable->Length); - } - - return (S3ptTable->Length); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpSdev - * - * PARAMETERS: Table - A SDEV table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a SDEV. This is a variable-length - * table that contains variable strings and vendor data. - * - ******************************************************************************/ - -void -AcpiDmDumpSdev ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - ACPI_SDEV_HEADER *Subtable; - ACPI_SDEV_PCIE *Pcie; - ACPI_SDEV_NAMESPACE *Namesp; - ACPI_DMTABLE_INFO *InfoTable; - UINT32 Length = Table->Length; - UINT32 Offset = sizeof (ACPI_TABLE_SDEV); - UINT16 PathOffset; - UINT16 PathLength; - UINT16 VendorDataOffset; - UINT16 VendorDataLength; - - - /* Main table */ - - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoSdev); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Subtables */ - - Subtable = ACPI_ADD_PTR (ACPI_SDEV_HEADER, Table, Offset); - while (Offset < Table->Length) - { - /* Common subtable header */ - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, - Subtable->Length, AcpiDmTableInfoSdevHdr); - if (ACPI_FAILURE (Status)) - { - return; - } - - switch (Subtable->Type) - { - case ACPI_SDEV_TYPE_NAMESPACE_DEVICE: - - InfoTable = AcpiDmTableInfoSdev0; - break; - - case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE: - - InfoTable = AcpiDmTableInfoSdev1; - break; - - default: - goto NextSubtable; - } - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, - Subtable->Length, InfoTable); - if (ACPI_FAILURE (Status)) - { - return; - } - - switch (Subtable->Type) - { - case ACPI_SDEV_TYPE_NAMESPACE_DEVICE: - - /* Dump the PCIe device ID(s) */ - - Namesp = ACPI_CAST_PTR (ACPI_SDEV_NAMESPACE, Subtable); - PathOffset = Namesp->DeviceIdOffset; - PathLength = Namesp->DeviceIdLength; - - if (PathLength) - { - Status = AcpiDmDumpTable (Table->Length, 0, - ACPI_ADD_PTR (UINT8, Namesp, PathOffset), - PathLength, AcpiDmTableInfoSdev0a); - if (ACPI_FAILURE (Status)) - { - return; - } - } - - /* Dump the vendor-specific data */ - - VendorDataLength = - Namesp->VendorDataLength; - VendorDataOffset = - Namesp->DeviceIdOffset + Namesp->DeviceIdLength; - - if (VendorDataLength) - { - Status = AcpiDmDumpTable (Table->Length, 0, - ACPI_ADD_PTR (UINT8, Namesp, VendorDataOffset), - VendorDataLength, AcpiDmTableInfoSdev1b); - if (ACPI_FAILURE (Status)) - { - return; - } - } - break; - - case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE: - - /* PCI path substructures */ - - Pcie = ACPI_CAST_PTR (ACPI_SDEV_PCIE, Subtable); - PathOffset = Pcie->PathOffset; - PathLength = Pcie->PathLength; - - while (PathLength) - { - Status = AcpiDmDumpTable (Table->Length, - PathOffset + Offset, - ACPI_ADD_PTR (UINT8, Pcie, PathOffset), - sizeof (ACPI_SDEV_PCIE_PATH), AcpiDmTableInfoSdev1a); - if (ACPI_FAILURE (Status)) - { - return; - } - - PathOffset += sizeof (ACPI_SDEV_PCIE_PATH); - PathLength -= sizeof (ACPI_SDEV_PCIE_PATH); - } - - /* VendorData */ - - VendorDataLength = Pcie->VendorDataLength; - VendorDataOffset = Pcie->PathOffset + Pcie->PathLength; - - if (VendorDataLength) - { - Status = AcpiDmDumpTable (Table->Length, 0, - ACPI_ADD_PTR (UINT8, Pcie, VendorDataOffset), - VendorDataLength, AcpiDmTableInfoSdev1b); - } - break; - - default: - goto NextSubtable; - } - -NextSubtable: - /* Point to next subtable */ - - Offset += Subtable->Length; - Subtable = ACPI_ADD_PTR (ACPI_SDEV_HEADER, Subtable, - Subtable->Length); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpSlic - * - * PARAMETERS: Table - A SLIC table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a SLIC - * - ******************************************************************************/ - -void -AcpiDmDumpSlic ( - ACPI_TABLE_HEADER *Table) -{ - - (void) AcpiDmDumpTable (Table->Length, sizeof (ACPI_TABLE_HEADER), Table, - Table->Length - sizeof (*Table), AcpiDmTableInfoSlic); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpSlit - * - * PARAMETERS: Table - An SLIT - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a SLIT - * - ******************************************************************************/ - -void -AcpiDmDumpSlit ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - UINT32 Offset; - UINT8 *Row; - UINT32 Localities; - UINT32 i; - UINT32 j; - - - /* Main table */ - - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSlit); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Display the Locality NxN Matrix */ - - Localities = (UINT32) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->LocalityCount; - Offset = ACPI_OFFSET (ACPI_TABLE_SLIT, Entry[0]); - Row = (UINT8 *) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->Entry; - - for (i = 0; i < Localities; i++) - { - /* Display one row of the matrix */ - - AcpiDmLineHeader2 (Offset, Localities, "Locality", i); - for (j = 0; j < Localities; j++) - { - /* Check for beyond EOT */ - - if (Offset >= Table->Length) - { - AcpiOsPrintf ( - "\n**** Not enough room in table for all localities\n"); - return; - } - - AcpiOsPrintf ("%2.2X", Row[j]); - Offset++; - - /* Display up to 16 bytes per output row */ - - if ((j+1) < Localities) - { - AcpiOsPrintf (" "); - - if (j && (((j+1) % 16) == 0)) - { - AcpiOsPrintf ("\\\n"); /* With line continuation char */ - AcpiDmLineHeader (Offset, 0, NULL); - } - } - } - - /* Point to next row */ - - AcpiOsPrintf ("\n"); - Row += Localities; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpSrat - * - * PARAMETERS: Table - A SRAT table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a SRAT - * - ******************************************************************************/ - -void -AcpiDmDumpSrat ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - UINT32 Offset = sizeof (ACPI_TABLE_SRAT); - ACPI_SUBTABLE_HEADER *Subtable; - ACPI_DMTABLE_INFO *InfoTable; - - - /* Main table */ - - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSrat); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Subtables */ - - Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset); - while (Offset < Table->Length) - { - /* Common subtable header */ - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, - Subtable->Length, AcpiDmTableInfoSratHdr); - if (ACPI_FAILURE (Status)) - { - return; - } - - switch (Subtable->Type) - { - case ACPI_SRAT_TYPE_CPU_AFFINITY: - - InfoTable = AcpiDmTableInfoSrat0; - break; - - case ACPI_SRAT_TYPE_MEMORY_AFFINITY: - - InfoTable = AcpiDmTableInfoSrat1; - break; - - case ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY: - - InfoTable = AcpiDmTableInfoSrat2; - break; - - case ACPI_SRAT_TYPE_GICC_AFFINITY: - - InfoTable = AcpiDmTableInfoSrat3; - break; - - case ACPI_SRAT_TYPE_GIC_ITS_AFFINITY: - - InfoTable = AcpiDmTableInfoSrat4; - break; - - default: - AcpiOsPrintf ("\n**** Unknown SRAT subtable type 0x%X\n", - Subtable->Type); - - /* Attempt to continue */ - - if (!Subtable->Length) - { - AcpiOsPrintf ("Invalid zero length subtable\n"); - return; - } - goto NextSubtable; - } - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, - Subtable->Length, InfoTable); - if (ACPI_FAILURE (Status)) - { - return; - } - -NextSubtable: - /* Point to next subtable */ - - Offset += Subtable->Length; - Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, - Subtable->Length); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpStao - * - * PARAMETERS: Table - A STAO table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a STAO. This is a variable-length - * table that contains an open-ended number of ASCII strings - * at the end of the table. - * - ******************************************************************************/ - -void -AcpiDmDumpStao ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - char *Namepath; - UINT32 Length = Table->Length; - UINT32 StringLength; - UINT32 Offset = sizeof (ACPI_TABLE_STAO); - - - /* Main table */ - - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoStao); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* The rest of the table consists of Namepath strings */ - - while (Offset < Table->Length) - { - Namepath = ACPI_ADD_PTR (char, Table, Offset); - StringLength = strlen (Namepath) + 1; - - AcpiDmLineHeader (Offset, StringLength, "Namestring"); - AcpiOsPrintf ("\"%s\"\n", Namepath); - - /* Point to next namepath */ - - Offset += StringLength; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpTcpa - * - * PARAMETERS: Table - A TCPA table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a TCPA. - * - * NOTE: There are two versions of the table with the same signature: - * the client version and the server version. The common - * PlatformClass field is used to differentiate the two types of - * tables. - * - ******************************************************************************/ - -void -AcpiDmDumpTcpa ( - ACPI_TABLE_HEADER *Table) -{ - UINT32 Offset = sizeof (ACPI_TABLE_TCPA_HDR); - ACPI_TABLE_TCPA_HDR *CommonHeader = ACPI_CAST_PTR ( - ACPI_TABLE_TCPA_HDR, Table); - ACPI_TABLE_TCPA_HDR *Subtable = ACPI_ADD_PTR ( - ACPI_TABLE_TCPA_HDR, Table, Offset); - ACPI_STATUS Status; - - - /* Main table */ - - Status = AcpiDmDumpTable (Table->Length, 0, Table, - 0, AcpiDmTableInfoTcpaHdr); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* - * Examine the PlatformClass field to determine the table type. - * Either a client or server table. Only one. - */ - switch (CommonHeader->PlatformClass) - { - case ACPI_TCPA_CLIENT_TABLE: - - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, - Table->Length - Offset, AcpiDmTableInfoTcpaClient); - break; - - case ACPI_TCPA_SERVER_TABLE: - - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, - Table->Length - Offset, AcpiDmTableInfoTcpaServer); - break; - - default: - - AcpiOsPrintf ("\n**** Unknown TCPA Platform Class 0x%X\n", - CommonHeader->PlatformClass); - Status = AE_ERROR; - break; - } - - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("\n**** Cannot disassemble TCPA table\n"); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpTpm2 - * - * PARAMETERS: Table - A TPM2 table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a TPM2. - * - ******************************************************************************/ - -void -AcpiDmDumpTpm2 ( - ACPI_TABLE_HEADER *Table) -{ - UINT32 Offset = sizeof (ACPI_TABLE_TPM2); - ACPI_TABLE_TPM2 *CommonHeader = ACPI_CAST_PTR (ACPI_TABLE_TPM2, Table); - ACPI_TPM2_TRAILER *Subtable = ACPI_ADD_PTR (ACPI_TPM2_TRAILER, Table, Offset); - ACPI_TPM2_ARM_SMC *ArmSubtable; - ACPI_STATUS Status; - - - /* Main table */ - - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoTpm2); - if (ACPI_FAILURE (Status)) - { - return; - } - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, - Table->Length - Offset, AcpiDmTableInfoTpm2a); - if (ACPI_FAILURE (Status)) - { - return; - } - - switch (CommonHeader->StartMethod) - { - case ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC: - - ArmSubtable = ACPI_ADD_PTR (ACPI_TPM2_ARM_SMC, Subtable, - sizeof (ACPI_TPM2_TRAILER)); - Offset += sizeof (ACPI_TPM2_TRAILER); - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Table->Length, Offset, ArmSubtable, - Table->Length - Offset, AcpiDmTableInfoTpm211); - break; - - default: - break; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpVrtc - * - * PARAMETERS: Table - A VRTC table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a VRTC - * - ******************************************************************************/ - -void -AcpiDmDumpVrtc ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - UINT32 Offset = sizeof (ACPI_TABLE_VRTC); - ACPI_VRTC_ENTRY *Subtable; - - - /* Main table */ - - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoVrtc); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Subtables */ - - Subtable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, Table, Offset); - while (Offset < Table->Length) - { - /* Common subtable header */ - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, - sizeof (ACPI_VRTC_ENTRY), AcpiDmTableInfoVrtc0); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Point to next subtable */ - - Offset += sizeof (ACPI_VRTC_ENTRY); - Subtable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, Subtable, - sizeof (ACPI_VRTC_ENTRY)); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpWdat - * - * PARAMETERS: Table - A WDAT table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a WDAT - * - ******************************************************************************/ - -void -AcpiDmDumpWdat ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - UINT32 Offset = sizeof (ACPI_TABLE_WDAT); - ACPI_WDAT_ENTRY *Subtable; - - - /* Main table */ - - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoWdat); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Subtables */ - - Subtable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Table, Offset); - while (Offset < Table->Length) - { - /* Common subtable header */ - - AcpiOsPrintf ("\n"); - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, - sizeof (ACPI_WDAT_ENTRY), AcpiDmTableInfoWdat0); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Point to next subtable */ - - Offset += sizeof (ACPI_WDAT_ENTRY); - Subtable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Subtable, - sizeof (ACPI_WDAT_ENTRY)); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpWpbt - * - * PARAMETERS: Table - A WPBT table - * - * RETURN: None - * - * DESCRIPTION: Format the contents of a WPBT. This table type consists - * of an open-ended arguments buffer at the end of the table. - * - ******************************************************************************/ - -void -AcpiDmDumpWpbt ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status; - ACPI_TABLE_WPBT *Subtable; - UINT32 Length = Table->Length; - UINT16 ArgumentsLength; - - - /* Dump the main table */ - - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoWpbt); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Extract the arguments buffer length from the main table */ - - Subtable = ACPI_CAST_PTR (ACPI_TABLE_WPBT, Table); - ArgumentsLength = Subtable->ArgumentsLength; - - /* Dump the arguments buffer */ - - (void) AcpiDmDumpTable (Table->Length, 0, Table, ArgumentsLength, - AcpiDmTableInfoWpbt0); -} diff --git a/src/acpica/source/common/dmtbdump1.c b/src/acpica/source/common/dmtbdump1.c new file mode 100644 index 00000000..4495ba4a --- /dev/null +++ b/src/acpica/source/common/dmtbdump1.c @@ -0,0 +1,1542 @@ +/****************************************************************************** + * + * Module Name: dmtbdump1 - Dump ACPI data tables that contain no AML code + * + *****************************************************************************/ + +/****************************************************************************** + * + * 1. Copyright Notice + * + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. + * All rights reserved. + * + * 2. License + * + * 2.1. This is your license from Intel Corp. under its intellectual property + * rights. You may have additional license terms from the party that provided + * you this software, covering your right to use that party's intellectual + * property rights. + * + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a + * copy of the source code appearing in this file ("Covered Code") an + * irrevocable, perpetual, worldwide license under Intel's copyrights in the + * base code distributed originally by Intel ("Original Intel Code") to copy, + * make derivatives, distribute, use and display any portion of the Covered + * Code in any form, with the right to sublicense such rights; and + * + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent + * license (with the right to sublicense), under only those claims of Intel + * patents that are infringed by the Original Intel Code, to make, use, sell, + * offer to sell, and import the Covered Code and derivative works thereof + * solely to the minimum extent necessary to exercise the above copyright + * license, and in no event shall the patent license extend to any additions + * to or modifications of the Original Intel Code. No other license or right + * is granted directly or by implication, estoppel or otherwise; + * + * The above copyright and patent license is granted only if the following + * conditions are met: + * + * 3. Conditions + * + * 3.1. Redistribution of Source with Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification with rights to further distribute source must include + * the above Copyright Notice, the above License, this list of Conditions, + * and the following Disclaimer and Export Compliance provision. In addition, + * Licensee must cause all Covered Code to which Licensee contributes to + * contain a file documenting the changes Licensee made to create that Covered + * Code and the date of any change. Licensee must include in that file the + * documentation of any changes made by any predecessor Licensee. Licensee + * must include a prominent statement that the modification is derived, + * directly or indirectly, from Original Intel Code. + * + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification without rights to further distribute source must + * include the following Disclaimer and Export Compliance provision in the + * documentation and/or other materials provided with distribution. In + * addition, Licensee may not authorize further sublicense of source of any + * portion of the Covered Code, and must include terms to the effect that the + * license from Licensee to its licensee is limited to the intellectual + * property embodied in the software Licensee provides to its licensee, and + * not to intellectual property embodied in modifications its licensee may + * make. + * + * 3.3. Redistribution of Executable. Redistribution in executable form of any + * substantial portion of the Covered Code or modification must reproduce the + * above Copyright Notice, and the following Disclaimer and Export Compliance + * provision in the documentation and/or other materials provided with the + * distribution. + * + * 3.4. Intel retains all right, title, and interest in and to the Original + * Intel Code. + * + * 3.5. Neither the name Intel nor any other trademark owned or controlled by + * Intel shall be used in advertising or otherwise to promote the sale, use or + * other dealings in products derived from or relating to the Covered Code + * without prior written authorization from Intel. + * + * 4. Disclaimer and Export Compliance + * + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A + * PARTICULAR PURPOSE. + * + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY + * LIMITED REMEDY. + * + * 4.3. Licensee shall not export, either directly or indirectly, any of this + * software or system incorporating such software without first obtaining any + * required license or other approval from the U. S. Department of Commerce or + * any other agency or department of the United States Government. In the + * event Licensee exports any such software from the United States or + * re-exports any such software from a foreign destination, Licensee shall + * ensure that the distribution and export/re-export of the software is in + * compliance with all laws, regulations, orders, or other restrictions of the + * U.S. Export Administration Regulations. Licensee agrees that neither it nor + * any of its subsidiaries will export/re-export any technical data, process, + * software, or service, directly or indirectly, to any country for which the + * United States government or any agency thereof requires an export license, + * other governmental approval, or letter of assurance, without first obtaining + * such license, approval or letter. + * + ***************************************************************************** + * + * Alternatively, you may choose to be licensed under the terms of the + * following license: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Alternatively, you may choose to be licensed under the terms of the + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. + * + *****************************************************************************/ + +#include "acpi.h" +#include "accommon.h" +#include "acdisasm.h" +#include "actables.h" + +/* This module used for application-level code only */ + +#define _COMPONENT ACPI_CA_DISASSEMBLER + ACPI_MODULE_NAME ("dmtbdump1") + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpAsf + * + * PARAMETERS: Table - A ASF table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a ASF table + * + ******************************************************************************/ + +void +AcpiDmDumpAsf ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + UINT32 Offset = sizeof (ACPI_TABLE_HEADER); + ACPI_ASF_INFO *Subtable; + ACPI_DMTABLE_INFO *InfoTable; + ACPI_DMTABLE_INFO *DataInfoTable = NULL; + UINT8 *DataTable = NULL; + UINT32 DataCount = 0; + UINT32 DataLength = 0; + UINT32 DataOffset = 0; + UINT32 i; + UINT8 Type; + + + /* No main table, only subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_ASF_INFO, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Subtable->Header.Length, AcpiDmTableInfoAsfHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* The actual type is the lower 7 bits of Type */ + + Type = (UINT8) (Subtable->Header.Type & 0x7F); + + switch (Type) + { + case ACPI_ASF_TYPE_INFO: + + InfoTable = AcpiDmTableInfoAsf0; + break; + + case ACPI_ASF_TYPE_ALERT: + + InfoTable = AcpiDmTableInfoAsf1; + DataInfoTable = AcpiDmTableInfoAsf1a; + DataTable = ACPI_ADD_PTR (UINT8, Subtable, sizeof (ACPI_ASF_ALERT)); + DataCount = ACPI_CAST_PTR (ACPI_ASF_ALERT, Subtable)->Alerts; + DataLength = ACPI_CAST_PTR (ACPI_ASF_ALERT, Subtable)->DataLength; + DataOffset = Offset + sizeof (ACPI_ASF_ALERT); + break; + + case ACPI_ASF_TYPE_CONTROL: + + InfoTable = AcpiDmTableInfoAsf2; + DataInfoTable = AcpiDmTableInfoAsf2a; + DataTable = ACPI_ADD_PTR (UINT8, Subtable, sizeof (ACPI_ASF_REMOTE)); + DataCount = ACPI_CAST_PTR (ACPI_ASF_REMOTE, Subtable)->Controls; + DataLength = ACPI_CAST_PTR (ACPI_ASF_REMOTE, Subtable)->DataLength; + DataOffset = Offset + sizeof (ACPI_ASF_REMOTE); + break; + + case ACPI_ASF_TYPE_BOOT: + + InfoTable = AcpiDmTableInfoAsf3; + break; + + case ACPI_ASF_TYPE_ADDRESS: + + InfoTable = AcpiDmTableInfoAsf4; + DataTable = ACPI_ADD_PTR (UINT8, Subtable, sizeof (ACPI_ASF_ADDRESS)); + DataLength = ACPI_CAST_PTR (ACPI_ASF_ADDRESS, Subtable)->Devices; + DataOffset = Offset + sizeof (ACPI_ASF_ADDRESS); + break; + + default: + + AcpiOsPrintf ("\n**** Unknown ASF subtable type 0x%X\n", + Subtable->Header.Type); + return; + } + + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Subtable->Header.Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Dump variable-length extra data */ + + switch (Type) + { + case ACPI_ASF_TYPE_ALERT: + case ACPI_ASF_TYPE_CONTROL: + + for (i = 0; i < DataCount; i++) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, DataOffset, + DataTable, DataLength, DataInfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + + DataTable = ACPI_ADD_PTR (UINT8, DataTable, DataLength); + DataOffset += DataLength; + } + break; + + case ACPI_ASF_TYPE_ADDRESS: + + for (i = 0; i < DataLength; i++) + { + if (!(i % 16)) + { + AcpiDmLineHeader (DataOffset, 1, "Addresses"); + } + + AcpiOsPrintf ("%2.2X ", *DataTable); + DataTable++; + DataOffset++; + + if (DataOffset > Table->Length) + { + AcpiOsPrintf ( + "**** ACPI table terminates in the middle of a " + "data structure! (ASF! table)\n"); + return; + } + } + + AcpiOsPrintf ("\n"); + break; + + default: + + break; + } + + AcpiOsPrintf ("\n"); + + /* Point to next subtable */ + + if (!Subtable->Header.Length) + { + AcpiOsPrintf ("Invalid zero subtable header length\n"); + return; + } + + Offset += Subtable->Header.Length; + Subtable = ACPI_ADD_PTR (ACPI_ASF_INFO, Subtable, + Subtable->Header.Length); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpCpep + * + * PARAMETERS: Table - A CPEP table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a CPEP. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpCpep ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_CPEP_POLLING *Subtable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_CPEP); + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoCpep); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Table, Offset); + while (Offset < Table->Length) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Header.Length, AcpiDmTableInfoCpep0); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point to next subtable */ + + Offset += Subtable->Header.Length; + Subtable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Subtable, + Subtable->Header.Length); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpCsrt + * + * PARAMETERS: Table - A CSRT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a CSRT. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpCsrt ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_CSRT_GROUP *Subtable; + ACPI_CSRT_SHARED_INFO *SharedInfoTable; + ACPI_CSRT_DESCRIPTOR *SubSubtable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_CSRT); + UINT32 SubOffset; + UINT32 SubSubOffset; + UINT32 InfoLength; + + + /* The main table only contains the ACPI header, thus already handled */ + + /* Subtables (Resource Groups) */ + + Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Table, Offset); + while (Offset < Table->Length) + { + /* Resource group subtable */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoCsrt0); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Shared info subtable (One per resource group) */ + + SubOffset = sizeof (ACPI_CSRT_GROUP); + SharedInfoTable = ACPI_ADD_PTR (ACPI_CSRT_SHARED_INFO, Table, + Offset + SubOffset); + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset + SubOffset, SharedInfoTable, + sizeof (ACPI_CSRT_SHARED_INFO), AcpiDmTableInfoCsrt1); + if (ACPI_FAILURE (Status)) + { + return; + } + + SubOffset += Subtable->SharedInfoLength; + + /* Sub-Subtables (Resource Descriptors) */ + + SubSubtable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, Table, + Offset + SubOffset); + + while ((SubOffset < Subtable->Length) && + ((Offset + SubOffset) < Table->Length)) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubtable, + SubSubtable->Length, AcpiDmTableInfoCsrt2); + if (ACPI_FAILURE (Status)) + { + return; + } + + SubSubOffset = sizeof (ACPI_CSRT_DESCRIPTOR); + + /* Resource-specific info buffer */ + + InfoLength = SubSubtable->Length - SubSubOffset; + if (InfoLength) + { + Status = AcpiDmDumpTable (Length, + Offset + SubOffset + SubSubOffset, Table, + InfoLength, AcpiDmTableInfoCsrt2a); + if (ACPI_FAILURE (Status)) + { + return; + } + SubSubOffset += InfoLength; + } + + /* Point to next sub-subtable */ + + SubOffset += SubSubtable->Length; + SubSubtable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, SubSubtable, + SubSubtable->Length); + } + + /* Point to next subtable */ + + Offset += Subtable->Length; + Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Subtable, + Subtable->Length); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpDbg2 + * + * PARAMETERS: Table - A DBG2 table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a DBG2. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpDbg2 ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_DBG2_DEVICE *Subtable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_DBG2); + UINT32 i; + UINT32 ArrayOffset; + UINT32 AbsoluteOffset; + UINT8 *Array; + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDbg2); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Table, Offset); + while (Offset < Table->Length) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoDbg2Device); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Dump the BaseAddress array */ + + for (i = 0; i < Subtable->RegisterCount; i++) + { + ArrayOffset = Subtable->BaseAddressOffset + + (sizeof (ACPI_GENERIC_ADDRESS) * i); + AbsoluteOffset = Offset + ArrayOffset; + Array = (UINT8 *) Subtable + ArrayOffset; + + Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, + Subtable->Length, AcpiDmTableInfoDbg2Addr); + if (ACPI_FAILURE (Status)) + { + return; + } + } + + /* Dump the AddressSize array */ + + for (i = 0; i < Subtable->RegisterCount; i++) + { + ArrayOffset = Subtable->AddressSizeOffset + + (sizeof (UINT32) * i); + AbsoluteOffset = Offset + ArrayOffset; + Array = (UINT8 *) Subtable + ArrayOffset; + + Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, + Subtable->Length, AcpiDmTableInfoDbg2Size); + if (ACPI_FAILURE (Status)) + { + return; + } + } + + /* Dump the Namestring (required) */ + + AcpiOsPrintf ("\n"); + ArrayOffset = Subtable->NamepathOffset; + AbsoluteOffset = Offset + ArrayOffset; + Array = (UINT8 *) Subtable + ArrayOffset; + + Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, + Subtable->Length, AcpiDmTableInfoDbg2Name); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Dump the OemData (optional) */ + + if (Subtable->OemDataOffset) + { + Status = AcpiDmDumpTable (Length, Offset + Subtable->OemDataOffset, + Table, Subtable->OemDataLength, + AcpiDmTableInfoDbg2OemData); + if (ACPI_FAILURE (Status)) + { + return; + } + } + + /* Point to next subtable */ + + Offset += Subtable->Length; + Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Subtable, + Subtable->Length); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpDmar + * + * PARAMETERS: Table - A DMAR table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a DMAR. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpDmar ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_DMAR_HEADER *Subtable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_DMAR); + ACPI_DMTABLE_INFO *InfoTable; + ACPI_DMAR_DEVICE_SCOPE *ScopeTable; + UINT32 ScopeOffset; + UINT8 *PciPath; + UINT32 PathOffset; + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDmar); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoDmarHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + AcpiOsPrintf ("\n"); + + switch (Subtable->Type) + { + case ACPI_DMAR_TYPE_HARDWARE_UNIT: + + InfoTable = AcpiDmTableInfoDmar0; + ScopeOffset = sizeof (ACPI_DMAR_HARDWARE_UNIT); + break; + + case ACPI_DMAR_TYPE_RESERVED_MEMORY: + + InfoTable = AcpiDmTableInfoDmar1; + ScopeOffset = sizeof (ACPI_DMAR_RESERVED_MEMORY); + break; + + case ACPI_DMAR_TYPE_ROOT_ATS: + + InfoTable = AcpiDmTableInfoDmar2; + ScopeOffset = sizeof (ACPI_DMAR_ATSR); + break; + + case ACPI_DMAR_TYPE_HARDWARE_AFFINITY: + + InfoTable = AcpiDmTableInfoDmar3; + ScopeOffset = sizeof (ACPI_DMAR_RHSA); + break; + + case ACPI_DMAR_TYPE_NAMESPACE: + + InfoTable = AcpiDmTableInfoDmar4; + ScopeOffset = sizeof (ACPI_DMAR_ANDD); + break; + + default: + + AcpiOsPrintf ("\n**** Unknown DMAR subtable type 0x%X\n\n", + Subtable->Type); + return; + } + + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* + * Dump the optional device scope entries + */ + if ((Subtable->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) || + (Subtable->Type == ACPI_DMAR_TYPE_NAMESPACE)) + { + /* These types do not support device scopes */ + + goto NextSubtable; + } + + ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, Subtable, ScopeOffset); + while (ScopeOffset < Subtable->Length) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset + ScopeOffset, ScopeTable, + ScopeTable->Length, AcpiDmTableInfoDmarScope); + if (ACPI_FAILURE (Status)) + { + return; + } + AcpiOsPrintf ("\n"); + + /* Dump the PCI Path entries for this device scope */ + + PathOffset = sizeof (ACPI_DMAR_DEVICE_SCOPE); /* Path entries start at this offset */ + + PciPath = ACPI_ADD_PTR (UINT8, ScopeTable, + sizeof (ACPI_DMAR_DEVICE_SCOPE)); + + while (PathOffset < ScopeTable->Length) + { + AcpiDmLineHeader ((PathOffset + ScopeOffset + Offset), 2, + "PCI Path"); + AcpiOsPrintf ("%2.2X,%2.2X\n", PciPath[0], PciPath[1]); + + /* Point to next PCI Path entry */ + + PathOffset += 2; + PciPath += 2; + AcpiOsPrintf ("\n"); + } + + /* Point to next device scope entry */ + + ScopeOffset += ScopeTable->Length; + ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, + ScopeTable, ScopeTable->Length); + } + +NextSubtable: + /* Point to next subtable */ + + Offset += Subtable->Length; + Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Subtable, + Subtable->Length); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpDrtm + * + * PARAMETERS: Table - A DRTM table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a DRTM. + * + ******************************************************************************/ + +void +AcpiDmDumpDrtm ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + UINT32 Offset; + ACPI_DRTM_VTABLE_LIST *DrtmVtl; + ACPI_DRTM_RESOURCE_LIST *DrtmRl; + ACPI_DRTM_DPS_ID *DrtmDps; + UINT32 Count; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, + AcpiDmTableInfoDrtm); + if (ACPI_FAILURE (Status)) + { + return; + } + + Offset = sizeof (ACPI_TABLE_DRTM); + + /* Sub-tables */ + + /* Dump ValidatedTable length */ + + DrtmVtl = ACPI_ADD_PTR (ACPI_DRTM_VTABLE_LIST, Table, Offset); + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, + DrtmVtl, ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST, ValidatedTables), + AcpiDmTableInfoDrtm0); + if (ACPI_FAILURE (Status)) + { + return; + } + + Offset += ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST, ValidatedTables); + + /* Dump Validated table addresses */ + + Count = 0; + while ((Offset < Table->Length) && + (DrtmVtl->ValidatedTableCount > Count)) + { + Status = AcpiDmDumpTable (Table->Length, Offset, + ACPI_ADD_PTR (void, Table, Offset), sizeof (UINT64), + AcpiDmTableInfoDrtm0a); + if (ACPI_FAILURE (Status)) + { + return; + } + + Offset += sizeof (UINT64); + Count++; + } + + /* Dump ResourceList length */ + + DrtmRl = ACPI_ADD_PTR (ACPI_DRTM_RESOURCE_LIST, Table, Offset); + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, + DrtmRl, ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST, Resources), + AcpiDmTableInfoDrtm1); + if (ACPI_FAILURE (Status)) + { + return; + } + + Offset += ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST, Resources); + + /* Dump the Resource List */ + + Count = 0; + while ((Offset < Table->Length) && + (DrtmRl->ResourceCount > Count)) + { + Status = AcpiDmDumpTable (Table->Length, Offset, + ACPI_ADD_PTR (void, Table, Offset), + sizeof (ACPI_DRTM_RESOURCE), AcpiDmTableInfoDrtm1a); + if (ACPI_FAILURE (Status)) + { + return; + } + + Offset += sizeof (ACPI_DRTM_RESOURCE); + Count++; + } + + /* Dump DPS */ + + DrtmDps = ACPI_ADD_PTR (ACPI_DRTM_DPS_ID, Table, Offset); + AcpiOsPrintf ("\n"); + (void) AcpiDmDumpTable (Table->Length, Offset, + DrtmDps, sizeof (ACPI_DRTM_DPS_ID), AcpiDmTableInfoDrtm2); +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpEinj + * + * PARAMETERS: Table - A EINJ table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a EINJ. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpEinj ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_WHEA_HEADER *Subtable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_EINJ); + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoEinj); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset); + while (Offset < Table->Length) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, + sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoEinj0); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point to next subtable (each subtable is of fixed length) */ + + Offset += sizeof (ACPI_WHEA_HEADER); + Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Subtable, + sizeof (ACPI_WHEA_HEADER)); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpErst + * + * PARAMETERS: Table - A ERST table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a ERST. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpErst ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_WHEA_HEADER *Subtable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_ERST); + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoErst); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset); + while (Offset < Table->Length) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, + sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoErst0); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point to next subtable (each subtable is of fixed length) */ + + Offset += sizeof (ACPI_WHEA_HEADER); + Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Subtable, + sizeof (ACPI_WHEA_HEADER)); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpFpdt + * + * PARAMETERS: Table - A FPDT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a FPDT. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpFpdt ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_FPDT_HEADER *Subtable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_FPDT); + ACPI_DMTABLE_INFO *InfoTable; + + + /* There is no main table (other than the standard ACPI header) */ + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoFpdtHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + switch (Subtable->Type) + { + case ACPI_FPDT_TYPE_BOOT: + + InfoTable = AcpiDmTableInfoFpdt0; + break; + + case ACPI_FPDT_TYPE_S3PERF: + + InfoTable = AcpiDmTableInfoFpdt1; + break; + + default: + + AcpiOsPrintf ("\n**** Unknown FPDT subtable type 0x%X\n\n", + Subtable->Type); + + /* Attempt to continue */ + + if (!Subtable->Length) + { + AcpiOsPrintf ("Invalid zero length subtable\n"); + return; + } + goto NextSubtable; + } + + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + +NextSubtable: + /* Point to next subtable */ + + Offset += Subtable->Length; + Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Subtable, + Subtable->Length); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpGtdt + * + * PARAMETERS: Table - A GTDT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a GTDT. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpGtdt ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_GTDT_HEADER *Subtable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_GTDT); + ACPI_DMTABLE_INFO *InfoTable; + UINT32 SubtableLength; + UINT32 GtCount; + ACPI_GTDT_TIMER_ENTRY *GtxTable; + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoGtdt); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoGtdtHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + GtCount = 0; + switch (Subtable->Type) + { + case ACPI_GTDT_TYPE_TIMER_BLOCK: + + SubtableLength = sizeof (ACPI_GTDT_TIMER_BLOCK); + GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK, + Subtable))->TimerCount; + + InfoTable = AcpiDmTableInfoGtdt0; + break; + + case ACPI_GTDT_TYPE_WATCHDOG: + + SubtableLength = sizeof (ACPI_GTDT_WATCHDOG); + + InfoTable = AcpiDmTableInfoGtdt1; + break; + + default: + + /* Cannot continue on unknown type - no length */ + + AcpiOsPrintf ("\n**** Unknown GTDT subtable type 0x%X\n", + Subtable->Type); + return; + } + + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point to end of current subtable (each subtable above is of fixed length) */ + + Offset += SubtableLength; + + /* If there are any Gt Timer Blocks from above, dump them now */ + + if (GtCount) + { + GtxTable = ACPI_ADD_PTR ( + ACPI_GTDT_TIMER_ENTRY, Subtable, SubtableLength); + SubtableLength += GtCount * sizeof (ACPI_GTDT_TIMER_ENTRY); + + while (GtCount) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, GtxTable, + sizeof (ACPI_GTDT_TIMER_ENTRY), AcpiDmTableInfoGtdt0a); + if (ACPI_FAILURE (Status)) + { + return; + } + Offset += sizeof (ACPI_GTDT_TIMER_ENTRY); + GtxTable++; + GtCount--; + } + } + + /* Point to next subtable */ + + Subtable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Subtable, SubtableLength); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpHest + * + * PARAMETERS: Table - A HEST table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a HEST. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpHest ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_HEST_HEADER *Subtable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_HEST); + ACPI_DMTABLE_INFO *InfoTable; + UINT32 SubtableLength; + UINT32 BankCount; + ACPI_HEST_IA_ERROR_BANK *BankTable; + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoHest); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Table, Offset); + while (Offset < Table->Length) + { + BankCount = 0; + switch (Subtable->Type) + { + case ACPI_HEST_TYPE_IA32_CHECK: + + InfoTable = AcpiDmTableInfoHest0; + SubtableLength = sizeof (ACPI_HEST_IA_MACHINE_CHECK); + BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_MACHINE_CHECK, + Subtable))->NumHardwareBanks; + break; + + case ACPI_HEST_TYPE_IA32_CORRECTED_CHECK: + + InfoTable = AcpiDmTableInfoHest1; + SubtableLength = sizeof (ACPI_HEST_IA_CORRECTED); + BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_CORRECTED, + Subtable))->NumHardwareBanks; + break; + + case ACPI_HEST_TYPE_IA32_NMI: + + InfoTable = AcpiDmTableInfoHest2; + SubtableLength = sizeof (ACPI_HEST_IA_NMI); + break; + + case ACPI_HEST_TYPE_AER_ROOT_PORT: + + InfoTable = AcpiDmTableInfoHest6; + SubtableLength = sizeof (ACPI_HEST_AER_ROOT); + break; + + case ACPI_HEST_TYPE_AER_ENDPOINT: + + InfoTable = AcpiDmTableInfoHest7; + SubtableLength = sizeof (ACPI_HEST_AER); + break; + + case ACPI_HEST_TYPE_AER_BRIDGE: + + InfoTable = AcpiDmTableInfoHest8; + SubtableLength = sizeof (ACPI_HEST_AER_BRIDGE); + break; + + case ACPI_HEST_TYPE_GENERIC_ERROR: + + InfoTable = AcpiDmTableInfoHest9; + SubtableLength = sizeof (ACPI_HEST_GENERIC); + break; + + case ACPI_HEST_TYPE_GENERIC_ERROR_V2: + + InfoTable = AcpiDmTableInfoHest10; + SubtableLength = sizeof (ACPI_HEST_GENERIC_V2); + break; + + case ACPI_HEST_TYPE_IA32_DEFERRED_CHECK: + + InfoTable = AcpiDmTableInfoHest11; + SubtableLength = sizeof (ACPI_HEST_IA_DEFERRED_CHECK); + BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_DEFERRED_CHECK, + Subtable))->NumHardwareBanks; + break; + + default: + + /* Cannot continue on unknown type - no length */ + + AcpiOsPrintf ("\n**** Unknown HEST subtable type 0x%X\n", + Subtable->Type); + return; + } + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, + SubtableLength, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point to end of current subtable (each subtable above is of fixed length) */ + + Offset += SubtableLength; + + /* If there are any (fixed-length) Error Banks from above, dump them now */ + + if (BankCount) + { + BankTable = ACPI_ADD_PTR (ACPI_HEST_IA_ERROR_BANK, Subtable, + SubtableLength); + SubtableLength += BankCount * sizeof (ACPI_HEST_IA_ERROR_BANK); + + while (BankCount) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, BankTable, + sizeof (ACPI_HEST_IA_ERROR_BANK), AcpiDmTableInfoHestBank); + if (ACPI_FAILURE (Status)) + { + return; + } + + Offset += sizeof (ACPI_HEST_IA_ERROR_BANK); + BankTable++; + BankCount--; + } + } + + /* Point to next subtable */ + + Subtable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Subtable, SubtableLength); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpHmat + * + * PARAMETERS: Table - A HMAT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a HMAT. + * + ******************************************************************************/ + +void +AcpiDmDumpHmat ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_HMAT_STRUCTURE *HmatStruct; + ACPI_HMAT_LOCALITY *HmatLocality; + ACPI_HMAT_CACHE *HmatCache; + UINT32 Offset; + UINT32 SubtableOffset; + UINT32 Length; + ACPI_DMTABLE_INFO *InfoTable; + UINT32 i, j; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoHmat); + if (ACPI_FAILURE (Status)) + { + return; + } + Offset = sizeof (ACPI_TABLE_HMAT); + + while (Offset < Table->Length) + { + AcpiOsPrintf ("\n"); + SubtableOffset = 0; + + /* Dump HMAT structure header */ + + HmatStruct = ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, Table, Offset); + if (HmatStruct->Length < sizeof (ACPI_HMAT_STRUCTURE)) + { + AcpiOsPrintf ("Invalid HMAT structure length\n"); + return; + } + Status = AcpiDmDumpTable (Table->Length, Offset, HmatStruct, + HmatStruct->Length, AcpiDmTableInfoHmatHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + switch (HmatStruct->Type) + { + case ACPI_HMAT_TYPE_ADDRESS_RANGE: + + InfoTable = AcpiDmTableInfoHmat0; + Length = sizeof (ACPI_HMAT_ADDRESS_RANGE); + break; + + case ACPI_HMAT_TYPE_LOCALITY: + + InfoTable = AcpiDmTableInfoHmat1; + Length = sizeof (ACPI_HMAT_LOCALITY); + break; + + case ACPI_HMAT_TYPE_CACHE: + + InfoTable = AcpiDmTableInfoHmat2; + Length = sizeof (ACPI_HMAT_CACHE); + break; + + default: + + AcpiOsPrintf ("\n**** Unknown HMAT structure type 0x%X\n", + HmatStruct->Type); + + /* Attempt to continue */ + + goto NextSubtable; + } + + /* Dump HMAT structure body */ + + if (HmatStruct->Length < Length) + { + AcpiOsPrintf ("Invalid HMAT structure length\n"); + return; + } + Status = AcpiDmDumpTable (Table->Length, Offset, HmatStruct, + HmatStruct->Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Dump HMAT structure additionals */ + + switch (HmatStruct->Type) + { + case ACPI_HMAT_TYPE_LOCALITY: + + HmatLocality = ACPI_CAST_PTR (ACPI_HMAT_LOCALITY, HmatStruct); + SubtableOffset = sizeof (ACPI_HMAT_LOCALITY); + + /* Dump initiator proximity domains */ + + if ((UINT32)(HmatStruct->Length - SubtableOffset) < + (UINT32)(HmatLocality->NumberOfInitiatorPDs * 4)) + { + AcpiOsPrintf ("Invalid initiator proximity domain number\n"); + return; + } + for (i = 0; i < HmatLocality->NumberOfInitiatorPDs; i++) + { + Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, + ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), + 4, AcpiDmTableInfoHmat1a); + SubtableOffset += 4; + } + + /* Dump target proximity domains */ + + if ((UINT32)(HmatStruct->Length - SubtableOffset) < + (UINT32)(HmatLocality->NumberOfTargetPDs * 4)) + { + AcpiOsPrintf ("Invalid target proximity domain number\n"); + return; + } + for (i = 0; i < HmatLocality->NumberOfTargetPDs; i++) + { + Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, + ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), + 4, AcpiDmTableInfoHmat1b); + SubtableOffset += 4; + } + + /* Dump latency/bandwidth entris */ + + if ((UINT32)(HmatStruct->Length - SubtableOffset) < + (UINT32)(HmatLocality->NumberOfInitiatorPDs * + HmatLocality->NumberOfTargetPDs * 2)) + { + AcpiOsPrintf ("Invalid latency/bandwidth entry number\n"); + return; + } + for (i = 0; i < HmatLocality->NumberOfInitiatorPDs; i++) + { + for (j = 0; j < HmatLocality->NumberOfTargetPDs; j++) + { + Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, + ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), + 2, AcpiDmTableInfoHmat1c); + SubtableOffset += 2; + } + } + break; + + case ACPI_HMAT_TYPE_CACHE: + + HmatCache = ACPI_CAST_PTR (ACPI_HMAT_CACHE, HmatStruct); + SubtableOffset = sizeof (ACPI_HMAT_CACHE); + + /* Dump SMBIOS handles */ + + if ((UINT32)(HmatStruct->Length - SubtableOffset) < + (UINT32)(HmatCache->NumberOfSMBIOSHandles * 2)) + { + AcpiOsPrintf ("Invalid SMBIOS handle number\n"); + return; + } + for (i = 0; i < HmatCache->NumberOfSMBIOSHandles; i++) + { + Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, + ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset), + 2, AcpiDmTableInfoHmat2a); + SubtableOffset += 2; + } + break; + + default: + + break; + } + +NextSubtable: + /* Point to next HMAT structure subtable */ + + Offset += (HmatStruct->Length); + } +} diff --git a/src/acpica/source/common/dmtbdump2.c b/src/acpica/source/common/dmtbdump2.c new file mode 100644 index 00000000..d2c584bb --- /dev/null +++ b/src/acpica/source/common/dmtbdump2.c @@ -0,0 +1,2074 @@ +/****************************************************************************** + * + * Module Name: dmtbdump2 - Dump ACPI data tables that contain no AML code + * + *****************************************************************************/ + +/****************************************************************************** + * + * 1. Copyright Notice + * + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. + * All rights reserved. + * + * 2. License + * + * 2.1. This is your license from Intel Corp. under its intellectual property + * rights. You may have additional license terms from the party that provided + * you this software, covering your right to use that party's intellectual + * property rights. + * + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a + * copy of the source code appearing in this file ("Covered Code") an + * irrevocable, perpetual, worldwide license under Intel's copyrights in the + * base code distributed originally by Intel ("Original Intel Code") to copy, + * make derivatives, distribute, use and display any portion of the Covered + * Code in any form, with the right to sublicense such rights; and + * + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent + * license (with the right to sublicense), under only those claims of Intel + * patents that are infringed by the Original Intel Code, to make, use, sell, + * offer to sell, and import the Covered Code and derivative works thereof + * solely to the minimum extent necessary to exercise the above copyright + * license, and in no event shall the patent license extend to any additions + * to or modifications of the Original Intel Code. No other license or right + * is granted directly or by implication, estoppel or otherwise; + * + * The above copyright and patent license is granted only if the following + * conditions are met: + * + * 3. Conditions + * + * 3.1. Redistribution of Source with Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification with rights to further distribute source must include + * the above Copyright Notice, the above License, this list of Conditions, + * and the following Disclaimer and Export Compliance provision. In addition, + * Licensee must cause all Covered Code to which Licensee contributes to + * contain a file documenting the changes Licensee made to create that Covered + * Code and the date of any change. Licensee must include in that file the + * documentation of any changes made by any predecessor Licensee. Licensee + * must include a prominent statement that the modification is derived, + * directly or indirectly, from Original Intel Code. + * + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification without rights to further distribute source must + * include the following Disclaimer and Export Compliance provision in the + * documentation and/or other materials provided with distribution. In + * addition, Licensee may not authorize further sublicense of source of any + * portion of the Covered Code, and must include terms to the effect that the + * license from Licensee to its licensee is limited to the intellectual + * property embodied in the software Licensee provides to its licensee, and + * not to intellectual property embodied in modifications its licensee may + * make. + * + * 3.3. Redistribution of Executable. Redistribution in executable form of any + * substantial portion of the Covered Code or modification must reproduce the + * above Copyright Notice, and the following Disclaimer and Export Compliance + * provision in the documentation and/or other materials provided with the + * distribution. + * + * 3.4. Intel retains all right, title, and interest in and to the Original + * Intel Code. + * + * 3.5. Neither the name Intel nor any other trademark owned or controlled by + * Intel shall be used in advertising or otherwise to promote the sale, use or + * other dealings in products derived from or relating to the Covered Code + * without prior written authorization from Intel. + * + * 4. Disclaimer and Export Compliance + * + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A + * PARTICULAR PURPOSE. + * + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY + * LIMITED REMEDY. + * + * 4.3. Licensee shall not export, either directly or indirectly, any of this + * software or system incorporating such software without first obtaining any + * required license or other approval from the U. S. Department of Commerce or + * any other agency or department of the United States Government. In the + * event Licensee exports any such software from the United States or + * re-exports any such software from a foreign destination, Licensee shall + * ensure that the distribution and export/re-export of the software is in + * compliance with all laws, regulations, orders, or other restrictions of the + * U.S. Export Administration Regulations. Licensee agrees that neither it nor + * any of its subsidiaries will export/re-export any technical data, process, + * software, or service, directly or indirectly, to any country for which the + * United States government or any agency thereof requires an export license, + * other governmental approval, or letter of assurance, without first obtaining + * such license, approval or letter. + * + ***************************************************************************** + * + * Alternatively, you may choose to be licensed under the terms of the + * following license: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Alternatively, you may choose to be licensed under the terms of the + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. + * + *****************************************************************************/ + +#include "acpi.h" +#include "accommon.h" +#include "acdisasm.h" +#include "actables.h" + +/* This module used for application-level code only */ + +#define _COMPONENT ACPI_CA_DISASSEMBLER + ACPI_MODULE_NAME ("dmtbdump2") + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpIort + * + * PARAMETERS: Table - A IORT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a IORT + * + ******************************************************************************/ + +void +AcpiDmDumpIort ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_TABLE_IORT *Iort; + ACPI_IORT_NODE *IortNode; + ACPI_IORT_ITS_GROUP *IortItsGroup = NULL; + ACPI_IORT_SMMU *IortSmmu = NULL; + UINT32 Offset; + UINT32 NodeOffset; + UINT32 Length; + ACPI_DMTABLE_INFO *InfoTable; + char *String; + UINT32 i; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIort); + if (ACPI_FAILURE (Status)) + { + return; + } + + Iort = ACPI_CAST_PTR (ACPI_TABLE_IORT, Table); + Offset = sizeof (ACPI_TABLE_IORT); + + /* Dump the OptionalPadding (optional) */ + + if (Iort->NodeOffset > Offset) + { + Status = AcpiDmDumpTable (Table->Length, Offset, Table, + Iort->NodeOffset - Offset, AcpiDmTableInfoIortPad); + if (ACPI_FAILURE (Status)) + { + return; + } + } + + Offset = Iort->NodeOffset; + while (Offset < Table->Length) + { + /* Common subtable header */ + + IortNode = ACPI_ADD_PTR (ACPI_IORT_NODE, Table, Offset); + AcpiOsPrintf ("\n"); + Length = ACPI_OFFSET (ACPI_IORT_NODE, NodeData); + Status = AcpiDmDumpTable (Table->Length, Offset, + IortNode, Length, AcpiDmTableInfoIortHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + NodeOffset = Length; + + switch (IortNode->Type) + { + case ACPI_IORT_NODE_ITS_GROUP: + + InfoTable = AcpiDmTableInfoIort0; + Length = ACPI_OFFSET (ACPI_IORT_ITS_GROUP, Identifiers); + IortItsGroup = ACPI_ADD_PTR (ACPI_IORT_ITS_GROUP, IortNode, NodeOffset); + break; + + case ACPI_IORT_NODE_NAMED_COMPONENT: + + InfoTable = AcpiDmTableInfoIort1; + Length = ACPI_OFFSET (ACPI_IORT_NAMED_COMPONENT, DeviceName); + String = ACPI_ADD_PTR (char, IortNode, NodeOffset + Length); + Length += strlen (String) + 1; + break; + + case ACPI_IORT_NODE_PCI_ROOT_COMPLEX: + + InfoTable = AcpiDmTableInfoIort2; + Length = IortNode->Length - NodeOffset; + break; + + case ACPI_IORT_NODE_SMMU: + + InfoTable = AcpiDmTableInfoIort3; + Length = ACPI_OFFSET (ACPI_IORT_SMMU, Interrupts); + IortSmmu = ACPI_ADD_PTR (ACPI_IORT_SMMU, IortNode, NodeOffset); + break; + + case ACPI_IORT_NODE_SMMU_V3: + + InfoTable = AcpiDmTableInfoIort4; + Length = IortNode->Length - NodeOffset; + break; + + default: + + AcpiOsPrintf ("\n**** Unknown IORT node type 0x%X\n", + IortNode->Type); + + /* Attempt to continue */ + + if (!IortNode->Length) + { + AcpiOsPrintf ("Invalid zero length IORT node\n"); + return; + } + goto NextSubtable; + } + + /* Dump the node subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, + ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), + Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + + NodeOffset += Length; + + /* Dump the node specific data */ + + switch (IortNode->Type) + { + case ACPI_IORT_NODE_ITS_GROUP: + + /* Validate IortItsGroup to avoid compiler warnings */ + + if (IortItsGroup) + { + for (i = 0; i < IortItsGroup->ItsCount; i++) + { + Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, + ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), + 4, AcpiDmTableInfoIort0a); + NodeOffset += 4; + } + } + break; + + case ACPI_IORT_NODE_NAMED_COMPONENT: + + /* Dump the Padding (optional) */ + + if (IortNode->Length > NodeOffset) + { + Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, + Table, IortNode->Length - NodeOffset, + AcpiDmTableInfoIort1a); + if (ACPI_FAILURE (Status)) + { + return; + } + } + break; + + case ACPI_IORT_NODE_SMMU: + + AcpiOsPrintf ("\n"); + + /* Validate IortSmmu to avoid compiler warnings */ + + if (IortSmmu) + { + Length = 2 * sizeof (UINT64); + NodeOffset = IortSmmu->GlobalInterruptOffset; + Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, + ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), + Length, AcpiDmTableInfoIort3a); + if (ACPI_FAILURE (Status)) + { + return; + } + + NodeOffset = IortSmmu->ContextInterruptOffset; + for (i = 0; i < IortSmmu->ContextInterruptCount; i++) + { + Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, + ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), + 8, AcpiDmTableInfoIort3b); + if (ACPI_FAILURE (Status)) + { + return; + } + + NodeOffset += 8; + } + + NodeOffset = IortSmmu->PmuInterruptOffset; + for (i = 0; i < IortSmmu->PmuInterruptCount; i++) + { + Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, + ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), + 8, AcpiDmTableInfoIort3c); + if (ACPI_FAILURE (Status)) + { + return; + } + + NodeOffset += 8; + } + } + break; + + default: + + break; + } + + /* Dump the ID mappings */ + + NodeOffset = IortNode->MappingOffset; + for (i = 0; i < IortNode->MappingCount; i++) + { + AcpiOsPrintf ("\n"); + Length = sizeof (ACPI_IORT_ID_MAPPING); + Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, + ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), + Length, AcpiDmTableInfoIortMap); + if (ACPI_FAILURE (Status)) + { + return; + } + + NodeOffset += Length; + } + +NextSubtable: + /* Point to next node subtable */ + + Offset += IortNode->Length; + IortNode = ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, IortNode->Length); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpIvrs + * + * PARAMETERS: Table - A IVRS table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a IVRS + * + ******************************************************************************/ + +static UINT8 EntrySizes[] = {4,8,16,32}; + +void +AcpiDmDumpIvrs ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + UINT32 Offset = sizeof (ACPI_TABLE_IVRS); + UINT32 EntryOffset; + UINT32 EntryLength; + UINT32 EntryType; + ACPI_IVRS_DE_HEADER *DeviceEntry; + ACPI_IVRS_HEADER *Subtable; + ACPI_DMTABLE_INFO *InfoTable; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIvrs); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoIvrsHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + switch (Subtable->Type) + { + case ACPI_IVRS_TYPE_HARDWARE: + + InfoTable = AcpiDmTableInfoIvrs0; + break; + + case ACPI_IVRS_TYPE_MEMORY1: + case ACPI_IVRS_TYPE_MEMORY2: + case ACPI_IVRS_TYPE_MEMORY3: + + InfoTable = AcpiDmTableInfoIvrs1; + break; + + default: + + AcpiOsPrintf ("\n**** Unknown IVRS subtable type 0x%X\n", + Subtable->Type); + + /* Attempt to continue */ + + if (!Subtable->Length) + { + AcpiOsPrintf ("Invalid zero length subtable\n"); + return; + } + goto NextSubtable; + } + + /* Dump the subtable */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Subtable->Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* The hardware subtable can contain multiple device entries */ + + if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE) + { + EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE); + DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable, + sizeof (ACPI_IVRS_HARDWARE)); + + while (EntryOffset < (Offset + Subtable->Length)) + { + AcpiOsPrintf ("\n"); + /* + * Upper 2 bits of Type encode the length of the device entry + * + * 00 = 4 byte + * 01 = 8 byte + * 10 = 16 byte - currently no entries defined + * 11 = 32 byte - currently no entries defined + */ + EntryType = DeviceEntry->Type; + EntryLength = EntrySizes [EntryType >> 6]; + + switch (EntryType) + { + /* 4-byte device entries */ + + case ACPI_IVRS_TYPE_PAD4: + case ACPI_IVRS_TYPE_ALL: + case ACPI_IVRS_TYPE_SELECT: + case ACPI_IVRS_TYPE_START: + case ACPI_IVRS_TYPE_END: + + InfoTable = AcpiDmTableInfoIvrs4; + break; + + /* 8-byte entries, type A */ + + case ACPI_IVRS_TYPE_ALIAS_SELECT: + case ACPI_IVRS_TYPE_ALIAS_START: + + InfoTable = AcpiDmTableInfoIvrs8a; + break; + + /* 8-byte entries, type B */ + + case ACPI_IVRS_TYPE_PAD8: + case ACPI_IVRS_TYPE_EXT_SELECT: + case ACPI_IVRS_TYPE_EXT_START: + + InfoTable = AcpiDmTableInfoIvrs8b; + break; + + /* 8-byte entries, type C */ + + case ACPI_IVRS_TYPE_SPECIAL: + + InfoTable = AcpiDmTableInfoIvrs8c; + break; + + default: + InfoTable = AcpiDmTableInfoIvrs4; + AcpiOsPrintf ( + "\n**** Unknown IVRS device entry type/length: " + "0x%.2X/0x%X at offset 0x%.4X: (header below)\n", + EntryType, EntryLength, EntryOffset); + break; + } + + /* Dump the Device Entry */ + + Status = AcpiDmDumpTable (Table->Length, EntryOffset, + DeviceEntry, EntryLength, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + + EntryOffset += EntryLength; + DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, DeviceEntry, + EntryLength); + } + } + +NextSubtable: + /* Point to next subtable */ + + Offset += Subtable->Length; + Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Subtable, Subtable->Length); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpLpit + * + * PARAMETERS: Table - A LPIT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a LPIT. This table type consists + * of an open-ended number of subtables. Note: There are no + * entries in the main table. An LPIT consists of the table + * header and then subtables only. + * + ******************************************************************************/ + +void +AcpiDmDumpLpit ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_LPIT_HEADER *Subtable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_LPIT); + ACPI_DMTABLE_INFO *InfoTable; + UINT32 SubtableLength; + + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + Status = AcpiDmDumpTable (Length, Offset, Subtable, + sizeof (ACPI_LPIT_HEADER), AcpiDmTableInfoLpitHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + switch (Subtable->Type) + { + case ACPI_LPIT_TYPE_NATIVE_CSTATE: + + InfoTable = AcpiDmTableInfoLpit0; + SubtableLength = sizeof (ACPI_LPIT_NATIVE); + break; + + default: + + /* Cannot continue on unknown type - no length */ + + AcpiOsPrintf ("\n**** Unknown LPIT subtable type 0x%X\n", + Subtable->Type); + return; + } + + Status = AcpiDmDumpTable (Length, Offset, Subtable, + SubtableLength, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + + AcpiOsPrintf ("\n"); + + /* Point to next subtable */ + + Offset += SubtableLength; + Subtable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Subtable, SubtableLength); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpMadt + * + * PARAMETERS: Table - A MADT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a MADT. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpMadt ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_SUBTABLE_HEADER *Subtable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_MADT); + ACPI_DMTABLE_INFO *InfoTable; + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMadt); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoMadtHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + switch (Subtable->Type) + { + case ACPI_MADT_TYPE_LOCAL_APIC: + + InfoTable = AcpiDmTableInfoMadt0; + break; + + case ACPI_MADT_TYPE_IO_APIC: + + InfoTable = AcpiDmTableInfoMadt1; + break; + + case ACPI_MADT_TYPE_INTERRUPT_OVERRIDE: + + InfoTable = AcpiDmTableInfoMadt2; + break; + + case ACPI_MADT_TYPE_NMI_SOURCE: + + InfoTable = AcpiDmTableInfoMadt3; + break; + + case ACPI_MADT_TYPE_LOCAL_APIC_NMI: + + InfoTable = AcpiDmTableInfoMadt4; + break; + + case ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE: + + InfoTable = AcpiDmTableInfoMadt5; + break; + + case ACPI_MADT_TYPE_IO_SAPIC: + + InfoTable = AcpiDmTableInfoMadt6; + break; + + case ACPI_MADT_TYPE_LOCAL_SAPIC: + + InfoTable = AcpiDmTableInfoMadt7; + break; + + case ACPI_MADT_TYPE_INTERRUPT_SOURCE: + + InfoTable = AcpiDmTableInfoMadt8; + break; + + case ACPI_MADT_TYPE_LOCAL_X2APIC: + + InfoTable = AcpiDmTableInfoMadt9; + break; + + case ACPI_MADT_TYPE_LOCAL_X2APIC_NMI: + + InfoTable = AcpiDmTableInfoMadt10; + break; + + case ACPI_MADT_TYPE_GENERIC_INTERRUPT: + + InfoTable = AcpiDmTableInfoMadt11; + break; + + case ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR: + + InfoTable = AcpiDmTableInfoMadt12; + break; + + case ACPI_MADT_TYPE_GENERIC_MSI_FRAME: + + InfoTable = AcpiDmTableInfoMadt13; + break; + + case ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR: + + InfoTable = AcpiDmTableInfoMadt14; + break; + + case ACPI_MADT_TYPE_GENERIC_TRANSLATOR: + + InfoTable = AcpiDmTableInfoMadt15; + break; + + default: + + AcpiOsPrintf ("\n**** Unknown MADT subtable type 0x%X\n\n", + Subtable->Type); + + /* Attempt to continue */ + + if (!Subtable->Length) + { + AcpiOsPrintf ("Invalid zero length subtable\n"); + return; + } + + goto NextSubtable; + } + + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + +NextSubtable: + /* Point to next subtable */ + + Offset += Subtable->Length; + Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, + Subtable->Length); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpMcfg + * + * PARAMETERS: Table - A MCFG Table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a MCFG table + * + ******************************************************************************/ + +void +AcpiDmDumpMcfg ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + UINT32 Offset = sizeof (ACPI_TABLE_MCFG); + ACPI_MCFG_ALLOCATION *Subtable; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMcfg); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Table, Offset); + while (Offset < Table->Length) + { + if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > Table->Length) + { + AcpiOsPrintf ("Warning: there are %u invalid trailing bytes\n", + sizeof (ACPI_MCFG_ALLOCATION) - (Offset - Table->Length)); + return; + } + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + sizeof (ACPI_MCFG_ALLOCATION), AcpiDmTableInfoMcfg0); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point to next subtable (each subtable is of fixed length) */ + + Offset += sizeof (ACPI_MCFG_ALLOCATION); + Subtable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Subtable, + sizeof (ACPI_MCFG_ALLOCATION)); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpMpst + * + * PARAMETERS: Table - A MPST Table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a MPST table + * + ******************************************************************************/ + +void +AcpiDmDumpMpst ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + UINT32 Offset = sizeof (ACPI_TABLE_MPST); + ACPI_MPST_POWER_NODE *Subtable0; + ACPI_MPST_POWER_STATE *Subtable0A; + ACPI_MPST_COMPONENT *Subtable0B; + ACPI_MPST_DATA_HDR *Subtable1; + ACPI_MPST_POWER_DATA *Subtable2; + UINT16 SubtableCount; + UINT32 PowerStateCount; + UINT32 ComponentCount; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMpst); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtable: Memory Power Node(s) */ + + SubtableCount = (ACPI_CAST_PTR (ACPI_TABLE_MPST, Table))->PowerNodeCount; + Subtable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Table, Offset); + + while ((Offset < Table->Length) && SubtableCount) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0, + sizeof (ACPI_MPST_POWER_NODE), AcpiDmTableInfoMpst0); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Extract the sub-subtable counts */ + + PowerStateCount = Subtable0->NumPowerStates; + ComponentCount = Subtable0->NumPhysicalComponents; + Offset += sizeof (ACPI_MPST_POWER_NODE); + + /* Sub-subtables - Memory Power State Structure(s) */ + + Subtable0A = ACPI_ADD_PTR (ACPI_MPST_POWER_STATE, Subtable0, + sizeof (ACPI_MPST_POWER_NODE)); + + while (PowerStateCount) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0A, + sizeof (ACPI_MPST_POWER_STATE), AcpiDmTableInfoMpst0A); + if (ACPI_FAILURE (Status)) + { + return; + } + + Subtable0A++; + PowerStateCount--; + Offset += sizeof (ACPI_MPST_POWER_STATE); + } + + /* Sub-subtables - Physical Component ID Structure(s) */ + + Subtable0B = ACPI_CAST_PTR (ACPI_MPST_COMPONENT, Subtable0A); + + if (ComponentCount) + { + AcpiOsPrintf ("\n"); + } + + while (ComponentCount) + { + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0B, + sizeof (ACPI_MPST_COMPONENT), AcpiDmTableInfoMpst0B); + if (ACPI_FAILURE (Status)) + { + return; + } + + Subtable0B++; + ComponentCount--; + Offset += sizeof (ACPI_MPST_COMPONENT); + } + + /* Point to next Memory Power Node subtable */ + + SubtableCount--; + Subtable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Subtable0, + sizeof (ACPI_MPST_POWER_NODE) + + (sizeof (ACPI_MPST_POWER_STATE) * Subtable0->NumPowerStates) + + (sizeof (ACPI_MPST_COMPONENT) * Subtable0->NumPhysicalComponents)); + } + + /* Subtable: Count of Memory Power State Characteristic structures */ + + AcpiOsPrintf ("\n"); + Subtable1 = ACPI_CAST_PTR (ACPI_MPST_DATA_HDR, Subtable0); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable1, + sizeof (ACPI_MPST_DATA_HDR), AcpiDmTableInfoMpst1); + if (ACPI_FAILURE (Status)) + { + return; + } + + SubtableCount = Subtable1->CharacteristicsCount; + Offset += sizeof (ACPI_MPST_DATA_HDR); + + /* Subtable: Memory Power State Characteristics structure(s) */ + + Subtable2 = ACPI_ADD_PTR (ACPI_MPST_POWER_DATA, Subtable1, + sizeof (ACPI_MPST_DATA_HDR)); + + while ((Offset < Table->Length) && SubtableCount) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable2, + sizeof (ACPI_MPST_POWER_DATA), AcpiDmTableInfoMpst2); + if (ACPI_FAILURE (Status)) + { + return; + } + + Subtable2++; + SubtableCount--; + Offset += sizeof (ACPI_MPST_POWER_DATA); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpMsct + * + * PARAMETERS: Table - A MSCT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a MSCT + * + ******************************************************************************/ + +void +AcpiDmDumpMsct ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + UINT32 Offset = sizeof (ACPI_TABLE_MSCT); + ACPI_MSCT_PROXIMITY *Subtable; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMsct); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + sizeof (ACPI_MSCT_PROXIMITY), AcpiDmTableInfoMsct0); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point to next subtable */ + + Offset += sizeof (ACPI_MSCT_PROXIMITY); + Subtable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Subtable, + sizeof (ACPI_MSCT_PROXIMITY)); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpMtmr + * + * PARAMETERS: Table - A MTMR table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a MTMR + * + ******************************************************************************/ + +void +AcpiDmDumpMtmr ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + UINT32 Offset = sizeof (ACPI_TABLE_MTMR); + ACPI_MTMR_ENTRY *Subtable; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMtmr); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + sizeof (ACPI_MTMR_ENTRY), AcpiDmTableInfoMtmr0); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point to next subtable */ + + Offset += sizeof (ACPI_MTMR_ENTRY); + Subtable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Subtable, + sizeof (ACPI_MTMR_ENTRY)); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpNfit + * + * PARAMETERS: Table - A NFIT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of an NFIT. + * + ******************************************************************************/ + +void +AcpiDmDumpNfit ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + UINT32 Offset = sizeof (ACPI_TABLE_NFIT); + UINT32 FieldOffset = 0; + UINT32 Length; + ACPI_NFIT_HEADER *Subtable; + ACPI_DMTABLE_INFO *InfoTable; + ACPI_NFIT_INTERLEAVE *Interleave = NULL; + ACPI_NFIT_SMBIOS *SmbiosInfo = NULL; + ACPI_NFIT_FLUSH_ADDRESS *Hint = NULL; + UINT32 i; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoNfit); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Table, Offset); + while (Offset < Table->Length) + { + /* NFIT subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoNfitHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + switch (Subtable->Type) + { + case ACPI_NFIT_TYPE_SYSTEM_ADDRESS: + + InfoTable = AcpiDmTableInfoNfit0; + break; + + case ACPI_NFIT_TYPE_MEMORY_MAP: + + InfoTable = AcpiDmTableInfoNfit1; + break; + + case ACPI_NFIT_TYPE_INTERLEAVE: + + /* Has a variable number of 32-bit values at the end */ + + InfoTable = AcpiDmTableInfoNfit2; + Interleave = ACPI_CAST_PTR (ACPI_NFIT_INTERLEAVE, Subtable); + FieldOffset = sizeof (ACPI_NFIT_INTERLEAVE); + break; + + case ACPI_NFIT_TYPE_SMBIOS: + + SmbiosInfo = ACPI_CAST_PTR (ACPI_NFIT_SMBIOS, Subtable); + InfoTable = AcpiDmTableInfoNfit3; + break; + + case ACPI_NFIT_TYPE_CONTROL_REGION: + + InfoTable = AcpiDmTableInfoNfit4; + break; + + case ACPI_NFIT_TYPE_DATA_REGION: + + InfoTable = AcpiDmTableInfoNfit5; + break; + + case ACPI_NFIT_TYPE_FLUSH_ADDRESS: + + /* Has a variable number of 64-bit addresses at the end */ + + InfoTable = AcpiDmTableInfoNfit6; + Hint = ACPI_CAST_PTR (ACPI_NFIT_FLUSH_ADDRESS, Subtable); + FieldOffset = sizeof (ACPI_NFIT_FLUSH_ADDRESS) - sizeof (UINT64); + break; + + case ACPI_NFIT_TYPE_CAPABILITIES: /* ACPI 6.0A */ + + InfoTable = AcpiDmTableInfoNfit7; + break; + + default: + AcpiOsPrintf ("\n**** Unknown NFIT subtable type 0x%X\n", + Subtable->Type); + + /* Attempt to continue */ + + if (!Subtable->Length) + { + AcpiOsPrintf ("Invalid zero length subtable\n"); + return; + } + goto NextSubtable; + } + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Subtable->Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Per-subtable variable-length fields */ + + switch (Subtable->Type) + { + case ACPI_NFIT_TYPE_INTERLEAVE: + + for (i = 0; i < Interleave->LineCount; i++) + { + Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset, + &Interleave->LineOffset[i], + sizeof (UINT32), AcpiDmTableInfoNfit2a); + if (ACPI_FAILURE (Status)) + { + return; + } + + FieldOffset += sizeof (UINT32); + } + break; + + case ACPI_NFIT_TYPE_SMBIOS: + + Length = Subtable->Length - + sizeof (ACPI_NFIT_SMBIOS) + sizeof (UINT8); + + if (Length) + { + Status = AcpiDmDumpTable (Table->Length, + sizeof (ACPI_NFIT_SMBIOS) - sizeof (UINT8), + SmbiosInfo, + Length, AcpiDmTableInfoNfit3a); + if (ACPI_FAILURE (Status)) + { + return; + } + } + + break; + + case ACPI_NFIT_TYPE_FLUSH_ADDRESS: + + for (i = 0; i < Hint->HintCount; i++) + { + Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset, + &Hint->HintAddress[i], + sizeof (UINT64), AcpiDmTableInfoNfit6a); + if (ACPI_FAILURE (Status)) + { + return; + } + + FieldOffset += sizeof (UINT64); + } + break; + + default: + break; + } + +NextSubtable: + /* Point to next subtable */ + + Offset += Subtable->Length; + Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Subtable, Subtable->Length); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpPcct + * + * PARAMETERS: Table - A PCCT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a PCCT. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpPcct ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_PCCT_SUBSPACE *Subtable; + ACPI_DMTABLE_INFO *InfoTable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_PCCT); + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPcct); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Header.Length, AcpiDmTableInfoPcctHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + switch (Subtable->Header.Type) + { + case ACPI_PCCT_TYPE_GENERIC_SUBSPACE: + + InfoTable = AcpiDmTableInfoPcct0; + break; + + case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE: + + InfoTable = AcpiDmTableInfoPcct1; + break; + + case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2: + + InfoTable = AcpiDmTableInfoPcct2; + break; + + case ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE: + + InfoTable = AcpiDmTableInfoPcct3; + break; + + case ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE: + + InfoTable = AcpiDmTableInfoPcct4; + break; + + default: + + AcpiOsPrintf ( + "\n**** Unexpected or unknown PCCT subtable type 0x%X\n\n", + Subtable->Header.Type); + return; + } + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Header.Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point to next subtable */ + + Offset += Subtable->Header.Length; + Subtable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Subtable, + Subtable->Header.Length); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpPdtt + * + * PARAMETERS: Table - A PDTT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a Pdtt. This is a variable-length + * table that contains an open-ended number of IDs + * at the end of the table. + * + ******************************************************************************/ + +void +AcpiDmDumpPdtt ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_PDTT_CHANNEL *Subtable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_PDTT); + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPdtt); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables. Currently there is only one type, but can be multiples */ + + Subtable = ACPI_ADD_PTR (ACPI_PDTT_CHANNEL, Table, Offset); + while (Offset < Table->Length) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, + sizeof (ACPI_PDTT_CHANNEL), AcpiDmTableInfoPdtt0); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point to next subtable */ + + Offset += sizeof (ACPI_PDTT_CHANNEL); + Subtable = ACPI_ADD_PTR (ACPI_PDTT_CHANNEL, Subtable, + sizeof (ACPI_PDTT_CHANNEL)); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpPmtt + * + * PARAMETERS: Table - A PMTT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a PMTT. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpPmtt ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_PMTT_HEADER *Subtable; + ACPI_PMTT_HEADER *MemSubtable; + ACPI_PMTT_HEADER *DimmSubtable; + ACPI_PMTT_DOMAIN *DomainArray; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_PMTT); + UINT32 MemOffset; + UINT32 DimmOffset; + UINT32 DomainOffset; + UINT32 DomainCount; + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPmtt); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoPmttHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Only Socket subtables are expected at this level */ + + if (Subtable->Type != ACPI_PMTT_TYPE_SOCKET) + { + AcpiOsPrintf ( + "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n", + Subtable->Type); + return; + } + + /* Dump the fixed-length portion of the subtable */ + + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoPmtt0); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Walk the memory controller subtables */ + + MemOffset = sizeof (ACPI_PMTT_SOCKET); + MemSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Subtable, + sizeof (ACPI_PMTT_SOCKET)); + + while (((Offset + MemOffset) < Table->Length) && + (MemOffset < Subtable->Length)) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, + Offset + MemOffset, MemSubtable, + MemSubtable->Length, AcpiDmTableInfoPmttHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Only memory controller subtables are expected at this level */ + + if (MemSubtable->Type != ACPI_PMTT_TYPE_CONTROLLER) + { + AcpiOsPrintf ( + "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n", + MemSubtable->Type); + return; + } + + /* Dump the fixed-length portion of the controller subtable */ + + Status = AcpiDmDumpTable (Length, + Offset + MemOffset, MemSubtable, + MemSubtable->Length, AcpiDmTableInfoPmtt1); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Walk the variable count of proximity domains */ + + DomainCount = ((ACPI_PMTT_CONTROLLER *) MemSubtable)->DomainCount; + DomainOffset = sizeof (ACPI_PMTT_CONTROLLER); + DomainArray = ACPI_ADD_PTR (ACPI_PMTT_DOMAIN, MemSubtable, + sizeof (ACPI_PMTT_CONTROLLER)); + + while (((Offset + MemOffset + DomainOffset) < Table->Length) && + ((MemOffset + DomainOffset) < Subtable->Length) && + DomainCount) + { + Status = AcpiDmDumpTable (Length, + Offset + MemOffset + DomainOffset, DomainArray, + sizeof (ACPI_PMTT_DOMAIN), AcpiDmTableInfoPmtt1a); + if (ACPI_FAILURE (Status)) + { + return; + } + + DomainOffset += sizeof (ACPI_PMTT_DOMAIN); + DomainArray++; + DomainCount--; + } + + if (DomainCount) + { + AcpiOsPrintf ( + "\n**** DomainCount exceeds subtable length\n\n"); + } + + /* Walk the physical component (DIMM) subtables */ + + DimmOffset = DomainOffset; + DimmSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, MemSubtable, + DomainOffset); + + while (((Offset + MemOffset + DimmOffset) < Table->Length) && + (DimmOffset < MemSubtable->Length)) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, + Offset + MemOffset + DimmOffset, DimmSubtable, + DimmSubtable->Length, AcpiDmTableInfoPmttHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Only DIMM subtables are expected at this level */ + + if (DimmSubtable->Type != ACPI_PMTT_TYPE_DIMM) + { + AcpiOsPrintf ( + "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n", + DimmSubtable->Type); + return; + } + + /* Dump the fixed-length DIMM subtable */ + + Status = AcpiDmDumpTable (Length, + Offset + MemOffset + DimmOffset, DimmSubtable, + DimmSubtable->Length, AcpiDmTableInfoPmtt2); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point to next DIMM subtable */ + + DimmOffset += DimmSubtable->Length; + DimmSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, + DimmSubtable, DimmSubtable->Length); + } + + /* Point to next Controller subtable */ + + MemOffset += MemSubtable->Length; + MemSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, + MemSubtable, MemSubtable->Length); + } + + /* Point to next Socket subtable */ + + Offset += Subtable->Length; + Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, + Subtable, Subtable->Length); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpPptt + * + * PARAMETERS: Table - A PMTT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a PPTT. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpPptt ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_SUBTABLE_HEADER *Subtable; + ACPI_PPTT_PROCESSOR *PpttProcessor; + UINT8 Length; + UINT8 SubtableOffset; + UINT32 Offset = sizeof (ACPI_TABLE_FPDT); + ACPI_DMTABLE_INFO *InfoTable; + UINT32 i; + + + /* There is no main table (other than the standard ACPI header) */ + + /* Subtables */ + + Offset = sizeof (ACPI_TABLE_HEADER); + while (Offset < Table->Length) + { + AcpiOsPrintf ("\n"); + + /* Common subtable header */ + + Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset); + if (Subtable->Length < sizeof (ACPI_SUBTABLE_HEADER)) + { + AcpiOsPrintf ("Invalid subtable length\n"); + return; + } + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoPpttHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + switch (Subtable->Type) + { + case ACPI_PPTT_TYPE_PROCESSOR: + + InfoTable = AcpiDmTableInfoPptt0; + Length = sizeof (ACPI_PPTT_PROCESSOR); + break; + + case ACPI_PPTT_TYPE_CACHE: + + InfoTable = AcpiDmTableInfoPptt1; + Length = sizeof (ACPI_PPTT_CACHE); + break; + + case ACPI_PPTT_TYPE_ID: + + InfoTable = AcpiDmTableInfoPptt2; + Length = sizeof (ACPI_PPTT_ID); + break; + + default: + + AcpiOsPrintf ("\n**** Unknown PPTT subtable type 0x%X\n\n", + Subtable->Type); + + /* Attempt to continue */ + + goto NextSubtable; + } + + if (Subtable->Length < Length) + { + AcpiOsPrintf ("Invalid subtable length\n"); + return; + } + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Subtable->Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + SubtableOffset = Length; + + switch (Subtable->Type) + { + case ACPI_PPTT_TYPE_PROCESSOR: + + PpttProcessor = ACPI_CAST_PTR (ACPI_PPTT_PROCESSOR, Subtable); + + /* Dump SMBIOS handles */ + + if ((UINT8)(Subtable->Length - SubtableOffset) < + (UINT8)(PpttProcessor->NumberOfPrivResources * 4)) + { + AcpiOsPrintf ("Invalid private resource number\n"); + return; + } + for (i = 0; i < PpttProcessor->NumberOfPrivResources; i++) + { + Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset, + ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, SubtableOffset), + 4, AcpiDmTableInfoPptt0a); + SubtableOffset += 4; + } + break; + + default: + + break; + } + +NextSubtable: + /* Point to next subtable */ + + Offset += Subtable->Length; + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpS3pt + * + * PARAMETERS: Table - A S3PT table + * + * RETURN: Length of the table + * + * DESCRIPTION: Format the contents of a S3PT + * + ******************************************************************************/ + +UINT32 +AcpiDmDumpS3pt ( + ACPI_TABLE_HEADER *Tables) +{ + ACPI_STATUS Status; + UINT32 Offset = sizeof (ACPI_TABLE_S3PT); + ACPI_FPDT_HEADER *Subtable; + ACPI_DMTABLE_INFO *InfoTable; + ACPI_TABLE_S3PT *S3ptTable = ACPI_CAST_PTR (ACPI_TABLE_S3PT, Tables); + + + /* Main table */ + + Status = AcpiDmDumpTable (Offset, 0, S3ptTable, 0, AcpiDmTableInfoS3pt); + if (ACPI_FAILURE (Status)) + { + return 0; + } + + Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, S3ptTable, Offset); + while (Offset < S3ptTable->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (S3ptTable->Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoS3ptHdr); + if (ACPI_FAILURE (Status)) + { + return 0; + } + + switch (Subtable->Type) + { + case ACPI_S3PT_TYPE_RESUME: + + InfoTable = AcpiDmTableInfoS3pt0; + break; + + case ACPI_S3PT_TYPE_SUSPEND: + + InfoTable = AcpiDmTableInfoS3pt1; + break; + + default: + + AcpiOsPrintf ("\n**** Unknown S3PT subtable type 0x%X\n", + Subtable->Type); + + /* Attempt to continue */ + + if (!Subtable->Length) + { + AcpiOsPrintf ("Invalid zero length subtable\n"); + return 0; + } + goto NextSubtable; + } + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (S3ptTable->Length, Offset, Subtable, + Subtable->Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return 0; + } + +NextSubtable: + /* Point to next subtable */ + + Offset += Subtable->Length; + Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Subtable, Subtable->Length); + } + + return (S3ptTable->Length); +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpSdev + * + * PARAMETERS: Table - A SDEV table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a SDEV. This is a variable-length + * table that contains variable strings and vendor data. + * + ******************************************************************************/ + +void +AcpiDmDumpSdev ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_SDEV_HEADER *Subtable; + ACPI_SDEV_PCIE *Pcie; + ACPI_SDEV_NAMESPACE *Namesp; + ACPI_DMTABLE_INFO *InfoTable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_SDEV); + UINT16 PathOffset; + UINT16 PathLength; + UINT16 VendorDataOffset; + UINT16 VendorDataLength; + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoSdev); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_SDEV_HEADER, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoSdevHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + switch (Subtable->Type) + { + case ACPI_SDEV_TYPE_NAMESPACE_DEVICE: + + InfoTable = AcpiDmTableInfoSdev0; + break; + + case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE: + + InfoTable = AcpiDmTableInfoSdev1; + break; + + default: + goto NextSubtable; + } + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Subtable->Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + + switch (Subtable->Type) + { + case ACPI_SDEV_TYPE_NAMESPACE_DEVICE: + + /* Dump the PCIe device ID(s) */ + + Namesp = ACPI_CAST_PTR (ACPI_SDEV_NAMESPACE, Subtable); + PathOffset = Namesp->DeviceIdOffset; + PathLength = Namesp->DeviceIdLength; + + if (PathLength) + { + Status = AcpiDmDumpTable (Table->Length, 0, + ACPI_ADD_PTR (UINT8, Namesp, PathOffset), + PathLength, AcpiDmTableInfoSdev0a); + if (ACPI_FAILURE (Status)) + { + return; + } + } + + /* Dump the vendor-specific data */ + + VendorDataLength = + Namesp->VendorDataLength; + VendorDataOffset = + Namesp->DeviceIdOffset + Namesp->DeviceIdLength; + + if (VendorDataLength) + { + Status = AcpiDmDumpTable (Table->Length, 0, + ACPI_ADD_PTR (UINT8, Namesp, VendorDataOffset), + VendorDataLength, AcpiDmTableInfoSdev1b); + if (ACPI_FAILURE (Status)) + { + return; + } + } + break; + + case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE: + + /* PCI path substructures */ + + Pcie = ACPI_CAST_PTR (ACPI_SDEV_PCIE, Subtable); + PathOffset = Pcie->PathOffset; + PathLength = Pcie->PathLength; + + while (PathLength) + { + Status = AcpiDmDumpTable (Table->Length, + PathOffset + Offset, + ACPI_ADD_PTR (UINT8, Pcie, PathOffset), + sizeof (ACPI_SDEV_PCIE_PATH), AcpiDmTableInfoSdev1a); + if (ACPI_FAILURE (Status)) + { + return; + } + + PathOffset += sizeof (ACPI_SDEV_PCIE_PATH); + PathLength -= sizeof (ACPI_SDEV_PCIE_PATH); + } + + /* VendorData */ + + VendorDataLength = Pcie->VendorDataLength; + VendorDataOffset = Pcie->PathOffset + Pcie->PathLength; + + if (VendorDataLength) + { + Status = AcpiDmDumpTable (Table->Length, 0, + ACPI_ADD_PTR (UINT8, Pcie, VendorDataOffset), + VendorDataLength, AcpiDmTableInfoSdev1b); + } + break; + + default: + goto NextSubtable; + } + +NextSubtable: + /* Point to next subtable */ + + Offset += Subtable->Length; + Subtable = ACPI_ADD_PTR (ACPI_SDEV_HEADER, Subtable, + Subtable->Length); + } +} diff --git a/src/acpica/source/common/dmtbdump3.c b/src/acpica/source/common/dmtbdump3.c new file mode 100644 index 00000000..3c1dea6c --- /dev/null +++ b/src/acpica/source/common/dmtbdump3.c @@ -0,0 +1,693 @@ +/****************************************************************************** + * + * Module Name: dmtbdump3 - Dump ACPI data tables that contain no AML code + * + *****************************************************************************/ + +/****************************************************************************** + * + * 1. Copyright Notice + * + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. + * All rights reserved. + * + * 2. License + * + * 2.1. This is your license from Intel Corp. under its intellectual property + * rights. You may have additional license terms from the party that provided + * you this software, covering your right to use that party's intellectual + * property rights. + * + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a + * copy of the source code appearing in this file ("Covered Code") an + * irrevocable, perpetual, worldwide license under Intel's copyrights in the + * base code distributed originally by Intel ("Original Intel Code") to copy, + * make derivatives, distribute, use and display any portion of the Covered + * Code in any form, with the right to sublicense such rights; and + * + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent + * license (with the right to sublicense), under only those claims of Intel + * patents that are infringed by the Original Intel Code, to make, use, sell, + * offer to sell, and import the Covered Code and derivative works thereof + * solely to the minimum extent necessary to exercise the above copyright + * license, and in no event shall the patent license extend to any additions + * to or modifications of the Original Intel Code. No other license or right + * is granted directly or by implication, estoppel or otherwise; + * + * The above copyright and patent license is granted only if the following + * conditions are met: + * + * 3. Conditions + * + * 3.1. Redistribution of Source with Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification with rights to further distribute source must include + * the above Copyright Notice, the above License, this list of Conditions, + * and the following Disclaimer and Export Compliance provision. In addition, + * Licensee must cause all Covered Code to which Licensee contributes to + * contain a file documenting the changes Licensee made to create that Covered + * Code and the date of any change. Licensee must include in that file the + * documentation of any changes made by any predecessor Licensee. Licensee + * must include a prominent statement that the modification is derived, + * directly or indirectly, from Original Intel Code. + * + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification without rights to further distribute source must + * include the following Disclaimer and Export Compliance provision in the + * documentation and/or other materials provided with distribution. In + * addition, Licensee may not authorize further sublicense of source of any + * portion of the Covered Code, and must include terms to the effect that the + * license from Licensee to its licensee is limited to the intellectual + * property embodied in the software Licensee provides to its licensee, and + * not to intellectual property embodied in modifications its licensee may + * make. + * + * 3.3. Redistribution of Executable. Redistribution in executable form of any + * substantial portion of the Covered Code or modification must reproduce the + * above Copyright Notice, and the following Disclaimer and Export Compliance + * provision in the documentation and/or other materials provided with the + * distribution. + * + * 3.4. Intel retains all right, title, and interest in and to the Original + * Intel Code. + * + * 3.5. Neither the name Intel nor any other trademark owned or controlled by + * Intel shall be used in advertising or otherwise to promote the sale, use or + * other dealings in products derived from or relating to the Covered Code + * without prior written authorization from Intel. + * + * 4. Disclaimer and Export Compliance + * + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A + * PARTICULAR PURPOSE. + * + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY + * LIMITED REMEDY. + * + * 4.3. Licensee shall not export, either directly or indirectly, any of this + * software or system incorporating such software without first obtaining any + * required license or other approval from the U. S. Department of Commerce or + * any other agency or department of the United States Government. In the + * event Licensee exports any such software from the United States or + * re-exports any such software from a foreign destination, Licensee shall + * ensure that the distribution and export/re-export of the software is in + * compliance with all laws, regulations, orders, or other restrictions of the + * U.S. Export Administration Regulations. Licensee agrees that neither it nor + * any of its subsidiaries will export/re-export any technical data, process, + * software, or service, directly or indirectly, to any country for which the + * United States government or any agency thereof requires an export license, + * other governmental approval, or letter of assurance, without first obtaining + * such license, approval or letter. + * + ***************************************************************************** + * + * Alternatively, you may choose to be licensed under the terms of the + * following license: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Alternatively, you may choose to be licensed under the terms of the + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. + * + *****************************************************************************/ + +#include "acpi.h" +#include "accommon.h" +#include "acdisasm.h" +#include "actables.h" + +/* This module used for application-level code only */ + +#define _COMPONENT ACPI_CA_DISASSEMBLER + ACPI_MODULE_NAME ("dmtbdump3") + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpSlic + * + * PARAMETERS: Table - A SLIC table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a SLIC + * + ******************************************************************************/ + +void +AcpiDmDumpSlic ( + ACPI_TABLE_HEADER *Table) +{ + + (void) AcpiDmDumpTable (Table->Length, sizeof (ACPI_TABLE_HEADER), Table, + Table->Length - sizeof (*Table), AcpiDmTableInfoSlic); +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpSlit + * + * PARAMETERS: Table - An SLIT + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a SLIT + * + ******************************************************************************/ + +void +AcpiDmDumpSlit ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + UINT32 Offset; + UINT8 *Row; + UINT32 Localities; + UINT32 i; + UINT32 j; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSlit); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Display the Locality NxN Matrix */ + + Localities = (UINT32) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->LocalityCount; + Offset = ACPI_OFFSET (ACPI_TABLE_SLIT, Entry[0]); + Row = (UINT8 *) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->Entry; + + for (i = 0; i < Localities; i++) + { + /* Display one row of the matrix */ + + AcpiDmLineHeader2 (Offset, Localities, "Locality", i); + for (j = 0; j < Localities; j++) + { + /* Check for beyond EOT */ + + if (Offset >= Table->Length) + { + AcpiOsPrintf ( + "\n**** Not enough room in table for all localities\n"); + return; + } + + AcpiOsPrintf ("%2.2X", Row[j]); + Offset++; + + /* Display up to 16 bytes per output row */ + + if ((j+1) < Localities) + { + AcpiOsPrintf (" "); + + if (j && (((j+1) % 16) == 0)) + { + AcpiOsPrintf ("\\\n"); /* With line continuation char */ + AcpiDmLineHeader (Offset, 0, NULL); + } + } + } + + /* Point to next row */ + + AcpiOsPrintf ("\n"); + Row += Localities; + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpSrat + * + * PARAMETERS: Table - A SRAT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a SRAT + * + ******************************************************************************/ + +void +AcpiDmDumpSrat ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + UINT32 Offset = sizeof (ACPI_TABLE_SRAT); + ACPI_SUBTABLE_HEADER *Subtable; + ACPI_DMTABLE_INFO *InfoTable; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSrat); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoSratHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + switch (Subtable->Type) + { + case ACPI_SRAT_TYPE_CPU_AFFINITY: + + InfoTable = AcpiDmTableInfoSrat0; + break; + + case ACPI_SRAT_TYPE_MEMORY_AFFINITY: + + InfoTable = AcpiDmTableInfoSrat1; + break; + + case ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY: + + InfoTable = AcpiDmTableInfoSrat2; + break; + + case ACPI_SRAT_TYPE_GICC_AFFINITY: + + InfoTable = AcpiDmTableInfoSrat3; + break; + + case ACPI_SRAT_TYPE_GIC_ITS_AFFINITY: + + InfoTable = AcpiDmTableInfoSrat4; + break; + + default: + AcpiOsPrintf ("\n**** Unknown SRAT subtable type 0x%X\n", + Subtable->Type); + + /* Attempt to continue */ + + if (!Subtable->Length) + { + AcpiOsPrintf ("Invalid zero length subtable\n"); + return; + } + goto NextSubtable; + } + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Subtable->Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + +NextSubtable: + /* Point to next subtable */ + + Offset += Subtable->Length; + Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, + Subtable->Length); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpStao + * + * PARAMETERS: Table - A STAO table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a STAO. This is a variable-length + * table that contains an open-ended number of ASCII strings + * at the end of the table. + * + ******************************************************************************/ + +void +AcpiDmDumpStao ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + char *Namepath; + UINT32 Length = Table->Length; + UINT32 StringLength; + UINT32 Offset = sizeof (ACPI_TABLE_STAO); + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoStao); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* The rest of the table consists of Namepath strings */ + + while (Offset < Table->Length) + { + Namepath = ACPI_ADD_PTR (char, Table, Offset); + StringLength = strlen (Namepath) + 1; + + AcpiDmLineHeader (Offset, StringLength, "Namestring"); + AcpiOsPrintf ("\"%s\"\n", Namepath); + + /* Point to next namepath */ + + Offset += StringLength; + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpTcpa + * + * PARAMETERS: Table - A TCPA table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a TCPA. + * + * NOTE: There are two versions of the table with the same signature: + * the client version and the server version. The common + * PlatformClass field is used to differentiate the two types of + * tables. + * + ******************************************************************************/ + +void +AcpiDmDumpTcpa ( + ACPI_TABLE_HEADER *Table) +{ + UINT32 Offset = sizeof (ACPI_TABLE_TCPA_HDR); + ACPI_TABLE_TCPA_HDR *CommonHeader = ACPI_CAST_PTR ( + ACPI_TABLE_TCPA_HDR, Table); + ACPI_TABLE_TCPA_HDR *Subtable = ACPI_ADD_PTR ( + ACPI_TABLE_TCPA_HDR, Table, Offset); + ACPI_STATUS Status; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, + 0, AcpiDmTableInfoTcpaHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* + * Examine the PlatformClass field to determine the table type. + * Either a client or server table. Only one. + */ + switch (CommonHeader->PlatformClass) + { + case ACPI_TCPA_CLIENT_TABLE: + + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Table->Length - Offset, AcpiDmTableInfoTcpaClient); + break; + + case ACPI_TCPA_SERVER_TABLE: + + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Table->Length - Offset, AcpiDmTableInfoTcpaServer); + break; + + default: + + AcpiOsPrintf ("\n**** Unknown TCPA Platform Class 0x%X\n", + CommonHeader->PlatformClass); + Status = AE_ERROR; + break; + } + + if (ACPI_FAILURE (Status)) + { + AcpiOsPrintf ("\n**** Cannot disassemble TCPA table\n"); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpTpm2 + * + * PARAMETERS: Table - A TPM2 table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a TPM2. + * + ******************************************************************************/ + +void +AcpiDmDumpTpm2 ( + ACPI_TABLE_HEADER *Table) +{ + UINT32 Offset = sizeof (ACPI_TABLE_TPM2); + ACPI_TABLE_TPM2 *CommonHeader = ACPI_CAST_PTR (ACPI_TABLE_TPM2, Table); + ACPI_TPM2_TRAILER *Subtable = ACPI_ADD_PTR (ACPI_TPM2_TRAILER, Table, Offset); + ACPI_TPM2_ARM_SMC *ArmSubtable; + ACPI_STATUS Status; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoTpm2); + if (ACPI_FAILURE (Status)) + { + return; + } + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + Table->Length - Offset, AcpiDmTableInfoTpm2a); + if (ACPI_FAILURE (Status)) + { + return; + } + + switch (CommonHeader->StartMethod) + { + case ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC: + + ArmSubtable = ACPI_ADD_PTR (ACPI_TPM2_ARM_SMC, Subtable, + sizeof (ACPI_TPM2_TRAILER)); + Offset += sizeof (ACPI_TPM2_TRAILER); + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, ArmSubtable, + Table->Length - Offset, AcpiDmTableInfoTpm211); + break; + + default: + break; + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpVrtc + * + * PARAMETERS: Table - A VRTC table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a VRTC + * + ******************************************************************************/ + +void +AcpiDmDumpVrtc ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + UINT32 Offset = sizeof (ACPI_TABLE_VRTC); + ACPI_VRTC_ENTRY *Subtable; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoVrtc); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + sizeof (ACPI_VRTC_ENTRY), AcpiDmTableInfoVrtc0); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point to next subtable */ + + Offset += sizeof (ACPI_VRTC_ENTRY); + Subtable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, Subtable, + sizeof (ACPI_VRTC_ENTRY)); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpWdat + * + * PARAMETERS: Table - A WDAT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a WDAT + * + ******************************************************************************/ + +void +AcpiDmDumpWdat ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + UINT32 Offset = sizeof (ACPI_TABLE_WDAT); + ACPI_WDAT_ENTRY *Subtable; + + + /* Main table */ + + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoWdat); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, + sizeof (ACPI_WDAT_ENTRY), AcpiDmTableInfoWdat0); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point to next subtable */ + + Offset += sizeof (ACPI_WDAT_ENTRY); + Subtable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Subtable, + sizeof (ACPI_WDAT_ENTRY)); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpWpbt + * + * PARAMETERS: Table - A WPBT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a WPBT. This table type consists + * of an open-ended arguments buffer at the end of the table. + * + ******************************************************************************/ + +void +AcpiDmDumpWpbt ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_TABLE_WPBT *Subtable; + UINT32 Length = Table->Length; + UINT16 ArgumentsLength; + + + /* Dump the main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoWpbt); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Extract the arguments buffer length from the main table */ + + Subtable = ACPI_CAST_PTR (ACPI_TABLE_WPBT, Table); + ArgumentsLength = Subtable->ArgumentsLength; + + /* Dump the arguments buffer */ + + (void) AcpiDmDumpTable (Table->Length, 0, Table, ArgumentsLength, + AcpiDmTableInfoWpbt0); +} diff --git a/src/acpica/source/common/dmtbinfo.c b/src/acpica/source/common/dmtbinfo.c index 8e14569b..2e1c54f8 100644 --- a/src/acpica/source/common/dmtbinfo.c +++ b/src/acpica/source/common/dmtbinfo.c @@ -424,2909 +424,3 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoFadt6[] = {ACPI_DMT_UINT64, ACPI_FADT_OFFSET (HypervisorId), "Hypervisor ID", 0}, ACPI_DMT_TERMINATOR }; - - -/* - * Remaining tables are not consumed directly by the ACPICA subsystem - */ - -/******************************************************************************* - * - * ASF - Alert Standard Format table (Signature "ASF!") - * - ******************************************************************************/ - -/* Common Subtable header (one per Subtable) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoAsfHdr[] = -{ - {ACPI_DMT_ASF, ACPI_ASF0_OFFSET (Header.Type), "Subtable Type", 0}, - {ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (Header.Reserved), "Reserved", 0}, - {ACPI_DMT_UINT16, ACPI_ASF0_OFFSET (Header.Length), "Length", DT_LENGTH}, - ACPI_DMT_TERMINATOR -}; - -/* 0: ASF Information */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoAsf0[] = -{ - {ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (MinResetValue), "Minimum Reset Value", 0}, - {ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (MinPollInterval), "Minimum Polling Interval", 0}, - {ACPI_DMT_UINT16, ACPI_ASF0_OFFSET (SystemId), "System ID", 0}, - {ACPI_DMT_UINT32, ACPI_ASF0_OFFSET (MfgId), "Manufacturer ID", 0}, - {ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (Flags), "Flags", 0}, - {ACPI_DMT_UINT24, ACPI_ASF0_OFFSET (Reserved2[0]), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 1: ASF Alerts */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoAsf1[] = -{ - {ACPI_DMT_UINT8, ACPI_ASF1_OFFSET (AssertMask), "AssertMask", 0}, - {ACPI_DMT_UINT8, ACPI_ASF1_OFFSET (DeassertMask), "DeassertMask", 0}, - {ACPI_DMT_UINT8, ACPI_ASF1_OFFSET (Alerts), "Alert Count", 0}, - {ACPI_DMT_UINT8, ACPI_ASF1_OFFSET (DataLength), "Alert Data Length", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 1a: ASF Alert data */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoAsf1a[] = -{ - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Address), "Address", 0}, - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Command), "Command", 0}, - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Mask), "Mask", 0}, - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Value), "Value", 0}, - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (SensorType), "SensorType", 0}, - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Type), "Type", 0}, - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Offset), "Offset", 0}, - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (SourceType), "SourceType", 0}, - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Severity), "Severity", 0}, - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (SensorNumber), "SensorNumber", 0}, - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Entity), "Entity", 0}, - {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Instance), "Instance", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 2: ASF Remote Control */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoAsf2[] = -{ - {ACPI_DMT_UINT8, ACPI_ASF2_OFFSET (Controls), "Control Count", 0}, - {ACPI_DMT_UINT8, ACPI_ASF2_OFFSET (DataLength), "Control Data Length", 0}, - {ACPI_DMT_UINT16, ACPI_ASF2_OFFSET (Reserved2), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 2a: ASF Control data */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoAsf2a[] = -{ - {ACPI_DMT_UINT8, ACPI_ASF2a_OFFSET (Function), "Function", 0}, - {ACPI_DMT_UINT8, ACPI_ASF2a_OFFSET (Address), "Address", 0}, - {ACPI_DMT_UINT8, ACPI_ASF2a_OFFSET (Command), "Command", 0}, - {ACPI_DMT_UINT8, ACPI_ASF2a_OFFSET (Value), "Value", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 3: ASF RMCP Boot Options */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoAsf3[] = -{ - {ACPI_DMT_BUF7, ACPI_ASF3_OFFSET (Capabilities[0]), "Capabilities", 0}, - {ACPI_DMT_UINT8, ACPI_ASF3_OFFSET (CompletionCode), "Completion Code", 0}, - {ACPI_DMT_UINT32, ACPI_ASF3_OFFSET (EnterpriseId), "Enterprise ID", 0}, - {ACPI_DMT_UINT8, ACPI_ASF3_OFFSET (Command), "Command", 0}, - {ACPI_DMT_UINT16, ACPI_ASF3_OFFSET (Parameter), "Parameter", 0}, - {ACPI_DMT_UINT16, ACPI_ASF3_OFFSET (BootOptions), "Boot Options", 0}, - {ACPI_DMT_UINT16, ACPI_ASF3_OFFSET (OemParameters), "Oem Parameters", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 4: ASF Address */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoAsf4[] = -{ - {ACPI_DMT_UINT8, ACPI_ASF4_OFFSET (EpromAddress), "Eprom Address", 0}, - {ACPI_DMT_UINT8, ACPI_ASF4_OFFSET (Devices), "Device Count", DT_COUNT}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * BERT - Boot Error Record table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoBert[] = -{ - {ACPI_DMT_UINT32, ACPI_BERT_OFFSET (RegionLength), "Boot Error Region Length", 0}, - {ACPI_DMT_UINT64, ACPI_BERT_OFFSET (Address), "Boot Error Region Address", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * BGRT - Boot Graphics Resource Table (ACPI 5.0) - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoBgrt[] = -{ - {ACPI_DMT_UINT16, ACPI_BGRT_OFFSET (Version), "Version", 0}, - {ACPI_DMT_UINT8, ACPI_BGRT_OFFSET (Status), "Status (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_BGRT_FLAG_OFFSET (Status, 0), "Displayed", 0}, - {ACPI_DMT_FLAGS1, ACPI_BGRT_FLAG_OFFSET (Status, 0), "Orientation Offset", 0}, - - {ACPI_DMT_UINT8, ACPI_BGRT_OFFSET (ImageType), "Image Type", 0}, - {ACPI_DMT_UINT64, ACPI_BGRT_OFFSET (ImageAddress), "Image Address", 0}, - {ACPI_DMT_UINT32, ACPI_BGRT_OFFSET (ImageOffsetX), "Image OffsetX", 0}, - {ACPI_DMT_UINT32, ACPI_BGRT_OFFSET (ImageOffsetY), "Image OffsetY", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * BOOT - Simple Boot Flag Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoBoot[] = -{ - {ACPI_DMT_UINT8, ACPI_BOOT_OFFSET (CmosIndex), "Boot Register Index", 0}, - {ACPI_DMT_UINT24, ACPI_BOOT_OFFSET (Reserved[0]), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * CPEP - Corrected Platform Error Polling table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoCpep[] = -{ - {ACPI_DMT_UINT64, ACPI_CPEP_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoCpep0[] = -{ - {ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Header.Type), "Subtable Type", 0}, - {ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Header.Length), "Length", DT_LENGTH}, - {ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Id), "Processor ID", 0}, - {ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Eid), "Processor EID", 0}, - {ACPI_DMT_UINT32, ACPI_CPEP0_OFFSET (Interval), "Polling Interval", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * CSRT - Core System Resource Table - * - ******************************************************************************/ - -/* Main table consists only of the standard ACPI table header */ - -/* Resource Group subtable */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt0[] = -{ - {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (Length), "Length", DT_LENGTH}, - {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (VendorId), "Vendor ID", 0}, - {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (SubvendorId), "Subvendor ID", 0}, - {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (DeviceId), "Device ID", 0}, - {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (SubdeviceId), "Subdevice ID", 0}, - {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (Revision), "Revision", 0}, - {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (SharedInfoLength), "Shared Info Length", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Shared Info subtable */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt1[] = -{ - {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (MajorVersion), "Major Version", 0}, - {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (MinorVersion), "Minor Version", 0}, - {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (MmioBaseLow), "MMIO Base Address Low", 0}, - {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (MmioBaseHigh), "MMIO Base Address High", 0}, - {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (GsiInterrupt), "GSI Interrupt", 0}, - {ACPI_DMT_UINT8, ACPI_CSRT1_OFFSET (InterruptPolarity), "Interrupt Polarity", 0}, - {ACPI_DMT_UINT8, ACPI_CSRT1_OFFSET (InterruptMode), "Interrupt Mode", 0}, - {ACPI_DMT_UINT8, ACPI_CSRT1_OFFSET (NumChannels), "Num Channels", 0}, - {ACPI_DMT_UINT8, ACPI_CSRT1_OFFSET (DmaAddressWidth), "DMA Address Width", 0}, - {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (BaseRequestLine), "Base Request Line", 0}, - {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (NumHandshakeSignals), "Num Handshake Signals", 0}, - {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (MaxBlockSize), "Max Block Size", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Resource Descriptor subtable */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt2[] = -{ - {ACPI_DMT_UINT32, ACPI_CSRT2_OFFSET (Length), "Length", DT_LENGTH}, - {ACPI_DMT_UINT16, ACPI_CSRT2_OFFSET (Type), "Type", 0}, - {ACPI_DMT_UINT16, ACPI_CSRT2_OFFSET (Subtype), "Subtype", 0}, - {ACPI_DMT_UINT32, ACPI_CSRT2_OFFSET (Uid), "UID", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt2a[] = -{ - {ACPI_DMT_RAW_BUFFER, 0, "ResourceInfo", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * DBG2 - Debug Port Table 2 - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2[] = -{ - {ACPI_DMT_UINT32, ACPI_DBG2_OFFSET (InfoOffset), "Info Offset", 0}, - {ACPI_DMT_UINT32, ACPI_DBG2_OFFSET (InfoCount), "Info Count", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Debug Device Information Subtable */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Device[] = -{ - {ACPI_DMT_UINT8, ACPI_DBG20_OFFSET (Revision), "Revision", 0}, - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (Length), "Length", DT_LENGTH}, - {ACPI_DMT_UINT8, ACPI_DBG20_OFFSET (RegisterCount), "Register Count", 0}, - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (NamepathLength), "Namepath Length", 0}, - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (NamepathOffset), "Namepath Offset", 0}, - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (OemDataLength), "OEM Data Length", DT_DESCRIBES_OPTIONAL}, - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (OemDataOffset), "OEM Data Offset", DT_DESCRIBES_OPTIONAL}, - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (PortType), "Port Type", 0}, - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (PortSubtype), "Port Subtype", 0}, - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (BaseAddressOffset), "Base Address Offset", 0}, - {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (AddressSizeOffset), "Address Size Offset", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Variable-length data for the subtable */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Addr[] = -{ - {ACPI_DMT_GAS, 0, "Base Address Register", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Size[] = -{ - {ACPI_DMT_UINT32, 0, "Address Size", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Name[] = -{ - {ACPI_DMT_STRING, 0, "Namepath", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2OemData[] = -{ - {ACPI_DMT_RAW_BUFFER, 0, "OEM Data", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * DBGP - Debug Port - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoDbgp[] = -{ - {ACPI_DMT_UINT8, ACPI_DBGP_OFFSET (Type), "Interface Type", 0}, - {ACPI_DMT_UINT24, ACPI_DBGP_OFFSET (Reserved[0]), "Reserved", 0}, - {ACPI_DMT_GAS, ACPI_DBGP_OFFSET (DebugPort), "Debug Port Register", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * DMAR - DMA Remapping table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoDmar[] = -{ - {ACPI_DMT_UINT8, ACPI_DMAR_OFFSET (Width), "Host Address Width", 0}, - {ACPI_DMT_UINT8, ACPI_DMAR_OFFSET (Flags), "Flags", 0}, - {ACPI_DMT_BUF10, ACPI_DMAR_OFFSET (Reserved[0]), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Common Subtable header (one per Subtable) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoDmarHdr[] = -{ - {ACPI_DMT_DMAR, ACPI_DMAR0_OFFSET (Header.Type), "Subtable Type", 0}, - {ACPI_DMT_UINT16, ACPI_DMAR0_OFFSET (Header.Length), "Length", DT_LENGTH}, - ACPI_DMT_TERMINATOR -}; - -/* Common device scope entry */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoDmarScope[] = -{ - {ACPI_DMT_DMAR_SCOPE, ACPI_DMARS_OFFSET (EntryType), "Device Scope Type", 0}, - {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (Length), "Entry Length", DT_LENGTH}, - {ACPI_DMT_UINT16, ACPI_DMARS_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (EnumerationId), "Enumeration ID", 0}, - {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (Bus), "PCI Bus Number", 0}, - ACPI_DMT_TERMINATOR -}; - -/* DMAR Subtables */ - -/* 0: Hardware Unit Definition */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoDmar0[] = -{ - {ACPI_DMT_UINT8, ACPI_DMAR0_OFFSET (Flags), "Flags", 0}, - {ACPI_DMT_UINT8, ACPI_DMAR0_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT16, ACPI_DMAR0_OFFSET (Segment), "PCI Segment Number", 0}, - {ACPI_DMT_UINT64, ACPI_DMAR0_OFFSET (Address), "Register Base Address", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 1: Reserved Memory Definition */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoDmar1[] = -{ - {ACPI_DMT_UINT16, ACPI_DMAR1_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT16, ACPI_DMAR1_OFFSET (Segment), "PCI Segment Number", 0}, - {ACPI_DMT_UINT64, ACPI_DMAR1_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT64, ACPI_DMAR1_OFFSET (EndAddress), "End Address (limit)", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 2: Root Port ATS Capability Definition */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoDmar2[] = -{ - {ACPI_DMT_UINT8, ACPI_DMAR2_OFFSET (Flags), "Flags", 0}, - {ACPI_DMT_UINT8, ACPI_DMAR2_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT16, ACPI_DMAR2_OFFSET (Segment), "PCI Segment Number", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 3: Remapping Hardware Static Affinity Structure */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoDmar3[] = -{ - {ACPI_DMT_UINT32, ACPI_DMAR3_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_DMAR3_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT32, ACPI_DMAR3_OFFSET (ProximityDomain), "Proximity Domain", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 4: ACPI Namespace Device Declaration Structure */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoDmar4[] = -{ - {ACPI_DMT_UINT24, ACPI_DMAR4_OFFSET (Reserved[0]), "Reserved", 0}, - {ACPI_DMT_UINT8, ACPI_DMAR4_OFFSET (DeviceNumber), "Device Number", 0}, - {ACPI_DMT_STRING, ACPI_DMAR4_OFFSET (DeviceName[0]), "Device Name", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * DRTM - Dynamic Root of Trust for Measurement table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm[] = -{ - {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (EntryBaseAddress), "Entry Base Address", 0}, - {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (EntryLength), "Entry Length", 0}, - {ACPI_DMT_UINT32, ACPI_DRTM_OFFSET (EntryAddress32), "Entry 32", 0}, - {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (EntryAddress64), "Entry 64", 0}, - {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (ExitAddress), "Exit Address", 0}, - {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (LogAreaAddress), "Log Area Start", 0}, - {ACPI_DMT_UINT32, ACPI_DRTM_OFFSET (LogAreaLength), "Log Area Length", 0}, - {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (ArchDependentAddress), "Arch Dependent Address", 0}, - {ACPI_DMT_UINT32, ACPI_DRTM_OFFSET (Flags), "Flags (decoded below)", 0}, - {ACPI_DMT_FLAG0, ACPI_DRTM_FLAG_OFFSET (Flags, 0), "Namespace in TCB", 0}, - {ACPI_DMT_FLAG1, ACPI_DRTM_FLAG_OFFSET (Flags, 0), "Gap Code on S3 Resume", 0}, - {ACPI_DMT_FLAG2, ACPI_DRTM_FLAG_OFFSET (Flags, 0), "Gap Code on DLME_Exit", 0}, - {ACPI_DMT_FLAG3, ACPI_DRTM_FLAG_OFFSET (Flags, 0), "PCR_Authorities Changed", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm0[] = -{ - {ACPI_DMT_UINT32, ACPI_DRTM0_OFFSET (ValidatedTableCount), "Validated Table Count", DT_COUNT}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm0a[] = -{ - {ACPI_DMT_UINT64, 0, "Table Address", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm1[] = -{ - {ACPI_DMT_UINT32, ACPI_DRTM1_OFFSET (ResourceCount), "Resource Count", DT_COUNT}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm1a[] = -{ - {ACPI_DMT_UINT56, ACPI_DRTM1a_OFFSET (Size[0]), "Size", DT_OPTIONAL}, - {ACPI_DMT_UINT8, ACPI_DRTM1a_OFFSET (Type), "Type", 0}, - {ACPI_DMT_FLAG0, ACPI_DRTM1a_FLAG_OFFSET (Type, 0), "Resource Type", 0}, - {ACPI_DMT_FLAG7, ACPI_DRTM1a_FLAG_OFFSET (Type, 0), "Protections", 0}, - {ACPI_DMT_UINT64, ACPI_DRTM1a_OFFSET (Address), "Address", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm2[] = -{ - {ACPI_DMT_UINT32, ACPI_DRTM2_OFFSET (DpsIdLength), "DLME Platform Id Length", DT_COUNT}, - {ACPI_DMT_BUF16, ACPI_DRTM2_OFFSET (DpsId), "DLME Platform Id", DT_COUNT}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * ECDT - Embedded Controller Boot Resources Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoEcdt[] = -{ - {ACPI_DMT_GAS, ACPI_ECDT_OFFSET (Control), "Command/Status Register", 0}, - {ACPI_DMT_GAS, ACPI_ECDT_OFFSET (Data), "Data Register", 0}, - {ACPI_DMT_UINT32, ACPI_ECDT_OFFSET (Uid), "UID", 0}, - {ACPI_DMT_UINT8, ACPI_ECDT_OFFSET (Gpe), "GPE Number", 0}, - {ACPI_DMT_STRING, ACPI_ECDT_OFFSET (Id[0]), "Namepath", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * EINJ - Error Injection table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoEinj[] = -{ - {ACPI_DMT_UINT32, ACPI_EINJ_OFFSET (HeaderLength), "Injection Header Length", 0}, - {ACPI_DMT_UINT8, ACPI_EINJ_OFFSET (Flags), "Flags", 0}, - {ACPI_DMT_UINT24, ACPI_EINJ_OFFSET (Reserved[0]), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_EINJ_OFFSET (Entries), "Injection Entry Count", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoEinj0[] = -{ - {ACPI_DMT_EINJACT, ACPI_EINJ0_OFFSET (Action), "Action", 0}, - {ACPI_DMT_EINJINST, ACPI_EINJ0_OFFSET (Instruction), "Instruction", 0}, - {ACPI_DMT_UINT8, ACPI_EINJ0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_EINJ0_FLAG_OFFSET (Flags,0), "Preserve Register Bits", 0}, - - {ACPI_DMT_UINT8, ACPI_EINJ0_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_GAS, ACPI_EINJ0_OFFSET (RegisterRegion), "Register Region", 0}, - {ACPI_DMT_UINT64, ACPI_EINJ0_OFFSET (Value), "Value", 0}, - {ACPI_DMT_UINT64, ACPI_EINJ0_OFFSET (Mask), "Mask", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * ERST - Error Record Serialization table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoErst[] = -{ - {ACPI_DMT_UINT32, ACPI_ERST_OFFSET (HeaderLength), "Serialization Header Length", 0}, - {ACPI_DMT_UINT32, ACPI_ERST_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_ERST_OFFSET (Entries), "Instruction Entry Count", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoErst0[] = -{ - {ACPI_DMT_ERSTACT, ACPI_ERST0_OFFSET (Action), "Action", 0}, - {ACPI_DMT_ERSTINST, ACPI_ERST0_OFFSET (Instruction), "Instruction", 0}, - {ACPI_DMT_UINT8, ACPI_ERST0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_ERST0_FLAG_OFFSET (Flags,0), "Preserve Register Bits", 0}, - - {ACPI_DMT_UINT8, ACPI_ERST0_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_GAS, ACPI_ERST0_OFFSET (RegisterRegion), "Register Region", 0}, - {ACPI_DMT_UINT64, ACPI_ERST0_OFFSET (Value), "Value", 0}, - {ACPI_DMT_UINT64, ACPI_ERST0_OFFSET (Mask), "Mask", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * FPDT - Firmware Performance Data Table (ACPI 5.0) - * - ******************************************************************************/ - -/* Main table consists of only the standard ACPI header - subtables follow */ - -/* FPDT subtable header */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoFpdtHdr[] = -{ - {ACPI_DMT_UINT16, ACPI_FPDTH_OFFSET (Type), "Subtable Type", 0}, - {ACPI_DMT_UINT8, ACPI_FPDTH_OFFSET (Length), "Length", DT_LENGTH}, - {ACPI_DMT_UINT8, ACPI_FPDTH_OFFSET (Revision), "Revision", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 0: Firmware Basic Boot Performance Record */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt0[] = -{ - {ACPI_DMT_UINT32, ACPI_FPDT0_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_FPDT1_OFFSET (Address), "FPDT Boot Record Address", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 1: S3 Performance Table Pointer Record */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt1[] = -{ - {ACPI_DMT_UINT32, ACPI_FPDT1_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_FPDT1_OFFSET (Address), "S3PT Record Address", 0}, - ACPI_DMT_TERMINATOR -}; - -#if 0 - /* Boot Performance Record, not supported at this time. */ - {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (ResetEnd), "Reset End", 0}, - {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (LoadStart), "Load Image Start", 0}, - {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (StartupStart), "Start Image Start", 0}, - {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (ExitServicesEntry), "Exit Services Entry", 0}, - {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (ExitServicesExit), "Exit Services Exit", 0}, -#endif - - -/******************************************************************************* - * - * GTDT - Generic Timer Description Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt[] = -{ - {ACPI_DMT_UINT64, ACPI_GTDT_OFFSET (CounterBlockAddresss), "Counter Block Address", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_NEW_LINE, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (SecureEl1Interrupt), "Secure EL1 Interrupt", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (SecureEl1Flags), "EL1 Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Trigger Mode", 0}, - {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Polarity", 0}, - {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Always On", 0}, - ACPI_DMT_NEW_LINE, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl1Interrupt), "Non-Secure EL1 Interrupt", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl1Flags), "NEL1 Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Trigger Mode", 0}, - {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Polarity", 0}, - {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Always On", 0}, - ACPI_DMT_NEW_LINE, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (VirtualTimerInterrupt), "Virtual Timer Interrupt", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (VirtualTimerFlags), "VT Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Trigger Mode", 0}, - {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Polarity", 0}, - {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Always On", 0}, - ACPI_DMT_NEW_LINE, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl2Interrupt), "Non-Secure EL2 Interrupt", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl2Flags), "NEL2 Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Trigger Mode", 0}, - {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Polarity", 0}, - {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Always On", 0}, - {ACPI_DMT_UINT64, ACPI_GTDT_OFFSET (CounterReadBlockAddress), "Counter Read Block Address", 0}, - ACPI_DMT_NEW_LINE, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (PlatformTimerCount), "Platform Timer Count", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (PlatformTimerOffset), "Platform Timer Offset", 0}, - ACPI_DMT_TERMINATOR -}; - -/* GTDT Subtable header (one per Subtable) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoGtdtHdr[] = -{ - {ACPI_DMT_GTDT, ACPI_GTDTH_OFFSET (Type), "Subtable Type", 0}, - {ACPI_DMT_UINT16, ACPI_GTDTH_OFFSET (Length), "Length", DT_LENGTH}, - ACPI_DMT_TERMINATOR -}; - -/* GTDT Subtables */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt0[] = -{ - {ACPI_DMT_UINT8, ACPI_GTDT0_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_GTDT0_OFFSET (BlockAddress), "Block Address", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT0_OFFSET (TimerCount), "Timer Count", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT0_OFFSET (TimerOffset), "Timer Offset", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt0a[] = -{ - {ACPI_DMT_UINT8 , ACPI_GTDT0a_OFFSET (FrameNumber), "Frame Number", 0}, - {ACPI_DMT_UINT24, ACPI_GTDT0a_OFFSET (Reserved[0]), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_GTDT0a_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT64, ACPI_GTDT0a_OFFSET (El0BaseAddress), "EL0 Base Address", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (TimerInterrupt), "Timer Interrupt", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (TimerFlags), "Timer Flags (decoded below)", 0}, - {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (TimerFlags,0), "Trigger Mode", 0}, - {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (TimerFlags,0), "Polarity", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (VirtualTimerInterrupt), "Virtual Timer Interrupt", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (VirtualTimerFlags), "Virtual Timer Flags (decoded below)", 0}, - {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (VirtualTimerFlags,0), "Trigger Mode", 0}, - {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (VirtualTimerFlags,0), "Polarity", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (CommonFlags), "Common Flags (decoded below)", 0}, - {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (CommonFlags,0), "Secure", 0}, - {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (CommonFlags,0), "Always On", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt1[] = -{ - {ACPI_DMT_UINT8, ACPI_GTDT1_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_GTDT1_OFFSET (RefreshFrameAddress), "Refresh Frame Address", 0}, - {ACPI_DMT_UINT64, ACPI_GTDT1_OFFSET (ControlFrameAddress), "Control Frame Address", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT1_OFFSET (TimerInterrupt), "Timer Interrupt", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT1_OFFSET (TimerFlags), "Timer Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Trigger Mode", 0}, - {ACPI_DMT_FLAG1, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Polarity", 0}, - {ACPI_DMT_FLAG2, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Security", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * HEST - Hardware Error Source table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHest[] = -{ - {ACPI_DMT_UINT32, ACPI_HEST_OFFSET (ErrorSourceCount), "Error Source Count", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Common HEST structures for subtables */ - -#define ACPI_DM_HEST_HEADER \ - {ACPI_DMT_HEST, ACPI_HEST0_OFFSET (Header.Type), "Subtable Type", 0}, \ - {ACPI_DMT_UINT16, ACPI_HEST0_OFFSET (Header.SourceId), "Source Id", 0} - -#define ACPI_DM_HEST_AER \ - {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Reserved1), "Reserved", 0}, \ - {ACPI_DMT_UINT8, ACPI_HEST6_OFFSET (Aer.Flags), "Flags (decoded below)", DT_FLAG}, \ - {ACPI_DMT_FLAG0, ACPI_HEST6_FLAG_OFFSET (Aer.Flags,0), "Firmware First", 0}, \ - {ACPI_DMT_FLAG0, ACPI_HEST6_FLAG_OFFSET (Aer.Flags,0), "Global", 0}, \ - {ACPI_DMT_UINT8, ACPI_HEST6_OFFSET (Aer.Enabled), "Enabled", 0}, \ - {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.RecordsToPreallocate), "Records To Preallocate", 0}, \ - {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.MaxSectionsPerRecord), "Max Sections Per Record", 0}, \ - {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.Bus), "Bus", 0}, \ - {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Device), "Device", 0}, \ - {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Function), "Function", 0}, \ - {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.DeviceControl), "DeviceControl", 0}, \ - {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Reserved2), "Reserved", 0}, \ - {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.UncorrectableMask), "Uncorrectable Mask", 0}, \ - {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.UncorrectableSeverity), "Uncorrectable Severity", 0}, \ - {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.CorrectableMask), "Correctable Mask", 0}, \ - {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.AdvancedCapabilities), "Advanced Capabilities", 0} - - -/* HEST Subtables */ - -/* 0: IA32 Machine Check Exception */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHest0[] = -{ - ACPI_DM_HEST_HEADER, - {ACPI_DMT_UINT16, ACPI_HEST0_OFFSET (Reserved1), "Reserved1", 0}, - {ACPI_DMT_UINT8, ACPI_HEST0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_HEST0_FLAG_OFFSET (Flags,0), "Firmware First", 0}, - {ACPI_DMT_FLAG2, ACPI_HEST0_FLAG_OFFSET (Flags,0), "GHES Assist", 0}, - - {ACPI_DMT_UINT8, ACPI_HEST0_OFFSET (Enabled), "Enabled", 0}, - {ACPI_DMT_UINT32, ACPI_HEST0_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, - {ACPI_DMT_UINT32, ACPI_HEST0_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, - {ACPI_DMT_UINT64, ACPI_HEST0_OFFSET (GlobalCapabilityData), "Global Capability Data", 0}, - {ACPI_DMT_UINT64, ACPI_HEST0_OFFSET (GlobalControlData), "Global Control Data", 0}, - {ACPI_DMT_UINT8, ACPI_HEST0_OFFSET (NumHardwareBanks), "Num Hardware Banks", 0}, - {ACPI_DMT_UINT56, ACPI_HEST0_OFFSET (Reserved3[0]), "Reserved2", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 1: IA32 Corrected Machine Check */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHest1[] = -{ - ACPI_DM_HEST_HEADER, - {ACPI_DMT_UINT16, ACPI_HEST1_OFFSET (Reserved1), "Reserved1", 0}, - {ACPI_DMT_UINT8, ACPI_HEST1_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_HEST1_FLAG_OFFSET (Flags,0), "Firmware First", 0}, - {ACPI_DMT_FLAG2, ACPI_HEST1_FLAG_OFFSET (Flags,0), "GHES Assist", 0}, - - {ACPI_DMT_UINT8, ACPI_HEST1_OFFSET (Enabled), "Enabled", 0}, - {ACPI_DMT_UINT32, ACPI_HEST1_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, - {ACPI_DMT_UINT32, ACPI_HEST1_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, - {ACPI_DMT_HESTNTFY, ACPI_HEST1_OFFSET (Notify), "Notify", 0}, - {ACPI_DMT_UINT8, ACPI_HEST1_OFFSET (NumHardwareBanks), "Num Hardware Banks", 0}, - {ACPI_DMT_UINT24, ACPI_HEST1_OFFSET (Reserved2[0]), "Reserved2", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 2: IA32 Non-Maskable Interrupt */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHest2[] = -{ - ACPI_DM_HEST_HEADER, - {ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, - {ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, - {ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (MaxRawDataLength), "Max Raw Data Length", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 6: PCI Express Root Port AER */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHest6[] = -{ - ACPI_DM_HEST_HEADER, - ACPI_DM_HEST_AER, - {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (RootErrorCommand), "Root Error Command", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 7: PCI Express AER (AER Endpoint) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHest7[] = -{ - ACPI_DM_HEST_HEADER, - ACPI_DM_HEST_AER, - ACPI_DMT_TERMINATOR -}; - -/* 8: PCI Express/PCI-X Bridge AER */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHest8[] = -{ - ACPI_DM_HEST_HEADER, - ACPI_DM_HEST_AER, - {ACPI_DMT_UINT32, ACPI_HEST8_OFFSET (UncorrectableMask2), "2nd Uncorrectable Mask", 0}, - {ACPI_DMT_UINT32, ACPI_HEST8_OFFSET (UncorrectableSeverity2), "2nd Uncorrectable Severity", 0}, - {ACPI_DMT_UINT32, ACPI_HEST8_OFFSET (AdvancedCapabilities2), "2nd Advanced Capabilities", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 9: Generic Hardware Error Source */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHest9[] = -{ - ACPI_DM_HEST_HEADER, - {ACPI_DMT_UINT16, ACPI_HEST9_OFFSET (RelatedSourceId), "Related Source Id", 0}, - {ACPI_DMT_UINT8, ACPI_HEST9_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT8, ACPI_HEST9_OFFSET (Enabled), "Enabled", 0}, - {ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, - {ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, - {ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (MaxRawDataLength), "Max Raw Data Length", 0}, - {ACPI_DMT_GAS, ACPI_HEST9_OFFSET (ErrorStatusAddress), "Error Status Address", 0}, - {ACPI_DMT_HESTNTFY, ACPI_HEST9_OFFSET (Notify), "Notify", 0}, - {ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (ErrorBlockLength), "Error Status Block Length", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 10: Generic Hardware Error Source - Version 2 */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHest10[] = -{ - ACPI_DM_HEST_HEADER, - {ACPI_DMT_UINT16, ACPI_HEST10_OFFSET (RelatedSourceId), "Related Source Id", 0}, - {ACPI_DMT_UINT8, ACPI_HEST10_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT8, ACPI_HEST10_OFFSET (Enabled), "Enabled", 0}, - {ACPI_DMT_UINT32, ACPI_HEST10_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, - {ACPI_DMT_UINT32, ACPI_HEST10_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, - {ACPI_DMT_UINT32, ACPI_HEST10_OFFSET (MaxRawDataLength), "Max Raw Data Length", 0}, - {ACPI_DMT_GAS, ACPI_HEST10_OFFSET (ErrorStatusAddress), "Error Status Address", 0}, - {ACPI_DMT_HESTNTFY, ACPI_HEST10_OFFSET (Notify), "Notify", 0}, - {ACPI_DMT_UINT32, ACPI_HEST10_OFFSET (ErrorBlockLength), "Error Status Block Length", 0}, - {ACPI_DMT_GAS, ACPI_HEST10_OFFSET (ReadAckRegister), "Read Ack Register", 0}, - {ACPI_DMT_UINT64, ACPI_HEST10_OFFSET (ReadAckPreserve), "Read Ack Preserve", 0}, - {ACPI_DMT_UINT64, ACPI_HEST10_OFFSET (ReadAckWrite), "Read Ack Write", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 11: IA32 Deferred Machine Check */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHest11[] = -{ - ACPI_DM_HEST_HEADER, - {ACPI_DMT_UINT16, ACPI_HEST11_OFFSET (Reserved1), "Reserved1", 0}, - {ACPI_DMT_UINT8, ACPI_HEST11_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_HEST11_FLAG_OFFSET (Flags,0), "Firmware First", 0}, - {ACPI_DMT_FLAG2, ACPI_HEST11_FLAG_OFFSET (Flags,0), "GHES Assist", 0}, - - {ACPI_DMT_UINT8, ACPI_HEST11_OFFSET (Enabled), "Enabled", 0}, - {ACPI_DMT_UINT32, ACPI_HEST11_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, - {ACPI_DMT_UINT32, ACPI_HEST11_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, - {ACPI_DMT_HESTNTFY, ACPI_HEST11_OFFSET (Notify), "Notify", 0}, - {ACPI_DMT_UINT8, ACPI_HEST11_OFFSET (NumHardwareBanks), "Num Hardware Banks", 0}, - {ACPI_DMT_UINT24, ACPI_HEST11_OFFSET (Reserved2[0]), "Reserved2", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Notification Structure */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHestNotify[] = -{ - {ACPI_DMT_HESTNTYP, ACPI_HESTN_OFFSET (Type), "Notify Type", 0}, - {ACPI_DMT_UINT8, ACPI_HESTN_OFFSET (Length), "Notify Length", DT_LENGTH}, - {ACPI_DMT_UINT16, ACPI_HESTN_OFFSET (ConfigWriteEnable), "Configuration Write Enable", 0}, - {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (PollInterval), "PollInterval", 0}, - {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (Vector), "Vector", 0}, - {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (PollingThresholdValue), "Polling Threshold Value", 0}, - {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (PollingThresholdWindow), "Polling Threshold Window", 0}, - {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (ErrorThresholdValue), "Error Threshold Value", 0}, - {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (ErrorThresholdWindow), "Error Threshold Window", 0}, - ACPI_DMT_TERMINATOR -}; - - -/* - * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and - * ACPI_HEST_IA_CORRECTED structures. - */ -ACPI_DMTABLE_INFO AcpiDmTableInfoHestBank[] = -{ - {ACPI_DMT_UINT8, ACPI_HESTB_OFFSET (BankNumber), "Bank Number", 0}, - {ACPI_DMT_UINT8, ACPI_HESTB_OFFSET (ClearStatusOnInit), "Clear Status On Init", 0}, - {ACPI_DMT_UINT8, ACPI_HESTB_OFFSET (StatusFormat), "Status Format", 0}, - {ACPI_DMT_UINT8, ACPI_HESTB_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_HESTB_OFFSET (ControlRegister), "Control Register", 0}, - {ACPI_DMT_UINT64, ACPI_HESTB_OFFSET (ControlData), "Control Data", 0}, - {ACPI_DMT_UINT32, ACPI_HESTB_OFFSET (StatusRegister), "Status Register", 0}, - {ACPI_DMT_UINT32, ACPI_HESTB_OFFSET (AddressRegister), "Address Register", 0}, - {ACPI_DMT_UINT32, ACPI_HESTB_OFFSET (MiscRegister), "Misc Register", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * HPET - High Precision Event Timer table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHpet[] = -{ - {ACPI_DMT_UINT32, ACPI_HPET_OFFSET (Id), "Hardware Block ID", 0}, - {ACPI_DMT_GAS, ACPI_HPET_OFFSET (Address), "Timer Block Register", 0}, - {ACPI_DMT_UINT8, ACPI_HPET_OFFSET (Sequence), "Sequence Number", 0}, - {ACPI_DMT_UINT16, ACPI_HPET_OFFSET (MinimumTick), "Minimum Clock Ticks", 0}, - {ACPI_DMT_UINT8, ACPI_HPET_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_HPET_FLAG_OFFSET (Flags,0), "4K Page Protect", 0}, - {ACPI_DMT_FLAG1, ACPI_HPET_FLAG_OFFSET (Flags,0), "64K Page Protect", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * HMAT - Heterogeneous Memory Attributes Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHmat[] = -{ - {ACPI_DMT_UINT32, ACPI_HMAT_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Common HMAT structure header (one per Subtable) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHmatHdr[] = -{ - {ACPI_DMT_HMAT, ACPI_HMATH_OFFSET (Type), "Structure Type", 0}, - {ACPI_DMT_UINT16, ACPI_HMATH_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_HMATH_OFFSET (Length), "Length", 0}, - ACPI_DMT_TERMINATOR -}; - -/* HMAT subtables */ - -/* 0x00: Memory Subsystem Address Range */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHmat0[] = -{ - {ACPI_DMT_UINT16, ACPI_HMAT0_OFFSET (Flags), "Flags (decoded below)", 0}, - {ACPI_DMT_FLAG0, ACPI_HMAT0_FLAG_OFFSET (Flags,0), "Processor Proximity Domain Valid", 0}, - {ACPI_DMT_FLAG1, ACPI_HMAT0_FLAG_OFFSET (Flags,0), "Memory Proximity Domain Valid", 0}, - {ACPI_DMT_FLAG2, ACPI_HMAT0_FLAG_OFFSET (Flags,0), "Reservation Hint", 0}, - {ACPI_DMT_UINT16, ACPI_HMAT0_OFFSET (Reserved1), "Reserved1", 0}, - {ACPI_DMT_UINT32, ACPI_HMAT0_OFFSET (ProcessorPD), "Processor Proximity Domain", 0}, - {ACPI_DMT_UINT32, ACPI_HMAT0_OFFSET (MemoryPD), "Memory Proximity Domain", 0}, - {ACPI_DMT_UINT32, ACPI_HMAT0_OFFSET (Reserved2), "Reserved2", 0}, - {ACPI_DMT_UINT64, ACPI_HMAT0_OFFSET (PhysicalAddressBase), "Physical Address Range Base", 0}, - {ACPI_DMT_UINT64, ACPI_HMAT0_OFFSET (PhysicalAddressLength), "Physical Address Range Size", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 0x01: System Locality Latency and Bandwidth Information */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1[] = -{ - {ACPI_DMT_UINT8, ACPI_HMAT1_OFFSET (Flags), "Flags (decoded below)", 0}, - {ACPI_DMT_FLAGS4_0, ACPI_HMAT1_FLAG_OFFSET (Flags,0), "Memory Hierarchy", 0}, - {ACPI_DMT_UINT8, ACPI_HMAT1_OFFSET (DataType), "Data Type", 0}, - {ACPI_DMT_UINT16, ACPI_HMAT1_OFFSET (Reserved1), "Reserved1", 0}, - {ACPI_DMT_UINT32, ACPI_HMAT1_OFFSET (NumberOfInitiatorPDs), "Initiator Proximity Domains #", 0}, - {ACPI_DMT_UINT32, ACPI_HMAT1_OFFSET (NumberOfTargetPDs), "Target Proximity Domains #", 0}, - {ACPI_DMT_UINT32, ACPI_HMAT1_OFFSET (Reserved2), "Reserved2", 0}, - {ACPI_DMT_UINT64, ACPI_HMAT1_OFFSET (EntryBaseUnit), "Entry Base Unit", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1a[] = -{ - {ACPI_DMT_UINT32, 0, "Initiator Proximity Domain List", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1b[] = -{ - {ACPI_DMT_UINT32, 0, "Target Proximity Domain List", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1c[] = -{ - {ACPI_DMT_UINT16, 0, "Entry", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - -/* 0x02: Memory Side Cache Information */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoHmat2[] = -{ - {ACPI_DMT_UINT32, ACPI_HMAT2_OFFSET (MemoryPD), "Memory Proximity Domain", 0}, - {ACPI_DMT_UINT32, ACPI_HMAT2_OFFSET (Reserved1), "Reserved1", 0}, - {ACPI_DMT_UINT64, ACPI_HMAT2_OFFSET (CacheSize), "Memory Side Cache Size", 0}, - {ACPI_DMT_UINT32, ACPI_HMAT2_OFFSET (CacheAttributes), "Cache Attributes (decoded below)", 0}, - {ACPI_DMT_FLAGS4_0, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Total Cache Levels", 0}, - {ACPI_DMT_FLAGS4_4, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Cache Level", 0}, - {ACPI_DMT_FLAGS4_8, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Cache Associativity", 0}, - {ACPI_DMT_FLAGS4_12, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Write Policy", 0}, - {ACPI_DMT_FLAGS16_16, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Cache Line Size", 0}, - {ACPI_DMT_UINT16, ACPI_HMAT2_OFFSET (Reserved2), "Reserved2", 0}, - {ACPI_DMT_UINT16, ACPI_HMAT2_OFFSET (NumberOfSMBIOSHandles), "SMBIOS Handle #", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoHmat2a[] = -{ - {ACPI_DMT_UINT16, 0, "SMBIOS Handle", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * IORT - IO Remapping Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIort[] = -{ - {ACPI_DMT_UINT32, ACPI_IORT_OFFSET (NodeCount), "Node Count", 0}, - {ACPI_DMT_UINT32, ACPI_IORT_OFFSET (NodeOffset), "Node Offset", 0}, - {ACPI_DMT_UINT32, ACPI_IORT_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Optional padding field */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIortPad[] = -{ - {ACPI_DMT_RAW_BUFFER, 0, "Optional Padding", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - -/* Common Subtable header (one per Subtable) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIortHdr[] = -{ - {ACPI_DMT_UINT8, ACPI_IORTH_OFFSET (Type), "Type", 0}, - {ACPI_DMT_UINT16, ACPI_IORTH_OFFSET (Length), "Length", DT_LENGTH}, - {ACPI_DMT_UINT8, ACPI_IORTH_OFFSET (Revision), "Revision", 0}, - {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (MappingCount), "Mapping Count", 0}, - {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (MappingOffset), "Mapping Offset", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoIortMap[] = -{ - {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (InputBase), "Input base", DT_OPTIONAL}, - {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (IdCount), "ID Count", 0}, - {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (OutputBase), "Output Base", 0}, - {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (OutputReference), "Output Reference", 0}, - {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (Flags), "Flags (decoded below)", 0}, - {ACPI_DMT_FLAG0, ACPI_IORTM_FLAG_OFFSET (Flags, 0), "Single Mapping", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoIortAcc[] = -{ - {ACPI_DMT_UINT32, ACPI_IORTA_OFFSET (CacheCoherency), "Cache Coherency", 0}, - {ACPI_DMT_UINT8, ACPI_IORTA_OFFSET (Hints), "Hints (decoded below)", 0}, - {ACPI_DMT_FLAG0, ACPI_IORTA_FLAG_OFFSET (Hints, 0), "Transient", 0}, - {ACPI_DMT_FLAG1, ACPI_IORTA_FLAG_OFFSET (Hints, 0), "Write Allocate", 0}, - {ACPI_DMT_FLAG2, ACPI_IORTA_FLAG_OFFSET (Hints, 0), "Read Allocate", 0}, - {ACPI_DMT_FLAG3, ACPI_IORTA_FLAG_OFFSET (Hints, 0), "Override", 0}, - {ACPI_DMT_UINT16, ACPI_IORTA_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT8, ACPI_IORTA_OFFSET (MemoryFlags), "Memory Flags (decoded below)", 0}, - {ACPI_DMT_FLAG0, ACPI_IORTA_FLAG_OFFSET (MemoryFlags, 0), "Coherency", 0}, - {ACPI_DMT_FLAG1, ACPI_IORTA_FLAG_OFFSET (MemoryFlags, 0), "Device Attribute", 0}, - ACPI_DMT_TERMINATOR -}; - -/* IORT subtables */ - -/* 0x00: ITS Group */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIort0[] = -{ - {ACPI_DMT_UINT32, ACPI_IORT0_OFFSET (ItsCount), "ItsCount", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoIort0a[] = -{ - {ACPI_DMT_UINT32, 0, "Identifiers", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - -/* 0x01: Named Component */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIort1[] = -{ - {ACPI_DMT_UINT32, ACPI_IORT1_OFFSET (NodeFlags), "Node Flags", 0}, - {ACPI_DMT_IORTMEM, ACPI_IORT1_OFFSET (MemoryProperties), "Memory Properties", 0}, - {ACPI_DMT_UINT8, ACPI_IORT1_OFFSET (MemoryAddressLimit), "Memory Size Limit", 0}, - {ACPI_DMT_STRING, ACPI_IORT1_OFFSET (DeviceName[0]), "Device Name", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoIort1a[] = -{ - {ACPI_DMT_RAW_BUFFER, 0, "Padding", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - -/* 0x02: PCI Root Complex */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIort2[] = -{ - {ACPI_DMT_IORTMEM, ACPI_IORT2_OFFSET (MemoryProperties), "Memory Properties", 0}, - {ACPI_DMT_UINT32, ACPI_IORT2_OFFSET (AtsAttribute), "ATS Attribute", 0}, - {ACPI_DMT_UINT32, ACPI_IORT2_OFFSET (PciSegmentNumber), "PCI Segment Number", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 0x03: SMMUv1/2 */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIort3[] = -{ - {ACPI_DMT_UINT64, ACPI_IORT3_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT64, ACPI_IORT3_OFFSET (Span), "Span", 0}, - {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (Model), "Model", 0}, - {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (Flags), "Flags (decoded below)", 0}, - {ACPI_DMT_FLAG0, ACPI_IORT3_FLAG_OFFSET (Flags, 0), "DVM Supported", 0}, - {ACPI_DMT_FLAG1, ACPI_IORT3_FLAG_OFFSET (Flags, 0), "Coherent Walk", 0}, - {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (GlobalInterruptOffset), "Global Interrupt Offset", 0}, - {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (ContextInterruptCount), "Context Interrupt Count", 0}, - {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (ContextInterruptOffset), "Context Interrupt Offset", 0}, - {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (PmuInterruptCount), "PMU Interrupt Count", 0}, - {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (PmuInterruptOffset), "PMU Interrupt Offset", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoIort3a[] = -{ - {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgIrpt), "NSgIrpt", 0}, - {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgIrptFlags), "NSgIrpt Flags (decoded below)", 0}, - {ACPI_DMT_FLAG0, ACPI_IORT3a_FLAG_OFFSET (NSgIrptFlags, 0), "Edge Triggered", 0}, - {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgCfgIrpt), "NSgCfgIrpt", 0}, - {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgCfgIrptFlags), "NSgCfgIrpt Flags (decoded below)", 0}, - {ACPI_DMT_FLAG0, ACPI_IORT3a_FLAG_OFFSET (NSgCfgIrptFlags, 0), "Edge Triggered", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoIort3b[] = -{ - {ACPI_DMT_UINT64, 0, "Context Interrupt", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoIort3c[] = -{ - {ACPI_DMT_UINT64, 0, "PMU Interrupt", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - -/* 0x04: SMMUv3 */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIort4[] = -{ - {ACPI_DMT_UINT64, ACPI_IORT4_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (Flags), "Flags (decoded below)", 0}, - {ACPI_DMT_FLAG0, ACPI_IORT4_FLAG_OFFSET (Flags, 0), "COHACC Override", 0}, - {ACPI_DMT_FLAG1, ACPI_IORT4_FLAG_OFFSET (Flags, 0), "HTTU Override", 0}, - {ACPI_DMT_FLAG3, ACPI_IORT4_FLAG_OFFSET (Flags, 0), "Proximity Domain Valid", 0}, - {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_IORT4_OFFSET (VatosAddress), "VATOS Address", 0}, - {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (Model), "Model", 0}, - {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (EventGsiv), "Event GSIV", 0}, - {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (PriGsiv), "PRI GSIV", 0}, - {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (GerrGsiv), "GERR GSIV", 0}, - {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (SyncGsiv), "Sync GSIV", 0}, - {ACPI_DMT_UINT8, ACPI_IORT4_OFFSET (Pxm), "Proximity Domain", 0}, - {ACPI_DMT_UINT8, ACPI_IORT4_OFFSET (Reserved1), "Reserved", 0}, - {ACPI_DMT_UINT16, ACPI_IORT4_OFFSET (Reserved2), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (IdMappingIndex), "Device ID Mapping Index", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * IVRS - I/O Virtualization Reporting Structure - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs[] = -{ - {ACPI_DMT_UINT32, ACPI_IVRS_OFFSET (Info), "Virtualization Info", 0}, - {ACPI_DMT_UINT64, ACPI_IVRS_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Common Subtable header (one per Subtable) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsHdr[] = -{ - {ACPI_DMT_IVRS, ACPI_IVRSH_OFFSET (Type), "Subtable Type", 0}, - {ACPI_DMT_UINT8, ACPI_IVRSH_OFFSET (Flags), "Flags", 0}, - {ACPI_DMT_UINT16, ACPI_IVRSH_OFFSET (Length), "Length", DT_LENGTH}, - {ACPI_DMT_UINT16, ACPI_IVRSH_OFFSET (DeviceId), "DeviceId", 0}, - ACPI_DMT_TERMINATOR -}; - -/* IVRS subtables */ - -/* 0x10: I/O Virtualization Hardware Definition (IVHD) Block */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs0[] = -{ - {ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (CapabilityOffset), "Capability Offset", 0}, - {ACPI_DMT_UINT64, ACPI_IVRS0_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (PciSegmentGroup), "PCI Segment Group", 0}, - {ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (Info), "Virtualization Info", 0}, - {ACPI_DMT_UINT32, ACPI_IVRS0_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition (IVMD) Block */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs1[] = -{ - {ACPI_DMT_UINT16, ACPI_IVRS1_OFFSET (AuxData), "Auxiliary Data", 0}, - {ACPI_DMT_UINT64, ACPI_IVRS1_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_IVRS1_OFFSET (StartAddress), "Start Address", 0}, - {ACPI_DMT_UINT64, ACPI_IVRS1_OFFSET (MemoryLength), "Memory Length", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Device entry header for IVHD block */ - -#define ACPI_DMT_IVRS_DE_HEADER \ - {ACPI_DMT_UINT8, ACPI_IVRSD_OFFSET (Type), "Entry Type", 0}, \ - {ACPI_DMT_UINT16, ACPI_IVRSD_OFFSET (Id), "Device ID", 0}, \ - {ACPI_DMT_UINT8, ACPI_IVRSD_OFFSET (DataSetting), "Data Setting", 0} - -/* 4-byte device entry */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs4[] = -{ - ACPI_DMT_IVRS_DE_HEADER, - {ACPI_DMT_EXIT, 0, NULL, 0}, -}; - -/* 8-byte device entry */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8a[] = -{ - ACPI_DMT_IVRS_DE_HEADER, - {ACPI_DMT_UINT8, ACPI_IVRS8A_OFFSET (Reserved1), "Reserved", 0}, - {ACPI_DMT_UINT16, ACPI_IVRS8A_OFFSET (UsedId), "Source Used Device ID", 0}, - {ACPI_DMT_UINT8, ACPI_IVRS8A_OFFSET (Reserved2), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 8-byte device entry */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8b[] = -{ - ACPI_DMT_IVRS_DE_HEADER, - {ACPI_DMT_UINT32, ACPI_IVRS8B_OFFSET (ExtendedData), "Extended Data", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 8-byte device entry */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8c[] = -{ - ACPI_DMT_IVRS_DE_HEADER, - {ACPI_DMT_UINT8, ACPI_IVRS8C_OFFSET (Handle), "Handle", 0}, - {ACPI_DMT_UINT16, ACPI_IVRS8C_OFFSET (UsedId), "Source Used Device ID", 0}, - {ACPI_DMT_UINT8, ACPI_IVRS8C_OFFSET (Variety), "Variety", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * LPIT - Low Power Idle Table - * - ******************************************************************************/ - -/* Main table consists only of the standard ACPI table header */ - -/* Common Subtable header (one per Subtable) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoLpitHdr[] = -{ - {ACPI_DMT_LPIT, ACPI_LPITH_OFFSET (Type), "Subtable Type", 0}, - {ACPI_DMT_UINT32, ACPI_LPITH_OFFSET (Length), "Length", DT_LENGTH}, - {ACPI_DMT_UINT16, ACPI_LPITH_OFFSET (UniqueId), "Unique ID", 0}, - {ACPI_DMT_UINT16, ACPI_LPITH_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_LPITH_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_LPITH_FLAG_OFFSET (Flags, 0), "State Disabled", 0}, - {ACPI_DMT_FLAG1, ACPI_LPITH_FLAG_OFFSET (Flags, 0), "No Counter", 0}, - ACPI_DMT_TERMINATOR -}; - -/* LPIT Subtables */ - -/* 0: Native C-state */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoLpit0[] = -{ - {ACPI_DMT_GAS, ACPI_LPIT0_OFFSET (EntryTrigger), "Entry Trigger", 0}, - {ACPI_DMT_UINT32, ACPI_LPIT0_OFFSET (Residency), "Residency", 0}, - {ACPI_DMT_UINT32, ACPI_LPIT0_OFFSET (Latency), "Latency", 0}, - {ACPI_DMT_GAS, ACPI_LPIT0_OFFSET (ResidencyCounter), "Residency Counter", 0}, - {ACPI_DMT_UINT64, ACPI_LPIT0_OFFSET (CounterFrequency), "Counter Frequency", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * MADT - Multiple APIC Description Table and subtables - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt[] = -{ - {ACPI_DMT_UINT32, ACPI_MADT_OFFSET (Address), "Local Apic Address", 0}, - {ACPI_DMT_UINT32, ACPI_MADT_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_MADT_FLAG_OFFSET (Flags,0), "PC-AT Compatibility", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Common Subtable header (one per Subtable) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadtHdr[] = -{ - {ACPI_DMT_MADT, ACPI_MADTH_OFFSET (Type), "Subtable Type", 0}, - {ACPI_DMT_UINT8, ACPI_MADTH_OFFSET (Length), "Length", DT_LENGTH}, - ACPI_DMT_TERMINATOR -}; - -/* MADT Subtables */ - -/* 0: processor APIC */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt0[] = -{ - {ACPI_DMT_UINT8, ACPI_MADT0_OFFSET (ProcessorId), "Processor ID", 0}, - {ACPI_DMT_UINT8, ACPI_MADT0_OFFSET (Id), "Local Apic ID", 0}, - {ACPI_DMT_UINT32, ACPI_MADT0_OFFSET (LapicFlags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_MADT0_FLAG_OFFSET (LapicFlags,0), "Processor Enabled", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 1: IO APIC */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt1[] = -{ - {ACPI_DMT_UINT8, ACPI_MADT1_OFFSET (Id), "I/O Apic ID", 0}, - {ACPI_DMT_UINT8, ACPI_MADT1_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_MADT1_OFFSET (Address), "Address", 0}, - {ACPI_DMT_UINT32, ACPI_MADT1_OFFSET (GlobalIrqBase), "Interrupt", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 2: Interrupt Override */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt2[] = -{ - {ACPI_DMT_UINT8, ACPI_MADT2_OFFSET (Bus), "Bus", 0}, - {ACPI_DMT_UINT8, ACPI_MADT2_OFFSET (SourceIrq), "Source", 0}, - {ACPI_DMT_UINT32, ACPI_MADT2_OFFSET (GlobalIrq), "Interrupt", 0}, - {ACPI_DMT_UINT16, ACPI_MADT2_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAGS0, ACPI_MADT2_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, - {ACPI_DMT_FLAGS2, ACPI_MADT2_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 3: NMI Sources */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt3[] = -{ - {ACPI_DMT_UINT16, ACPI_MADT3_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAGS0, ACPI_MADT3_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, - {ACPI_DMT_FLAGS2, ACPI_MADT3_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, - {ACPI_DMT_UINT32, ACPI_MADT3_OFFSET (GlobalIrq), "Interrupt", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 4: Local APIC NMI */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt4[] = -{ - {ACPI_DMT_UINT8, ACPI_MADT4_OFFSET (ProcessorId), "Processor ID", 0}, - {ACPI_DMT_UINT16, ACPI_MADT4_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAGS0, ACPI_MADT4_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, - {ACPI_DMT_FLAGS2, ACPI_MADT4_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, - {ACPI_DMT_UINT8, ACPI_MADT4_OFFSET (Lint), "Interrupt Input LINT", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 5: Address Override */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt5[] = -{ - {ACPI_DMT_UINT16, ACPI_MADT5_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_MADT5_OFFSET (Address), "APIC Address", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 6: I/O Sapic */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt6[] = -{ - {ACPI_DMT_UINT8, ACPI_MADT6_OFFSET (Id), "I/O Sapic ID", 0}, - {ACPI_DMT_UINT8, ACPI_MADT6_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_MADT6_OFFSET (GlobalIrqBase), "Interrupt Base", 0}, - {ACPI_DMT_UINT64, ACPI_MADT6_OFFSET (Address), "Address", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 7: Local Sapic */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt7[] = -{ - {ACPI_DMT_UINT8, ACPI_MADT7_OFFSET (ProcessorId), "Processor ID", 0}, - {ACPI_DMT_UINT8, ACPI_MADT7_OFFSET (Id), "Local Sapic ID", 0}, - {ACPI_DMT_UINT8, ACPI_MADT7_OFFSET (Eid), "Local Sapic EID", 0}, - {ACPI_DMT_UINT24, ACPI_MADT7_OFFSET (Reserved[0]), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_MADT7_OFFSET (LapicFlags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_MADT7_FLAG_OFFSET (LapicFlags,0), "Processor Enabled", 0}, - {ACPI_DMT_UINT32, ACPI_MADT7_OFFSET (Uid), "Processor UID", 0}, - {ACPI_DMT_STRING, ACPI_MADT7_OFFSET (UidString[0]), "Processor UID String", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 8: Platform Interrupt Source */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt8[] = -{ - {ACPI_DMT_UINT16, ACPI_MADT8_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAGS0, ACPI_MADT8_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, - {ACPI_DMT_FLAGS2, ACPI_MADT8_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, - {ACPI_DMT_UINT8, ACPI_MADT8_OFFSET (Type), "InterruptType", 0}, - {ACPI_DMT_UINT8, ACPI_MADT8_OFFSET (Id), "Processor ID", 0}, - {ACPI_DMT_UINT8, ACPI_MADT8_OFFSET (Eid), "Processor EID", 0}, - {ACPI_DMT_UINT8, ACPI_MADT8_OFFSET (IoSapicVector), "I/O Sapic Vector", 0}, - {ACPI_DMT_UINT32, ACPI_MADT8_OFFSET (GlobalIrq), "Interrupt", 0}, - {ACPI_DMT_UINT32, ACPI_MADT8_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_MADT8_OFFSET (Flags), "CPEI Override", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 9: Processor Local X2_APIC (ACPI 4.0) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt9[] = -{ - {ACPI_DMT_UINT16, ACPI_MADT9_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_MADT9_OFFSET (LocalApicId), "Processor x2Apic ID", 0}, - {ACPI_DMT_UINT32, ACPI_MADT9_OFFSET (LapicFlags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_MADT9_FLAG_OFFSET (LapicFlags,0), "Processor Enabled", 0}, - {ACPI_DMT_UINT32, ACPI_MADT9_OFFSET (Uid), "Processor UID", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 10: Local X2_APIC NMI (ACPI 4.0) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt10[] = -{ - {ACPI_DMT_UINT16, ACPI_MADT10_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAGS0, ACPI_MADT10_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, - {ACPI_DMT_FLAGS2, ACPI_MADT10_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, - {ACPI_DMT_UINT32, ACPI_MADT10_OFFSET (Uid), "Processor UID", 0}, - {ACPI_DMT_UINT8, ACPI_MADT10_OFFSET (Lint), "Interrupt Input LINT", 0}, - {ACPI_DMT_UINT24, ACPI_MADT10_OFFSET (Reserved[0]), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 11: Generic Interrupt Controller (ACPI 5.0) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt11[] = -{ - {ACPI_DMT_UINT16, ACPI_MADT11_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (CpuInterfaceNumber), "CPU Interface Number", 0}, - {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (Uid), "Processor UID", 0}, - {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Processor Enabled", 0}, - {ACPI_DMT_FLAG1, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Performance Interrupt Trigger Mode", 0}, - {ACPI_DMT_FLAG2, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Virtual GIC Interrupt Trigger Mode", 0}, - {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (ParkingVersion), "Parking Protocol Version", 0}, - {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (PerformanceInterrupt), "Performance Interrupt", 0}, - {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (ParkedAddress), "Parked Address", 0}, - {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GicvBaseAddress), "Virtual GIC Base Address", 0}, - {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GichBaseAddress), "Hypervisor GIC Base Address", 0}, - {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (VgicInterrupt), "Virtual GIC Interrupt", 0}, - {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GicrBaseAddress), "Redistributor Base Address", 0}, - {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (ArmMpidr), "ARM MPIDR", 0}, - {ACPI_DMT_UINT8, ACPI_MADT11_OFFSET (EfficiencyClass), "Efficiency Class", 0}, - {ACPI_DMT_UINT24, ACPI_MADT11_OFFSET (Reserved2[0]), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 12: Generic Interrupt Distributor (ACPI 5.0) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt12[] = -{ - {ACPI_DMT_UINT16, ACPI_MADT12_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_MADT12_OFFSET (GicId), "Local GIC Hardware ID", 0}, - {ACPI_DMT_UINT64, ACPI_MADT12_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT32, ACPI_MADT12_OFFSET (GlobalIrqBase), "Interrupt Base", 0}, - {ACPI_DMT_UINT8, ACPI_MADT12_OFFSET (Version), "Version", 0}, - {ACPI_DMT_UINT24, ACPI_MADT12_OFFSET (Reserved2[0]), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 13: Generic MSI Frame (ACPI 5.1) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt13[] = -{ - {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_MADT13_OFFSET (MsiFrameId), "MSI Frame ID", 0}, - {ACPI_DMT_UINT64, ACPI_MADT13_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT32, ACPI_MADT13_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_MADT13_FLAG_OFFSET (Flags,0), "Select SPI", 0}, - {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (SpiCount), "SPI Count", 0}, - {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (SpiBase), "SPI Base", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 14: Generic Redistributor (ACPI 5.1) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt14[] = -{ - {ACPI_DMT_UINT16, ACPI_MADT14_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_MADT14_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT32, ACPI_MADT14_OFFSET (Length), "Length", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 15: Generic Translator (ACPI 6.0) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMadt15[] = -{ - {ACPI_DMT_UINT16, ACPI_MADT15_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_MADT15_OFFSET (TranslationId), "Translation ID", 0}, - {ACPI_DMT_UINT64, ACPI_MADT15_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT32, ACPI_MADT15_OFFSET (Reserved2), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * MCFG - PCI Memory Mapped Configuration table and Subtable - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMcfg[] = -{ - {ACPI_DMT_UINT64, ACPI_MCFG_OFFSET (Reserved[0]), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoMcfg0[] = -{ - {ACPI_DMT_UINT64, ACPI_MCFG0_OFFSET (Address), "Base Address", 0}, - {ACPI_DMT_UINT16, ACPI_MCFG0_OFFSET (PciSegment), "Segment Group Number", 0}, - {ACPI_DMT_UINT8, ACPI_MCFG0_OFFSET (StartBusNumber), "Start Bus Number", 0}, - {ACPI_DMT_UINT8, ACPI_MCFG0_OFFSET (EndBusNumber), "End Bus Number", 0}, - {ACPI_DMT_UINT32, ACPI_MCFG0_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * MCHI - Management Controller Host Interface table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMchi[] = -{ - {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (InterfaceType), "Interface Type", 0}, - {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (Protocol), "Protocol", 0}, - {ACPI_DMT_UINT64, ACPI_MCHI_OFFSET (ProtocolData), "Protocol Data", 0}, - {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (InterruptType), "Interrupt Type", 0}, - {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (Gpe), "Gpe", 0}, - {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciDeviceFlag), "Pci Device Flag", 0}, - {ACPI_DMT_UINT32, ACPI_MCHI_OFFSET (GlobalInterrupt), "Global Interrupt", 0}, - {ACPI_DMT_GAS, ACPI_MCHI_OFFSET (ControlRegister), "Control Register", 0}, - {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciSegment), "Pci Segment", 0}, - {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciBus), "Pci Bus", 0}, - {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciDevice), "Pci Device", 0}, - {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciFunction), "Pci Function", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * MPST - Memory Power State Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMpst[] = -{ - {ACPI_DMT_UINT8, ACPI_MPST_OFFSET (ChannelId), "Channel ID", 0}, - {ACPI_DMT_UINT24, ACPI_MPST_OFFSET (Reserved1[0]), "Reserved", 0}, - {ACPI_DMT_UINT16, ACPI_MPST_OFFSET (PowerNodeCount), "Power Node Count", 0}, - {ACPI_DMT_UINT16, ACPI_MPST_OFFSET (Reserved2), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* MPST subtables */ - -/* 0: Memory Power Node Structure */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMpst0[] = -{ - {ACPI_DMT_UINT8, ACPI_MPST0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_MPST0_FLAG_OFFSET (Flags,0), "Node Enabled", 0}, - {ACPI_DMT_FLAG1, ACPI_MPST0_FLAG_OFFSET (Flags,0), "Power Managed", 0}, - {ACPI_DMT_FLAG2, ACPI_MPST0_FLAG_OFFSET (Flags,0), "Hot Plug Capable", 0}, - - {ACPI_DMT_UINT8, ACPI_MPST0_OFFSET (Reserved1), "Reserved", 0}, - {ACPI_DMT_UINT16, ACPI_MPST0_OFFSET (NodeId), "Node ID", 0}, - {ACPI_DMT_UINT32, ACPI_MPST0_OFFSET (Length), "Length", 0}, - {ACPI_DMT_UINT64, ACPI_MPST0_OFFSET (RangeAddress), "Range Address", 0}, - {ACPI_DMT_UINT64, ACPI_MPST0_OFFSET (RangeLength), "Range Length", 0}, - {ACPI_DMT_UINT32, ACPI_MPST0_OFFSET (NumPowerStates), "Num Power States", 0}, - {ACPI_DMT_UINT32, ACPI_MPST0_OFFSET (NumPhysicalComponents), "Num Physical Components", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 0A: Sub-subtable - Memory Power State Structure (follows Memory Power Node above) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMpst0A[] = -{ - {ACPI_DMT_UINT8, ACPI_MPST0A_OFFSET (PowerState), "Power State", 0}, - {ACPI_DMT_UINT8, ACPI_MPST0A_OFFSET (InfoIndex), "InfoIndex", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 0B: Sub-subtable - Physical Component ID Structure (follows Memory Power State(s) above) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMpst0B[] = -{ - {ACPI_DMT_UINT16, ACPI_MPST0B_OFFSET (ComponentId), "Component Id", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 01: Power Characteristics Count (follows all Power Node(s) above) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMpst1[] = -{ - {ACPI_DMT_UINT16, ACPI_MPST1_OFFSET (CharacteristicsCount), "Characteristics Count", 0}, - {ACPI_DMT_UINT16, ACPI_MPST1_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 02: Memory Power State Characteristics Structure */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMpst2[] = -{ - {ACPI_DMT_UINT8, ACPI_MPST2_OFFSET (StructureId), "Structure ID", 0}, - {ACPI_DMT_UINT8, ACPI_MPST2_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_MPST2_FLAG_OFFSET (Flags,0), "Memory Preserved", 0}, - {ACPI_DMT_FLAG1, ACPI_MPST2_FLAG_OFFSET (Flags,0), "Auto Entry", 0}, - {ACPI_DMT_FLAG2, ACPI_MPST2_FLAG_OFFSET (Flags,0), "Auto Exit", 0}, - - {ACPI_DMT_UINT16, ACPI_MPST2_OFFSET (Reserved1), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_MPST2_OFFSET (AveragePower), "Average Power", 0}, - {ACPI_DMT_UINT32, ACPI_MPST2_OFFSET (PowerSaving), "Power Saving", 0}, - {ACPI_DMT_UINT64, ACPI_MPST2_OFFSET (ExitLatency), "Exit Latency", 0}, - {ACPI_DMT_UINT64, ACPI_MPST2_OFFSET (Reserved2), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * MSCT - Maximum System Characteristics Table (ACPI 4.0) - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMsct[] = -{ - {ACPI_DMT_UINT32, ACPI_MSCT_OFFSET (ProximityOffset), "Proximity Offset", 0}, - {ACPI_DMT_UINT32, ACPI_MSCT_OFFSET (MaxProximityDomains), "Max Proximity Domains", 0}, - {ACPI_DMT_UINT32, ACPI_MSCT_OFFSET (MaxClockDomains), "Max Clock Domains", 0}, - {ACPI_DMT_UINT64, ACPI_MSCT_OFFSET (MaxAddress), "Max Physical Address", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Subtable - Maximum Proximity Domain Information. Version 1 */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMsct0[] = -{ - {ACPI_DMT_UINT8, ACPI_MSCT0_OFFSET (Revision), "Revision", 0}, - {ACPI_DMT_UINT8, ACPI_MSCT0_OFFSET (Length), "Length", DT_LENGTH}, - {ACPI_DMT_UINT32, ACPI_MSCT0_OFFSET (RangeStart), "Domain Range Start", 0}, - {ACPI_DMT_UINT32, ACPI_MSCT0_OFFSET (RangeEnd), "Domain Range End", 0}, - {ACPI_DMT_UINT32, ACPI_MSCT0_OFFSET (ProcessorCapacity), "Processor Capacity", 0}, - {ACPI_DMT_UINT64, ACPI_MSCT0_OFFSET (MemoryCapacity), "Memory Capacity", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * MTMR - MID Timer Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMtmr[] = -{ - ACPI_DMT_TERMINATOR -}; - -/* MTMR Subtables - MTMR Entry */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoMtmr0[] = -{ - {ACPI_DMT_GAS, ACPI_MTMR0_OFFSET (PhysicalAddress), "PhysicalAddress", 0}, - {ACPI_DMT_UINT32, ACPI_MTMR0_OFFSET (Frequency), "Frequency", 0}, - {ACPI_DMT_UINT32, ACPI_MTMR0_OFFSET (Irq), "IRQ", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * NFIT - NVDIMM Firmware Interface Table and Subtables - (ACPI 6.0) - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit[] = -{ - {ACPI_DMT_UINT32, ACPI_NFIT_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Common Subtable header */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoNfitHdr[] = -{ - {ACPI_DMT_NFIT, ACPI_NFITH_OFFSET (Type), "Subtable Type", 0}, - {ACPI_DMT_UINT16, ACPI_NFITH_OFFSET (Length), "Length", DT_LENGTH}, - ACPI_DMT_TERMINATOR -}; - -/* 0: System Physical Address Range Structure */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit0[] = -{ - {ACPI_DMT_UINT16, ACPI_NFIT0_OFFSET (RangeIndex), "Range Index", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_NFIT0_FLAG_OFFSET (Flags,0), "Add/Online Operation Only", 0}, - {ACPI_DMT_FLAG1, ACPI_NFIT0_FLAG_OFFSET (Flags,0), "Proximity Domain Valid", 0}, - {ACPI_DMT_UINT32, ACPI_NFIT0_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_NFIT0_OFFSET (ProximityDomain), "Proximity Domain", 0}, - {ACPI_DMT_UUID, ACPI_NFIT0_OFFSET (RangeGuid[0]), "Address Range GUID", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT0_OFFSET (Address), "Address Range Base", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT0_OFFSET (Length), "Address Range Length", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT0_OFFSET (MemoryMapping), "Memory Map Attribute", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 1: Memory Device to System Address Range Map Structure */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit1[] = -{ - {ACPI_DMT_UINT32, ACPI_NFIT1_OFFSET (DeviceHandle), "Device Handle", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (PhysicalId), "Physical Id", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (RegionId), "Region Id", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (RangeIndex), "Range Index", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (RegionIndex), "Control Region Index", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT1_OFFSET (RegionSize), "Region Size", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT1_OFFSET (RegionOffset), "Region Offset", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT1_OFFSET (Address), "Address Region Base", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (InterleaveIndex), "Interleave Index", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (InterleaveWays), "Interleave Ways", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (Flags), "Flags", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Save to device failed", 0}, - {ACPI_DMT_FLAG1, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Restore from device failed", 0}, - {ACPI_DMT_FLAG2, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Platform flush failed", 0}, - {ACPI_DMT_FLAG3, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Device not armed", 0}, - {ACPI_DMT_FLAG4, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Health events observed", 0}, - {ACPI_DMT_FLAG5, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Health events enabled", 0}, - {ACPI_DMT_FLAG6, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Mapping failed", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 2: Interleave Structure */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit2[] = -{ - {ACPI_DMT_UINT16, ACPI_NFIT2_OFFSET (InterleaveIndex), "Interleave Index", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT2_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_NFIT2_OFFSET (LineCount), "Line Count", 0}, - {ACPI_DMT_UINT32, ACPI_NFIT2_OFFSET (LineSize), "Line Size", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit2a[] = -{ - {ACPI_DMT_UINT32, 0, "Line Offset", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - -/* 3: SMBIOS Management Information Structure */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit3[] = -{ - {ACPI_DMT_UINT32, ACPI_NFIT3_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit3a[] = -{ - {ACPI_DMT_RAW_BUFFER, 0, "SMBIOS Table Entries", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - -/* 4: NVDIMM Control Region Structure */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit4[] = -{ - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (RegionIndex), "Region Index", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (VendorId), "Vendor Id", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (DeviceId), "Device Id", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (RevisionId), "Revision Id", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (SubsystemVendorId), "Subsystem Vendor Id", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (SubsystemDeviceId), "Subsystem Device Id", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (SubsystemRevisionId), "Subsystem Revision Id", 0}, - {ACPI_DMT_UINT8, ACPI_NFIT4_OFFSET (ValidFields), "Valid Fields", 0}, - {ACPI_DMT_UINT8, ACPI_NFIT4_OFFSET (ManufacturingLocation), "Manufacturing Location", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (ManufacturingDate), "Manufacturing Date", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Reserved[0]), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_NFIT4_OFFSET (SerialNumber), "Serial Number", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Code), "Code", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Windows), "Window Count", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (WindowSize), "Window Size", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (CommandOffset), "Command Offset", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (CommandSize), "Command Size", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (StatusOffset), "Status Offset", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (StatusSize), "Status Size", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Flags), "Flags", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_NFIT4_FLAG_OFFSET (Flags,0), "Windows buffered", 0}, - {ACPI_DMT_UINT48, ACPI_NFIT4_OFFSET (Reserved1[0]), "Reserved1", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 5: NVDIMM Block Data Window Region Structure */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit5[] = -{ - {ACPI_DMT_UINT16, ACPI_NFIT5_OFFSET (RegionIndex), "Region Index", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT5_OFFSET (Windows), "Window Count", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT5_OFFSET (Offset), "Offset", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT5_OFFSET (Size), "Size", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT5_OFFSET (Capacity), "Capacity", 0}, - {ACPI_DMT_UINT64, ACPI_NFIT5_OFFSET (StartAddress), "Start Address", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 6: Flush Hint Address Structure */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit6[] = -{ - {ACPI_DMT_UINT32, ACPI_NFIT6_OFFSET (DeviceHandle), "Device Handle", 0}, - {ACPI_DMT_UINT16, ACPI_NFIT6_OFFSET (HintCount), "Hint Count", 0}, - {ACPI_DMT_UINT48, ACPI_NFIT6_OFFSET (Reserved[0]), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit6a[] = -{ - {ACPI_DMT_UINT64, 0, "Hint Address", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoNfit7[] = -{ - {ACPI_DMT_UINT8, ACPI_NFIT7_OFFSET (HighestCapability), "Highest Capability", 0}, - {ACPI_DMT_UINT24, ACPI_NFIT7_OFFSET (Reserved[0]), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_NFIT7_OFFSET (Capabilities), "Capabilities (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_NFIT7_FLAG_OFFSET (Capabilities,0), "Cache Flush to NVDIMM", 0}, - {ACPI_DMT_FLAG1, ACPI_NFIT7_FLAG_OFFSET (Capabilities,0), "Memory Flush to MVDIMM", 0}, - {ACPI_DMT_FLAG2, ACPI_NFIT7_FLAG_OFFSET (Capabilities,0), "Memory Mirroring", 0}, - {ACPI_DMT_UINT32, ACPI_NFIT7_OFFSET (Reserved2), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * PCCT - Platform Communications Channel Table (ACPI 5.0) - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPcct[] = -{ - {ACPI_DMT_UINT32, ACPI_PCCT_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_PCCT_FLAG_OFFSET (Flags,0), "Platform", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* PCCT subtables */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPcctHdr[] = -{ - {ACPI_DMT_PCCT, ACPI_PCCT0_OFFSET (Header.Type), "Subtable Type", 0}, - {ACPI_DMT_UINT8, ACPI_PCCT0_OFFSET (Header.Length), "Length", DT_LENGTH}, - ACPI_DMT_TERMINATOR -}; - -/* 0: Generic Communications Subspace */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPcct0[] = -{ - {ACPI_DMT_UINT48, ACPI_PCCT0_OFFSET (Reserved[0]), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT0_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT0_OFFSET (Length), "Address Length", 0}, - {ACPI_DMT_GAS, ACPI_PCCT0_OFFSET (DoorbellRegister), "Doorbell Register", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT0_OFFSET (PreserveMask), "Preserve Mask", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT0_OFFSET (WriteMask), "Write Mask", 0}, - {ACPI_DMT_UINT32, ACPI_PCCT0_OFFSET (Latency), "Command Latency", 0}, - {ACPI_DMT_UINT32, ACPI_PCCT0_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, - {ACPI_DMT_UINT16, ACPI_PCCT0_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 1: HW-reduced Communications Subspace (ACPI 5.1) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPcct1[] = -{ - {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (PlatformInterrupt), "Platform Interrupt", 0}, - {ACPI_DMT_UINT8, ACPI_PCCT1_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_PCCT1_FLAG_OFFSET (Flags,0), "Polarity", 0}, - {ACPI_DMT_FLAG1, ACPI_PCCT1_FLAG_OFFSET (Flags,0), "Mode", 0}, - {ACPI_DMT_UINT8, ACPI_PCCT1_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (Length), "Address Length", 0}, - {ACPI_DMT_GAS, ACPI_PCCT1_OFFSET (DoorbellRegister), "Doorbell Register", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (PreserveMask), "Preserve Mask", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (WriteMask), "Write Mask", 0}, - {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (Latency), "Command Latency", 0}, - {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, - {ACPI_DMT_UINT16, ACPI_PCCT1_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPcct2[] = -{ - {ACPI_DMT_UINT32, ACPI_PCCT2_OFFSET (PlatformInterrupt), "Platform Interrupt", 0}, - {ACPI_DMT_UINT8, ACPI_PCCT2_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_PCCT2_FLAG_OFFSET (Flags,0), "Polarity", 0}, - {ACPI_DMT_FLAG1, ACPI_PCCT2_FLAG_OFFSET (Flags,0), "Mode", 0}, - {ACPI_DMT_UINT8, ACPI_PCCT2_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (Length), "Address Length", 0}, - {ACPI_DMT_GAS, ACPI_PCCT2_OFFSET (DoorbellRegister), "Doorbell Register", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (PreserveMask), "Preserve Mask", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (WriteMask), "Write Mask", 0}, - {ACPI_DMT_UINT32, ACPI_PCCT2_OFFSET (Latency), "Command Latency", 0}, - {ACPI_DMT_UINT32, ACPI_PCCT2_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, - {ACPI_DMT_UINT16, ACPI_PCCT2_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, - {ACPI_DMT_GAS, ACPI_PCCT2_OFFSET (PlatformAckRegister), "Platform ACK Register", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (AckPreserveMask), "ACK Preserve Mask", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (AckWriteMask), "ACK Write Mask", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPcct3[] = -{ - {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (PlatformInterrupt), "Platform Interrupt", 0}, - {ACPI_DMT_UINT8, ACPI_PCCT3_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_PCCT3_FLAG_OFFSET (Flags,0), "Polarity", 0}, - {ACPI_DMT_FLAG1, ACPI_PCCT3_FLAG_OFFSET (Flags,0), "Mode", 0}, - {ACPI_DMT_UINT8, ACPI_PCCT3_OFFSET (Reserved1), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (Length), "Address Length", 0}, - {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (DoorbellRegister), "Doorbell Register", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (PreserveMask), "Preserve Mask", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (WriteMask), "Write Mask", 0}, - {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (Latency), "Command Latency", 0}, - {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, - {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, - {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (PlatformAckRegister), "Platform ACK Register", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (AckPreserveMask), "ACK Preserve Mask", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (AckSetMask), "ACK Set Mask", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (Reserved2), "Reserved", 0}, - {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (CmdCompleteRegister), "Command Complete Register", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (CmdCompleteMask), "Command Complete Check Mask", 0}, - {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (CmdUpdateRegister), "Command Update Register", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (CmdUpdatePreserveMask), "Command Update Preserve Mask", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (CmdUpdateSetMask), "Command Update Set Mask", 0}, - {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (ErrorStatusRegister), "Error Status Register", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (ErrorStatusMask), "Error Status Mask", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPcct4[] = -{ - {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (PlatformInterrupt), "Platform Interrupt", 0}, - {ACPI_DMT_UINT8, ACPI_PCCT4_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_PCCT4_FLAG_OFFSET (Flags,0), "Polarity", 0}, - {ACPI_DMT_FLAG1, ACPI_PCCT4_FLAG_OFFSET (Flags,0), "Mode", 0}, - {ACPI_DMT_UINT8, ACPI_PCCT4_OFFSET (Reserved1), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (Length), "Address Length", 0}, - {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (DoorbellRegister), "Doorbell Register", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (PreserveMask), "Preserve Mask", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (WriteMask), "Write Mask", 0}, - {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (Latency), "Command Latency", 0}, - {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, - {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, - {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (PlatformAckRegister), "Platform ACK Register", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (AckPreserveMask), "ACK Preserve Mask", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (AckSetMask), "ACK Set Mask", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (Reserved2), "Reserved", 0}, - {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (CmdCompleteRegister), "Command Complete Register", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (CmdCompleteMask), "Command Complete Check Mask", 0}, - {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (CmdUpdateRegister), "Command Update Register", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (CmdUpdatePreserveMask), "Command Update Preserve Mask", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (CmdUpdateSetMask), "Command Update Set Mask", 0}, - {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (ErrorStatusRegister), "Error Status Register", 0}, - {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (ErrorStatusMask), "Error Status Mask", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * PDTT - Platform Debug Trigger Table (ACPI 6.2) - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPdtt[] = -{ - {ACPI_DMT_UINT8, ACPI_PDTT_OFFSET (TriggerCount), "Trigger Count", 0}, - {ACPI_DMT_UINT24, ACPI_PDTT_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_PDTT_OFFSET (ArrayOffset), "Array Offset", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoPdtt0[] = -{ - {ACPI_DMT_UINT8, ACPI_PDTT0_OFFSET (SubchannelId), "Subchannel Id", 0}, - {ACPI_DMT_UINT8, ACPI_PDTT0_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_PDTT0_FLAG_OFFSET (Flags,0), "Runtime Trigger", 0}, - {ACPI_DMT_FLAG1, ACPI_PDTT0_FLAG_OFFSET (Flags,0), "Wait for Completion", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * PMTT - Platform Memory Topology Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt[] = -{ - {ACPI_DMT_UINT32, ACPI_PMTT_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Common Subtable header (one per Subtable) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPmttHdr[] = -{ - {ACPI_DMT_PMTT, ACPI_PMTTH_OFFSET (Type), "Subtable Type", 0}, - {ACPI_DMT_UINT8, ACPI_PMTTH_OFFSET (Reserved1), "Reserved", 0}, - {ACPI_DMT_UINT16, ACPI_PMTTH_OFFSET (Length), "Length", DT_LENGTH}, - {ACPI_DMT_UINT16, ACPI_PMTTH_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_PMTTH_FLAG_OFFSET (Flags,0), "Top-level Device", 0}, - {ACPI_DMT_FLAG1, ACPI_PMTTH_FLAG_OFFSET (Flags,0), "Physical Element", 0}, - {ACPI_DMT_FLAGS2, ACPI_PMTTH_FLAG_OFFSET (Flags,0), "Memory Type", 0}, - {ACPI_DMT_UINT16, ACPI_PMTTH_OFFSET (Reserved2), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* PMTT Subtables */ - -/* 0: Socket */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt0[] = -{ - {ACPI_DMT_UINT16, ACPI_PMTT0_OFFSET (SocketId), "Socket ID", 0}, - {ACPI_DMT_UINT16, ACPI_PMTT0_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 1: Memory Controller */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt1[] = -{ - {ACPI_DMT_UINT32, ACPI_PMTT1_OFFSET (ReadLatency), "Read Latency", 0}, - {ACPI_DMT_UINT32, ACPI_PMTT1_OFFSET (WriteLatency), "Write Latency", 0}, - {ACPI_DMT_UINT32, ACPI_PMTT1_OFFSET (ReadBandwidth), "Read Bandwidth", 0}, - {ACPI_DMT_UINT32, ACPI_PMTT1_OFFSET (WriteBandwidth), "Write Bandwidth", 0}, - {ACPI_DMT_UINT16, ACPI_PMTT1_OFFSET (AccessWidth), "Access Width", 0}, - {ACPI_DMT_UINT16, ACPI_PMTT1_OFFSET (Alignment), "Alignment", 0}, - {ACPI_DMT_UINT16, ACPI_PMTT1_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT16, ACPI_PMTT1_OFFSET (DomainCount), "Domain Count", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 1a: Proximity Domain */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt1a[] = -{ - {ACPI_DMT_UINT32, ACPI_PMTT1A_OFFSET (ProximityDomain), "Proximity Domain", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 2: Physical Component */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt2[] = -{ - {ACPI_DMT_UINT16, ACPI_PMTT2_OFFSET (ComponentId), "Component ID", 0}, - {ACPI_DMT_UINT16, ACPI_PMTT2_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_PMTT2_OFFSET (MemorySize), "Memory Size", 0}, - {ACPI_DMT_UINT32, ACPI_PMTT2_OFFSET (BiosHandle), "Bios Handle", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * PPTT - Processor Properties Topology Table (ACPI 6.2) - * - ******************************************************************************/ - -/* Main table consists of only the standard ACPI header - subtables follow */ - -/* Common Subtable header (one per Subtable) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPpttHdr[] = -{ - {ACPI_DMT_PPTT, ACPI_PPTTH_OFFSET (Type), "Subtable Type", 0}, - {ACPI_DMT_UINT8, ACPI_PPTTH_OFFSET (Length), "Length", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 0: Processor hierarchy node */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0[] = -{ - {ACPI_DMT_UINT16, ACPI_PPTT0_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (Flags), "Flags (decoded below)", 0}, - {ACPI_DMT_FLAG0, ACPI_PPTT0_FLAG_OFFSET (Flags,0), "Physical package", 0}, - {ACPI_DMT_FLAG1, ACPI_PPTT0_FLAG_OFFSET (Flags,0), "ACPI Processor ID valid", 0}, - {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (Parent), "Parent", 0}, - {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (AcpiProcessorId), "ACPI Processor ID", 0}, - {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (NumberOfPrivResources), "Private Resource Number", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0a[] = -{ - {ACPI_DMT_UINT32, 0, "Private Resource", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - -/* 1: Cache type */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPptt1[] = -{ - {ACPI_DMT_UINT16, ACPI_PPTT1_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (Flags), "Flags (decoded below)", 0}, - {ACPI_DMT_FLAG0, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Size valid", 0}, - {ACPI_DMT_FLAG1, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Number of Sets valid", 0}, - {ACPI_DMT_FLAG2, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Associativity valid", 0}, - {ACPI_DMT_FLAG3, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Allocation Type valid", 0}, - {ACPI_DMT_FLAG4, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Cache Type valid", 0}, - {ACPI_DMT_FLAG5, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Write Policy valid", 0}, - {ACPI_DMT_FLAG6, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Line Size valid", 0}, - {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (NextLevelOfCache), "Next Level of Cache", 0}, - {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (Size), "Size", 0}, - {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (NumberOfSets), "Number of Sets", 0}, - {ACPI_DMT_UINT8, ACPI_PPTT1_OFFSET (Associativity), "Associativity", 0}, - {ACPI_DMT_UINT8, ACPI_PPTT1_OFFSET (Attributes), "Attributes", 0}, - {ACPI_DMT_FLAGS0, ACPI_PPTT1_OFFSET (Attributes), "Allocation Type", 0}, - {ACPI_DMT_FLAGS2, ACPI_PPTT1_OFFSET (Attributes), "Cache Type", 0}, - {ACPI_DMT_FLAG4, ACPI_PPTT1_OFFSET (Attributes), "Write Policy", 0}, - {ACPI_DMT_UINT16, ACPI_PPTT1_OFFSET (LineSize), "Line Size", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 2: ID */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoPptt2[] = -{ - {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_PPTT2_OFFSET (VendorId), "VENDOR_ID", 0}, - {ACPI_DMT_UINT64, ACPI_PPTT2_OFFSET (Level1Id), "LEVEL_1_ID", 0}, - {ACPI_DMT_UINT64, ACPI_PPTT2_OFFSET (Level2Id), "LEVEL_2_ID", 0}, - {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (MajorRev), "MAJOR_REV", 0}, - {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (MinorRev), "MINOR_REV", 0}, - {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (SpinRev), "SPIN_REV", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * RASF - RAS Feature table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoRasf[] = -{ - {ACPI_DMT_BUF12, ACPI_RASF_OFFSET (ChannelId[0]), "Channel ID", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * S3PT - S3 Performance Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt[] = -{ - {ACPI_DMT_SIG, ACPI_S3PT_OFFSET (Signature[0]), "Signature", 0}, - {ACPI_DMT_UINT32, ACPI_S3PT_OFFSET (Length), "Length", DT_LENGTH}, - ACPI_DMT_TERMINATOR -}; - -/* S3PT subtable header */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoS3ptHdr[] = -{ - {ACPI_DMT_UINT16, ACPI_S3PTH_OFFSET (Type), "Type", 0}, - {ACPI_DMT_UINT8, ACPI_S3PTH_OFFSET (Length), "Length", DT_LENGTH}, - {ACPI_DMT_UINT8, ACPI_S3PTH_OFFSET (Revision), "Revision", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 0: Basic S3 Resume Performance Record */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt0[] = -{ - {ACPI_DMT_UINT32, ACPI_S3PT0_OFFSET (ResumeCount), "Resume Count", 0}, - {ACPI_DMT_UINT64, ACPI_S3PT0_OFFSET (FullResume), "Full Resume", 0}, - {ACPI_DMT_UINT64, ACPI_S3PT0_OFFSET (AverageResume), "Average Resume", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 1: Basic S3 Suspend Performance Record */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt1[] = -{ - {ACPI_DMT_UINT64, ACPI_S3PT1_OFFSET (SuspendStart), "Suspend Start", 0}, - {ACPI_DMT_UINT64, ACPI_S3PT1_OFFSET (SuspendEnd), "Suspend End", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * SBST - Smart Battery Specification Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSbst[] = -{ - {ACPI_DMT_UINT32, ACPI_SBST_OFFSET (WarningLevel), "Warning Level", 0}, - {ACPI_DMT_UINT32, ACPI_SBST_OFFSET (LowLevel), "Low Level", 0}, - {ACPI_DMT_UINT32, ACPI_SBST_OFFSET (CriticalLevel), "Critical Level", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * SDEI - Software Delegated Execption Interface Descriptor Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSdei[] = -{ - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * SDEV - Secure Devices Table (ACPI 6.2) - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSdev[] = -{ - ACPI_DMT_TERMINATOR -}; - -/* Common Subtable header (one per Subtable) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSdevHdr[] = -{ - {ACPI_DMT_SDEV, ACPI_SDEVH_OFFSET (Type), "Subtable Type", 0}, - {ACPI_DMT_UINT8, ACPI_SDEVH_OFFSET (Flags), "Flags (decoded below)", 0}, - {ACPI_DMT_FLAG0, ACPI_SDEVH_FLAG_OFFSET (Flags,0), "Allow handoff to unsecure OS", 0}, - {ACPI_DMT_UINT16, ACPI_SDEVH_OFFSET (Length), "Length", 0}, - ACPI_DMT_TERMINATOR -}; - -/* SDEV Subtables */ - -/* 0: Namespace Device Based Secure Device Structure */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSdev0[] = -{ - {ACPI_DMT_UINT16, ACPI_SDEV0_OFFSET (DeviceIdOffset), "Device ID Offset", 0}, - {ACPI_DMT_UINT16, ACPI_SDEV0_OFFSET (DeviceIdLength), "Device ID Length", 0}, - {ACPI_DMT_UINT16, ACPI_SDEV0_OFFSET (VendorDataOffset), "Vendor Data Offset", 0}, - {ACPI_DMT_UINT16, ACPI_SDEV0_OFFSET (VendorDataLength), "Vendor Data Length", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoSdev0a[] = -{ - {ACPI_DMT_STRING, 0, "Namepath", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 1: PCIe Endpoint Device Based Device Structure */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSdev1[] = -{ - {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (Segment), "Segment", 0}, - {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (StartBus), "Start Bus", 0}, - {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (PathOffset), "Path Offset", 0}, - {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (PathLength), "Path Length", 0}, - {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (VendorDataOffset), "Vendor Data Offset", 0}, - {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (VendorDataLength), "Vendor Data Length", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoSdev1a[] = -{ - {ACPI_DMT_UINT8, ACPI_SDEV1A_OFFSET (Device), "Device", 0}, - {ACPI_DMT_UINT8, ACPI_SDEV1A_OFFSET (Function), "Function", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoSdev1b[] = -{ - {ACPI_DMT_RAW_BUFFER, 0, "Vendor Data", 0}, /*, DT_OPTIONAL}, */ - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * SLIC - Software Licensing Description Table. This table contains the standard - * ACPI header followed by proprietary data structures - * - ******************************************************************************/ - -/* Single subtable, a proprietary format, so treat it as a buffer */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSlic[] = -{ - {ACPI_DMT_RAW_BUFFER, 0, "Software Licensing Structure", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * SLIT - System Locality Information Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSlit[] = -{ - {ACPI_DMT_UINT64, ACPI_SLIT_OFFSET (LocalityCount), "Localities", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * SPCR - Serial Port Console Redirection table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSpcr[] = -{ - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (InterfaceType), "Interface Type", 0}, - {ACPI_DMT_UINT24, ACPI_SPCR_OFFSET (Reserved[0]), "Reserved", 0}, - {ACPI_DMT_GAS, ACPI_SPCR_OFFSET (SerialPort), "Serial Port Register", 0}, - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (InterruptType), "Interrupt Type", 0}, - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PcInterrupt), "PCAT-compatible IRQ", 0}, - {ACPI_DMT_UINT32, ACPI_SPCR_OFFSET (Interrupt), "Interrupt", 0}, - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (BaudRate), "Baud Rate", 0}, - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (Parity), "Parity", 0}, - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (StopBits), "Stop Bits", 0}, - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (FlowControl), "Flow Control", 0}, - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (TerminalType), "Terminal Type", 0}, - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (Reserved2), "Reserved", 0}, - {ACPI_DMT_UINT16, ACPI_SPCR_OFFSET (PciDeviceId), "PCI Device ID", 0}, - {ACPI_DMT_UINT16, ACPI_SPCR_OFFSET (PciVendorId), "PCI Vendor ID", 0}, - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PciBus), "PCI Bus", 0}, - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PciDevice), "PCI Device", 0}, - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PciFunction), "PCI Function", 0}, - {ACPI_DMT_UINT32, ACPI_SPCR_OFFSET (PciFlags), "PCI Flags", 0}, - {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PciSegment), "PCI Segment", 0}, - {ACPI_DMT_UINT32, ACPI_SPCR_OFFSET (Reserved2), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * SPMI - Server Platform Management Interface table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSpmi[] = -{ - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (InterfaceType), "Interface Type", 0}, - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (Reserved), "Reserved", DT_NON_ZERO}, /* Value must be 1 */ - {ACPI_DMT_UINT16, ACPI_SPMI_OFFSET (SpecRevision), "IPMI Spec Version", 0}, - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (InterruptType), "Interrupt Type", 0}, - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (GpeNumber), "GPE Number", 0}, - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (Reserved1), "Reserved", 0}, - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciDeviceFlag), "PCI Device Flag", 0}, - {ACPI_DMT_UINT32, ACPI_SPMI_OFFSET (Interrupt), "Interrupt", 0}, - {ACPI_DMT_GAS, ACPI_SPMI_OFFSET (IpmiRegister), "IPMI Register", 0}, - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciSegment), "PCI Segment", 0}, - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciBus), "PCI Bus", 0}, - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciDevice), "PCI Device", 0}, - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciFunction), "PCI Function", 0}, - {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (Reserved2), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * SRAT - System Resource Affinity Table and Subtables - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSrat[] = -{ - {ACPI_DMT_UINT32, ACPI_SRAT_OFFSET (TableRevision), "Table Revision", 0}, - {ACPI_DMT_UINT64, ACPI_SRAT_OFFSET (Reserved), "Reserved", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Common Subtable header (one per Subtable) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSratHdr[] = -{ - {ACPI_DMT_SRAT, ACPI_SRATH_OFFSET (Type), "Subtable Type", 0}, - {ACPI_DMT_UINT8, ACPI_SRATH_OFFSET (Length), "Length", DT_LENGTH}, - ACPI_DMT_TERMINATOR -}; - -/* SRAT Subtables */ - -/* 0: Processor Local APIC/SAPIC Affinity */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSrat0[] = -{ - {ACPI_DMT_UINT8, ACPI_SRAT0_OFFSET (ProximityDomainLo), "Proximity Domain Low(8)", 0}, - {ACPI_DMT_UINT8, ACPI_SRAT0_OFFSET (ApicId), "Apic ID", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_SRAT0_FLAG_OFFSET (Flags,0), "Enabled", 0}, - {ACPI_DMT_UINT8, ACPI_SRAT0_OFFSET (LocalSapicEid), "Local Sapic EID", 0}, - {ACPI_DMT_UINT24, ACPI_SRAT0_OFFSET (ProximityDomainHi[0]), "Proximity Domain High(24)", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT0_OFFSET (ClockDomain), "Clock Domain", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 1: Memory Affinity */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSrat1[] = -{ - {ACPI_DMT_UINT32, ACPI_SRAT1_OFFSET (ProximityDomain), "Proximity Domain", 0}, - {ACPI_DMT_UINT16, ACPI_SRAT1_OFFSET (Reserved), "Reserved1", 0}, - {ACPI_DMT_UINT64, ACPI_SRAT1_OFFSET (BaseAddress), "Base Address", 0}, - {ACPI_DMT_UINT64, ACPI_SRAT1_OFFSET (Length), "Address Length", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT1_OFFSET (Reserved1), "Reserved2", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT1_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_SRAT1_FLAG_OFFSET (Flags,0), "Enabled", 0}, - {ACPI_DMT_FLAG1, ACPI_SRAT1_FLAG_OFFSET (Flags,0), "Hot Pluggable", 0}, - {ACPI_DMT_FLAG2, ACPI_SRAT1_FLAG_OFFSET (Flags,0), "Non-Volatile", 0}, - {ACPI_DMT_UINT64, ACPI_SRAT1_OFFSET (Reserved2), "Reserved3", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSrat2[] = -{ - {ACPI_DMT_UINT16, ACPI_SRAT2_OFFSET (Reserved), "Reserved1", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (ProximityDomain), "Proximity Domain", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (ApicId), "Apic ID", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_SRAT2_FLAG_OFFSET (Flags,0), "Enabled", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (ClockDomain), "Clock Domain", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (Reserved2), "Reserved2", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 3: GICC Affinity (ACPI 5.1) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSrat3[] = -{ - {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (ProximityDomain), "Proximity Domain", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (AcpiProcessorUid), "Acpi Processor UID", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_SRAT3_FLAG_OFFSET (Flags,0), "Enabled", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (ClockDomain), "Clock Domain", 0}, - ACPI_DMT_TERMINATOR -}; - -/* 4: GCC ITS Affinity (ACPI 6.2) */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoSrat4[] = -{ - {ACPI_DMT_UINT32, ACPI_SRAT4_OFFSET (ProximityDomain), "Proximity Domain", 0}, - {ACPI_DMT_UINT16, ACPI_SRAT4_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT4_OFFSET (ItsId), "ITS ID", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * STAO - Status Override Table (_STA override) - ACPI 6.0 - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoStao[] = -{ - {ACPI_DMT_UINT8, ACPI_STAO_OFFSET (IgnoreUart), "Ignore UART", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoStaoStr[] = -{ - {ACPI_DMT_STRING, 0, "Namepath", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * TCPA - Trusted Computing Platform Alliance table (Client) - * - * NOTE: There are two versions of the table with the same signature -- - * the client version and the server version. The common PlatformClass - * field is used to differentiate the two types of tables. - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaHdr[] = -{ - {ACPI_DMT_UINT16, ACPI_TCPA_OFFSET (PlatformClass), "Platform Class", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaClient[] = -{ - {ACPI_DMT_UINT32, ACPI_TCPA_CLIENT_OFFSET (MinimumLogLength), "Min Event Log Length", 0}, - {ACPI_DMT_UINT64, ACPI_TCPA_CLIENT_OFFSET (LogAddress), "Event Log Address", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaServer[] = -{ - {ACPI_DMT_UINT16, ACPI_TCPA_SERVER_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_TCPA_SERVER_OFFSET (MinimumLogLength), "Min Event Log Length", 0}, - {ACPI_DMT_UINT64, ACPI_TCPA_SERVER_OFFSET (LogAddress), "Event Log Address", 0}, - {ACPI_DMT_UINT16, ACPI_TCPA_SERVER_OFFSET (SpecRevision), "Specification Revision", 0}, - {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Device Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Pci Device", 0}, - {ACPI_DMT_FLAG1, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Bus is Pnp", 0}, - {ACPI_DMT_FLAG2, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Address Valid", 0}, - {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Interrupt Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Mode", 0}, - {ACPI_DMT_FLAG1, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Polarity", 0}, - {ACPI_DMT_FLAG2, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "GPE SCI Triggered", 0}, - {ACPI_DMT_FLAG3, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Global System Interrupt", 0}, - {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (GpeNumber), "Gpe Number", 0}, - {ACPI_DMT_UINT24, ACPI_TCPA_SERVER_OFFSET (Reserved2[0]), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_TCPA_SERVER_OFFSET (GlobalInterrupt), "Global Interrupt", 0}, - {ACPI_DMT_GAS, ACPI_TCPA_SERVER_OFFSET (Address), "Address", 0}, - {ACPI_DMT_UINT32, ACPI_TCPA_SERVER_OFFSET (Reserved3), "Reserved", 0}, - {ACPI_DMT_GAS, ACPI_TCPA_SERVER_OFFSET (ConfigAddress), "Configuration Address", 0}, - {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Group), "Pci Group", 0}, - {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Bus), "Pci Bus", 0}, - {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Device), "Pci Device", 0}, - {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Function), "Pci Function", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoTpm2[] = -{ - {ACPI_DMT_UINT16, ACPI_TPM2_OFFSET (PlatformClass), "Platform Class", 0}, - {ACPI_DMT_UINT16, ACPI_TPM2_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT64, ACPI_TPM2_OFFSET (ControlAddress), "Control Address", 0}, - {ACPI_DMT_TPM2, ACPI_TPM2_OFFSET (StartMethod), "Start Method", 0}, - ACPI_DMT_TERMINATOR -}; - -/* Optional trailer. LogLength and LogAddress are additionally optional */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoTpm2a[] = -{ - {ACPI_DMT_BUF12, ACPI_TPM2A_OFFSET (MethodParameters), "Method Parameters", DT_OPTIONAL}, - {ACPI_DMT_UINT32, ACPI_TPM2A_OFFSET (MinimumLogLength), "Minimum Log Length", DT_OPTIONAL}, - {ACPI_DMT_UINT64, ACPI_TPM2A_OFFSET (LogAddress), "Log Address", DT_OPTIONAL}, - ACPI_DMT_TERMINATOR -}; - -/* 11: Start Method for ARM SMC */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoTpm211[] = -{ - {ACPI_DMT_UINT32, ACPI_TPM211_OFFSET (GlobalInterrupt), "Global Interrupt", 0}, - {ACPI_DMT_UINT8, ACPI_TPM211_OFFSET (InterruptFlags), "Interrupt Flags", 0}, - {ACPI_DMT_UINT8, ACPI_TPM211_OFFSET (OperationFlags), "Operation Flags", 0}, - {ACPI_DMT_UINT16, ACPI_TPM211_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_TPM211_OFFSET (FunctionId), "Function ID", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * UEFI - UEFI Boot optimization Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoUefi[] = -{ - {ACPI_DMT_UUID, ACPI_UEFI_OFFSET (Identifier[0]), "UUID Identifier", 0}, - {ACPI_DMT_UINT16, ACPI_UEFI_OFFSET (DataOffset), "Data Offset", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * VRTC - Virtual Real Time Clock Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoVrtc[] = -{ - ACPI_DMT_TERMINATOR -}; - -/* VRTC Subtables - VRTC Entry */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoVrtc0[] = -{ - {ACPI_DMT_GAS, ACPI_VRTC0_OFFSET (PhysicalAddress), "PhysicalAddress", 0}, - {ACPI_DMT_UINT32, ACPI_VRTC0_OFFSET (Irq), "IRQ", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * WAET - Windows ACPI Emulated devices Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoWaet[] = -{ - {ACPI_DMT_UINT32, ACPI_WAET_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_WAET_OFFSET (Flags), "RTC needs no INT ack", 0}, - {ACPI_DMT_FLAG1, ACPI_WAET_OFFSET (Flags), "PM timer, one read only", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * WDAT - Watchdog Action Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoWdat[] = -{ - {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (HeaderLength), "Header Length", DT_LENGTH}, - {ACPI_DMT_UINT16, ACPI_WDAT_OFFSET (PciSegment), "PCI Segment", 0}, - {ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (PciBus), "PCI Bus", 0}, - {ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (PciDevice), "PCI Device", 0}, - {ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (PciFunction), "PCI Function", 0}, - {ACPI_DMT_UINT24, ACPI_WDAT_OFFSET (Reserved[0]), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (TimerPeriod), "Timer Period", 0}, - {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (MaxCount), "Max Count", 0}, - {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (MinCount), "Min Count", 0}, - {ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_WDAT_OFFSET (Flags), "Enabled", 0}, - {ACPI_DMT_FLAG7, ACPI_WDAT_OFFSET (Flags), "Stopped When Asleep", 0}, - {ACPI_DMT_UINT24, ACPI_WDAT_OFFSET (Reserved2[0]), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (Entries), "Watchdog Entry Count", 0}, - ACPI_DMT_TERMINATOR -}; - -/* WDAT Subtables - Watchdog Instruction Entries */ - -ACPI_DMTABLE_INFO AcpiDmTableInfoWdat0[] = -{ - {ACPI_DMT_UINT8, ACPI_WDAT0_OFFSET (Action), "Watchdog Action", 0}, - {ACPI_DMT_UINT8, ACPI_WDAT0_OFFSET (Instruction), "Instruction", 0}, - {ACPI_DMT_UINT16, ACPI_WDAT0_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_GAS, ACPI_WDAT0_OFFSET (RegisterRegion), "Register Region", 0}, - {ACPI_DMT_UINT32, ACPI_WDAT0_OFFSET (Value), "Value", 0}, - {ACPI_DMT_UINT32, ACPI_WDAT0_OFFSET (Mask), "Register Mask", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * WDDT - Watchdog Description Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoWddt[] = -{ - {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (SpecVersion), "Specification Version", 0}, - {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (TableVersion), "Table Version", 0}, - {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (PciVendorId), "PCI Vendor ID", 0}, - {ACPI_DMT_GAS, ACPI_WDDT_OFFSET (Address), "Timer Register", 0}, - {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (MaxCount), "Max Count", 0}, - {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (MinCount), "Min Count", 0}, - {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (Period), "Period", 0}, - {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (Status), "Status (decoded below)", 0}, - - /* Status Flags byte 0 */ - - {ACPI_DMT_FLAG0, ACPI_WDDT_FLAG_OFFSET (Status,0), "Available", 0}, - {ACPI_DMT_FLAG1, ACPI_WDDT_FLAG_OFFSET (Status,0), "Active", 0}, - {ACPI_DMT_FLAG2, ACPI_WDDT_FLAG_OFFSET (Status,0), "OS Owns", 0}, - - /* Status Flags byte 1 */ - - {ACPI_DMT_FLAG3, ACPI_WDDT_FLAG_OFFSET (Status,1), "User Reset", 0}, - {ACPI_DMT_FLAG4, ACPI_WDDT_FLAG_OFFSET (Status,1), "Timeout Reset", 0}, - {ACPI_DMT_FLAG5, ACPI_WDDT_FLAG_OFFSET (Status,1), "Power Fail Reset", 0}, - {ACPI_DMT_FLAG6, ACPI_WDDT_FLAG_OFFSET (Status,1), "Unknown Reset", 0}, - - {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (Capability), "Capability (decoded below)", 0}, - - /* Capability Flags byte 0 */ - - {ACPI_DMT_FLAG0, ACPI_WDDT_FLAG_OFFSET (Capability,0), "Auto Reset", 0}, - {ACPI_DMT_FLAG1, ACPI_WDDT_FLAG_OFFSET (Capability,0), "Timeout Alert", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * WDRT - Watchdog Resource Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoWdrt[] = -{ - {ACPI_DMT_GAS, ACPI_WDRT_OFFSET (ControlRegister), "Control Register", 0}, - {ACPI_DMT_GAS, ACPI_WDRT_OFFSET (CountRegister), "Count Register", 0}, - {ACPI_DMT_UINT16, ACPI_WDRT_OFFSET (PciDeviceId), "PCI Device ID", 0}, - {ACPI_DMT_UINT16, ACPI_WDRT_OFFSET (PciVendorId), "PCI Vendor ID", 0}, - {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciBus), "PCI Bus", 0}, - {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciDevice), "PCI Device", 0}, - {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciFunction), "PCI Function", 0}, - {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciSegment), "PCI Segment", 0}, - {ACPI_DMT_UINT16, ACPI_WDRT_OFFSET (MaxCount), "Max Count", 0}, - {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (Units), "Counter Units", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * WPBT - Windows Platform Environment Table (ACPI 6.0) - * Version 1 - * - * Conforms to "Windows Platform Binary Table (WPBT)" 29 November 2011 - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt[] = -{ - {ACPI_DMT_UINT32, ACPI_WPBT_OFFSET (HandoffSize), "Handoff Size", 0}, - {ACPI_DMT_UINT64, ACPI_WPBT_OFFSET (HandoffAddress), "Handoff Address", 0}, - {ACPI_DMT_UINT8, ACPI_WPBT_OFFSET (Layout), "Layout", 0}, - {ACPI_DMT_UINT8, ACPI_WPBT_OFFSET (Type), "Type", 0}, - {ACPI_DMT_UINT16, ACPI_WPBT_OFFSET (ArgumentsLength), "Arguments Length", 0}, - ACPI_DMT_TERMINATOR -}; - -ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt0[] = -{ - {ACPI_DMT_UNICODE, sizeof (ACPI_TABLE_WPBT), "Command-line Arguments", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * WSMT - Windows SMM Security Migrations Table - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoWsmt[] = -{ - {ACPI_DMT_UINT32, ACPI_WSMT_OFFSET (ProtectionFlags), "Protection Flags", 0}, - {ACPI_DMT_FLAG0, ACPI_WSMT_FLAG_OFFSET (ProtectionFlags,0), "FIXED_COMM_BUFFERS", 0}, - {ACPI_DMT_FLAG1, ACPI_WSMT_FLAG_OFFSET (ProtectionFlags,0), "COMM_BUFFER_NESTED_PTR_PROTECTION", 0}, - {ACPI_DMT_FLAG2, ACPI_WSMT_FLAG_OFFSET (ProtectionFlags,0), "SYSTEM_RESOURCE_PROTECTION", 0}, - ACPI_DMT_TERMINATOR -}; - - -/******************************************************************************* - * - * XENV - Xen Environment table (ACPI 6.0) - * - ******************************************************************************/ - -ACPI_DMTABLE_INFO AcpiDmTableInfoXenv[] = -{ - {ACPI_DMT_UINT64, ACPI_XENV_OFFSET (GrantTableAddress), "Grant Table Address", 0}, - {ACPI_DMT_UINT64, ACPI_XENV_OFFSET (GrantTableSize), "Grant Table Size", 0}, - {ACPI_DMT_UINT32, ACPI_XENV_OFFSET (EventInterrupt), "Event Interrupt", 0}, - {ACPI_DMT_UINT8, ACPI_XENV_OFFSET (EventFlags), "Event Flags", 0}, - ACPI_DMT_TERMINATOR -}; - - -/*! [Begin] no source code translation */ - -/* - * Generic types (used in UEFI and custom tables) - * - * Examples: - * - * Buffer : cc 04 ff bb - * UINT8 : 11 - * UINT16 : 1122 - * UINT24 : 112233 - * UINT32 : 11223344 - * UINT56 : 11223344556677 - * UINT64 : 1122334455667788 - * - * String : "This is string" - * Unicode : "This string encoded to Unicode" - * - * GUID : 11223344-5566-7788-99aa-bbccddeeff00 - * DevicePath : "\PciRoot(0)\Pci(0x1f,1)\Usb(0,0)" - */ - -#define ACPI_DM_GENERIC_ENTRY(FieldType, FieldName) \ - {{FieldType, 0, FieldName, 0}, ACPI_DMT_TERMINATOR} - -ACPI_DMTABLE_INFO AcpiDmTableInfoGeneric[][2] = -{ - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT8, "UINT8"), - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT16, "UINT16"), - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT24, "UINT24"), - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT32, "UINT32"), - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT40, "UINT40"), - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT48, "UINT48"), - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT56, "UINT56"), - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT64, "UINT64"), - 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_UUID, "GUID"), - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_STRING, "DevicePath"), - ACPI_DM_GENERIC_ENTRY (ACPI_DMT_LABEL, "Label"), - {ACPI_DMT_TERMINATOR} -}; -/*! [End] no source code translation !*/ diff --git a/src/acpica/source/common/dmtbinfo1.c b/src/acpica/source/common/dmtbinfo1.c new file mode 100644 index 00000000..a7a3d484 --- /dev/null +++ b/src/acpica/source/common/dmtbinfo1.c @@ -0,0 +1,1200 @@ +/****************************************************************************** + * + * Module Name: dmtbinfo1 - Table info for non-AML tables + * + *****************************************************************************/ + +/****************************************************************************** + * + * 1. Copyright Notice + * + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. + * All rights reserved. + * + * 2. License + * + * 2.1. This is your license from Intel Corp. under its intellectual property + * rights. You may have additional license terms from the party that provided + * you this software, covering your right to use that party's intellectual + * property rights. + * + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a + * copy of the source code appearing in this file ("Covered Code") an + * irrevocable, perpetual, worldwide license under Intel's copyrights in the + * base code distributed originally by Intel ("Original Intel Code") to copy, + * make derivatives, distribute, use and display any portion of the Covered + * Code in any form, with the right to sublicense such rights; and + * + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent + * license (with the right to sublicense), under only those claims of Intel + * patents that are infringed by the Original Intel Code, to make, use, sell, + * offer to sell, and import the Covered Code and derivative works thereof + * solely to the minimum extent necessary to exercise the above copyright + * license, and in no event shall the patent license extend to any additions + * to or modifications of the Original Intel Code. No other license or right + * is granted directly or by implication, estoppel or otherwise; + * + * The above copyright and patent license is granted only if the following + * conditions are met: + * + * 3. Conditions + * + * 3.1. Redistribution of Source with Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification with rights to further distribute source must include + * the above Copyright Notice, the above License, this list of Conditions, + * and the following Disclaimer and Export Compliance provision. In addition, + * Licensee must cause all Covered Code to which Licensee contributes to + * contain a file documenting the changes Licensee made to create that Covered + * Code and the date of any change. Licensee must include in that file the + * documentation of any changes made by any predecessor Licensee. Licensee + * must include a prominent statement that the modification is derived, + * directly or indirectly, from Original Intel Code. + * + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification without rights to further distribute source must + * include the following Disclaimer and Export Compliance provision in the + * documentation and/or other materials provided with distribution. In + * addition, Licensee may not authorize further sublicense of source of any + * portion of the Covered Code, and must include terms to the effect that the + * license from Licensee to its licensee is limited to the intellectual + * property embodied in the software Licensee provides to its licensee, and + * not to intellectual property embodied in modifications its licensee may + * make. + * + * 3.3. Redistribution of Executable. Redistribution in executable form of any + * substantial portion of the Covered Code or modification must reproduce the + * above Copyright Notice, and the following Disclaimer and Export Compliance + * provision in the documentation and/or other materials provided with the + * distribution. + * + * 3.4. Intel retains all right, title, and interest in and to the Original + * Intel Code. + * + * 3.5. Neither the name Intel nor any other trademark owned or controlled by + * Intel shall be used in advertising or otherwise to promote the sale, use or + * other dealings in products derived from or relating to the Covered Code + * without prior written authorization from Intel. + * + * 4. Disclaimer and Export Compliance + * + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A + * PARTICULAR PURPOSE. + * + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY + * LIMITED REMEDY. + * + * 4.3. Licensee shall not export, either directly or indirectly, any of this + * software or system incorporating such software without first obtaining any + * required license or other approval from the U. S. Department of Commerce or + * any other agency or department of the United States Government. In the + * event Licensee exports any such software from the United States or + * re-exports any such software from a foreign destination, Licensee shall + * ensure that the distribution and export/re-export of the software is in + * compliance with all laws, regulations, orders, or other restrictions of the + * U.S. Export Administration Regulations. Licensee agrees that neither it nor + * any of its subsidiaries will export/re-export any technical data, process, + * software, or service, directly or indirectly, to any country for which the + * United States government or any agency thereof requires an export license, + * other governmental approval, or letter of assurance, without first obtaining + * such license, approval or letter. + * + ***************************************************************************** + * + * Alternatively, you may choose to be licensed under the terms of the + * following license: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Alternatively, you may choose to be licensed under the terms of the + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. + * + *****************************************************************************/ + +#include "acpi.h" +#include "accommon.h" +#include "acdisasm.h" +#include "actbinfo.h" + +/* This module used for application-level code only */ + +#define _COMPONENT ACPI_CA_DISASSEMBLER + ACPI_MODULE_NAME ("dmtbinfo1") + +/* + * How to add a new table: + * + * - Add the C table definition to the actbl1.h or actbl2.h header. + * - Add ACPI_xxxx_OFFSET macro(s) for the table (and subtables) to list below. + * - Define the table in this file (for the disassembler). If any + * new data types are required (ACPI_DMT_*), see below. + * - Add an external declaration for the new table definition (AcpiDmTableInfo*) + * in acdisam.h + * - Add new table definition to the dispatch table in dmtable.c (AcpiDmTableData) + * If a simple table (with no subtables), no disassembly code is needed. + * Otherwise, create the AcpiDmDump* function for to disassemble the table + * and add it to the dmtbdump.c file. + * - Add an external declaration for the new AcpiDmDump* function in acdisasm.h + * - Add the new AcpiDmDump* function to the dispatch table in dmtable.c + * - Create a template for the new table + * - Add data table compiler support + * + * How to add a new data type (ACPI_DMT_*): + * + * - Add new type at the end of the ACPI_DMT list in acdisasm.h + * - Add length and implementation cases in dmtable.c (disassembler) + * - Add type and length cases in dtutils.c (DT compiler) + */ + +/* + * ACPI Table Information, used to dump formatted ACPI tables + * + * Each entry is of the form: <Field Type, Field Offset, Field Name> + */ + + +/******************************************************************************* + * + * ASF - Alert Standard Format table (Signature "ASF!") + * + ******************************************************************************/ + +/* Common Subtable header (one per Subtable) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoAsfHdr[] = +{ + {ACPI_DMT_ASF, ACPI_ASF0_OFFSET (Header.Type), "Subtable Type", 0}, + {ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (Header.Reserved), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_ASF0_OFFSET (Header.Length), "Length", DT_LENGTH}, + ACPI_DMT_TERMINATOR +}; + +/* 0: ASF Information */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoAsf0[] = +{ + {ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (MinResetValue), "Minimum Reset Value", 0}, + {ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (MinPollInterval), "Minimum Polling Interval", 0}, + {ACPI_DMT_UINT16, ACPI_ASF0_OFFSET (SystemId), "System ID", 0}, + {ACPI_DMT_UINT32, ACPI_ASF0_OFFSET (MfgId), "Manufacturer ID", 0}, + {ACPI_DMT_UINT8, ACPI_ASF0_OFFSET (Flags), "Flags", 0}, + {ACPI_DMT_UINT24, ACPI_ASF0_OFFSET (Reserved2[0]), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 1: ASF Alerts */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoAsf1[] = +{ + {ACPI_DMT_UINT8, ACPI_ASF1_OFFSET (AssertMask), "AssertMask", 0}, + {ACPI_DMT_UINT8, ACPI_ASF1_OFFSET (DeassertMask), "DeassertMask", 0}, + {ACPI_DMT_UINT8, ACPI_ASF1_OFFSET (Alerts), "Alert Count", 0}, + {ACPI_DMT_UINT8, ACPI_ASF1_OFFSET (DataLength), "Alert Data Length", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 1a: ASF Alert data */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoAsf1a[] = +{ + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Address), "Address", 0}, + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Command), "Command", 0}, + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Mask), "Mask", 0}, + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Value), "Value", 0}, + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (SensorType), "SensorType", 0}, + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Type), "Type", 0}, + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Offset), "Offset", 0}, + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (SourceType), "SourceType", 0}, + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Severity), "Severity", 0}, + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (SensorNumber), "SensorNumber", 0}, + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Entity), "Entity", 0}, + {ACPI_DMT_UINT8, ACPI_ASF1a_OFFSET (Instance), "Instance", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 2: ASF Remote Control */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoAsf2[] = +{ + {ACPI_DMT_UINT8, ACPI_ASF2_OFFSET (Controls), "Control Count", 0}, + {ACPI_DMT_UINT8, ACPI_ASF2_OFFSET (DataLength), "Control Data Length", 0}, + {ACPI_DMT_UINT16, ACPI_ASF2_OFFSET (Reserved2), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 2a: ASF Control data */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoAsf2a[] = +{ + {ACPI_DMT_UINT8, ACPI_ASF2a_OFFSET (Function), "Function", 0}, + {ACPI_DMT_UINT8, ACPI_ASF2a_OFFSET (Address), "Address", 0}, + {ACPI_DMT_UINT8, ACPI_ASF2a_OFFSET (Command), "Command", 0}, + {ACPI_DMT_UINT8, ACPI_ASF2a_OFFSET (Value), "Value", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 3: ASF RMCP Boot Options */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoAsf3[] = +{ + {ACPI_DMT_BUF7, ACPI_ASF3_OFFSET (Capabilities[0]), "Capabilities", 0}, + {ACPI_DMT_UINT8, ACPI_ASF3_OFFSET (CompletionCode), "Completion Code", 0}, + {ACPI_DMT_UINT32, ACPI_ASF3_OFFSET (EnterpriseId), "Enterprise ID", 0}, + {ACPI_DMT_UINT8, ACPI_ASF3_OFFSET (Command), "Command", 0}, + {ACPI_DMT_UINT16, ACPI_ASF3_OFFSET (Parameter), "Parameter", 0}, + {ACPI_DMT_UINT16, ACPI_ASF3_OFFSET (BootOptions), "Boot Options", 0}, + {ACPI_DMT_UINT16, ACPI_ASF3_OFFSET (OemParameters), "Oem Parameters", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 4: ASF Address */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoAsf4[] = +{ + {ACPI_DMT_UINT8, ACPI_ASF4_OFFSET (EpromAddress), "Eprom Address", 0}, + {ACPI_DMT_UINT8, ACPI_ASF4_OFFSET (Devices), "Device Count", DT_COUNT}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * BERT - Boot Error Record table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoBert[] = +{ + {ACPI_DMT_UINT32, ACPI_BERT_OFFSET (RegionLength), "Boot Error Region Length", 0}, + {ACPI_DMT_UINT64, ACPI_BERT_OFFSET (Address), "Boot Error Region Address", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * BGRT - Boot Graphics Resource Table (ACPI 5.0) + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoBgrt[] = +{ + {ACPI_DMT_UINT16, ACPI_BGRT_OFFSET (Version), "Version", 0}, + {ACPI_DMT_UINT8, ACPI_BGRT_OFFSET (Status), "Status (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_BGRT_FLAG_OFFSET (Status, 0), "Displayed", 0}, + {ACPI_DMT_FLAGS1, ACPI_BGRT_FLAG_OFFSET (Status, 0), "Orientation Offset", 0}, + + {ACPI_DMT_UINT8, ACPI_BGRT_OFFSET (ImageType), "Image Type", 0}, + {ACPI_DMT_UINT64, ACPI_BGRT_OFFSET (ImageAddress), "Image Address", 0}, + {ACPI_DMT_UINT32, ACPI_BGRT_OFFSET (ImageOffsetX), "Image OffsetX", 0}, + {ACPI_DMT_UINT32, ACPI_BGRT_OFFSET (ImageOffsetY), "Image OffsetY", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * BOOT - Simple Boot Flag Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoBoot[] = +{ + {ACPI_DMT_UINT8, ACPI_BOOT_OFFSET (CmosIndex), "Boot Register Index", 0}, + {ACPI_DMT_UINT24, ACPI_BOOT_OFFSET (Reserved[0]), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * CPEP - Corrected Platform Error Polling table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoCpep[] = +{ + {ACPI_DMT_UINT64, ACPI_CPEP_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoCpep0[] = +{ + {ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Header.Type), "Subtable Type", 0}, + {ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Header.Length), "Length", DT_LENGTH}, + {ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Id), "Processor ID", 0}, + {ACPI_DMT_UINT8, ACPI_CPEP0_OFFSET (Eid), "Processor EID", 0}, + {ACPI_DMT_UINT32, ACPI_CPEP0_OFFSET (Interval), "Polling Interval", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * CSRT - Core System Resource Table + * + ******************************************************************************/ + +/* Main table consists only of the standard ACPI table header */ + +/* Resource Group subtable */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt0[] = +{ + {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (Length), "Length", DT_LENGTH}, + {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (VendorId), "Vendor ID", 0}, + {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (SubvendorId), "Subvendor ID", 0}, + {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (DeviceId), "Device ID", 0}, + {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (SubdeviceId), "Subdevice ID", 0}, + {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (Revision), "Revision", 0}, + {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (SharedInfoLength), "Shared Info Length", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Shared Info subtable */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt1[] = +{ + {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (MajorVersion), "Major Version", 0}, + {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (MinorVersion), "Minor Version", 0}, + {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (MmioBaseLow), "MMIO Base Address Low", 0}, + {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (MmioBaseHigh), "MMIO Base Address High", 0}, + {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (GsiInterrupt), "GSI Interrupt", 0}, + {ACPI_DMT_UINT8, ACPI_CSRT1_OFFSET (InterruptPolarity), "Interrupt Polarity", 0}, + {ACPI_DMT_UINT8, ACPI_CSRT1_OFFSET (InterruptMode), "Interrupt Mode", 0}, + {ACPI_DMT_UINT8, ACPI_CSRT1_OFFSET (NumChannels), "Num Channels", 0}, + {ACPI_DMT_UINT8, ACPI_CSRT1_OFFSET (DmaAddressWidth), "DMA Address Width", 0}, + {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (BaseRequestLine), "Base Request Line", 0}, + {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (NumHandshakeSignals), "Num Handshake Signals", 0}, + {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (MaxBlockSize), "Max Block Size", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Resource Descriptor subtable */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt2[] = +{ + {ACPI_DMT_UINT32, ACPI_CSRT2_OFFSET (Length), "Length", DT_LENGTH}, + {ACPI_DMT_UINT16, ACPI_CSRT2_OFFSET (Type), "Type", 0}, + {ACPI_DMT_UINT16, ACPI_CSRT2_OFFSET (Subtype), "Subtype", 0}, + {ACPI_DMT_UINT32, ACPI_CSRT2_OFFSET (Uid), "UID", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt2a[] = +{ + {ACPI_DMT_RAW_BUFFER, 0, "ResourceInfo", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * DBG2 - Debug Port Table 2 + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2[] = +{ + {ACPI_DMT_UINT32, ACPI_DBG2_OFFSET (InfoOffset), "Info Offset", 0}, + {ACPI_DMT_UINT32, ACPI_DBG2_OFFSET (InfoCount), "Info Count", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Debug Device Information Subtable */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Device[] = +{ + {ACPI_DMT_UINT8, ACPI_DBG20_OFFSET (Revision), "Revision", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (Length), "Length", DT_LENGTH}, + {ACPI_DMT_UINT8, ACPI_DBG20_OFFSET (RegisterCount), "Register Count", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (NamepathLength), "Namepath Length", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (NamepathOffset), "Namepath Offset", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (OemDataLength), "OEM Data Length", DT_DESCRIBES_OPTIONAL}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (OemDataOffset), "OEM Data Offset", DT_DESCRIBES_OPTIONAL}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (PortType), "Port Type", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (PortSubtype), "Port Subtype", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (BaseAddressOffset), "Base Address Offset", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (AddressSizeOffset), "Address Size Offset", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Variable-length data for the subtable */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Addr[] = +{ + {ACPI_DMT_GAS, 0, "Base Address Register", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Size[] = +{ + {ACPI_DMT_UINT32, 0, "Address Size", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Name[] = +{ + {ACPI_DMT_STRING, 0, "Namepath", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2OemData[] = +{ + {ACPI_DMT_RAW_BUFFER, 0, "OEM Data", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * DBGP - Debug Port + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDbgp[] = +{ + {ACPI_DMT_UINT8, ACPI_DBGP_OFFSET (Type), "Interface Type", 0}, + {ACPI_DMT_UINT24, ACPI_DBGP_OFFSET (Reserved[0]), "Reserved", 0}, + {ACPI_DMT_GAS, ACPI_DBGP_OFFSET (DebugPort), "Debug Port Register", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * DMAR - DMA Remapping table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDmar[] = +{ + {ACPI_DMT_UINT8, ACPI_DMAR_OFFSET (Width), "Host Address Width", 0}, + {ACPI_DMT_UINT8, ACPI_DMAR_OFFSET (Flags), "Flags", 0}, + {ACPI_DMT_BUF10, ACPI_DMAR_OFFSET (Reserved[0]), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Common Subtable header (one per Subtable) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDmarHdr[] = +{ + {ACPI_DMT_DMAR, ACPI_DMAR0_OFFSET (Header.Type), "Subtable Type", 0}, + {ACPI_DMT_UINT16, ACPI_DMAR0_OFFSET (Header.Length), "Length", DT_LENGTH}, + ACPI_DMT_TERMINATOR +}; + +/* Common device scope entry */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDmarScope[] = +{ + {ACPI_DMT_DMAR_SCOPE, ACPI_DMARS_OFFSET (EntryType), "Device Scope Type", 0}, + {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (Length), "Entry Length", DT_LENGTH}, + {ACPI_DMT_UINT16, ACPI_DMARS_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (EnumerationId), "Enumeration ID", 0}, + {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (Bus), "PCI Bus Number", 0}, + ACPI_DMT_TERMINATOR +}; + +/* DMAR Subtables */ + +/* 0: Hardware Unit Definition */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDmar0[] = +{ + {ACPI_DMT_UINT8, ACPI_DMAR0_OFFSET (Flags), "Flags", 0}, + {ACPI_DMT_UINT8, ACPI_DMAR0_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_DMAR0_OFFSET (Segment), "PCI Segment Number", 0}, + {ACPI_DMT_UINT64, ACPI_DMAR0_OFFSET (Address), "Register Base Address", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 1: Reserved Memory Definition */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDmar1[] = +{ + {ACPI_DMT_UINT16, ACPI_DMAR1_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_DMAR1_OFFSET (Segment), "PCI Segment Number", 0}, + {ACPI_DMT_UINT64, ACPI_DMAR1_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT64, ACPI_DMAR1_OFFSET (EndAddress), "End Address (limit)", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 2: Root Port ATS Capability Definition */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDmar2[] = +{ + {ACPI_DMT_UINT8, ACPI_DMAR2_OFFSET (Flags), "Flags", 0}, + {ACPI_DMT_UINT8, ACPI_DMAR2_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_DMAR2_OFFSET (Segment), "PCI Segment Number", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 3: Remapping Hardware Static Affinity Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDmar3[] = +{ + {ACPI_DMT_UINT32, ACPI_DMAR3_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_DMAR3_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT32, ACPI_DMAR3_OFFSET (ProximityDomain), "Proximity Domain", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 4: ACPI Namespace Device Declaration Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDmar4[] = +{ + {ACPI_DMT_UINT24, ACPI_DMAR4_OFFSET (Reserved[0]), "Reserved", 0}, + {ACPI_DMT_UINT8, ACPI_DMAR4_OFFSET (DeviceNumber), "Device Number", 0}, + {ACPI_DMT_STRING, ACPI_DMAR4_OFFSET (DeviceName[0]), "Device Name", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * DRTM - Dynamic Root of Trust for Measurement table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm[] = +{ + {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (EntryBaseAddress), "Entry Base Address", 0}, + {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (EntryLength), "Entry Length", 0}, + {ACPI_DMT_UINT32, ACPI_DRTM_OFFSET (EntryAddress32), "Entry 32", 0}, + {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (EntryAddress64), "Entry 64", 0}, + {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (ExitAddress), "Exit Address", 0}, + {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (LogAreaAddress), "Log Area Start", 0}, + {ACPI_DMT_UINT32, ACPI_DRTM_OFFSET (LogAreaLength), "Log Area Length", 0}, + {ACPI_DMT_UINT64, ACPI_DRTM_OFFSET (ArchDependentAddress), "Arch Dependent Address", 0}, + {ACPI_DMT_UINT32, ACPI_DRTM_OFFSET (Flags), "Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_DRTM_FLAG_OFFSET (Flags, 0), "Namespace in TCB", 0}, + {ACPI_DMT_FLAG1, ACPI_DRTM_FLAG_OFFSET (Flags, 0), "Gap Code on S3 Resume", 0}, + {ACPI_DMT_FLAG2, ACPI_DRTM_FLAG_OFFSET (Flags, 0), "Gap Code on DLME_Exit", 0}, + {ACPI_DMT_FLAG3, ACPI_DRTM_FLAG_OFFSET (Flags, 0), "PCR_Authorities Changed", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm0[] = +{ + {ACPI_DMT_UINT32, ACPI_DRTM0_OFFSET (ValidatedTableCount), "Validated Table Count", DT_COUNT}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm0a[] = +{ + {ACPI_DMT_UINT64, 0, "Table Address", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm1[] = +{ + {ACPI_DMT_UINT32, ACPI_DRTM1_OFFSET (ResourceCount), "Resource Count", DT_COUNT}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm1a[] = +{ + {ACPI_DMT_UINT56, ACPI_DRTM1a_OFFSET (Size[0]), "Size", DT_OPTIONAL}, + {ACPI_DMT_UINT8, ACPI_DRTM1a_OFFSET (Type), "Type", 0}, + {ACPI_DMT_FLAG0, ACPI_DRTM1a_FLAG_OFFSET (Type, 0), "Resource Type", 0}, + {ACPI_DMT_FLAG7, ACPI_DRTM1a_FLAG_OFFSET (Type, 0), "Protections", 0}, + {ACPI_DMT_UINT64, ACPI_DRTM1a_OFFSET (Address), "Address", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm2[] = +{ + {ACPI_DMT_UINT32, ACPI_DRTM2_OFFSET (DpsIdLength), "DLME Platform Id Length", DT_COUNT}, + {ACPI_DMT_BUF16, ACPI_DRTM2_OFFSET (DpsId), "DLME Platform Id", DT_COUNT}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * ECDT - Embedded Controller Boot Resources Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoEcdt[] = +{ + {ACPI_DMT_GAS, ACPI_ECDT_OFFSET (Control), "Command/Status Register", 0}, + {ACPI_DMT_GAS, ACPI_ECDT_OFFSET (Data), "Data Register", 0}, + {ACPI_DMT_UINT32, ACPI_ECDT_OFFSET (Uid), "UID", 0}, + {ACPI_DMT_UINT8, ACPI_ECDT_OFFSET (Gpe), "GPE Number", 0}, + {ACPI_DMT_STRING, ACPI_ECDT_OFFSET (Id[0]), "Namepath", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * EINJ - Error Injection table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoEinj[] = +{ + {ACPI_DMT_UINT32, ACPI_EINJ_OFFSET (HeaderLength), "Injection Header Length", 0}, + {ACPI_DMT_UINT8, ACPI_EINJ_OFFSET (Flags), "Flags", 0}, + {ACPI_DMT_UINT24, ACPI_EINJ_OFFSET (Reserved[0]), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_EINJ_OFFSET (Entries), "Injection Entry Count", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoEinj0[] = +{ + {ACPI_DMT_EINJACT, ACPI_EINJ0_OFFSET (Action), "Action", 0}, + {ACPI_DMT_EINJINST, ACPI_EINJ0_OFFSET (Instruction), "Instruction", 0}, + {ACPI_DMT_UINT8, ACPI_EINJ0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_EINJ0_FLAG_OFFSET (Flags,0), "Preserve Register Bits", 0}, + + {ACPI_DMT_UINT8, ACPI_EINJ0_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_GAS, ACPI_EINJ0_OFFSET (RegisterRegion), "Register Region", 0}, + {ACPI_DMT_UINT64, ACPI_EINJ0_OFFSET (Value), "Value", 0}, + {ACPI_DMT_UINT64, ACPI_EINJ0_OFFSET (Mask), "Mask", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * ERST - Error Record Serialization table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoErst[] = +{ + {ACPI_DMT_UINT32, ACPI_ERST_OFFSET (HeaderLength), "Serialization Header Length", 0}, + {ACPI_DMT_UINT32, ACPI_ERST_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_ERST_OFFSET (Entries), "Instruction Entry Count", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoErst0[] = +{ + {ACPI_DMT_ERSTACT, ACPI_ERST0_OFFSET (Action), "Action", 0}, + {ACPI_DMT_ERSTINST, ACPI_ERST0_OFFSET (Instruction), "Instruction", 0}, + {ACPI_DMT_UINT8, ACPI_ERST0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_ERST0_FLAG_OFFSET (Flags,0), "Preserve Register Bits", 0}, + + {ACPI_DMT_UINT8, ACPI_ERST0_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_GAS, ACPI_ERST0_OFFSET (RegisterRegion), "Register Region", 0}, + {ACPI_DMT_UINT64, ACPI_ERST0_OFFSET (Value), "Value", 0}, + {ACPI_DMT_UINT64, ACPI_ERST0_OFFSET (Mask), "Mask", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * FPDT - Firmware Performance Data Table (ACPI 5.0) + * + ******************************************************************************/ + +/* Main table consists of only the standard ACPI header - subtables follow */ + +/* FPDT subtable header */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoFpdtHdr[] = +{ + {ACPI_DMT_UINT16, ACPI_FPDTH_OFFSET (Type), "Subtable Type", 0}, + {ACPI_DMT_UINT8, ACPI_FPDTH_OFFSET (Length), "Length", DT_LENGTH}, + {ACPI_DMT_UINT8, ACPI_FPDTH_OFFSET (Revision), "Revision", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 0: Firmware Basic Boot Performance Record */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt0[] = +{ + {ACPI_DMT_UINT32, ACPI_FPDT0_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_FPDT1_OFFSET (Address), "FPDT Boot Record Address", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 1: S3 Performance Table Pointer Record */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt1[] = +{ + {ACPI_DMT_UINT32, ACPI_FPDT1_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_FPDT1_OFFSET (Address), "S3PT Record Address", 0}, + ACPI_DMT_TERMINATOR +}; + +#if 0 + /* Boot Performance Record, not supported at this time. */ + {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (ResetEnd), "Reset End", 0}, + {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (LoadStart), "Load Image Start", 0}, + {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (StartupStart), "Start Image Start", 0}, + {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (ExitServicesEntry), "Exit Services Entry", 0}, + {ACPI_DMT_UINT64, ACPI_FPDT0_OFFSET (ExitServicesExit), "Exit Services Exit", 0}, +#endif + + +/******************************************************************************* + * + * GTDT - Generic Timer Description Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt[] = +{ + {ACPI_DMT_UINT64, ACPI_GTDT_OFFSET (CounterBlockAddresss), "Counter Block Address", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_NEW_LINE, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (SecureEl1Interrupt), "Secure EL1 Interrupt", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (SecureEl1Flags), "EL1 Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Trigger Mode", 0}, + {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Polarity", 0}, + {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Always On", 0}, + ACPI_DMT_NEW_LINE, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl1Interrupt), "Non-Secure EL1 Interrupt", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl1Flags), "NEL1 Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Trigger Mode", 0}, + {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Polarity", 0}, + {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Always On", 0}, + ACPI_DMT_NEW_LINE, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (VirtualTimerInterrupt), "Virtual Timer Interrupt", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (VirtualTimerFlags), "VT Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Trigger Mode", 0}, + {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Polarity", 0}, + {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Always On", 0}, + ACPI_DMT_NEW_LINE, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl2Interrupt), "Non-Secure EL2 Interrupt", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl2Flags), "NEL2 Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Trigger Mode", 0}, + {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Polarity", 0}, + {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Always On", 0}, + {ACPI_DMT_UINT64, ACPI_GTDT_OFFSET (CounterReadBlockAddress), "Counter Read Block Address", 0}, + ACPI_DMT_NEW_LINE, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (PlatformTimerCount), "Platform Timer Count", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (PlatformTimerOffset), "Platform Timer Offset", 0}, + ACPI_DMT_TERMINATOR +}; + +/* GTDT Subtable header (one per Subtable) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoGtdtHdr[] = +{ + {ACPI_DMT_GTDT, ACPI_GTDTH_OFFSET (Type), "Subtable Type", 0}, + {ACPI_DMT_UINT16, ACPI_GTDTH_OFFSET (Length), "Length", DT_LENGTH}, + ACPI_DMT_TERMINATOR +}; + +/* GTDT Subtables */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt0[] = +{ + {ACPI_DMT_UINT8, ACPI_GTDT0_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_GTDT0_OFFSET (BlockAddress), "Block Address", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT0_OFFSET (TimerCount), "Timer Count", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT0_OFFSET (TimerOffset), "Timer Offset", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt0a[] = +{ + {ACPI_DMT_UINT8 , ACPI_GTDT0a_OFFSET (FrameNumber), "Frame Number", 0}, + {ACPI_DMT_UINT24, ACPI_GTDT0a_OFFSET (Reserved[0]), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_GTDT0a_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT64, ACPI_GTDT0a_OFFSET (El0BaseAddress), "EL0 Base Address", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (TimerInterrupt), "Timer Interrupt", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (TimerFlags), "Timer Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (TimerFlags,0), "Trigger Mode", 0}, + {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (TimerFlags,0), "Polarity", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (VirtualTimerInterrupt), "Virtual Timer Interrupt", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (VirtualTimerFlags), "Virtual Timer Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (VirtualTimerFlags,0), "Trigger Mode", 0}, + {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (VirtualTimerFlags,0), "Polarity", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (CommonFlags), "Common Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (CommonFlags,0), "Secure", 0}, + {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (CommonFlags,0), "Always On", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt1[] = +{ + {ACPI_DMT_UINT8, ACPI_GTDT1_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_GTDT1_OFFSET (RefreshFrameAddress), "Refresh Frame Address", 0}, + {ACPI_DMT_UINT64, ACPI_GTDT1_OFFSET (ControlFrameAddress), "Control Frame Address", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT1_OFFSET (TimerInterrupt), "Timer Interrupt", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT1_OFFSET (TimerFlags), "Timer Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Trigger Mode", 0}, + {ACPI_DMT_FLAG1, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Polarity", 0}, + {ACPI_DMT_FLAG2, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Security", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * HEST - Hardware Error Source table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHest[] = +{ + {ACPI_DMT_UINT32, ACPI_HEST_OFFSET (ErrorSourceCount), "Error Source Count", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Common HEST structures for subtables */ + +#define ACPI_DM_HEST_HEADER \ + {ACPI_DMT_HEST, ACPI_HEST0_OFFSET (Header.Type), "Subtable Type", 0}, \ + {ACPI_DMT_UINT16, ACPI_HEST0_OFFSET (Header.SourceId), "Source Id", 0} + +#define ACPI_DM_HEST_AER \ + {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Reserved1), "Reserved", 0}, \ + {ACPI_DMT_UINT8, ACPI_HEST6_OFFSET (Aer.Flags), "Flags (decoded below)", DT_FLAG}, \ + {ACPI_DMT_FLAG0, ACPI_HEST6_FLAG_OFFSET (Aer.Flags,0), "Firmware First", 0}, \ + {ACPI_DMT_FLAG0, ACPI_HEST6_FLAG_OFFSET (Aer.Flags,0), "Global", 0}, \ + {ACPI_DMT_UINT8, ACPI_HEST6_OFFSET (Aer.Enabled), "Enabled", 0}, \ + {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.RecordsToPreallocate), "Records To Preallocate", 0}, \ + {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.MaxSectionsPerRecord), "Max Sections Per Record", 0}, \ + {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.Bus), "Bus", 0}, \ + {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Device), "Device", 0}, \ + {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Function), "Function", 0}, \ + {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.DeviceControl), "DeviceControl", 0}, \ + {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Reserved2), "Reserved", 0}, \ + {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.UncorrectableMask), "Uncorrectable Mask", 0}, \ + {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.UncorrectableSeverity), "Uncorrectable Severity", 0}, \ + {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.CorrectableMask), "Correctable Mask", 0}, \ + {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.AdvancedCapabilities), "Advanced Capabilities", 0} + + +/* HEST Subtables */ + +/* 0: IA32 Machine Check Exception */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHest0[] = +{ + ACPI_DM_HEST_HEADER, + {ACPI_DMT_UINT16, ACPI_HEST0_OFFSET (Reserved1), "Reserved1", 0}, + {ACPI_DMT_UINT8, ACPI_HEST0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_HEST0_FLAG_OFFSET (Flags,0), "Firmware First", 0}, + {ACPI_DMT_FLAG2, ACPI_HEST0_FLAG_OFFSET (Flags,0), "GHES Assist", 0}, + + {ACPI_DMT_UINT8, ACPI_HEST0_OFFSET (Enabled), "Enabled", 0}, + {ACPI_DMT_UINT32, ACPI_HEST0_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, + {ACPI_DMT_UINT32, ACPI_HEST0_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, + {ACPI_DMT_UINT64, ACPI_HEST0_OFFSET (GlobalCapabilityData), "Global Capability Data", 0}, + {ACPI_DMT_UINT64, ACPI_HEST0_OFFSET (GlobalControlData), "Global Control Data", 0}, + {ACPI_DMT_UINT8, ACPI_HEST0_OFFSET (NumHardwareBanks), "Num Hardware Banks", 0}, + {ACPI_DMT_UINT56, ACPI_HEST0_OFFSET (Reserved3[0]), "Reserved2", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 1: IA32 Corrected Machine Check */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHest1[] = +{ + ACPI_DM_HEST_HEADER, + {ACPI_DMT_UINT16, ACPI_HEST1_OFFSET (Reserved1), "Reserved1", 0}, + {ACPI_DMT_UINT8, ACPI_HEST1_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_HEST1_FLAG_OFFSET (Flags,0), "Firmware First", 0}, + {ACPI_DMT_FLAG2, ACPI_HEST1_FLAG_OFFSET (Flags,0), "GHES Assist", 0}, + + {ACPI_DMT_UINT8, ACPI_HEST1_OFFSET (Enabled), "Enabled", 0}, + {ACPI_DMT_UINT32, ACPI_HEST1_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, + {ACPI_DMT_UINT32, ACPI_HEST1_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, + {ACPI_DMT_HESTNTFY, ACPI_HEST1_OFFSET (Notify), "Notify", 0}, + {ACPI_DMT_UINT8, ACPI_HEST1_OFFSET (NumHardwareBanks), "Num Hardware Banks", 0}, + {ACPI_DMT_UINT24, ACPI_HEST1_OFFSET (Reserved2[0]), "Reserved2", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 2: IA32 Non-Maskable Interrupt */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHest2[] = +{ + ACPI_DM_HEST_HEADER, + {ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, + {ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, + {ACPI_DMT_UINT32, ACPI_HEST2_OFFSET (MaxRawDataLength), "Max Raw Data Length", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 6: PCI Express Root Port AER */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHest6[] = +{ + ACPI_DM_HEST_HEADER, + ACPI_DM_HEST_AER, + {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (RootErrorCommand), "Root Error Command", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 7: PCI Express AER (AER Endpoint) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHest7[] = +{ + ACPI_DM_HEST_HEADER, + ACPI_DM_HEST_AER, + ACPI_DMT_TERMINATOR +}; + +/* 8: PCI Express/PCI-X Bridge AER */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHest8[] = +{ + ACPI_DM_HEST_HEADER, + ACPI_DM_HEST_AER, + {ACPI_DMT_UINT32, ACPI_HEST8_OFFSET (UncorrectableMask2), "2nd Uncorrectable Mask", 0}, + {ACPI_DMT_UINT32, ACPI_HEST8_OFFSET (UncorrectableSeverity2), "2nd Uncorrectable Severity", 0}, + {ACPI_DMT_UINT32, ACPI_HEST8_OFFSET (AdvancedCapabilities2), "2nd Advanced Capabilities", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 9: Generic Hardware Error Source */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHest9[] = +{ + ACPI_DM_HEST_HEADER, + {ACPI_DMT_UINT16, ACPI_HEST9_OFFSET (RelatedSourceId), "Related Source Id", 0}, + {ACPI_DMT_UINT8, ACPI_HEST9_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT8, ACPI_HEST9_OFFSET (Enabled), "Enabled", 0}, + {ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, + {ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, + {ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (MaxRawDataLength), "Max Raw Data Length", 0}, + {ACPI_DMT_GAS, ACPI_HEST9_OFFSET (ErrorStatusAddress), "Error Status Address", 0}, + {ACPI_DMT_HESTNTFY, ACPI_HEST9_OFFSET (Notify), "Notify", 0}, + {ACPI_DMT_UINT32, ACPI_HEST9_OFFSET (ErrorBlockLength), "Error Status Block Length", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 10: Generic Hardware Error Source - Version 2 */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHest10[] = +{ + ACPI_DM_HEST_HEADER, + {ACPI_DMT_UINT16, ACPI_HEST10_OFFSET (RelatedSourceId), "Related Source Id", 0}, + {ACPI_DMT_UINT8, ACPI_HEST10_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT8, ACPI_HEST10_OFFSET (Enabled), "Enabled", 0}, + {ACPI_DMT_UINT32, ACPI_HEST10_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, + {ACPI_DMT_UINT32, ACPI_HEST10_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, + {ACPI_DMT_UINT32, ACPI_HEST10_OFFSET (MaxRawDataLength), "Max Raw Data Length", 0}, + {ACPI_DMT_GAS, ACPI_HEST10_OFFSET (ErrorStatusAddress), "Error Status Address", 0}, + {ACPI_DMT_HESTNTFY, ACPI_HEST10_OFFSET (Notify), "Notify", 0}, + {ACPI_DMT_UINT32, ACPI_HEST10_OFFSET (ErrorBlockLength), "Error Status Block Length", 0}, + {ACPI_DMT_GAS, ACPI_HEST10_OFFSET (ReadAckRegister), "Read Ack Register", 0}, + {ACPI_DMT_UINT64, ACPI_HEST10_OFFSET (ReadAckPreserve), "Read Ack Preserve", 0}, + {ACPI_DMT_UINT64, ACPI_HEST10_OFFSET (ReadAckWrite), "Read Ack Write", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 11: IA32 Deferred Machine Check */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHest11[] = +{ + ACPI_DM_HEST_HEADER, + {ACPI_DMT_UINT16, ACPI_HEST11_OFFSET (Reserved1), "Reserved1", 0}, + {ACPI_DMT_UINT8, ACPI_HEST11_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_HEST11_FLAG_OFFSET (Flags,0), "Firmware First", 0}, + {ACPI_DMT_FLAG2, ACPI_HEST11_FLAG_OFFSET (Flags,0), "GHES Assist", 0}, + + {ACPI_DMT_UINT8, ACPI_HEST11_OFFSET (Enabled), "Enabled", 0}, + {ACPI_DMT_UINT32, ACPI_HEST11_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0}, + {ACPI_DMT_UINT32, ACPI_HEST11_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0}, + {ACPI_DMT_HESTNTFY, ACPI_HEST11_OFFSET (Notify), "Notify", 0}, + {ACPI_DMT_UINT8, ACPI_HEST11_OFFSET (NumHardwareBanks), "Num Hardware Banks", 0}, + {ACPI_DMT_UINT24, ACPI_HEST11_OFFSET (Reserved2[0]), "Reserved2", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Notification Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHestNotify[] = +{ + {ACPI_DMT_HESTNTYP, ACPI_HESTN_OFFSET (Type), "Notify Type", 0}, + {ACPI_DMT_UINT8, ACPI_HESTN_OFFSET (Length), "Notify Length", DT_LENGTH}, + {ACPI_DMT_UINT16, ACPI_HESTN_OFFSET (ConfigWriteEnable), "Configuration Write Enable", 0}, + {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (PollInterval), "PollInterval", 0}, + {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (Vector), "Vector", 0}, + {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (PollingThresholdValue), "Polling Threshold Value", 0}, + {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (PollingThresholdWindow), "Polling Threshold Window", 0}, + {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (ErrorThresholdValue), "Error Threshold Value", 0}, + {ACPI_DMT_UINT32, ACPI_HESTN_OFFSET (ErrorThresholdWindow), "Error Threshold Window", 0}, + ACPI_DMT_TERMINATOR +}; + + +/* + * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and + * ACPI_HEST_IA_CORRECTED structures. + */ +ACPI_DMTABLE_INFO AcpiDmTableInfoHestBank[] = +{ + {ACPI_DMT_UINT8, ACPI_HESTB_OFFSET (BankNumber), "Bank Number", 0}, + {ACPI_DMT_UINT8, ACPI_HESTB_OFFSET (ClearStatusOnInit), "Clear Status On Init", 0}, + {ACPI_DMT_UINT8, ACPI_HESTB_OFFSET (StatusFormat), "Status Format", 0}, + {ACPI_DMT_UINT8, ACPI_HESTB_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_HESTB_OFFSET (ControlRegister), "Control Register", 0}, + {ACPI_DMT_UINT64, ACPI_HESTB_OFFSET (ControlData), "Control Data", 0}, + {ACPI_DMT_UINT32, ACPI_HESTB_OFFSET (StatusRegister), "Status Register", 0}, + {ACPI_DMT_UINT32, ACPI_HESTB_OFFSET (AddressRegister), "Address Register", 0}, + {ACPI_DMT_UINT32, ACPI_HESTB_OFFSET (MiscRegister), "Misc Register", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * HMAT - Heterogeneous Memory Attributes Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat[] = +{ + {ACPI_DMT_UINT32, ACPI_HMAT_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Common HMAT structure header (one per Subtable) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHmatHdr[] = +{ + {ACPI_DMT_HMAT, ACPI_HMATH_OFFSET (Type), "Structure Type", 0}, + {ACPI_DMT_UINT16, ACPI_HMATH_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_HMATH_OFFSET (Length), "Length", 0}, + ACPI_DMT_TERMINATOR +}; + +/* HMAT subtables */ + +/* 0x00: Memory Subsystem Address Range */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat0[] = +{ + {ACPI_DMT_UINT16, ACPI_HMAT0_OFFSET (Flags), "Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_HMAT0_FLAG_OFFSET (Flags,0), "Processor Proximity Domain Valid", 0}, + {ACPI_DMT_FLAG1, ACPI_HMAT0_FLAG_OFFSET (Flags,0), "Memory Proximity Domain Valid", 0}, + {ACPI_DMT_FLAG2, ACPI_HMAT0_FLAG_OFFSET (Flags,0), "Reservation Hint", 0}, + {ACPI_DMT_UINT16, ACPI_HMAT0_OFFSET (Reserved1), "Reserved1", 0}, + {ACPI_DMT_UINT32, ACPI_HMAT0_OFFSET (ProcessorPD), "Processor Proximity Domain", 0}, + {ACPI_DMT_UINT32, ACPI_HMAT0_OFFSET (MemoryPD), "Memory Proximity Domain", 0}, + {ACPI_DMT_UINT32, ACPI_HMAT0_OFFSET (Reserved2), "Reserved2", 0}, + {ACPI_DMT_UINT64, ACPI_HMAT0_OFFSET (PhysicalAddressBase), "Physical Address Range Base", 0}, + {ACPI_DMT_UINT64, ACPI_HMAT0_OFFSET (PhysicalAddressLength), "Physical Address Range Size", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 0x01: System Locality Latency and Bandwidth Information */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1[] = +{ + {ACPI_DMT_UINT8, ACPI_HMAT1_OFFSET (Flags), "Flags (decoded below)", 0}, + {ACPI_DMT_FLAGS4_0, ACPI_HMAT1_FLAG_OFFSET (Flags,0), "Memory Hierarchy", 0}, + {ACPI_DMT_UINT8, ACPI_HMAT1_OFFSET (DataType), "Data Type", 0}, + {ACPI_DMT_UINT16, ACPI_HMAT1_OFFSET (Reserved1), "Reserved1", 0}, + {ACPI_DMT_UINT32, ACPI_HMAT1_OFFSET (NumberOfInitiatorPDs), "Initiator Proximity Domains #", 0}, + {ACPI_DMT_UINT32, ACPI_HMAT1_OFFSET (NumberOfTargetPDs), "Target Proximity Domains #", 0}, + {ACPI_DMT_UINT32, ACPI_HMAT1_OFFSET (Reserved2), "Reserved2", 0}, + {ACPI_DMT_UINT64, ACPI_HMAT1_OFFSET (EntryBaseUnit), "Entry Base Unit", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1a[] = +{ + {ACPI_DMT_UINT32, 0, "Initiator Proximity Domain List", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1b[] = +{ + {ACPI_DMT_UINT32, 0, "Target Proximity Domain List", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1c[] = +{ + {ACPI_DMT_UINT16, 0, "Entry", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + +/* 0x02: Memory Side Cache Information */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat2[] = +{ + {ACPI_DMT_UINT32, ACPI_HMAT2_OFFSET (MemoryPD), "Memory Proximity Domain", 0}, + {ACPI_DMT_UINT32, ACPI_HMAT2_OFFSET (Reserved1), "Reserved1", 0}, + {ACPI_DMT_UINT64, ACPI_HMAT2_OFFSET (CacheSize), "Memory Side Cache Size", 0}, + {ACPI_DMT_UINT32, ACPI_HMAT2_OFFSET (CacheAttributes), "Cache Attributes (decoded below)", 0}, + {ACPI_DMT_FLAGS4_0, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Total Cache Levels", 0}, + {ACPI_DMT_FLAGS4_4, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Cache Level", 0}, + {ACPI_DMT_FLAGS4_8, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Cache Associativity", 0}, + {ACPI_DMT_FLAGS4_12, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Write Policy", 0}, + {ACPI_DMT_FLAGS16_16, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Cache Line Size", 0}, + {ACPI_DMT_UINT16, ACPI_HMAT2_OFFSET (Reserved2), "Reserved2", 0}, + {ACPI_DMT_UINT16, ACPI_HMAT2_OFFSET (NumberOfSMBIOSHandles), "SMBIOS Handle #", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat2a[] = +{ + {ACPI_DMT_UINT16, 0, "SMBIOS Handle", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * HPET - High Precision Event Timer table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoHpet[] = +{ + {ACPI_DMT_UINT32, ACPI_HPET_OFFSET (Id), "Hardware Block ID", 0}, + {ACPI_DMT_GAS, ACPI_HPET_OFFSET (Address), "Timer Block Register", 0}, + {ACPI_DMT_UINT8, ACPI_HPET_OFFSET (Sequence), "Sequence Number", 0}, + {ACPI_DMT_UINT16, ACPI_HPET_OFFSET (MinimumTick), "Minimum Clock Ticks", 0}, + {ACPI_DMT_UINT8, ACPI_HPET_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_HPET_FLAG_OFFSET (Flags,0), "4K Page Protect", 0}, + {ACPI_DMT_FLAG1, ACPI_HPET_FLAG_OFFSET (Flags,0), "64K Page Protect", 0}, + ACPI_DMT_TERMINATOR +}; +/*! [End] no source code translation !*/ diff --git a/src/acpica/source/common/dmtbinfo2.c b/src/acpica/source/common/dmtbinfo2.c new file mode 100644 index 00000000..a925ac1f --- /dev/null +++ b/src/acpica/source/common/dmtbinfo2.c @@ -0,0 +1,1541 @@ +/****************************************************************************** + * + * Module Name: dmtbinfo2 - Table info for non-AML tables + * + *****************************************************************************/ + +/****************************************************************************** + * + * 1. Copyright Notice + * + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. + * All rights reserved. + * + * 2. License + * + * 2.1. This is your license from Intel Corp. under its intellectual property + * rights. You may have additional license terms from the party that provided + * you this software, covering your right to use that party's intellectual + * property rights. + * + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a + * copy of the source code appearing in this file ("Covered Code") an + * irrevocable, perpetual, worldwide license under Intel's copyrights in the + * base code distributed originally by Intel ("Original Intel Code") to copy, + * make derivatives, distribute, use and display any portion of the Covered + * Code in any form, with the right to sublicense such rights; and + * + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent + * license (with the right to sublicense), under only those claims of Intel + * patents that are infringed by the Original Intel Code, to make, use, sell, + * offer to sell, and import the Covered Code and derivative works thereof + * solely to the minimum extent necessary to exercise the above copyright + * license, and in no event shall the patent license extend to any additions + * to or modifications of the Original Intel Code. No other license or right + * is granted directly or by implication, estoppel or otherwise; + * + * The above copyright and patent license is granted only if the following + * conditions are met: + * + * 3. Conditions + * + * 3.1. Redistribution of Source with Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification with rights to further distribute source must include + * the above Copyright Notice, the above License, this list of Conditions, + * and the following Disclaimer and Export Compliance provision. In addition, + * Licensee must cause all Covered Code to which Licensee contributes to + * contain a file documenting the changes Licensee made to create that Covered + * Code and the date of any change. Licensee must include in that file the + * documentation of any changes made by any predecessor Licensee. Licensee + * must include a prominent statement that the modification is derived, + * directly or indirectly, from Original Intel Code. + * + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification without rights to further distribute source must + * include the following Disclaimer and Export Compliance provision in the + * documentation and/or other materials provided with distribution. In + * addition, Licensee may not authorize further sublicense of source of any + * portion of the Covered Code, and must include terms to the effect that the + * license from Licensee to its licensee is limited to the intellectual + * property embodied in the software Licensee provides to its licensee, and + * not to intellectual property embodied in modifications its licensee may + * make. + * + * 3.3. Redistribution of Executable. Redistribution in executable form of any + * substantial portion of the Covered Code or modification must reproduce the + * above Copyright Notice, and the following Disclaimer and Export Compliance + * provision in the documentation and/or other materials provided with the + * distribution. + * + * 3.4. Intel retains all right, title, and interest in and to the Original + * Intel Code. + * + * 3.5. Neither the name Intel nor any other trademark owned or controlled by + * Intel shall be used in advertising or otherwise to promote the sale, use or + * other dealings in products derived from or relating to the Covered Code + * without prior written authorization from Intel. + * + * 4. Disclaimer and Export Compliance + * + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A + * PARTICULAR PURPOSE. + * + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY + * LIMITED REMEDY. + * + * 4.3. Licensee shall not export, either directly or indirectly, any of this + * software or system incorporating such software without first obtaining any + * required license or other approval from the U. S. Department of Commerce or + * any other agency or department of the United States Government. In the + * event Licensee exports any such software from the United States or + * re-exports any such software from a foreign destination, Licensee shall + * ensure that the distribution and export/re-export of the software is in + * compliance with all laws, regulations, orders, or other restrictions of the + * U.S. Export Administration Regulations. Licensee agrees that neither it nor + * any of its subsidiaries will export/re-export any technical data, process, + * software, or service, directly or indirectly, to any country for which the + * United States government or any agency thereof requires an export license, + * other governmental approval, or letter of assurance, without first obtaining + * such license, approval or letter. + * + ***************************************************************************** + * + * Alternatively, you may choose to be licensed under the terms of the + * following license: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Alternatively, you may choose to be licensed under the terms of the + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. + * + *****************************************************************************/ + +#include "acpi.h" +#include "accommon.h" +#include "acdisasm.h" +#include "actbinfo.h" + +/* This module used for application-level code only */ + +#define _COMPONENT ACPI_CA_DISASSEMBLER + ACPI_MODULE_NAME ("dmtbinfo2") + +/* + * How to add a new table: + * + * - Add the C table definition to the actbl1.h or actbl2.h header. + * - Add ACPI_xxxx_OFFSET macro(s) for the table (and subtables) to list below. + * - Define the table in this file (for the disassembler). If any + * new data types are required (ACPI_DMT_*), see below. + * - Add an external declaration for the new table definition (AcpiDmTableInfo*) + * in acdisam.h + * - Add new table definition to the dispatch table in dmtable.c (AcpiDmTableData) + * If a simple table (with no subtables), no disassembly code is needed. + * Otherwise, create the AcpiDmDump* function for to disassemble the table + * and add it to the dmtbdump.c file. + * - Add an external declaration for the new AcpiDmDump* function in acdisasm.h + * - Add the new AcpiDmDump* function to the dispatch table in dmtable.c + * - Create a template for the new table + * - Add data table compiler support + * + * How to add a new data type (ACPI_DMT_*): + * + * - Add new type at the end of the ACPI_DMT list in acdisasm.h + * - Add length and implementation cases in dmtable.c (disassembler) + * - Add type and length cases in dtutils.c (DT compiler) + */ + +/* + * Remaining tables are not consumed directly by the ACPICA subsystem + */ + + +/******************************************************************************* + * + * IORT - IO Remapping Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIort[] = +{ + {ACPI_DMT_UINT32, ACPI_IORT_OFFSET (NodeCount), "Node Count", 0}, + {ACPI_DMT_UINT32, ACPI_IORT_OFFSET (NodeOffset), "Node Offset", 0}, + {ACPI_DMT_UINT32, ACPI_IORT_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Optional padding field */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIortPad[] = +{ + {ACPI_DMT_RAW_BUFFER, 0, "Optional Padding", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + +/* Common Subtable header (one per Subtable) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIortHdr[] = +{ + {ACPI_DMT_UINT8, ACPI_IORTH_OFFSET (Type), "Type", 0}, + {ACPI_DMT_UINT16, ACPI_IORTH_OFFSET (Length), "Length", DT_LENGTH}, + {ACPI_DMT_UINT8, ACPI_IORTH_OFFSET (Revision), "Revision", 0}, + {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (MappingCount), "Mapping Count", 0}, + {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (MappingOffset), "Mapping Offset", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoIortMap[] = +{ + {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (InputBase), "Input base", DT_OPTIONAL}, + {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (IdCount), "ID Count", 0}, + {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (OutputBase), "Output Base", 0}, + {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (OutputReference), "Output Reference", 0}, + {ACPI_DMT_UINT32, ACPI_IORTM_OFFSET (Flags), "Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_IORTM_FLAG_OFFSET (Flags, 0), "Single Mapping", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoIortAcc[] = +{ + {ACPI_DMT_UINT32, ACPI_IORTA_OFFSET (CacheCoherency), "Cache Coherency", 0}, + {ACPI_DMT_UINT8, ACPI_IORTA_OFFSET (Hints), "Hints (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_IORTA_FLAG_OFFSET (Hints, 0), "Transient", 0}, + {ACPI_DMT_FLAG1, ACPI_IORTA_FLAG_OFFSET (Hints, 0), "Write Allocate", 0}, + {ACPI_DMT_FLAG2, ACPI_IORTA_FLAG_OFFSET (Hints, 0), "Read Allocate", 0}, + {ACPI_DMT_FLAG3, ACPI_IORTA_FLAG_OFFSET (Hints, 0), "Override", 0}, + {ACPI_DMT_UINT16, ACPI_IORTA_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT8, ACPI_IORTA_OFFSET (MemoryFlags), "Memory Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_IORTA_FLAG_OFFSET (MemoryFlags, 0), "Coherency", 0}, + {ACPI_DMT_FLAG1, ACPI_IORTA_FLAG_OFFSET (MemoryFlags, 0), "Device Attribute", 0}, + ACPI_DMT_TERMINATOR +}; + +/* IORT subtables */ + +/* 0x00: ITS Group */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIort0[] = +{ + {ACPI_DMT_UINT32, ACPI_IORT0_OFFSET (ItsCount), "ItsCount", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoIort0a[] = +{ + {ACPI_DMT_UINT32, 0, "Identifiers", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + +/* 0x01: Named Component */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIort1[] = +{ + {ACPI_DMT_UINT32, ACPI_IORT1_OFFSET (NodeFlags), "Node Flags", 0}, + {ACPI_DMT_IORTMEM, ACPI_IORT1_OFFSET (MemoryProperties), "Memory Properties", 0}, + {ACPI_DMT_UINT8, ACPI_IORT1_OFFSET (MemoryAddressLimit), "Memory Size Limit", 0}, + {ACPI_DMT_STRING, ACPI_IORT1_OFFSET (DeviceName[0]), "Device Name", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoIort1a[] = +{ + {ACPI_DMT_RAW_BUFFER, 0, "Padding", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + +/* 0x02: PCI Root Complex */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIort2[] = +{ + {ACPI_DMT_IORTMEM, ACPI_IORT2_OFFSET (MemoryProperties), "Memory Properties", 0}, + {ACPI_DMT_UINT32, ACPI_IORT2_OFFSET (AtsAttribute), "ATS Attribute", 0}, + {ACPI_DMT_UINT32, ACPI_IORT2_OFFSET (PciSegmentNumber), "PCI Segment Number", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 0x03: SMMUv1/2 */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIort3[] = +{ + {ACPI_DMT_UINT64, ACPI_IORT3_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT64, ACPI_IORT3_OFFSET (Span), "Span", 0}, + {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (Model), "Model", 0}, + {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (Flags), "Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_IORT3_FLAG_OFFSET (Flags, 0), "DVM Supported", 0}, + {ACPI_DMT_FLAG1, ACPI_IORT3_FLAG_OFFSET (Flags, 0), "Coherent Walk", 0}, + {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (GlobalInterruptOffset), "Global Interrupt Offset", 0}, + {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (ContextInterruptCount), "Context Interrupt Count", 0}, + {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (ContextInterruptOffset), "Context Interrupt Offset", 0}, + {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (PmuInterruptCount), "PMU Interrupt Count", 0}, + {ACPI_DMT_UINT32, ACPI_IORT3_OFFSET (PmuInterruptOffset), "PMU Interrupt Offset", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoIort3a[] = +{ + {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgIrpt), "NSgIrpt", 0}, + {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgIrptFlags), "NSgIrpt Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_IORT3a_FLAG_OFFSET (NSgIrptFlags, 0), "Edge Triggered", 0}, + {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgCfgIrpt), "NSgCfgIrpt", 0}, + {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgCfgIrptFlags), "NSgCfgIrpt Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_IORT3a_FLAG_OFFSET (NSgCfgIrptFlags, 0), "Edge Triggered", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoIort3b[] = +{ + {ACPI_DMT_UINT64, 0, "Context Interrupt", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoIort3c[] = +{ + {ACPI_DMT_UINT64, 0, "PMU Interrupt", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + +/* 0x04: SMMUv3 */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIort4[] = +{ + {ACPI_DMT_UINT64, ACPI_IORT4_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (Flags), "Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_IORT4_FLAG_OFFSET (Flags, 0), "COHACC Override", 0}, + {ACPI_DMT_FLAG1, ACPI_IORT4_FLAG_OFFSET (Flags, 0), "HTTU Override", 0}, + {ACPI_DMT_FLAG3, ACPI_IORT4_FLAG_OFFSET (Flags, 0), "Proximity Domain Valid", 0}, + {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_IORT4_OFFSET (VatosAddress), "VATOS Address", 0}, + {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (Model), "Model", 0}, + {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (EventGsiv), "Event GSIV", 0}, + {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (PriGsiv), "PRI GSIV", 0}, + {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (GerrGsiv), "GERR GSIV", 0}, + {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (SyncGsiv), "Sync GSIV", 0}, + {ACPI_DMT_UINT8, ACPI_IORT4_OFFSET (Pxm), "Proximity Domain", 0}, + {ACPI_DMT_UINT8, ACPI_IORT4_OFFSET (Reserved1), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_IORT4_OFFSET (Reserved2), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_IORT4_OFFSET (IdMappingIndex), "Device ID Mapping Index", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * IVRS - I/O Virtualization Reporting Structure + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs[] = +{ + {ACPI_DMT_UINT32, ACPI_IVRS_OFFSET (Info), "Virtualization Info", 0}, + {ACPI_DMT_UINT64, ACPI_IVRS_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Common Subtable header (one per Subtable) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsHdr[] = +{ + {ACPI_DMT_IVRS, ACPI_IVRSH_OFFSET (Type), "Subtable Type", 0}, + {ACPI_DMT_UINT8, ACPI_IVRSH_OFFSET (Flags), "Flags", 0}, + {ACPI_DMT_UINT16, ACPI_IVRSH_OFFSET (Length), "Length", DT_LENGTH}, + {ACPI_DMT_UINT16, ACPI_IVRSH_OFFSET (DeviceId), "DeviceId", 0}, + ACPI_DMT_TERMINATOR +}; + +/* IVRS subtables */ + +/* 0x10: I/O Virtualization Hardware Definition (IVHD) Block */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs0[] = +{ + {ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (CapabilityOffset), "Capability Offset", 0}, + {ACPI_DMT_UINT64, ACPI_IVRS0_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (PciSegmentGroup), "PCI Segment Group", 0}, + {ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (Info), "Virtualization Info", 0}, + {ACPI_DMT_UINT32, ACPI_IVRS0_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition (IVMD) Block */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs1[] = +{ + {ACPI_DMT_UINT16, ACPI_IVRS1_OFFSET (AuxData), "Auxiliary Data", 0}, + {ACPI_DMT_UINT64, ACPI_IVRS1_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_IVRS1_OFFSET (StartAddress), "Start Address", 0}, + {ACPI_DMT_UINT64, ACPI_IVRS1_OFFSET (MemoryLength), "Memory Length", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Device entry header for IVHD block */ + +#define ACPI_DMT_IVRS_DE_HEADER \ + {ACPI_DMT_UINT8, ACPI_IVRSD_OFFSET (Type), "Entry Type", 0}, \ + {ACPI_DMT_UINT16, ACPI_IVRSD_OFFSET (Id), "Device ID", 0}, \ + {ACPI_DMT_UINT8, ACPI_IVRSD_OFFSET (DataSetting), "Data Setting", 0} + +/* 4-byte device entry */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs4[] = +{ + ACPI_DMT_IVRS_DE_HEADER, + {ACPI_DMT_EXIT, 0, NULL, 0}, +}; + +/* 8-byte device entry */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8a[] = +{ + ACPI_DMT_IVRS_DE_HEADER, + {ACPI_DMT_UINT8, ACPI_IVRS8A_OFFSET (Reserved1), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_IVRS8A_OFFSET (UsedId), "Source Used Device ID", 0}, + {ACPI_DMT_UINT8, ACPI_IVRS8A_OFFSET (Reserved2), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 8-byte device entry */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8b[] = +{ + ACPI_DMT_IVRS_DE_HEADER, + {ACPI_DMT_UINT32, ACPI_IVRS8B_OFFSET (ExtendedData), "Extended Data", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 8-byte device entry */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8c[] = +{ + ACPI_DMT_IVRS_DE_HEADER, + {ACPI_DMT_UINT8, ACPI_IVRS8C_OFFSET (Handle), "Handle", 0}, + {ACPI_DMT_UINT16, ACPI_IVRS8C_OFFSET (UsedId), "Source Used Device ID", 0}, + {ACPI_DMT_UINT8, ACPI_IVRS8C_OFFSET (Variety), "Variety", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * LPIT - Low Power Idle Table + * + ******************************************************************************/ + +/* Main table consists only of the standard ACPI table header */ + +/* Common Subtable header (one per Subtable) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoLpitHdr[] = +{ + {ACPI_DMT_LPIT, ACPI_LPITH_OFFSET (Type), "Subtable Type", 0}, + {ACPI_DMT_UINT32, ACPI_LPITH_OFFSET (Length), "Length", DT_LENGTH}, + {ACPI_DMT_UINT16, ACPI_LPITH_OFFSET (UniqueId), "Unique ID", 0}, + {ACPI_DMT_UINT16, ACPI_LPITH_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_LPITH_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_LPITH_FLAG_OFFSET (Flags, 0), "State Disabled", 0}, + {ACPI_DMT_FLAG1, ACPI_LPITH_FLAG_OFFSET (Flags, 0), "No Counter", 0}, + ACPI_DMT_TERMINATOR +}; + +/* LPIT Subtables */ + +/* 0: Native C-state */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoLpit0[] = +{ + {ACPI_DMT_GAS, ACPI_LPIT0_OFFSET (EntryTrigger), "Entry Trigger", 0}, + {ACPI_DMT_UINT32, ACPI_LPIT0_OFFSET (Residency), "Residency", 0}, + {ACPI_DMT_UINT32, ACPI_LPIT0_OFFSET (Latency), "Latency", 0}, + {ACPI_DMT_GAS, ACPI_LPIT0_OFFSET (ResidencyCounter), "Residency Counter", 0}, + {ACPI_DMT_UINT64, ACPI_LPIT0_OFFSET (CounterFrequency), "Counter Frequency", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * MADT - Multiple APIC Description Table and subtables + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt[] = +{ + {ACPI_DMT_UINT32, ACPI_MADT_OFFSET (Address), "Local Apic Address", 0}, + {ACPI_DMT_UINT32, ACPI_MADT_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_MADT_FLAG_OFFSET (Flags,0), "PC-AT Compatibility", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Common Subtable header (one per Subtable) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadtHdr[] = +{ + {ACPI_DMT_MADT, ACPI_MADTH_OFFSET (Type), "Subtable Type", 0}, + {ACPI_DMT_UINT8, ACPI_MADTH_OFFSET (Length), "Length", DT_LENGTH}, + ACPI_DMT_TERMINATOR +}; + +/* MADT Subtables */ + +/* 0: processor APIC */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt0[] = +{ + {ACPI_DMT_UINT8, ACPI_MADT0_OFFSET (ProcessorId), "Processor ID", 0}, + {ACPI_DMT_UINT8, ACPI_MADT0_OFFSET (Id), "Local Apic ID", 0}, + {ACPI_DMT_UINT32, ACPI_MADT0_OFFSET (LapicFlags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_MADT0_FLAG_OFFSET (LapicFlags,0), "Processor Enabled", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 1: IO APIC */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt1[] = +{ + {ACPI_DMT_UINT8, ACPI_MADT1_OFFSET (Id), "I/O Apic ID", 0}, + {ACPI_DMT_UINT8, ACPI_MADT1_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_MADT1_OFFSET (Address), "Address", 0}, + {ACPI_DMT_UINT32, ACPI_MADT1_OFFSET (GlobalIrqBase), "Interrupt", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 2: Interrupt Override */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt2[] = +{ + {ACPI_DMT_UINT8, ACPI_MADT2_OFFSET (Bus), "Bus", 0}, + {ACPI_DMT_UINT8, ACPI_MADT2_OFFSET (SourceIrq), "Source", 0}, + {ACPI_DMT_UINT32, ACPI_MADT2_OFFSET (GlobalIrq), "Interrupt", 0}, + {ACPI_DMT_UINT16, ACPI_MADT2_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAGS0, ACPI_MADT2_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, + {ACPI_DMT_FLAGS2, ACPI_MADT2_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 3: NMI Sources */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt3[] = +{ + {ACPI_DMT_UINT16, ACPI_MADT3_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAGS0, ACPI_MADT3_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, + {ACPI_DMT_FLAGS2, ACPI_MADT3_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, + {ACPI_DMT_UINT32, ACPI_MADT3_OFFSET (GlobalIrq), "Interrupt", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 4: Local APIC NMI */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt4[] = +{ + {ACPI_DMT_UINT8, ACPI_MADT4_OFFSET (ProcessorId), "Processor ID", 0}, + {ACPI_DMT_UINT16, ACPI_MADT4_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAGS0, ACPI_MADT4_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, + {ACPI_DMT_FLAGS2, ACPI_MADT4_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, + {ACPI_DMT_UINT8, ACPI_MADT4_OFFSET (Lint), "Interrupt Input LINT", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 5: Address Override */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt5[] = +{ + {ACPI_DMT_UINT16, ACPI_MADT5_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_MADT5_OFFSET (Address), "APIC Address", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 6: I/O Sapic */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt6[] = +{ + {ACPI_DMT_UINT8, ACPI_MADT6_OFFSET (Id), "I/O Sapic ID", 0}, + {ACPI_DMT_UINT8, ACPI_MADT6_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_MADT6_OFFSET (GlobalIrqBase), "Interrupt Base", 0}, + {ACPI_DMT_UINT64, ACPI_MADT6_OFFSET (Address), "Address", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 7: Local Sapic */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt7[] = +{ + {ACPI_DMT_UINT8, ACPI_MADT7_OFFSET (ProcessorId), "Processor ID", 0}, + {ACPI_DMT_UINT8, ACPI_MADT7_OFFSET (Id), "Local Sapic ID", 0}, + {ACPI_DMT_UINT8, ACPI_MADT7_OFFSET (Eid), "Local Sapic EID", 0}, + {ACPI_DMT_UINT24, ACPI_MADT7_OFFSET (Reserved[0]), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_MADT7_OFFSET (LapicFlags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_MADT7_FLAG_OFFSET (LapicFlags,0), "Processor Enabled", 0}, + {ACPI_DMT_UINT32, ACPI_MADT7_OFFSET (Uid), "Processor UID", 0}, + {ACPI_DMT_STRING, ACPI_MADT7_OFFSET (UidString[0]), "Processor UID String", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 8: Platform Interrupt Source */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt8[] = +{ + {ACPI_DMT_UINT16, ACPI_MADT8_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAGS0, ACPI_MADT8_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, + {ACPI_DMT_FLAGS2, ACPI_MADT8_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, + {ACPI_DMT_UINT8, ACPI_MADT8_OFFSET (Type), "InterruptType", 0}, + {ACPI_DMT_UINT8, ACPI_MADT8_OFFSET (Id), "Processor ID", 0}, + {ACPI_DMT_UINT8, ACPI_MADT8_OFFSET (Eid), "Processor EID", 0}, + {ACPI_DMT_UINT8, ACPI_MADT8_OFFSET (IoSapicVector), "I/O Sapic Vector", 0}, + {ACPI_DMT_UINT32, ACPI_MADT8_OFFSET (GlobalIrq), "Interrupt", 0}, + {ACPI_DMT_UINT32, ACPI_MADT8_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_MADT8_OFFSET (Flags), "CPEI Override", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 9: Processor Local X2_APIC (ACPI 4.0) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt9[] = +{ + {ACPI_DMT_UINT16, ACPI_MADT9_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_MADT9_OFFSET (LocalApicId), "Processor x2Apic ID", 0}, + {ACPI_DMT_UINT32, ACPI_MADT9_OFFSET (LapicFlags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_MADT9_FLAG_OFFSET (LapicFlags,0), "Processor Enabled", 0}, + {ACPI_DMT_UINT32, ACPI_MADT9_OFFSET (Uid), "Processor UID", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 10: Local X2_APIC NMI (ACPI 4.0) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt10[] = +{ + {ACPI_DMT_UINT16, ACPI_MADT10_OFFSET (IntiFlags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAGS0, ACPI_MADT10_FLAG_OFFSET (IntiFlags,0), "Polarity", 0}, + {ACPI_DMT_FLAGS2, ACPI_MADT10_FLAG_OFFSET (IntiFlags,0), "Trigger Mode", 0}, + {ACPI_DMT_UINT32, ACPI_MADT10_OFFSET (Uid), "Processor UID", 0}, + {ACPI_DMT_UINT8, ACPI_MADT10_OFFSET (Lint), "Interrupt Input LINT", 0}, + {ACPI_DMT_UINT24, ACPI_MADT10_OFFSET (Reserved[0]), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 11: Generic Interrupt Controller (ACPI 5.0) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt11[] = +{ + {ACPI_DMT_UINT16, ACPI_MADT11_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (CpuInterfaceNumber), "CPU Interface Number", 0}, + {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (Uid), "Processor UID", 0}, + {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Processor Enabled", 0}, + {ACPI_DMT_FLAG1, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Performance Interrupt Trigger Mode", 0}, + {ACPI_DMT_FLAG2, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Virtual GIC Interrupt Trigger Mode", 0}, + {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (ParkingVersion), "Parking Protocol Version", 0}, + {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (PerformanceInterrupt), "Performance Interrupt", 0}, + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (ParkedAddress), "Parked Address", 0}, + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GicvBaseAddress), "Virtual GIC Base Address", 0}, + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GichBaseAddress), "Hypervisor GIC Base Address", 0}, + {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (VgicInterrupt), "Virtual GIC Interrupt", 0}, + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GicrBaseAddress), "Redistributor Base Address", 0}, + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (ArmMpidr), "ARM MPIDR", 0}, + {ACPI_DMT_UINT8, ACPI_MADT11_OFFSET (EfficiencyClass), "Efficiency Class", 0}, + {ACPI_DMT_UINT24, ACPI_MADT11_OFFSET (Reserved2[0]), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 12: Generic Interrupt Distributor (ACPI 5.0) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt12[] = +{ + {ACPI_DMT_UINT16, ACPI_MADT12_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_MADT12_OFFSET (GicId), "Local GIC Hardware ID", 0}, + {ACPI_DMT_UINT64, ACPI_MADT12_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT32, ACPI_MADT12_OFFSET (GlobalIrqBase), "Interrupt Base", 0}, + {ACPI_DMT_UINT8, ACPI_MADT12_OFFSET (Version), "Version", 0}, + {ACPI_DMT_UINT24, ACPI_MADT12_OFFSET (Reserved2[0]), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 13: Generic MSI Frame (ACPI 5.1) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt13[] = +{ + {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_MADT13_OFFSET (MsiFrameId), "MSI Frame ID", 0}, + {ACPI_DMT_UINT64, ACPI_MADT13_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT32, ACPI_MADT13_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_MADT13_FLAG_OFFSET (Flags,0), "Select SPI", 0}, + {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (SpiCount), "SPI Count", 0}, + {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (SpiBase), "SPI Base", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 14: Generic Redistributor (ACPI 5.1) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt14[] = +{ + {ACPI_DMT_UINT16, ACPI_MADT14_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_MADT14_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT32, ACPI_MADT14_OFFSET (Length), "Length", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 15: Generic Translator (ACPI 6.0) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt15[] = +{ + {ACPI_DMT_UINT16, ACPI_MADT15_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_MADT15_OFFSET (TranslationId), "Translation ID", 0}, + {ACPI_DMT_UINT64, ACPI_MADT15_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT32, ACPI_MADT15_OFFSET (Reserved2), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * MCFG - PCI Memory Mapped Configuration table and Subtable + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMcfg[] = +{ + {ACPI_DMT_UINT64, ACPI_MCFG_OFFSET (Reserved[0]), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoMcfg0[] = +{ + {ACPI_DMT_UINT64, ACPI_MCFG0_OFFSET (Address), "Base Address", 0}, + {ACPI_DMT_UINT16, ACPI_MCFG0_OFFSET (PciSegment), "Segment Group Number", 0}, + {ACPI_DMT_UINT8, ACPI_MCFG0_OFFSET (StartBusNumber), "Start Bus Number", 0}, + {ACPI_DMT_UINT8, ACPI_MCFG0_OFFSET (EndBusNumber), "End Bus Number", 0}, + {ACPI_DMT_UINT32, ACPI_MCFG0_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * MCHI - Management Controller Host Interface table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMchi[] = +{ + {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (InterfaceType), "Interface Type", 0}, + {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (Protocol), "Protocol", 0}, + {ACPI_DMT_UINT64, ACPI_MCHI_OFFSET (ProtocolData), "Protocol Data", 0}, + {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (InterruptType), "Interrupt Type", 0}, + {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (Gpe), "Gpe", 0}, + {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciDeviceFlag), "Pci Device Flag", 0}, + {ACPI_DMT_UINT32, ACPI_MCHI_OFFSET (GlobalInterrupt), "Global Interrupt", 0}, + {ACPI_DMT_GAS, ACPI_MCHI_OFFSET (ControlRegister), "Control Register", 0}, + {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciSegment), "Pci Segment", 0}, + {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciBus), "Pci Bus", 0}, + {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciDevice), "Pci Device", 0}, + {ACPI_DMT_UINT8, ACPI_MCHI_OFFSET (PciFunction), "Pci Function", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * MPST - Memory Power State Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMpst[] = +{ + {ACPI_DMT_UINT8, ACPI_MPST_OFFSET (ChannelId), "Channel ID", 0}, + {ACPI_DMT_UINT24, ACPI_MPST_OFFSET (Reserved1[0]), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_MPST_OFFSET (PowerNodeCount), "Power Node Count", 0}, + {ACPI_DMT_UINT16, ACPI_MPST_OFFSET (Reserved2), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* MPST subtables */ + +/* 0: Memory Power Node Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMpst0[] = +{ + {ACPI_DMT_UINT8, ACPI_MPST0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_MPST0_FLAG_OFFSET (Flags,0), "Node Enabled", 0}, + {ACPI_DMT_FLAG1, ACPI_MPST0_FLAG_OFFSET (Flags,0), "Power Managed", 0}, + {ACPI_DMT_FLAG2, ACPI_MPST0_FLAG_OFFSET (Flags,0), "Hot Plug Capable", 0}, + + {ACPI_DMT_UINT8, ACPI_MPST0_OFFSET (Reserved1), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_MPST0_OFFSET (NodeId), "Node ID", 0}, + {ACPI_DMT_UINT32, ACPI_MPST0_OFFSET (Length), "Length", 0}, + {ACPI_DMT_UINT64, ACPI_MPST0_OFFSET (RangeAddress), "Range Address", 0}, + {ACPI_DMT_UINT64, ACPI_MPST0_OFFSET (RangeLength), "Range Length", 0}, + {ACPI_DMT_UINT32, ACPI_MPST0_OFFSET (NumPowerStates), "Num Power States", 0}, + {ACPI_DMT_UINT32, ACPI_MPST0_OFFSET (NumPhysicalComponents), "Num Physical Components", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 0A: Sub-subtable - Memory Power State Structure (follows Memory Power Node above) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMpst0A[] = +{ + {ACPI_DMT_UINT8, ACPI_MPST0A_OFFSET (PowerState), "Power State", 0}, + {ACPI_DMT_UINT8, ACPI_MPST0A_OFFSET (InfoIndex), "InfoIndex", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 0B: Sub-subtable - Physical Component ID Structure (follows Memory Power State(s) above) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMpst0B[] = +{ + {ACPI_DMT_UINT16, ACPI_MPST0B_OFFSET (ComponentId), "Component Id", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 01: Power Characteristics Count (follows all Power Node(s) above) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMpst1[] = +{ + {ACPI_DMT_UINT16, ACPI_MPST1_OFFSET (CharacteristicsCount), "Characteristics Count", 0}, + {ACPI_DMT_UINT16, ACPI_MPST1_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 02: Memory Power State Characteristics Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMpst2[] = +{ + {ACPI_DMT_UINT8, ACPI_MPST2_OFFSET (StructureId), "Structure ID", 0}, + {ACPI_DMT_UINT8, ACPI_MPST2_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_MPST2_FLAG_OFFSET (Flags,0), "Memory Preserved", 0}, + {ACPI_DMT_FLAG1, ACPI_MPST2_FLAG_OFFSET (Flags,0), "Auto Entry", 0}, + {ACPI_DMT_FLAG2, ACPI_MPST2_FLAG_OFFSET (Flags,0), "Auto Exit", 0}, + + {ACPI_DMT_UINT16, ACPI_MPST2_OFFSET (Reserved1), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_MPST2_OFFSET (AveragePower), "Average Power", 0}, + {ACPI_DMT_UINT32, ACPI_MPST2_OFFSET (PowerSaving), "Power Saving", 0}, + {ACPI_DMT_UINT64, ACPI_MPST2_OFFSET (ExitLatency), "Exit Latency", 0}, + {ACPI_DMT_UINT64, ACPI_MPST2_OFFSET (Reserved2), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * MSCT - Maximum System Characteristics Table (ACPI 4.0) + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMsct[] = +{ + {ACPI_DMT_UINT32, ACPI_MSCT_OFFSET (ProximityOffset), "Proximity Offset", 0}, + {ACPI_DMT_UINT32, ACPI_MSCT_OFFSET (MaxProximityDomains), "Max Proximity Domains", 0}, + {ACPI_DMT_UINT32, ACPI_MSCT_OFFSET (MaxClockDomains), "Max Clock Domains", 0}, + {ACPI_DMT_UINT64, ACPI_MSCT_OFFSET (MaxAddress), "Max Physical Address", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Subtable - Maximum Proximity Domain Information. Version 1 */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMsct0[] = +{ + {ACPI_DMT_UINT8, ACPI_MSCT0_OFFSET (Revision), "Revision", 0}, + {ACPI_DMT_UINT8, ACPI_MSCT0_OFFSET (Length), "Length", DT_LENGTH}, + {ACPI_DMT_UINT32, ACPI_MSCT0_OFFSET (RangeStart), "Domain Range Start", 0}, + {ACPI_DMT_UINT32, ACPI_MSCT0_OFFSET (RangeEnd), "Domain Range End", 0}, + {ACPI_DMT_UINT32, ACPI_MSCT0_OFFSET (ProcessorCapacity), "Processor Capacity", 0}, + {ACPI_DMT_UINT64, ACPI_MSCT0_OFFSET (MemoryCapacity), "Memory Capacity", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * MTMR - MID Timer Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMtmr[] = +{ + ACPI_DMT_TERMINATOR +}; + +/* MTMR Subtables - MTMR Entry */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMtmr0[] = +{ + {ACPI_DMT_GAS, ACPI_MTMR0_OFFSET (PhysicalAddress), "PhysicalAddress", 0}, + {ACPI_DMT_UINT32, ACPI_MTMR0_OFFSET (Frequency), "Frequency", 0}, + {ACPI_DMT_UINT32, ACPI_MTMR0_OFFSET (Irq), "IRQ", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * NFIT - NVDIMM Firmware Interface Table and Subtables - (ACPI 6.0) + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit[] = +{ + {ACPI_DMT_UINT32, ACPI_NFIT_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Common Subtable header */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNfitHdr[] = +{ + {ACPI_DMT_NFIT, ACPI_NFITH_OFFSET (Type), "Subtable Type", 0}, + {ACPI_DMT_UINT16, ACPI_NFITH_OFFSET (Length), "Length", DT_LENGTH}, + ACPI_DMT_TERMINATOR +}; + +/* 0: System Physical Address Range Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit0[] = +{ + {ACPI_DMT_UINT16, ACPI_NFIT0_OFFSET (RangeIndex), "Range Index", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_NFIT0_FLAG_OFFSET (Flags,0), "Add/Online Operation Only", 0}, + {ACPI_DMT_FLAG1, ACPI_NFIT0_FLAG_OFFSET (Flags,0), "Proximity Domain Valid", 0}, + {ACPI_DMT_UINT32, ACPI_NFIT0_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_NFIT0_OFFSET (ProximityDomain), "Proximity Domain", 0}, + {ACPI_DMT_UUID, ACPI_NFIT0_OFFSET (RangeGuid[0]), "Address Range GUID", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT0_OFFSET (Address), "Address Range Base", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT0_OFFSET (Length), "Address Range Length", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT0_OFFSET (MemoryMapping), "Memory Map Attribute", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 1: Memory Device to System Address Range Map Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit1[] = +{ + {ACPI_DMT_UINT32, ACPI_NFIT1_OFFSET (DeviceHandle), "Device Handle", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (PhysicalId), "Physical Id", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (RegionId), "Region Id", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (RangeIndex), "Range Index", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (RegionIndex), "Control Region Index", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT1_OFFSET (RegionSize), "Region Size", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT1_OFFSET (RegionOffset), "Region Offset", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT1_OFFSET (Address), "Address Region Base", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (InterleaveIndex), "Interleave Index", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (InterleaveWays), "Interleave Ways", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (Flags), "Flags", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Save to device failed", 0}, + {ACPI_DMT_FLAG1, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Restore from device failed", 0}, + {ACPI_DMT_FLAG2, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Platform flush failed", 0}, + {ACPI_DMT_FLAG3, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Device not armed", 0}, + {ACPI_DMT_FLAG4, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Health events observed", 0}, + {ACPI_DMT_FLAG5, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Health events enabled", 0}, + {ACPI_DMT_FLAG6, ACPI_NFIT1_FLAG_OFFSET (Flags,0), "Mapping failed", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT1_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 2: Interleave Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit2[] = +{ + {ACPI_DMT_UINT16, ACPI_NFIT2_OFFSET (InterleaveIndex), "Interleave Index", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT2_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_NFIT2_OFFSET (LineCount), "Line Count", 0}, + {ACPI_DMT_UINT32, ACPI_NFIT2_OFFSET (LineSize), "Line Size", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit2a[] = +{ + {ACPI_DMT_UINT32, 0, "Line Offset", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + +/* 3: SMBIOS Management Information Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit3[] = +{ + {ACPI_DMT_UINT32, ACPI_NFIT3_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit3a[] = +{ + {ACPI_DMT_RAW_BUFFER, 0, "SMBIOS Table Entries", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + +/* 4: NVDIMM Control Region Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit4[] = +{ + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (RegionIndex), "Region Index", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (VendorId), "Vendor Id", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (DeviceId), "Device Id", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (RevisionId), "Revision Id", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (SubsystemVendorId), "Subsystem Vendor Id", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (SubsystemDeviceId), "Subsystem Device Id", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (SubsystemRevisionId), "Subsystem Revision Id", 0}, + {ACPI_DMT_UINT8, ACPI_NFIT4_OFFSET (ValidFields), "Valid Fields", 0}, + {ACPI_DMT_UINT8, ACPI_NFIT4_OFFSET (ManufacturingLocation), "Manufacturing Location", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (ManufacturingDate), "Manufacturing Date", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Reserved[0]), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_NFIT4_OFFSET (SerialNumber), "Serial Number", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Code), "Code", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Windows), "Window Count", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (WindowSize), "Window Size", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (CommandOffset), "Command Offset", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (CommandSize), "Command Size", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (StatusOffset), "Status Offset", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT4_OFFSET (StatusSize), "Status Size", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT4_OFFSET (Flags), "Flags", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_NFIT4_FLAG_OFFSET (Flags,0), "Windows buffered", 0}, + {ACPI_DMT_UINT48, ACPI_NFIT4_OFFSET (Reserved1[0]), "Reserved1", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 5: NVDIMM Block Data Window Region Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit5[] = +{ + {ACPI_DMT_UINT16, ACPI_NFIT5_OFFSET (RegionIndex), "Region Index", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT5_OFFSET (Windows), "Window Count", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT5_OFFSET (Offset), "Offset", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT5_OFFSET (Size), "Size", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT5_OFFSET (Capacity), "Capacity", 0}, + {ACPI_DMT_UINT64, ACPI_NFIT5_OFFSET (StartAddress), "Start Address", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 6: Flush Hint Address Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit6[] = +{ + {ACPI_DMT_UINT32, ACPI_NFIT6_OFFSET (DeviceHandle), "Device Handle", 0}, + {ACPI_DMT_UINT16, ACPI_NFIT6_OFFSET (HintCount), "Hint Count", 0}, + {ACPI_DMT_UINT48, ACPI_NFIT6_OFFSET (Reserved[0]), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit6a[] = +{ + {ACPI_DMT_UINT64, 0, "Hint Address", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoNfit7[] = +{ + {ACPI_DMT_UINT8, ACPI_NFIT7_OFFSET (HighestCapability), "Highest Capability", 0}, + {ACPI_DMT_UINT24, ACPI_NFIT7_OFFSET (Reserved[0]), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_NFIT7_OFFSET (Capabilities), "Capabilities (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_NFIT7_FLAG_OFFSET (Capabilities,0), "Cache Flush to NVDIMM", 0}, + {ACPI_DMT_FLAG1, ACPI_NFIT7_FLAG_OFFSET (Capabilities,0), "Memory Flush to MVDIMM", 0}, + {ACPI_DMT_FLAG2, ACPI_NFIT7_FLAG_OFFSET (Capabilities,0), "Memory Mirroring", 0}, + {ACPI_DMT_UINT32, ACPI_NFIT7_OFFSET (Reserved2), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * PCCT - Platform Communications Channel Table (ACPI 5.0) + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPcct[] = +{ + {ACPI_DMT_UINT32, ACPI_PCCT_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_PCCT_FLAG_OFFSET (Flags,0), "Platform", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* PCCT subtables */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPcctHdr[] = +{ + {ACPI_DMT_PCCT, ACPI_PCCT0_OFFSET (Header.Type), "Subtable Type", 0}, + {ACPI_DMT_UINT8, ACPI_PCCT0_OFFSET (Header.Length), "Length", DT_LENGTH}, + ACPI_DMT_TERMINATOR +}; + +/* 0: Generic Communications Subspace */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPcct0[] = +{ + {ACPI_DMT_UINT48, ACPI_PCCT0_OFFSET (Reserved[0]), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT0_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT0_OFFSET (Length), "Address Length", 0}, + {ACPI_DMT_GAS, ACPI_PCCT0_OFFSET (DoorbellRegister), "Doorbell Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT0_OFFSET (PreserveMask), "Preserve Mask", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT0_OFFSET (WriteMask), "Write Mask", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT0_OFFSET (Latency), "Command Latency", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT0_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, + {ACPI_DMT_UINT16, ACPI_PCCT0_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 1: HW-reduced Communications Subspace (ACPI 5.1) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPcct1[] = +{ + {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (PlatformInterrupt), "Platform Interrupt", 0}, + {ACPI_DMT_UINT8, ACPI_PCCT1_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_PCCT1_FLAG_OFFSET (Flags,0), "Polarity", 0}, + {ACPI_DMT_FLAG1, ACPI_PCCT1_FLAG_OFFSET (Flags,0), "Mode", 0}, + {ACPI_DMT_UINT8, ACPI_PCCT1_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (Length), "Address Length", 0}, + {ACPI_DMT_GAS, ACPI_PCCT1_OFFSET (DoorbellRegister), "Doorbell Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (PreserveMask), "Preserve Mask", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (WriteMask), "Write Mask", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (Latency), "Command Latency", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, + {ACPI_DMT_UINT16, ACPI_PCCT1_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPcct2[] = +{ + {ACPI_DMT_UINT32, ACPI_PCCT2_OFFSET (PlatformInterrupt), "Platform Interrupt", 0}, + {ACPI_DMT_UINT8, ACPI_PCCT2_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_PCCT2_FLAG_OFFSET (Flags,0), "Polarity", 0}, + {ACPI_DMT_FLAG1, ACPI_PCCT2_FLAG_OFFSET (Flags,0), "Mode", 0}, + {ACPI_DMT_UINT8, ACPI_PCCT2_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (Length), "Address Length", 0}, + {ACPI_DMT_GAS, ACPI_PCCT2_OFFSET (DoorbellRegister), "Doorbell Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (PreserveMask), "Preserve Mask", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (WriteMask), "Write Mask", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT2_OFFSET (Latency), "Command Latency", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT2_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, + {ACPI_DMT_UINT16, ACPI_PCCT2_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, + {ACPI_DMT_GAS, ACPI_PCCT2_OFFSET (PlatformAckRegister), "Platform ACK Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (AckPreserveMask), "ACK Preserve Mask", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (AckWriteMask), "ACK Write Mask", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPcct3[] = +{ + {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (PlatformInterrupt), "Platform Interrupt", 0}, + {ACPI_DMT_UINT8, ACPI_PCCT3_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_PCCT3_FLAG_OFFSET (Flags,0), "Polarity", 0}, + {ACPI_DMT_FLAG1, ACPI_PCCT3_FLAG_OFFSET (Flags,0), "Mode", 0}, + {ACPI_DMT_UINT8, ACPI_PCCT3_OFFSET (Reserved1), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (Length), "Address Length", 0}, + {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (DoorbellRegister), "Doorbell Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (PreserveMask), "Preserve Mask", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (WriteMask), "Write Mask", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (Latency), "Command Latency", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, + {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (PlatformAckRegister), "Platform ACK Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (AckPreserveMask), "ACK Preserve Mask", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (AckSetMask), "ACK Set Mask", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (Reserved2), "Reserved", 0}, + {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (CmdCompleteRegister), "Command Complete Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (CmdCompleteMask), "Command Complete Check Mask", 0}, + {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (CmdUpdateRegister), "Command Update Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (CmdUpdatePreserveMask), "Command Update Preserve Mask", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (CmdUpdateSetMask), "Command Update Set Mask", 0}, + {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (ErrorStatusRegister), "Error Status Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (ErrorStatusMask), "Error Status Mask", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPcct4[] = +{ + {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (PlatformInterrupt), "Platform Interrupt", 0}, + {ACPI_DMT_UINT8, ACPI_PCCT4_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_PCCT4_FLAG_OFFSET (Flags,0), "Polarity", 0}, + {ACPI_DMT_FLAG1, ACPI_PCCT4_FLAG_OFFSET (Flags,0), "Mode", 0}, + {ACPI_DMT_UINT8, ACPI_PCCT4_OFFSET (Reserved1), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (Length), "Address Length", 0}, + {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (DoorbellRegister), "Doorbell Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (PreserveMask), "Preserve Mask", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (WriteMask), "Write Mask", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (Latency), "Command Latency", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, + {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (PlatformAckRegister), "Platform ACK Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (AckPreserveMask), "ACK Preserve Mask", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (AckSetMask), "ACK Set Mask", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (Reserved2), "Reserved", 0}, + {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (CmdCompleteRegister), "Command Complete Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (CmdCompleteMask), "Command Complete Check Mask", 0}, + {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (CmdUpdateRegister), "Command Update Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (CmdUpdatePreserveMask), "Command Update Preserve Mask", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (CmdUpdateSetMask), "Command Update Set Mask", 0}, + {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (ErrorStatusRegister), "Error Status Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (ErrorStatusMask), "Error Status Mask", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * PDTT - Platform Debug Trigger Table (ACPI 6.2) + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPdtt[] = +{ + {ACPI_DMT_UINT8, ACPI_PDTT_OFFSET (TriggerCount), "Trigger Count", 0}, + {ACPI_DMT_UINT24, ACPI_PDTT_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_PDTT_OFFSET (ArrayOffset), "Array Offset", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoPdtt0[] = +{ + {ACPI_DMT_UINT8, ACPI_PDTT0_OFFSET (SubchannelId), "Subchannel Id", 0}, + {ACPI_DMT_UINT8, ACPI_PDTT0_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_PDTT0_FLAG_OFFSET (Flags,0), "Runtime Trigger", 0}, + {ACPI_DMT_FLAG1, ACPI_PDTT0_FLAG_OFFSET (Flags,0), "Wait for Completion", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * PMTT - Platform Memory Topology Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt[] = +{ + {ACPI_DMT_UINT32, ACPI_PMTT_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Common Subtable header (one per Subtable) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPmttHdr[] = +{ + {ACPI_DMT_PMTT, ACPI_PMTTH_OFFSET (Type), "Subtable Type", 0}, + {ACPI_DMT_UINT8, ACPI_PMTTH_OFFSET (Reserved1), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_PMTTH_OFFSET (Length), "Length", DT_LENGTH}, + {ACPI_DMT_UINT16, ACPI_PMTTH_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_PMTTH_FLAG_OFFSET (Flags,0), "Top-level Device", 0}, + {ACPI_DMT_FLAG1, ACPI_PMTTH_FLAG_OFFSET (Flags,0), "Physical Element", 0}, + {ACPI_DMT_FLAGS2, ACPI_PMTTH_FLAG_OFFSET (Flags,0), "Memory Type", 0}, + {ACPI_DMT_UINT16, ACPI_PMTTH_OFFSET (Reserved2), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* PMTT Subtables */ + +/* 0: Socket */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt0[] = +{ + {ACPI_DMT_UINT16, ACPI_PMTT0_OFFSET (SocketId), "Socket ID", 0}, + {ACPI_DMT_UINT16, ACPI_PMTT0_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 1: Memory Controller */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt1[] = +{ + {ACPI_DMT_UINT32, ACPI_PMTT1_OFFSET (ReadLatency), "Read Latency", 0}, + {ACPI_DMT_UINT32, ACPI_PMTT1_OFFSET (WriteLatency), "Write Latency", 0}, + {ACPI_DMT_UINT32, ACPI_PMTT1_OFFSET (ReadBandwidth), "Read Bandwidth", 0}, + {ACPI_DMT_UINT32, ACPI_PMTT1_OFFSET (WriteBandwidth), "Write Bandwidth", 0}, + {ACPI_DMT_UINT16, ACPI_PMTT1_OFFSET (AccessWidth), "Access Width", 0}, + {ACPI_DMT_UINT16, ACPI_PMTT1_OFFSET (Alignment), "Alignment", 0}, + {ACPI_DMT_UINT16, ACPI_PMTT1_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_PMTT1_OFFSET (DomainCount), "Domain Count", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 1a: Proximity Domain */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt1a[] = +{ + {ACPI_DMT_UINT32, ACPI_PMTT1A_OFFSET (ProximityDomain), "Proximity Domain", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 2: Physical Component */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt2[] = +{ + {ACPI_DMT_UINT16, ACPI_PMTT2_OFFSET (ComponentId), "Component ID", 0}, + {ACPI_DMT_UINT16, ACPI_PMTT2_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_PMTT2_OFFSET (MemorySize), "Memory Size", 0}, + {ACPI_DMT_UINT32, ACPI_PMTT2_OFFSET (BiosHandle), "Bios Handle", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * PPTT - Processor Properties Topology Table (ACPI 6.2) + * + ******************************************************************************/ + +/* Main table consists of only the standard ACPI header - subtables follow */ + +/* Common Subtable header (one per Subtable) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPpttHdr[] = +{ + {ACPI_DMT_PPTT, ACPI_PPTTH_OFFSET (Type), "Subtable Type", 0}, + {ACPI_DMT_UINT8, ACPI_PPTTH_OFFSET (Length), "Length", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 0: Processor hierarchy node */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0[] = +{ + {ACPI_DMT_UINT16, ACPI_PPTT0_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (Flags), "Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_PPTT0_FLAG_OFFSET (Flags,0), "Physical package", 0}, + {ACPI_DMT_FLAG1, ACPI_PPTT0_FLAG_OFFSET (Flags,0), "ACPI Processor ID valid", 0}, + {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (Parent), "Parent", 0}, + {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (AcpiProcessorId), "ACPI Processor ID", 0}, + {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (NumberOfPrivResources), "Private Resource Number", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0a[] = +{ + {ACPI_DMT_UINT32, 0, "Private Resource", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + +/* 1: Cache type */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPptt1[] = +{ + {ACPI_DMT_UINT16, ACPI_PPTT1_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (Flags), "Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Size valid", 0}, + {ACPI_DMT_FLAG1, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Number of Sets valid", 0}, + {ACPI_DMT_FLAG2, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Associativity valid", 0}, + {ACPI_DMT_FLAG3, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Allocation Type valid", 0}, + {ACPI_DMT_FLAG4, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Cache Type valid", 0}, + {ACPI_DMT_FLAG5, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Write Policy valid", 0}, + {ACPI_DMT_FLAG6, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Line Size valid", 0}, + {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (NextLevelOfCache), "Next Level of Cache", 0}, + {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (Size), "Size", 0}, + {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (NumberOfSets), "Number of Sets", 0}, + {ACPI_DMT_UINT8, ACPI_PPTT1_OFFSET (Associativity), "Associativity", 0}, + {ACPI_DMT_UINT8, ACPI_PPTT1_OFFSET (Attributes), "Attributes", 0}, + {ACPI_DMT_FLAGS0, ACPI_PPTT1_OFFSET (Attributes), "Allocation Type", 0}, + {ACPI_DMT_FLAGS2, ACPI_PPTT1_OFFSET (Attributes), "Cache Type", 0}, + {ACPI_DMT_FLAG4, ACPI_PPTT1_OFFSET (Attributes), "Write Policy", 0}, + {ACPI_DMT_UINT16, ACPI_PPTT1_OFFSET (LineSize), "Line Size", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 2: ID */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPptt2[] = +{ + {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_PPTT2_OFFSET (VendorId), "VENDOR_ID", 0}, + {ACPI_DMT_UINT64, ACPI_PPTT2_OFFSET (Level1Id), "LEVEL_1_ID", 0}, + {ACPI_DMT_UINT64, ACPI_PPTT2_OFFSET (Level2Id), "LEVEL_2_ID", 0}, + {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (MajorRev), "MAJOR_REV", 0}, + {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (MinorRev), "MINOR_REV", 0}, + {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (SpinRev), "SPIN_REV", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * RASF - RAS Feature table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoRasf[] = +{ + {ACPI_DMT_BUF12, ACPI_RASF_OFFSET (ChannelId[0]), "Channel ID", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * S3PT - S3 Performance Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt[] = +{ + {ACPI_DMT_SIG, ACPI_S3PT_OFFSET (Signature[0]), "Signature", 0}, + {ACPI_DMT_UINT32, ACPI_S3PT_OFFSET (Length), "Length", DT_LENGTH}, + ACPI_DMT_TERMINATOR +}; + +/* S3PT subtable header */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoS3ptHdr[] = +{ + {ACPI_DMT_UINT16, ACPI_S3PTH_OFFSET (Type), "Type", 0}, + {ACPI_DMT_UINT8, ACPI_S3PTH_OFFSET (Length), "Length", DT_LENGTH}, + {ACPI_DMT_UINT8, ACPI_S3PTH_OFFSET (Revision), "Revision", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 0: Basic S3 Resume Performance Record */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt0[] = +{ + {ACPI_DMT_UINT32, ACPI_S3PT0_OFFSET (ResumeCount), "Resume Count", 0}, + {ACPI_DMT_UINT64, ACPI_S3PT0_OFFSET (FullResume), "Full Resume", 0}, + {ACPI_DMT_UINT64, ACPI_S3PT0_OFFSET (AverageResume), "Average Resume", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 1: Basic S3 Suspend Performance Record */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt1[] = +{ + {ACPI_DMT_UINT64, ACPI_S3PT1_OFFSET (SuspendStart), "Suspend Start", 0}, + {ACPI_DMT_UINT64, ACPI_S3PT1_OFFSET (SuspendEnd), "Suspend End", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * SBST - Smart Battery Specification Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSbst[] = +{ + {ACPI_DMT_UINT32, ACPI_SBST_OFFSET (WarningLevel), "Warning Level", 0}, + {ACPI_DMT_UINT32, ACPI_SBST_OFFSET (LowLevel), "Low Level", 0}, + {ACPI_DMT_UINT32, ACPI_SBST_OFFSET (CriticalLevel), "Critical Level", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * SDEI - Software Delegated Execption Interface Descriptor Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSdei[] = +{ + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * SDEV - Secure Devices Table (ACPI 6.2) + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSdev[] = +{ + ACPI_DMT_TERMINATOR +}; + +/* Common Subtable header (one per Subtable) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSdevHdr[] = +{ + {ACPI_DMT_SDEV, ACPI_SDEVH_OFFSET (Type), "Subtable Type", 0}, + {ACPI_DMT_UINT8, ACPI_SDEVH_OFFSET (Flags), "Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_SDEVH_FLAG_OFFSET (Flags,0), "Allow handoff to unsecure OS", 0}, + {ACPI_DMT_UINT16, ACPI_SDEVH_OFFSET (Length), "Length", 0}, + ACPI_DMT_TERMINATOR +}; + +/* SDEV Subtables */ + +/* 0: Namespace Device Based Secure Device Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSdev0[] = +{ + {ACPI_DMT_UINT16, ACPI_SDEV0_OFFSET (DeviceIdOffset), "Device ID Offset", 0}, + {ACPI_DMT_UINT16, ACPI_SDEV0_OFFSET (DeviceIdLength), "Device ID Length", 0}, + {ACPI_DMT_UINT16, ACPI_SDEV0_OFFSET (VendorDataOffset), "Vendor Data Offset", 0}, + {ACPI_DMT_UINT16, ACPI_SDEV0_OFFSET (VendorDataLength), "Vendor Data Length", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoSdev0a[] = +{ + {ACPI_DMT_STRING, 0, "Namepath", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 1: PCIe Endpoint Device Based Device Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSdev1[] = +{ + {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (Segment), "Segment", 0}, + {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (StartBus), "Start Bus", 0}, + {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (PathOffset), "Path Offset", 0}, + {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (PathLength), "Path Length", 0}, + {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (VendorDataOffset), "Vendor Data Offset", 0}, + {ACPI_DMT_UINT16, ACPI_SDEV1_OFFSET (VendorDataLength), "Vendor Data Length", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoSdev1a[] = +{ + {ACPI_DMT_UINT8, ACPI_SDEV1A_OFFSET (Device), "Device", 0}, + {ACPI_DMT_UINT8, ACPI_SDEV1A_OFFSET (Function), "Function", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoSdev1b[] = +{ + {ACPI_DMT_RAW_BUFFER, 0, "Vendor Data", 0}, /*, DT_OPTIONAL}, */ + ACPI_DMT_TERMINATOR +}; +/*! [End] no source code translation !*/ diff --git a/src/acpica/source/common/dmtbinfo3.c b/src/acpica/source/common/dmtbinfo3.c new file mode 100644 index 00000000..c82e3db5 --- /dev/null +++ b/src/acpica/source/common/dmtbinfo3.c @@ -0,0 +1,733 @@ +/****************************************************************************** + * + * Module Name: dmtbinfo3 - Table info for non-AML tables + * + *****************************************************************************/ + +/****************************************************************************** + * + * 1. Copyright Notice + * + * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. + * All rights reserved. + * + * 2. License + * + * 2.1. This is your license from Intel Corp. under its intellectual property + * rights. You may have additional license terms from the party that provided + * you this software, covering your right to use that party's intellectual + * property rights. + * + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a + * copy of the source code appearing in this file ("Covered Code") an + * irrevocable, perpetual, worldwide license under Intel's copyrights in the + * base code distributed originally by Intel ("Original Intel Code") to copy, + * make derivatives, distribute, use and display any portion of the Covered + * Code in any form, with the right to sublicense such rights; and + * + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent + * license (with the right to sublicense), under only those claims of Intel + * patents that are infringed by the Original Intel Code, to make, use, sell, + * offer to sell, and import the Covered Code and derivative works thereof + * solely to the minimum extent necessary to exercise the above copyright + * license, and in no event shall the patent license extend to any additions + * to or modifications of the Original Intel Code. No other license or right + * is granted directly or by implication, estoppel or otherwise; + * + * The above copyright and patent license is granted only if the following + * conditions are met: + * + * 3. Conditions + * + * 3.1. Redistribution of Source with Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification with rights to further distribute source must include + * the above Copyright Notice, the above License, this list of Conditions, + * and the following Disclaimer and Export Compliance provision. In addition, + * Licensee must cause all Covered Code to which Licensee contributes to + * contain a file documenting the changes Licensee made to create that Covered + * Code and the date of any change. Licensee must include in that file the + * documentation of any changes made by any predecessor Licensee. Licensee + * must include a prominent statement that the modification is derived, + * directly or indirectly, from Original Intel Code. + * + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification without rights to further distribute source must + * include the following Disclaimer and Export Compliance provision in the + * documentation and/or other materials provided with distribution. In + * addition, Licensee may not authorize further sublicense of source of any + * portion of the Covered Code, and must include terms to the effect that the + * license from Licensee to its licensee is limited to the intellectual + * property embodied in the software Licensee provides to its licensee, and + * not to intellectual property embodied in modifications its licensee may + * make. + * + * 3.3. Redistribution of Executable. Redistribution in executable form of any + * substantial portion of the Covered Code or modification must reproduce the + * above Copyright Notice, and the following Disclaimer and Export Compliance + * provision in the documentation and/or other materials provided with the + * distribution. + * + * 3.4. Intel retains all right, title, and interest in and to the Original + * Intel Code. + * + * 3.5. Neither the name Intel nor any other trademark owned or controlled by + * Intel shall be used in advertising or otherwise to promote the sale, use or + * other dealings in products derived from or relating to the Covered Code + * without prior written authorization from Intel. + * + * 4. Disclaimer and Export Compliance + * + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A + * PARTICULAR PURPOSE. + * + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY + * LIMITED REMEDY. + * + * 4.3. Licensee shall not export, either directly or indirectly, any of this + * software or system incorporating such software without first obtaining any + * required license or other approval from the U. S. Department of Commerce or + * any other agency or department of the United States Government. In the + * event Licensee exports any such software from the United States or + * re-exports any such software from a foreign destination, Licensee shall + * ensure that the distribution and export/re-export of the software is in + * compliance with all laws, regulations, orders, or other restrictions of the + * U.S. Export Administration Regulations. Licensee agrees that neither it nor + * any of its subsidiaries will export/re-export any technical data, process, + * software, or service, directly or indirectly, to any country for which the + * United States government or any agency thereof requires an export license, + * other governmental approval, or letter of assurance, without first obtaining + * such license, approval or letter. + * + ***************************************************************************** + * + * Alternatively, you may choose to be licensed under the terms of the + * following license: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Alternatively, you may choose to be licensed under the terms of the + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. + * + *****************************************************************************/ + +#include "acpi.h" +#include "accommon.h" +#include "acdisasm.h" +#include "actbinfo.h" + +/* This module used for application-level code only */ + +#define _COMPONENT ACPI_CA_DISASSEMBLER + ACPI_MODULE_NAME ("dmtbinfo3") + +/* + * How to add a new table: + * + * - Add the C table definition to the actbl1.h or actbl2.h header. + * - Add ACPI_xxxx_OFFSET macro(s) for the table (and subtables) to list below. + * - Define the table in this file (for the disassembler). If any + * new data types are required (ACPI_DMT_*), see below. + * - Add an external declaration for the new table definition (AcpiDmTableInfo*) + * in acdisam.h + * - Add new table definition to the dispatch table in dmtable.c (AcpiDmTableData) + * If a simple table (with no subtables), no disassembly code is needed. + * Otherwise, create the AcpiDmDump* function for to disassemble the table + * and add it to the dmtbdump.c file. + * - Add an external declaration for the new AcpiDmDump* function in acdisasm.h + * - Add the new AcpiDmDump* function to the dispatch table in dmtable.c + * - Create a template for the new table + * - Add data table compiler support + * + * How to add a new data type (ACPI_DMT_*): + * + * - Add new type at the end of the ACPI_DMT list in acdisasm.h + * - Add length and implementation cases in dmtable.c (disassembler) + * - Add type and length cases in dtutils.c (DT compiler) + */ + +/* + * ACPI Table Information, used to dump formatted ACPI tables + * + * Each entry is of the form: <Field Type, Field Offset, Field Name> + */ + +/******************************************************************************* + * + * SLIC - Software Licensing Description Table. This table contains the standard + * ACPI header followed by proprietary data structures + * + ******************************************************************************/ + +/* Single subtable, a proprietary format, so treat it as a buffer */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSlic[] = +{ + {ACPI_DMT_RAW_BUFFER, 0, "Software Licensing Structure", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * SLIT - System Locality Information Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSlit[] = +{ + {ACPI_DMT_UINT64, ACPI_SLIT_OFFSET (LocalityCount), "Localities", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * SPCR - Serial Port Console Redirection table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSpcr[] = +{ + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (InterfaceType), "Interface Type", 0}, + {ACPI_DMT_UINT24, ACPI_SPCR_OFFSET (Reserved[0]), "Reserved", 0}, + {ACPI_DMT_GAS, ACPI_SPCR_OFFSET (SerialPort), "Serial Port Register", 0}, + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (InterruptType), "Interrupt Type", 0}, + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PcInterrupt), "PCAT-compatible IRQ", 0}, + {ACPI_DMT_UINT32, ACPI_SPCR_OFFSET (Interrupt), "Interrupt", 0}, + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (BaudRate), "Baud Rate", 0}, + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (Parity), "Parity", 0}, + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (StopBits), "Stop Bits", 0}, + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (FlowControl), "Flow Control", 0}, + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (TerminalType), "Terminal Type", 0}, + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (Reserved2), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_SPCR_OFFSET (PciDeviceId), "PCI Device ID", 0}, + {ACPI_DMT_UINT16, ACPI_SPCR_OFFSET (PciVendorId), "PCI Vendor ID", 0}, + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PciBus), "PCI Bus", 0}, + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PciDevice), "PCI Device", 0}, + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PciFunction), "PCI Function", 0}, + {ACPI_DMT_UINT32, ACPI_SPCR_OFFSET (PciFlags), "PCI Flags", 0}, + {ACPI_DMT_UINT8, ACPI_SPCR_OFFSET (PciSegment), "PCI Segment", 0}, + {ACPI_DMT_UINT32, ACPI_SPCR_OFFSET (Reserved2), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * SPMI - Server Platform Management Interface table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSpmi[] = +{ + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (InterfaceType), "Interface Type", 0}, + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (Reserved), "Reserved", DT_NON_ZERO}, /* Value must be 1 */ + {ACPI_DMT_UINT16, ACPI_SPMI_OFFSET (SpecRevision), "IPMI Spec Version", 0}, + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (InterruptType), "Interrupt Type", 0}, + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (GpeNumber), "GPE Number", 0}, + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (Reserved1), "Reserved", 0}, + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciDeviceFlag), "PCI Device Flag", 0}, + {ACPI_DMT_UINT32, ACPI_SPMI_OFFSET (Interrupt), "Interrupt", 0}, + {ACPI_DMT_GAS, ACPI_SPMI_OFFSET (IpmiRegister), "IPMI Register", 0}, + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciSegment), "PCI Segment", 0}, + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciBus), "PCI Bus", 0}, + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciDevice), "PCI Device", 0}, + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (PciFunction), "PCI Function", 0}, + {ACPI_DMT_UINT8, ACPI_SPMI_OFFSET (Reserved2), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * SRAT - System Resource Affinity Table and Subtables + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSrat[] = +{ + {ACPI_DMT_UINT32, ACPI_SRAT_OFFSET (TableRevision), "Table Revision", 0}, + {ACPI_DMT_UINT64, ACPI_SRAT_OFFSET (Reserved), "Reserved", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Common Subtable header (one per Subtable) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSratHdr[] = +{ + {ACPI_DMT_SRAT, ACPI_SRATH_OFFSET (Type), "Subtable Type", 0}, + {ACPI_DMT_UINT8, ACPI_SRATH_OFFSET (Length), "Length", DT_LENGTH}, + ACPI_DMT_TERMINATOR +}; + +/* SRAT Subtables */ + +/* 0: Processor Local APIC/SAPIC Affinity */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSrat0[] = +{ + {ACPI_DMT_UINT8, ACPI_SRAT0_OFFSET (ProximityDomainLo), "Proximity Domain Low(8)", 0}, + {ACPI_DMT_UINT8, ACPI_SRAT0_OFFSET (ApicId), "Apic ID", 0}, + {ACPI_DMT_UINT32, ACPI_SRAT0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_SRAT0_FLAG_OFFSET (Flags,0), "Enabled", 0}, + {ACPI_DMT_UINT8, ACPI_SRAT0_OFFSET (LocalSapicEid), "Local Sapic EID", 0}, + {ACPI_DMT_UINT24, ACPI_SRAT0_OFFSET (ProximityDomainHi[0]), "Proximity Domain High(24)", 0}, + {ACPI_DMT_UINT32, ACPI_SRAT0_OFFSET (ClockDomain), "Clock Domain", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 1: Memory Affinity */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSrat1[] = +{ + {ACPI_DMT_UINT32, ACPI_SRAT1_OFFSET (ProximityDomain), "Proximity Domain", 0}, + {ACPI_DMT_UINT16, ACPI_SRAT1_OFFSET (Reserved), "Reserved1", 0}, + {ACPI_DMT_UINT64, ACPI_SRAT1_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT64, ACPI_SRAT1_OFFSET (Length), "Address Length", 0}, + {ACPI_DMT_UINT32, ACPI_SRAT1_OFFSET (Reserved1), "Reserved2", 0}, + {ACPI_DMT_UINT32, ACPI_SRAT1_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_SRAT1_FLAG_OFFSET (Flags,0), "Enabled", 0}, + {ACPI_DMT_FLAG1, ACPI_SRAT1_FLAG_OFFSET (Flags,0), "Hot Pluggable", 0}, + {ACPI_DMT_FLAG2, ACPI_SRAT1_FLAG_OFFSET (Flags,0), "Non-Volatile", 0}, + {ACPI_DMT_UINT64, ACPI_SRAT1_OFFSET (Reserved2), "Reserved3", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSrat2[] = +{ + {ACPI_DMT_UINT16, ACPI_SRAT2_OFFSET (Reserved), "Reserved1", 0}, + {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (ProximityDomain), "Proximity Domain", 0}, + {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (ApicId), "Apic ID", 0}, + {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_SRAT2_FLAG_OFFSET (Flags,0), "Enabled", 0}, + {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (ClockDomain), "Clock Domain", 0}, + {ACPI_DMT_UINT32, ACPI_SRAT2_OFFSET (Reserved2), "Reserved2", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 3: GICC Affinity (ACPI 5.1) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSrat3[] = +{ + {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (ProximityDomain), "Proximity Domain", 0}, + {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (AcpiProcessorUid), "Acpi Processor UID", 0}, + {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_SRAT3_FLAG_OFFSET (Flags,0), "Enabled", 0}, + {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (ClockDomain), "Clock Domain", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 4: GCC ITS Affinity (ACPI 6.2) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSrat4[] = +{ + {ACPI_DMT_UINT32, ACPI_SRAT4_OFFSET (ProximityDomain), "Proximity Domain", 0}, + {ACPI_DMT_UINT16, ACPI_SRAT4_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_SRAT4_OFFSET (ItsId), "ITS ID", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * STAO - Status Override Table (_STA override) - ACPI 6.0 + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoStao[] = +{ + {ACPI_DMT_UINT8, ACPI_STAO_OFFSET (IgnoreUart), "Ignore UART", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoStaoStr[] = +{ + {ACPI_DMT_STRING, 0, "Namepath", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * TCPA - Trusted Computing Platform Alliance table (Client) + * + * NOTE: There are two versions of the table with the same signature -- + * the client version and the server version. The common PlatformClass + * field is used to differentiate the two types of tables. + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaHdr[] = +{ + {ACPI_DMT_UINT16, ACPI_TCPA_OFFSET (PlatformClass), "Platform Class", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaClient[] = +{ + {ACPI_DMT_UINT32, ACPI_TCPA_CLIENT_OFFSET (MinimumLogLength), "Min Event Log Length", 0}, + {ACPI_DMT_UINT64, ACPI_TCPA_CLIENT_OFFSET (LogAddress), "Event Log Address", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaServer[] = +{ + {ACPI_DMT_UINT16, ACPI_TCPA_SERVER_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_TCPA_SERVER_OFFSET (MinimumLogLength), "Min Event Log Length", 0}, + {ACPI_DMT_UINT64, ACPI_TCPA_SERVER_OFFSET (LogAddress), "Event Log Address", 0}, + {ACPI_DMT_UINT16, ACPI_TCPA_SERVER_OFFSET (SpecRevision), "Specification Revision", 0}, + {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Device Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Pci Device", 0}, + {ACPI_DMT_FLAG1, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Bus is Pnp", 0}, + {ACPI_DMT_FLAG2, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Address Valid", 0}, + {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Interrupt Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Mode", 0}, + {ACPI_DMT_FLAG1, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Polarity", 0}, + {ACPI_DMT_FLAG2, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "GPE SCI Triggered", 0}, + {ACPI_DMT_FLAG3, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Global System Interrupt", 0}, + {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (GpeNumber), "Gpe Number", 0}, + {ACPI_DMT_UINT24, ACPI_TCPA_SERVER_OFFSET (Reserved2[0]), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_TCPA_SERVER_OFFSET (GlobalInterrupt), "Global Interrupt", 0}, + {ACPI_DMT_GAS, ACPI_TCPA_SERVER_OFFSET (Address), "Address", 0}, + {ACPI_DMT_UINT32, ACPI_TCPA_SERVER_OFFSET (Reserved3), "Reserved", 0}, + {ACPI_DMT_GAS, ACPI_TCPA_SERVER_OFFSET (ConfigAddress), "Configuration Address", 0}, + {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Group), "Pci Group", 0}, + {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Bus), "Pci Bus", 0}, + {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Device), "Pci Device", 0}, + {ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Function), "Pci Function", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoTpm2[] = +{ + {ACPI_DMT_UINT16, ACPI_TPM2_OFFSET (PlatformClass), "Platform Class", 0}, + {ACPI_DMT_UINT16, ACPI_TPM2_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_TPM2_OFFSET (ControlAddress), "Control Address", 0}, + {ACPI_DMT_TPM2, ACPI_TPM2_OFFSET (StartMethod), "Start Method", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Optional trailer. LogLength and LogAddress are additionally optional */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoTpm2a[] = +{ + {ACPI_DMT_BUF12, ACPI_TPM2A_OFFSET (MethodParameters), "Method Parameters", DT_OPTIONAL}, + {ACPI_DMT_UINT32, ACPI_TPM2A_OFFSET (MinimumLogLength), "Minimum Log Length", DT_OPTIONAL}, + {ACPI_DMT_UINT64, ACPI_TPM2A_OFFSET (LogAddress), "Log Address", DT_OPTIONAL}, + ACPI_DMT_TERMINATOR +}; + +/* 11: Start Method for ARM SMC */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoTpm211[] = +{ + {ACPI_DMT_UINT32, ACPI_TPM211_OFFSET (GlobalInterrupt), "Global Interrupt", 0}, + {ACPI_DMT_UINT8, ACPI_TPM211_OFFSET (InterruptFlags), "Interrupt Flags", 0}, + {ACPI_DMT_UINT8, ACPI_TPM211_OFFSET (OperationFlags), "Operation Flags", 0}, + {ACPI_DMT_UINT16, ACPI_TPM211_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_TPM211_OFFSET (FunctionId), "Function ID", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * UEFI - UEFI Boot optimization Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoUefi[] = +{ + {ACPI_DMT_UUID, ACPI_UEFI_OFFSET (Identifier[0]), "UUID Identifier", 0}, + {ACPI_DMT_UINT16, ACPI_UEFI_OFFSET (DataOffset), "Data Offset", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * VRTC - Virtual Real Time Clock Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoVrtc[] = +{ + ACPI_DMT_TERMINATOR +}; + +/* VRTC Subtables - VRTC Entry */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoVrtc0[] = +{ + {ACPI_DMT_GAS, ACPI_VRTC0_OFFSET (PhysicalAddress), "PhysicalAddress", 0}, + {ACPI_DMT_UINT32, ACPI_VRTC0_OFFSET (Irq), "IRQ", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * WAET - Windows ACPI Emulated devices Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoWaet[] = +{ + {ACPI_DMT_UINT32, ACPI_WAET_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_WAET_OFFSET (Flags), "RTC needs no INT ack", 0}, + {ACPI_DMT_FLAG1, ACPI_WAET_OFFSET (Flags), "PM timer, one read only", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * WDAT - Watchdog Action Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoWdat[] = +{ + {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (HeaderLength), "Header Length", DT_LENGTH}, + {ACPI_DMT_UINT16, ACPI_WDAT_OFFSET (PciSegment), "PCI Segment", 0}, + {ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (PciBus), "PCI Bus", 0}, + {ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (PciDevice), "PCI Device", 0}, + {ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (PciFunction), "PCI Function", 0}, + {ACPI_DMT_UINT24, ACPI_WDAT_OFFSET (Reserved[0]), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (TimerPeriod), "Timer Period", 0}, + {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (MaxCount), "Max Count", 0}, + {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (MinCount), "Min Count", 0}, + {ACPI_DMT_UINT8, ACPI_WDAT_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_WDAT_OFFSET (Flags), "Enabled", 0}, + {ACPI_DMT_FLAG7, ACPI_WDAT_OFFSET (Flags), "Stopped When Asleep", 0}, + {ACPI_DMT_UINT24, ACPI_WDAT_OFFSET (Reserved2[0]), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_WDAT_OFFSET (Entries), "Watchdog Entry Count", 0}, + ACPI_DMT_TERMINATOR +}; + +/* WDAT Subtables - Watchdog Instruction Entries */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoWdat0[] = +{ + {ACPI_DMT_UINT8, ACPI_WDAT0_OFFSET (Action), "Watchdog Action", 0}, + {ACPI_DMT_UINT8, ACPI_WDAT0_OFFSET (Instruction), "Instruction", 0}, + {ACPI_DMT_UINT16, ACPI_WDAT0_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_GAS, ACPI_WDAT0_OFFSET (RegisterRegion), "Register Region", 0}, + {ACPI_DMT_UINT32, ACPI_WDAT0_OFFSET (Value), "Value", 0}, + {ACPI_DMT_UINT32, ACPI_WDAT0_OFFSET (Mask), "Register Mask", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * WDDT - Watchdog Description Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoWddt[] = +{ + {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (SpecVersion), "Specification Version", 0}, + {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (TableVersion), "Table Version", 0}, + {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (PciVendorId), "PCI Vendor ID", 0}, + {ACPI_DMT_GAS, ACPI_WDDT_OFFSET (Address), "Timer Register", 0}, + {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (MaxCount), "Max Count", 0}, + {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (MinCount), "Min Count", 0}, + {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (Period), "Period", 0}, + {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (Status), "Status (decoded below)", 0}, + + /* Status Flags byte 0 */ + + {ACPI_DMT_FLAG0, ACPI_WDDT_FLAG_OFFSET (Status,0), "Available", 0}, + {ACPI_DMT_FLAG1, ACPI_WDDT_FLAG_OFFSET (Status,0), "Active", 0}, + {ACPI_DMT_FLAG2, ACPI_WDDT_FLAG_OFFSET (Status,0), "OS Owns", 0}, + + /* Status Flags byte 1 */ + + {ACPI_DMT_FLAG3, ACPI_WDDT_FLAG_OFFSET (Status,1), "User Reset", 0}, + {ACPI_DMT_FLAG4, ACPI_WDDT_FLAG_OFFSET (Status,1), "Timeout Reset", 0}, + {ACPI_DMT_FLAG5, ACPI_WDDT_FLAG_OFFSET (Status,1), "Power Fail Reset", 0}, + {ACPI_DMT_FLAG6, ACPI_WDDT_FLAG_OFFSET (Status,1), "Unknown Reset", 0}, + + {ACPI_DMT_UINT16, ACPI_WDDT_OFFSET (Capability), "Capability (decoded below)", 0}, + + /* Capability Flags byte 0 */ + + {ACPI_DMT_FLAG0, ACPI_WDDT_FLAG_OFFSET (Capability,0), "Auto Reset", 0}, + {ACPI_DMT_FLAG1, ACPI_WDDT_FLAG_OFFSET (Capability,0), "Timeout Alert", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * WDRT - Watchdog Resource Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoWdrt[] = +{ + {ACPI_DMT_GAS, ACPI_WDRT_OFFSET (ControlRegister), "Control Register", 0}, + {ACPI_DMT_GAS, ACPI_WDRT_OFFSET (CountRegister), "Count Register", 0}, + {ACPI_DMT_UINT16, ACPI_WDRT_OFFSET (PciDeviceId), "PCI Device ID", 0}, + {ACPI_DMT_UINT16, ACPI_WDRT_OFFSET (PciVendorId), "PCI Vendor ID", 0}, + {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciBus), "PCI Bus", 0}, + {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciDevice), "PCI Device", 0}, + {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciFunction), "PCI Function", 0}, + {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (PciSegment), "PCI Segment", 0}, + {ACPI_DMT_UINT16, ACPI_WDRT_OFFSET (MaxCount), "Max Count", 0}, + {ACPI_DMT_UINT8, ACPI_WDRT_OFFSET (Units), "Counter Units", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * WPBT - Windows Platform Environment Table (ACPI 6.0) + * Version 1 + * + * Conforms to "Windows Platform Binary Table (WPBT)" 29 November 2011 + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt[] = +{ + {ACPI_DMT_UINT32, ACPI_WPBT_OFFSET (HandoffSize), "Handoff Size", 0}, + {ACPI_DMT_UINT64, ACPI_WPBT_OFFSET (HandoffAddress), "Handoff Address", 0}, + {ACPI_DMT_UINT8, ACPI_WPBT_OFFSET (Layout), "Layout", 0}, + {ACPI_DMT_UINT8, ACPI_WPBT_OFFSET (Type), "Type", 0}, + {ACPI_DMT_UINT16, ACPI_WPBT_OFFSET (ArgumentsLength), "Arguments Length", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt0[] = +{ + {ACPI_DMT_UNICODE, sizeof (ACPI_TABLE_WPBT), "Command-line Arguments", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * WSMT - Windows SMM Security Migrations Table + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoWsmt[] = +{ + {ACPI_DMT_UINT32, ACPI_WSMT_OFFSET (ProtectionFlags), "Protection Flags", 0}, + {ACPI_DMT_FLAG0, ACPI_WSMT_FLAG_OFFSET (ProtectionFlags,0), "FIXED_COMM_BUFFERS", 0}, + {ACPI_DMT_FLAG1, ACPI_WSMT_FLAG_OFFSET (ProtectionFlags,0), "COMM_BUFFER_NESTED_PTR_PROTECTION", 0}, + {ACPI_DMT_FLAG2, ACPI_WSMT_FLAG_OFFSET (ProtectionFlags,0), "SYSTEM_RESOURCE_PROTECTION", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * XENV - Xen Environment table (ACPI 6.0) + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoXenv[] = +{ + {ACPI_DMT_UINT64, ACPI_XENV_OFFSET (GrantTableAddress), "Grant Table Address", 0}, + {ACPI_DMT_UINT64, ACPI_XENV_OFFSET (GrantTableSize), "Grant Table Size", 0}, + {ACPI_DMT_UINT32, ACPI_XENV_OFFSET (EventInterrupt), "Event Interrupt", 0}, + {ACPI_DMT_UINT8, ACPI_XENV_OFFSET (EventFlags), "Event Flags", 0}, + ACPI_DMT_TERMINATOR +}; + + +/*! [Begin] no source code translation */ + +/* + * Generic types (used in UEFI and custom tables) + * + * Examples: + * + * Buffer : cc 04 ff bb + * UINT8 : 11 + * UINT16 : 1122 + * UINT24 : 112233 + * UINT32 : 11223344 + * UINT56 : 11223344556677 + * UINT64 : 1122334455667788 + * + * String : "This is string" + * Unicode : "This string encoded to Unicode" + * + * GUID : 11223344-5566-7788-99aa-bbccddeeff00 + * DevicePath : "\PciRoot(0)\Pci(0x1f,1)\Usb(0,0)" + */ + +#define ACPI_DM_GENERIC_ENTRY(FieldType, FieldName) \ + {{FieldType, 0, FieldName, 0}, ACPI_DMT_TERMINATOR} + +ACPI_DMTABLE_INFO AcpiDmTableInfoGeneric[][2] = +{ + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT8, "UINT8"), + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT16, "UINT16"), + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT24, "UINT24"), + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT32, "UINT32"), + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT40, "UINT40"), + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT48, "UINT48"), + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT56, "UINT56"), + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UINT64, "UINT64"), + 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_UUID, "GUID"), + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_STRING, "DevicePath"), + ACPI_DM_GENERIC_ENTRY (ACPI_DMT_LABEL, "Label"), + {ACPI_DMT_TERMINATOR} +}; +/*! [End] no source code translation !*/ diff --git a/src/acpica/source/compiler/Makefile.am b/src/acpica/source/compiler/Makefile.am index 6191f510..0c25d89d 100644 --- a/src/acpica/source/compiler/Makefile.am +++ b/src/acpica/source/compiler/Makefile.am @@ -242,7 +242,13 @@ libfwtsiasl_la_SOURCES = \ ../common/dmtable.c \ ../common/dmtables.c \ ../common/dmtbinfo.c \ + ../common/dmtbinfo1.c \ + ../common/dmtbinfo2.c \ + ../common/dmtbinfo3.c \ ../common/dmtbdump.c \ + ../common/dmtbdump1.c \ + ../common/dmtbdump2.c \ + ../common/dmtbdump3.c \ ../common/getopt.c \ ../components/debugger/dbfileio.c \ ../components/disassembler/dmbuffer.c \ diff --git a/src/acpica/source/compiler/aslbtypes.c b/src/acpica/source/compiler/aslbtypes.c index be3618ee..f7c2eb0c 100644 --- a/src/acpica/source/compiler/aslbtypes.c +++ b/src/acpica/source/compiler/aslbtypes.c @@ -259,6 +259,7 @@ AnMapArgTypeToBtype ( return (ACPI_BTYPE_DATA | ACPI_BTYPE_DEBUG_OBJECT | ACPI_BTYPE_REFERENCE_OBJECT); + case ARGI_FIXED_TARGET: case ARGI_SIMPLE_TARGET: return (ACPI_BTYPE_OBJECTS_AND_REFS); diff --git a/src/acpica/source/compiler/aslerror.c b/src/acpica/source/compiler/aslerror.c index ef6342b1..39297a4c 100644 --- a/src/acpica/source/compiler/aslerror.c +++ b/src/acpica/source/compiler/aslerror.c @@ -921,6 +921,13 @@ AslCommonError ( char *Filename, char *ExtraMessage) { + /* Check if user wants to ignore this exception */ + + if (AslIsExceptionIgnored (Level, MessageId)) + { + return; + } + AslLogNewError (Level, MessageId, CurrentLineNumber, LogicalLineNumber, LogicalByteOffset, Column, Filename, ExtraMessage, NULL, NULL); diff --git a/src/acpica/source/compiler/aslfold.c b/src/acpica/source/compiler/aslfold.c index 78ec8da2..7957c149 100644 --- a/src/acpica/source/compiler/aslfold.c +++ b/src/acpica/source/compiler/aslfold.c @@ -444,7 +444,7 @@ OpcAmlCheckForConstant ( if (Op->Asl.CompileFlags & OP_IS_TARGET) { DbgPrint (ASL_PARSE_OUTPUT, - "**** Valid Target, transform to Store ****\n"); + "**** Valid Target, transform to Store or CopyObject ****\n"); return (AE_CTRL_RETURN_VALUE); } @@ -468,7 +468,7 @@ OpcAmlCheckForConstant ( if (WalkState->Opcode == AML_BUFFER_OP) { DbgPrint (ASL_PARSE_OUTPUT, - "\nBuffer constant reduction is not supported yet\n"); + "\nBuffer constant reduction is currently not supported\n"); if (NextOp) /* Found a Name() operator, error */ { @@ -623,6 +623,8 @@ TrTransformToStoreOp ( ACPI_PARSE_OBJECT *NewParent; ACPI_PARSE_OBJECT *OriginalParent; ACPI_STATUS Status; + UINT16 NewParseOpcode; + UINT16 NewAmlOpcode; /* Extract the operands */ @@ -646,9 +648,45 @@ TrTransformToStoreOp ( } } - DbgPrint (ASL_PARSE_OUTPUT, - "Reduction/Transform to StoreOp: Store(%s, %s)\n", - Child1->Asl.ParseOpName, Child2->Asl.ParseOpName); + switch (Op->Asl.ParseOpcode) + { + /* + * Folding of the explicit conversion opcodes must use CopyObject + * instead of Store. This can change the object type of the target + * operand, as per the ACPI specification: + * + * "If the ASL operator is one of the explicit conversion operators + * (ToString, ToInteger, etc., and the CopyObject operator), no + * [implicit] conversion is performed. (In other words, the result + * object is stored directly to the target and completely overwrites + * any existing object already stored at the target)" + */ + case PARSEOP_TOINTEGER: + case PARSEOP_TOSTRING: + case PARSEOP_TOBUFFER: + case PARSEOP_TODECIMALSTRING: + case PARSEOP_TOHEXSTRING: + case PARSEOP_TOBCD: + case PARSEOP_FROMBCD: + + NewParseOpcode = PARSEOP_COPYOBJECT; + NewAmlOpcode = AML_COPY_OBJECT_OP; + + DbgPrint (ASL_PARSE_OUTPUT, + "Reduction/Transform to CopyObjectOp: CopyObject(%s, %s)\n", + Child1->Asl.ParseOpName, Child2->Asl.ParseOpName); + break; + + default: + + NewParseOpcode = PARSEOP_STORE; + NewAmlOpcode = AML_STORE_OP; + + DbgPrint (ASL_PARSE_OUTPUT, + "Reduction/Transform to StoreOp: Store(%s, %s)\n", + Child1->Asl.ParseOpName, Child2->Asl.ParseOpName); + break; + } /* * Create a NULL (zero) target so that we can use the @@ -709,10 +747,10 @@ TrTransformToStoreOp ( TrInstallReducedConstant (Child1, ObjDesc); - /* Convert operator to STORE */ + /* Convert operator to STORE or COPYOBJECT */ - Op->Asl.ParseOpcode = PARSEOP_STORE; - Op->Asl.AmlOpcode = AML_STORE_OP; + Op->Asl.ParseOpcode = NewParseOpcode; + Op->Asl.AmlOpcode = NewAmlOpcode; UtSetParseOpName (Op); Op->Common.Parent = OriginalParent; diff --git a/src/acpica/source/compiler/aslload.c b/src/acpica/source/compiler/aslload.c index 534d4ca3..f32a7461 100644 --- a/src/acpica/source/compiler/aslload.c +++ b/src/acpica/source/compiler/aslload.c @@ -327,8 +327,8 @@ LdLoadFieldElements ( * The name already exists in this scope * But continue processing the elements */ - AslDualParseOpError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Child, - Child->Asl.Value.String, ASL_MSG_FOUND_HERE, Node->Op, + AslDualParseOpError (ASL_WARNING, ASL_MSG_EXTERN_COLLISION, Child, + Child->Asl.Value.String, ASL_MSG_EXTERN_FOUND_HERE, Node->Op, Node->Op->Asl.ExternalName); } } @@ -830,8 +830,8 @@ LdNamespace1Begin ( if (Node->OwnerId == WalkState->OwnerId && !(Node->Flags & IMPLICIT_EXTERNAL)) { - AslDualParseOpError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op, - Op->Asl.ExternalName, ASL_MSG_FOUND_HERE, Node->Op, + AslDualParseOpError (ASL_WARNING, ASL_MSG_EXTERN_COLLISION, Op, + Op->Asl.ExternalName, ASL_MSG_EXTERN_FOUND_HERE, Node->Op, Node->Op->Asl.ExternalName); } if (Node->Flags & IMPLICIT_EXTERNAL) @@ -853,8 +853,8 @@ LdNamespace1Begin ( if (Node->OwnerId == WalkState->OwnerId) { - AslDualParseOpError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op, - Op->Asl.ExternalName, ASL_MSG_FOUND_HERE, Node->Op, + AslDualParseOpError (ASL_WARNING, ASL_MSG_EXTERN_COLLISION, Op, + Op->Asl.ExternalName, ASL_MSG_EXTERN_FOUND_HERE, Node->Op, Node->Op->Asl.ExternalName); } } diff --git a/src/acpica/source/compiler/aslmessages.c b/src/acpica/source/compiler/aslmessages.c index 85500846..e816b538 100644 --- a/src/acpica/source/compiler/aslmessages.c +++ b/src/acpica/source/compiler/aslmessages.c @@ -352,7 +352,9 @@ const char *AslCompilerMsgs [] = /* ASL_MSG_EXCEPTION_NOT_RECEIVED */ "Expected remark, warning, or error did not occur. Message ID:", /* ASL_MSG_NULL_RESOURCE_TEMPLATE */ "Empty Resource Template (END_TAG only)", /* ASL_MSG_FOUND_HERE */ "Original name creation/declaration below: ", -/* ASL_MSG_ILLEGAL_RECURSION */ "Illegal recursive call to method that creates named objects" +/* ASL_MSG_ILLEGAL_RECURSION */ "Illegal recursive call to method that creates named objects", +/* ASL_MSG_EXTERN_COLLISION */ "A name cannot be defined and declared external in the same table", +/* ASL_MSG_FOUND_HERE_EXTERN*/ "Remove one of the declarations indicated above or below:" }; /* Table compiler */ diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h index 77c6759e..3105f0be 100644 --- a/src/acpica/source/compiler/aslmessages.h +++ b/src/acpica/source/compiler/aslmessages.h @@ -355,6 +355,8 @@ typedef enum ASL_MSG_NULL_RESOURCE_TEMPLATE, ASL_MSG_FOUND_HERE, ASL_MSG_ILLEGAL_RECURSION, + ASL_MSG_EXTERN_COLLISION, + ASL_MSG_EXTERN_FOUND_HERE, /* These messages are used by the Data Table compiler only */ diff --git a/src/acpica/source/compiler/dtcompile.c b/src/acpica/source/compiler/dtcompile.c index a8509937..93944146 100644 --- a/src/acpica/source/compiler/dtcompile.c +++ b/src/acpica/source/compiler/dtcompile.c @@ -453,7 +453,7 @@ DtCompileDataTable ( DtInsertCompilerIds (*FieldList); Status = DtCompileTable (FieldList, AcpiDmTableInfoHeader, - &Gbl_RootTable, TRUE); + &Gbl_RootTable); if (ACPI_FAILURE (Status)) { return (Status); @@ -492,7 +492,7 @@ DtCompileDataTable ( { Subtable = NULL; Status = DtCompileTable (FieldList, TableData->TableInfo, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -531,7 +531,6 @@ FinishHeader: * PARAMETERS: Field - Current field list pointer * Info - Info table for this ACPI table * RetSubtable - Compile result of table - * Required - If this subtable must exist * * RETURN: Status * @@ -543,8 +542,7 @@ ACPI_STATUS DtCompileTable ( DT_FIELD **Field, ACPI_DMTABLE_INFO *Info, - DT_SUBTABLE **RetSubtable, - BOOLEAN Required) + DT_SUBTABLE **RetSubtable) { DT_FIELD *LocalField; UINT32 Length; @@ -682,19 +680,19 @@ DtCompileTable ( case ACPI_DMT_GAS: Status = DtCompileTable (Field, AcpiDmTableInfoGas, - &InlineSubtable, TRUE); + &InlineSubtable); break; case ACPI_DMT_HESTNTFY: Status = DtCompileTable (Field, AcpiDmTableInfoHestNotify, - &InlineSubtable, TRUE); + &InlineSubtable); break; case ACPI_DMT_IORTMEM: Status = DtCompileTable (Field, AcpiDmTableInfoIortAcc, - &InlineSubtable, TRUE); + &InlineSubtable); break; default: @@ -783,7 +781,7 @@ DtCompileTwoSubtables ( DT_FIELD **PFieldList = (DT_FIELD **) List; - Status = DtCompileTable (PFieldList, TableInfo1, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, TableInfo1, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -794,7 +792,7 @@ DtCompileTwoSubtables ( while (*PFieldList) { - Status = DtCompileTable (PFieldList, TableInfo2, &Subtable, FALSE); + Status = DtCompileTable (PFieldList, TableInfo2, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h index 7ecb14e1..48d308b4 100644 --- a/src/acpica/source/compiler/dtcompiler.h +++ b/src/acpica/source/compiler/dtcompiler.h @@ -275,8 +275,7 @@ ACPI_STATUS DtCompileTable ( DT_FIELD **Field, ACPI_DMTABLE_INFO *Info, - DT_SUBTABLE **RetSubtable, - BOOLEAN Required); + DT_SUBTABLE **RetSubtable); ACPI_STATUS DtCompileTwoSubtables ( diff --git a/src/acpica/source/compiler/dtexpress.c b/src/acpica/source/compiler/dtexpress.c index ef19122b..aa68cf1e 100644 --- a/src/acpica/source/compiler/dtexpress.c +++ b/src/acpica/source/compiler/dtexpress.c @@ -209,7 +209,7 @@ DtResolveIntegerExpression ( * FUNCTION: DtDoOperator * * PARAMETERS: LeftValue - First 64-bit operand - * Operator - Parse token for the operator (EXPOP_*) + * Operator - Parse token for the operator (OP_EXP_*) * RightValue - Second 64-bit operand * * RETURN: 64-bit result of the requested operation @@ -231,22 +231,22 @@ DtDoOperator ( switch (Operator) { - case EXPOP_ONES_COMPLIMENT: + case OP_EXP_ONES_COMPLIMENT: Result = ~RightValue; break; - case EXPOP_LOGICAL_NOT: + case OP_EXP_LOGICAL_NOT: Result = !RightValue; break; - case EXPOP_MULTIPLY: + case OP_EXP_MULTIPLY: Result = LeftValue * RightValue; break; - case EXPOP_DIVIDE: + case OP_EXP_DIVIDE: if (!RightValue) { @@ -258,7 +258,7 @@ DtDoOperator ( Result = LeftValue / RightValue; break; - case EXPOP_MODULO: + case OP_EXP_MODULO: if (!RightValue) { @@ -270,76 +270,76 @@ DtDoOperator ( Result = LeftValue % RightValue; break; - case EXPOP_ADD: + case OP_EXP_ADD: Result = LeftValue + RightValue; break; - case EXPOP_SUBTRACT: + case OP_EXP_SUBTRACT: Result = LeftValue - RightValue; break; - case EXPOP_SHIFT_RIGHT: + case OP_EXP_SHIFT_RIGHT: Result = LeftValue >> RightValue; break; - case EXPOP_SHIFT_LEFT: + case OP_EXP_SHIFT_LEFT: Result = LeftValue << RightValue; break; - case EXPOP_LESS: + case OP_EXP_LESS: Result = LeftValue < RightValue; break; - case EXPOP_GREATER: + case OP_EXP_GREATER: Result = LeftValue > RightValue; break; - case EXPOP_LESS_EQUAL: + case OP_EXP_LESS_EQUAL: Result = LeftValue <= RightValue; break; - case EXPOP_GREATER_EQUAL: + case OP_EXP_GREATER_EQUAL: Result = LeftValue >= RightValue; break; - case EXPOP_EQUAL: + case OP_EXP_EQUAL: Result = LeftValue == RightValue; break; - case EXPOP_NOT_EQUAL: + case OP_EXP_NOT_EQUAL: Result = LeftValue != RightValue; break; - case EXPOP_AND: + case OP_EXP_AND: Result = LeftValue & RightValue; break; - case EXPOP_XOR: + case OP_EXP_XOR: Result = LeftValue ^ RightValue; break; - case EXPOP_OR: + case OP_EXP_OR: Result = LeftValue | RightValue; break; - case EXPOP_LOGICAL_AND: + case OP_EXP_LOGICAL_AND: Result = LeftValue && RightValue; break; - case EXPOP_LOGICAL_OR: + case OP_EXP_LOGICAL_OR: Result = LeftValue || RightValue; break; diff --git a/src/acpica/source/compiler/dtparser.l b/src/acpica/source/compiler/dtparser.l index 3e5bc8c7..fae32dba 100644 --- a/src/acpica/source/compiler/dtparser.l +++ b/src/acpica/source/compiler/dtparser.l @@ -171,37 +171,37 @@ NewLine [\n] %% -\( return (EXPOP_PAREN_OPEN); -\) return (EXPOP_PAREN_CLOSE); -\~ return (EXPOP_ONES_COMPLIMENT); -\! return (EXPOP_LOGICAL_NOT); -\* return (EXPOP_MULTIPLY); -\/ return (EXPOP_DIVIDE); -\% return (EXPOP_MODULO); -\+ return (EXPOP_ADD); -\- return (EXPOP_SUBTRACT); -">>" return (EXPOP_SHIFT_RIGHT); -"<<" return (EXPOP_SHIFT_LEFT); -\< return (EXPOP_LESS); -\> return (EXPOP_GREATER); -"<=" return (EXPOP_LESS_EQUAL); -">=" return (EXPOP_GREATER_EQUAL); -"==" return (EXPOP_EQUAL); -"!=" return (EXPOP_NOT_EQUAL); -\& return (EXPOP_AND); -\^ return (EXPOP_XOR); -\| return (EXPOP_OR); -"&&" return (EXPOP_LOGICAL_AND); -"||" return (EXPOP_LOGICAL_OR); -<<EOF>> return (EXPOP_EOF); /* null end-of-string */ - -{LabelRef} return (EXPOP_LABEL); -{Number} return (EXPOP_NUMBER); -{HexNumber} return (EXPOP_HEX_NUMBER); -{NewLine} return (EXPOP_NEW_LINE); +\( return (OP_EXP_PAREN_OPEN); +\) return (OP_EXP_PAREN_CLOSE); +\~ return (OP_EXP_ONES_COMPLIMENT); +\! return (OP_EXP_LOGICAL_NOT); +\* return (OP_EXP_MULTIPLY); +\/ return (OP_EXP_DIVIDE); +\% return (OP_EXP_MODULO); +\+ return (OP_EXP_ADD); +\- return (OP_EXP_SUBTRACT); +">>" return (OP_EXP_SHIFT_RIGHT); +"<<" return (OP_EXP_SHIFT_LEFT); +\< return (OP_EXP_LESS); +\> return (OP_EXP_GREATER); +"<=" return (OP_EXP_LESS_EQUAL); +">=" return (OP_EXP_GREATER_EQUAL); +"==" return (OP_EXP_EQUAL); +"!=" return (OP_EXP_NOT_EQUAL); +\& return (OP_EXP_AND); +\^ return (OP_EXP_XOR); +\| return (OP_EXP_OR); +"&&" return (OP_EXP_LOGICAL_AND); +"||" return (OP_EXP_LOGICAL_OR); +<<EOF>> return (OP_EXP_EOF); /* null end-of-string */ + +{LabelRef} return (OP_EXP_LABEL); +{Number} return (OP_EXP_NUMBER); +{HexNumber} return (OP_EXP_HEX_NUMBER); +{NewLine} return (OP_EXP_NEW_LINE); {WhiteSpace} /* Ignore */ -. return (EXPOP_EOF); +. return (OP_EXP_EOF); %% diff --git a/src/acpica/source/compiler/dtparser.y b/src/acpica/source/compiler/dtparser.y index 43f7f04e..1c445712 100644 --- a/src/acpica/source/compiler/dtparser.y +++ b/src/acpica/source/compiler/dtparser.y @@ -193,26 +193,26 @@ UINT64 DtParserResult; /* Expression return value */ %type <value> Expression -%token <op> EXPOP_EOF -%token <op> EXPOP_NEW_LINE -%token <op> EXPOP_NUMBER -%token <op> EXPOP_HEX_NUMBER -%token <op> EXPOP_DECIMAL_NUMBER -%token <op> EXPOP_LABEL -%token <op> EXPOP_PAREN_OPEN -%token <op> EXPOP_PAREN_CLOSE - -%left <op> EXPOP_LOGICAL_OR -%left <op> EXPOP_LOGICAL_AND -%left <op> EXPOP_OR -%left <op> EXPOP_XOR -%left <op> EXPOP_AND -%left <op> EXPOP_EQUAL EXPOP_NOT_EQUAL -%left <op> EXPOP_GREATER EXPOP_LESS EXPOP_GREATER_EQUAL EXPOP_LESS_EQUAL -%left <op> EXPOP_SHIFT_RIGHT EXPOP_SHIFT_LEFT -%left <op> EXPOP_ADD EXPOP_SUBTRACT -%left <op> EXPOP_MULTIPLY EXPOP_DIVIDE EXPOP_MODULO -%right <op> EXPOP_ONES_COMPLIMENT EXPOP_LOGICAL_NOT +%token <op> OP_EXP_EOF +%token <op> OP_EXP_NEW_LINE +%token <op> OP_EXP_NUMBER +%token <op> OP_EXP_HEX_NUMBER +%token <op> OP_EXP_DECIMAL_NUMBER +%token <op> OP_EXP_LABEL +%token <op> OP_EXP_PAREN_OPEN +%token <op> OP_EXP_PAREN_CLOSE + +%left <op> OP_EXP_LOGICAL_OR +%left <op> OP_EXP_LOGICAL_AND +%left <op> OP_EXP_OR +%left <op> OP_EXP_XOR +%left <op> OP_EXP_AND +%left <op> OP_EXP_EQUAL OP_EXP_NOT_EQUAL +%left <op> OP_EXP_GREATER OP_EXP_LESS OP_EXP_GREATER_EQUAL OP_EXP_LESS_EQUAL +%left <op> OP_EXP_SHIFT_RIGHT OP_EXP_SHIFT_LEFT +%left <op> OP_EXP_ADD OP_EXP_SUBTRACT +%left <op> OP_EXP_MULTIPLY OP_EXP_DIVIDE OP_EXP_MODULO +%right <op> OP_EXP_ONES_COMPLIMENT OP_EXP_LOGICAL_NOT %% @@ -233,46 +233,46 @@ UINT64 DtParserResult; /* Expression return value */ * 12) || */ Value - : Expression EXPOP_NEW_LINE { DtParserResult=$1; return 0; } /* End of line (newline) */ - | Expression EXPOP_EOF { DtParserResult=$1; return 0; } /* End of string (0) */ + : Expression OP_EXP_NEW_LINE { DtParserResult=$1; return 0; } /* End of line (newline) */ + | Expression OP_EXP_EOF { DtParserResult=$1; return 0; } /* End of string (0) */ ; Expression /* Unary operators */ - : EXPOP_LOGICAL_NOT Expression { $$ = DtDoOperator ($2, EXPOP_LOGICAL_NOT, $2);} - | EXPOP_ONES_COMPLIMENT Expression { $$ = DtDoOperator ($2, EXPOP_ONES_COMPLIMENT, $2);} + : OP_EXP_LOGICAL_NOT Expression { $$ = DtDoOperator ($2, OP_EXP_LOGICAL_NOT, $2);} + | OP_EXP_ONES_COMPLIMENT Expression { $$ = DtDoOperator ($2, OP_EXP_ONES_COMPLIMENT, $2);} /* Binary operators */ - | Expression EXPOP_MULTIPLY Expression { $$ = DtDoOperator ($1, EXPOP_MULTIPLY, $3);} - | Expression EXPOP_DIVIDE Expression { $$ = DtDoOperator ($1, EXPOP_DIVIDE, $3);} - | Expression EXPOP_MODULO Expression { $$ = DtDoOperator ($1, EXPOP_MODULO, $3);} - | Expression EXPOP_ADD Expression { $$ = DtDoOperator ($1, EXPOP_ADD, $3);} - | Expression EXPOP_SUBTRACT Expression { $$ = DtDoOperator ($1, EXPOP_SUBTRACT, $3);} - | Expression EXPOP_SHIFT_RIGHT Expression { $$ = DtDoOperator ($1, EXPOP_SHIFT_RIGHT, $3);} - | Expression EXPOP_SHIFT_LEFT Expression { $$ = DtDoOperator ($1, EXPOP_SHIFT_LEFT, $3);} - | Expression EXPOP_GREATER Expression { $$ = DtDoOperator ($1, EXPOP_GREATER, $3);} - | Expression EXPOP_LESS Expression { $$ = DtDoOperator ($1, EXPOP_LESS, $3);} - | Expression EXPOP_GREATER_EQUAL Expression { $$ = DtDoOperator ($1, EXPOP_GREATER_EQUAL, $3);} - | Expression EXPOP_LESS_EQUAL Expression { $$ = DtDoOperator ($1, EXPOP_LESS_EQUAL, $3);} - | Expression EXPOP_EQUAL Expression { $$ = DtDoOperator ($1, EXPOP_EQUAL, $3);} - | Expression EXPOP_NOT_EQUAL Expression { $$ = DtDoOperator ($1, EXPOP_NOT_EQUAL, $3);} - | Expression EXPOP_AND Expression { $$ = DtDoOperator ($1, EXPOP_AND, $3);} - | Expression EXPOP_XOR Expression { $$ = DtDoOperator ($1, EXPOP_XOR, $3);} - | Expression EXPOP_OR Expression { $$ = DtDoOperator ($1, EXPOP_OR, $3);} - | Expression EXPOP_LOGICAL_AND Expression { $$ = DtDoOperator ($1, EXPOP_LOGICAL_AND, $3);} - | Expression EXPOP_LOGICAL_OR Expression { $$ = DtDoOperator ($1, EXPOP_LOGICAL_OR, $3);} + | Expression OP_EXP_MULTIPLY Expression { $$ = DtDoOperator ($1, OP_EXP_MULTIPLY, $3);} + | Expression OP_EXP_DIVIDE Expression { $$ = DtDoOperator ($1, OP_EXP_DIVIDE, $3);} + | Expression OP_EXP_MODULO Expression { $$ = DtDoOperator ($1, OP_EXP_MODULO, $3);} + | Expression OP_EXP_ADD Expression { $$ = DtDoOperator ($1, OP_EXP_ADD, $3);} + | Expression OP_EXP_SUBTRACT Expression { $$ = DtDoOperator ($1, OP_EXP_SUBTRACT, $3);} + | Expression OP_EXP_SHIFT_RIGHT Expression { $$ = DtDoOperator ($1, OP_EXP_SHIFT_RIGHT, $3);} + | Expression OP_EXP_SHIFT_LEFT Expression { $$ = DtDoOperator ($1, OP_EXP_SHIFT_LEFT, $3);} + | Expression OP_EXP_GREATER Expression { $$ = DtDoOperator ($1, OP_EXP_GREATER, $3);} + | Expression OP_EXP_LESS Expression { $$ = DtDoOperator ($1, OP_EXP_LESS, $3);} + | Expression OP_EXP_GREATER_EQUAL Expression { $$ = DtDoOperator ($1, OP_EXP_GREATER_EQUAL, $3);} + | Expression OP_EXP_LESS_EQUAL Expression { $$ = DtDoOperator ($1, OP_EXP_LESS_EQUAL, $3);} + | Expression OP_EXP_EQUAL Expression { $$ = DtDoOperator ($1, OP_EXP_EQUAL, $3);} + | Expression OP_EXP_NOT_EQUAL Expression { $$ = DtDoOperator ($1, OP_EXP_NOT_EQUAL, $3);} + | Expression OP_EXP_AND Expression { $$ = DtDoOperator ($1, OP_EXP_AND, $3);} + | Expression OP_EXP_XOR Expression { $$ = DtDoOperator ($1, OP_EXP_XOR, $3);} + | Expression OP_EXP_OR Expression { $$ = DtDoOperator ($1, OP_EXP_OR, $3);} + | Expression OP_EXP_LOGICAL_AND Expression { $$ = DtDoOperator ($1, OP_EXP_LOGICAL_AND, $3);} + | Expression OP_EXP_LOGICAL_OR Expression { $$ = DtDoOperator ($1, OP_EXP_LOGICAL_OR, $3);} /* Parentheses: '(' Expression ')' */ - | EXPOP_PAREN_OPEN Expression - EXPOP_PAREN_CLOSE { $$ = $2;} + | OP_EXP_PAREN_OPEN Expression + OP_EXP_PAREN_CLOSE { $$ = $2;} /* Label references (prefixed with $) */ - | EXPOP_LABEL { $$ = DtResolveLabel (DtParsertext);} + | OP_EXP_LABEL { $$ = DtResolveLabel (DtParsertext);} /* * All constants for the data table compiler are in hex, whether a (optional) 0x @@ -283,15 +283,15 @@ Expression /* Non-prefixed hex number */ - | EXPOP_NUMBER { $$ = DtDoConstant (DtParsertext);} + | OP_EXP_NUMBER { $$ = DtDoConstant (DtParsertext);} /* Standard hex number (0x1234) */ - | EXPOP_HEX_NUMBER { $$ = DtDoConstant (DtParsertext);} + | OP_EXP_HEX_NUMBER { $$ = DtDoConstant (DtParsertext);} /* Possible TBD: Decimal number with prefix (0d1234) - Not supported this time */ - | EXPOP_DECIMAL_NUMBER { $$ = DtDoConstant (DtParsertext);} + | OP_EXP_DECIMAL_NUMBER { $$ = DtDoConstant (DtParsertext);} ; %% @@ -300,7 +300,7 @@ Expression /* * Local support functions, including parser entry point */ -#define PR_FIRST_PARSE_OPCODE EXPOP_EOF +#define PR_FIRST_PARSE_OPCODE OP_EXP_EOF #define PR_YYTNAME_START 3 @@ -329,7 +329,7 @@ DtParsererror ( * * FUNCTION: DtGetOpName * - * PARAMETERS: ParseOpcode - Parser token (EXPOP_*) + * PARAMETERS: ParseOpcode - Parser token (OP_EXP_*) * * RETURN: Pointer to the opcode name * @@ -344,7 +344,7 @@ DtGetOpName ( #ifdef ASL_YYTNAME_START /* * First entries (PR_YYTNAME_START) in yytname are special reserved names. - * Ignore first 6 characters of name (EXPOP_) + * Ignore first 6 characters of name (OP_EXP_) */ return ((char *) yytname [(ParseOpcode - PR_FIRST_PARSE_OPCODE) + PR_YYTNAME_START] + 6); diff --git a/src/acpica/source/compiler/dttable.c b/src/acpica/source/compiler/dttable.c index 75f34d5d..44efbee4 100644 --- a/src/acpica/source/compiler/dttable.c +++ b/src/acpica/source/compiler/dttable.c @@ -182,7 +182,7 @@ DtCompileRsdp ( /* Compile the "common" RSDP (ACPI 1.0) */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoRsdp1, - &Gbl_RootTable, TRUE); + &Gbl_RootTable); if (ACPI_FAILURE (Status)) { return (Status); @@ -196,7 +196,7 @@ DtCompileRsdp ( /* Compile the "extended" part of the RSDP as a subtable */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoRsdp2, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -240,7 +240,7 @@ DtCompileFadt ( Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt1, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -255,7 +255,7 @@ DtCompileFadt ( if (Revision == 2) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt2, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -266,7 +266,7 @@ DtCompileFadt ( else if (Revision >= 2) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt3, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -277,7 +277,7 @@ DtCompileFadt ( if (Revision >= 5) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt5, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -289,7 +289,7 @@ DtCompileFadt ( if (Revision >= 6) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt6, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -326,7 +326,7 @@ DtCompileFacs ( Status = DtCompileTable (PFieldList, AcpiDmTableInfoFacs, - &Gbl_RootTable, TRUE); + &Gbl_RootTable); if (ACPI_FAILURE (Status)) { return (Status); diff --git a/src/acpica/source/compiler/dttable1.c b/src/acpica/source/compiler/dttable1.c index bc74799c..084adc3e 100644 --- a/src/acpica/source/compiler/dttable1.c +++ b/src/acpica/source/compiler/dttable1.c @@ -202,7 +202,7 @@ DtCompileAsf ( { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoAsfHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -247,7 +247,7 @@ DtCompileAsf ( return (AE_ERROR); } - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -307,7 +307,7 @@ DtCompileAsf ( while (DataCount > 0) { Status = DtCompileTable (PFieldList, DataInfoTable, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -323,7 +323,7 @@ DtCompileAsf ( for (i = 0; i < DataCount; i++) { Status = DtCompileTable (PFieldList, DataInfoTable, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -399,7 +399,7 @@ DtCompileCsrt ( /* Resource group subtable */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoCsrt0, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -424,7 +424,7 @@ DtCompileCsrt ( /* Shared info subtable (One per resource group) */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoCsrt1, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -438,7 +438,7 @@ DtCompileCsrt ( { Status = DtCompileTable (PFieldList, AcpiDmTableInfoCsrt2, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -451,7 +451,7 @@ DtCompileCsrt ( if (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoCsrt2a, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -504,7 +504,7 @@ DtCompileDbg2 ( /* Main table */ - Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -529,7 +529,7 @@ DtCompileDbg2 ( /* Subtable: Debug Device Information */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Device, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -550,7 +550,7 @@ DtCompileDbg2 ( for (i = 0; *PFieldList && (i < DeviceInfo->RegisterCount); i++) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Addr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -566,7 +566,7 @@ DtCompileDbg2 ( for (i = 0; *PFieldList && (i < DeviceInfo->RegisterCount); i++) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Size, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -580,7 +580,7 @@ DtCompileDbg2 ( DeviceInfo->NamepathOffset = CurrentOffset; Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Name, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -595,7 +595,7 @@ DtCompileDbg2 ( /* OemData - Variable-length data (Optional, size = OemDataLength) */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2OemData, - &Subtable, TRUE); + &Subtable); if (Status == AE_END_OF_TABLE) { /* optional field was not found and we're at the end of the file */ @@ -659,7 +659,7 @@ DtCompileDmar ( UINT32 PciPathLength; - Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmar, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmar, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -675,7 +675,7 @@ DtCompileDmar ( SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmarHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -722,7 +722,7 @@ DtCompileDmar ( /* DMAR Subtable */ - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -749,7 +749,7 @@ DtCompileDmar ( while (DeviceScopeLength) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmarScope, - &Subtable, FALSE); + &Subtable); if (Status == AE_NOT_FOUND) { break; @@ -767,7 +767,7 @@ DtCompileDmar ( while (PciPathLength) { Status = DtCompileTable (PFieldList, TableInfoDmarPciPath, - &Subtable, FALSE); + &Subtable); if (Status == AE_NOT_FOUND) { DtPopSubtable (); @@ -823,7 +823,7 @@ DtCompileDrtm ( /* Compile DRTM header */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -841,7 +841,7 @@ DtCompileDrtm ( /* Compile VTL */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm0, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -857,7 +857,7 @@ DtCompileDrtm ( while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm0a, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -877,7 +877,7 @@ DtCompileDrtm ( /* Compile RL */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm1, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -893,7 +893,7 @@ DtCompileDrtm ( while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm1a, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -915,7 +915,7 @@ DtCompileDrtm ( /* Compile DPS */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoDrtm2, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1005,7 +1005,7 @@ DtCompileGtdt ( Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdt, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1018,7 +1018,7 @@ DtCompileGtdt ( { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdtHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1048,7 +1048,7 @@ DtCompileGtdt ( return (AE_ERROR); } - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1074,7 +1074,7 @@ DtCompileGtdt ( while (GtCount) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdt0a, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1128,7 +1128,7 @@ DtCompileFpdt ( { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoFpdtHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1159,7 +1159,7 @@ DtCompileFpdt ( break; } - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1201,7 +1201,7 @@ DtCompileHest ( Status = DtCompileTable (PFieldList, AcpiDmTableInfoHest, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1272,7 +1272,7 @@ DtCompileHest ( return (AE_ERROR); } - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1312,7 +1312,7 @@ DtCompileHest ( while (BankCount) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoHestBank, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1362,7 +1362,7 @@ DtCompileHmat ( ParentTable = DtPeekSubtable (); Status = DtCompileTable (PFieldList, AcpiDmTableInfoHmat, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1375,7 +1375,7 @@ DtCompileHmat ( SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoHmatHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1410,7 +1410,7 @@ DtCompileHmat ( return (AE_ERROR); } - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1433,7 +1433,7 @@ DtCompileHmat ( while (*PFieldList) { Status = DtCompileTable (PFieldList, - AcpiDmTableInfoHmat1a, &Subtable, TRUE); + AcpiDmTableInfoHmat1a, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1454,7 +1454,7 @@ DtCompileHmat ( while (*PFieldList) { Status = DtCompileTable (PFieldList, - AcpiDmTableInfoHmat1b, &Subtable, TRUE); + AcpiDmTableInfoHmat1b, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1479,7 +1479,7 @@ DtCompileHmat ( while (*PFieldList) { Status = DtCompileTable (PFieldList, - AcpiDmTableInfoHmat1c, &Subtable, TRUE); + AcpiDmTableInfoHmat1c, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1513,7 +1513,7 @@ DtCompileHmat ( while (*PFieldList) { Status = DtCompileTable (PFieldList, - AcpiDmTableInfoHmat2a, &Subtable, TRUE); + AcpiDmTableInfoHmat2a, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1576,7 +1576,7 @@ DtCompileIort ( ParentTable = DtPeekSubtable (); Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1598,7 +1598,7 @@ DtCompileIort ( */ Iort->NodeOffset = sizeof (ACPI_TABLE_IORT); Status = DtCompileTable (PFieldList, AcpiDmTableInfoIortPad, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1624,7 +1624,7 @@ DtCompileIort ( { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoIortHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1642,7 +1642,7 @@ DtCompileIort ( case ACPI_IORT_NODE_ITS_GROUP: Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort0, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1656,7 +1656,7 @@ DtCompileIort ( while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort0a, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1677,7 +1677,7 @@ DtCompileIort ( case ACPI_IORT_NODE_NAMED_COMPONENT: Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort1, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1692,7 +1692,7 @@ DtCompileIort ( * for filling this field. */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort1a, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1729,7 +1729,7 @@ DtCompileIort ( case ACPI_IORT_NODE_PCI_ROOT_COMPLEX: Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort2, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1742,7 +1742,7 @@ DtCompileIort ( case ACPI_IORT_NODE_SMMU: Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1756,7 +1756,7 @@ DtCompileIort ( IortSmmu->GlobalInterruptOffset = NodeLength; Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3a, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1772,7 +1772,7 @@ DtCompileIort ( while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3b, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1797,7 +1797,7 @@ DtCompileIort ( while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3c, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1819,7 +1819,7 @@ DtCompileIort ( case ACPI_IORT_NODE_SMMU_V3: Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort4, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1842,7 +1842,7 @@ DtCompileIort ( while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoIortMap, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1905,7 +1905,7 @@ DtCompileIvrs ( Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrs, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1918,7 +1918,7 @@ DtCompileIvrs ( { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoIvrsHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1950,7 +1950,7 @@ DtCompileIvrs ( return (AE_ERROR); } - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -2012,7 +2012,7 @@ DtCompileIvrs ( } Status = DtCompileTable (PFieldList, InfoTable, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); diff --git a/src/acpica/source/compiler/dttable2.c b/src/acpica/source/compiler/dttable2.c index a2960e9b..785bc7a1 100644 --- a/src/acpica/source/compiler/dttable2.c +++ b/src/acpica/source/compiler/dttable2.c @@ -191,7 +191,7 @@ DtCompileLpit ( /* LPIT Subtable header */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoLpitHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -218,7 +218,7 @@ DtCompileLpit ( /* LPIT Subtable */ - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -259,7 +259,7 @@ DtCompileMadt ( Status = DtCompileTable (PFieldList, AcpiDmTableInfoMadt, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -272,7 +272,7 @@ DtCompileMadt ( { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoMadtHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -372,7 +372,7 @@ DtCompileMadt ( return (AE_ERROR); } - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -442,7 +442,7 @@ DtCompileMpst ( /* Main table */ - Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -460,7 +460,7 @@ DtCompileMpst ( /* Subtable: Memory Power Node(s) */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst0, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -481,7 +481,7 @@ DtCompileMpst ( while (*PFieldList && PowerStateCount) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst0A, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -496,7 +496,7 @@ DtCompileMpst ( while (*PFieldList && ComponentCount) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst0B, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -514,7 +514,7 @@ DtCompileMpst ( DtPopSubtable (); - Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst1, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst1, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -534,7 +534,7 @@ DtCompileMpst ( while (*PFieldList && SubtableCount) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst2, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -630,7 +630,7 @@ DtCompileNfit ( /* Main table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfit, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -646,7 +646,7 @@ DtCompileNfit ( { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfitHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -708,7 +708,7 @@ DtCompileNfit ( return (AE_ERROR); } - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -727,7 +727,7 @@ DtCompileNfit ( while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfit2a, - &Subtable, FALSE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -752,7 +752,7 @@ DtCompileNfit ( if (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfit3a, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -772,7 +772,7 @@ DtCompileNfit ( while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfit6a, - &Subtable, FALSE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -829,7 +829,7 @@ DtCompilePcct ( /* Main table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoPcct, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -844,7 +844,7 @@ DtCompilePcct ( { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoPcctHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -889,7 +889,7 @@ DtCompilePcct ( return (AE_ERROR); } - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -930,7 +930,7 @@ DtCompilePdtt ( /* Main table */ - Status = DtCompileTable (PFieldList, AcpiDmTableInfoPdtt, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, AcpiDmTableInfoPdtt, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -949,7 +949,7 @@ DtCompilePdtt ( /* List of subchannel IDs, each 2 bytes */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoPdtt0, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -993,7 +993,7 @@ DtCompilePmtt ( /* Main table */ - Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1007,7 +1007,7 @@ DtCompilePmtt ( { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmttHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1039,7 +1039,7 @@ DtCompilePmtt ( /* Subtable: Socket Structure */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt0, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1054,7 +1054,7 @@ DtCompilePmtt ( /* Subtable: Memory Controller Structure */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt1, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1070,7 +1070,7 @@ DtCompilePmtt ( while (DomainCount) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt1a, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1086,7 +1086,7 @@ DtCompilePmtt ( /* Subtable: Physical Component Structure */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt2, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1141,7 +1141,7 @@ DtCompilePptt ( /* Compile PPTT subtable header */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoPpttHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1175,7 +1175,7 @@ DtCompilePptt ( /* Compile PPTT subtable body */ - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1199,7 +1199,7 @@ DtCompilePptt ( while (*PFieldList) { Status = DtCompileTable (PFieldList, - AcpiDmTableInfoPptt0a, &Subtable, TRUE); + AcpiDmTableInfoPptt0a, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1288,7 +1288,7 @@ DtCompileS3pt ( Status = DtCompileTable (PFieldList, AcpiDmTableInfoS3pt, - &Gbl_RootTable, TRUE); + &Gbl_RootTable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1300,7 +1300,7 @@ DtCompileS3pt ( { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoS3ptHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1330,7 +1330,7 @@ DtCompileS3pt ( return (AE_ERROR); } - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1381,7 +1381,7 @@ DtCompileSdev ( SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdevHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1416,7 +1416,7 @@ DtCompileSdev ( /* Compile SDEV subtable body */ - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1434,7 +1434,7 @@ DtCompileSdev ( /* Append DeviceId namespace string */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev0a, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1459,7 +1459,7 @@ DtCompileSdev ( if (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev1b, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1491,7 +1491,7 @@ DtCompileSdev ( while (*PFieldList && !strcmp ((*PFieldList)->Name, "Device")) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev1a, - &Subtable, FALSE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1522,7 +1522,7 @@ DtCompileSdev ( if (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev1b, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1583,7 +1583,7 @@ DtCompileSlic ( while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoSlic, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1625,7 +1625,7 @@ DtCompileSlit ( Status = DtCompileTable (PFieldList, AcpiDmTableInfoSlit, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1681,7 +1681,7 @@ DtCompileSrat ( Status = DtCompileTable (PFieldList, AcpiDmTableInfoSrat, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1694,7 +1694,7 @@ DtCompileSrat ( { SubtableStart = *PFieldList; Status = DtCompileTable (PFieldList, AcpiDmTableInfoSratHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1739,7 +1739,7 @@ DtCompileSrat ( return (AE_ERROR); } - Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + Status = DtCompileTable (PFieldList, InfoTable, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1779,7 +1779,7 @@ DtCompileStao ( /* Compile the main table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoStao, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1793,7 +1793,7 @@ DtCompileStao ( while (*PFieldList) { Status = DtCompileTable (PFieldList, AcpiDmTableInfoStaoStr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1833,7 +1833,7 @@ DtCompileTcpa ( /* Compile the main table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoTcpaHdr, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1853,13 +1853,13 @@ DtCompileTcpa ( case ACPI_TCPA_CLIENT_TABLE: Status = DtCompileTable (PFieldList, AcpiDmTableInfoTcpaClient, - &Subtable, TRUE); + &Subtable); break; case ACPI_TCPA_SERVER_TABLE: Status = DtCompileTable (PFieldList, AcpiDmTableInfoTcpaServer, - &Subtable, TRUE); + &Subtable); break; default: @@ -1902,7 +1902,7 @@ DtCompileTpm2 ( /* Compile the main table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm2, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1919,7 +1919,7 @@ DtCompileTpm2 ( /* TBD: Optional fields above not fully implemented (not optional at this time) */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm2a, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -1938,7 +1938,7 @@ DtCompileTpm2 ( /* Subtable specific to to ARM_SMC */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm211, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -2053,7 +2053,7 @@ DtCompileUefi ( /* Compile the predefined portion of the UEFI table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoUefi, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -2152,7 +2152,7 @@ DtCompileWpbt ( /* Compile the main table */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -2164,7 +2164,7 @@ DtCompileWpbt ( /* Compile the argument list subtable */ Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt0, - &Subtable, TRUE); + &Subtable); if (ACPI_FAILURE (Status)) { return (Status); @@ -2284,7 +2284,7 @@ DtCompileGeneric ( } Status = DtCompileTable (PFieldList, Info, - &Subtable, TRUE); + &Subtable); if (ACPI_SUCCESS (Status)) { DtInsertSubtable (ParentTable, Subtable); diff --git a/src/acpica/source/components/dispatcher/dsargs.c b/src/acpica/source/components/dispatcher/dsargs.c index 26adfb0b..dd8c30f0 100644 --- a/src/acpica/source/components/dispatcher/dsargs.c +++ b/src/acpica/source/components/dispatcher/dsargs.c @@ -481,6 +481,7 @@ AcpiDsGetPackageArguments ( Status = AcpiDsExecuteArguments (Node, Node, ObjDesc->Package.AmlLength, ObjDesc->Package.AmlStart); + return_ACPI_STATUS (Status); } diff --git a/src/acpica/source/components/dispatcher/dsopcode.c b/src/acpica/source/components/dispatcher/dsopcode.c index 71928fb7..038993c7 100644 --- a/src/acpica/source/components/dispatcher/dsopcode.c +++ b/src/acpica/source/components/dispatcher/dsopcode.c @@ -752,8 +752,8 @@ AcpiDsEvalDataObjectOperands ( if (!Op->Common.Value.Arg) { ACPI_ERROR ((AE_INFO, - "Dispatch: Missing child while executing TermArg for %X", - Op->Common.AmlOpcode)); + "Missing child while evaluating opcode %4.4X, Op %p", + Op->Common.AmlOpcode, Op)); return_ACPI_STATUS (AE_OK); } diff --git a/src/acpica/source/components/dispatcher/dspkginit.c b/src/acpica/source/components/dispatcher/dspkginit.c index 647f5d0d..a034df0d 100644 --- a/src/acpica/source/components/dispatcher/dspkginit.c +++ b/src/acpica/source/components/dispatcher/dspkginit.c @@ -155,6 +155,7 @@ #include "amlcode.h" #include "acdispat.h" #include "acinterp.h" +#include "acparser.h" #define _COMPONENT ACPI_NAMESPACE @@ -208,6 +209,7 @@ AcpiDsBuildInternalPackageObj ( ACPI_PARSE_OBJECT *Parent; ACPI_OPERAND_OBJECT *ObjDesc = NULL; ACPI_STATUS Status = AE_OK; + BOOLEAN ModuleLevelCode = FALSE; UINT16 ReferenceCount; UINT32 Index; UINT32 i; @@ -216,6 +218,13 @@ AcpiDsBuildInternalPackageObj ( ACPI_FUNCTION_TRACE (DsBuildInternalPackageObj); + /* Check if we are executing module level code */ + + if (WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL) + { + ModuleLevelCode = TRUE; + } + /* Find the parent of a possibly nested package */ Parent = Op->Common.Parent; @@ -250,25 +259,43 @@ AcpiDsBuildInternalPackageObj ( /* * Allocate the element array (array of pointers to the individual - * objects) based on the NumElements parameter. Add an extra pointer slot - * so that the list is always null terminated. + * objects) if necessary. the count is based on the NumElements + * parameter. Add an extra pointer slot so that the list is always + * null terminated. */ - ObjDesc->Package.Elements = ACPI_ALLOCATE_ZEROED ( - ((ACPI_SIZE) ElementCount + 1) * sizeof (void *)); - if (!ObjDesc->Package.Elements) { - AcpiUtDeleteObjectDesc (ObjDesc); - return_ACPI_STATUS (AE_NO_MEMORY); + ObjDesc->Package.Elements = ACPI_ALLOCATE_ZEROED ( + ((ACPI_SIZE) ElementCount + 1) * sizeof (void *)); + + if (!ObjDesc->Package.Elements) + { + AcpiUtDeleteObjectDesc (ObjDesc); + return_ACPI_STATUS (AE_NO_MEMORY); + } + + ObjDesc->Package.Count = ElementCount; } - ObjDesc->Package.Count = ElementCount; + /* First arg is element count. Second arg begins the initializer list */ + Arg = Op->Common.Value.Arg; Arg = Arg->Common.Next; - if (Arg) + /* + * If we are executing module-level code, we will defer the + * full resolution of the package elements in order to support + * forward references from the elements. This provides + * compatibility with other ACPI implementations. + */ + if (ModuleLevelCode) { - ObjDesc->Package.Flags |= AOPOBJ_DATA_VALID; + ObjDesc->Package.AmlStart = WalkState->Aml; + ObjDesc->Package.AmlLength = 0; + + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_PARSE, + "%s: Deferring resolution of Package elements\n", + ACPI_GET_FUNCTION_NAME)); } /* @@ -308,12 +335,17 @@ AcpiDsBuildInternalPackageObj ( ACPI_ERROR ((AE_INFO, "%-48s", "****DS namepath not found")); } - /* - * Initialize this package element. This function handles the - * resolution of named references within the package. - */ - AcpiDsInitPackageElement (0, ObjDesc->Package.Elements[i], - NULL, &ObjDesc->Package.Elements[i]); + if (!ModuleLevelCode) + { + /* + * Initialize this package element. This function handles the + * resolution of named references within the package. + * Forward references from module-level code are deferred + * until all ACPI tables are loaded. + */ + AcpiDsInitPackageElement (0, ObjDesc->Package.Elements[i], + NULL, &ObjDesc->Package.Elements[i]); + } } if (*ObjDescPtr) @@ -383,15 +415,21 @@ AcpiDsBuildInternalPackageObj ( * NumElements count. * * Note: this is not an error, the package is padded out - * with NULLs. + * with NULLs as per the ACPI specification. */ - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "Package List length (%u) smaller than NumElements " + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, + "%s: Package List length (%u) smaller than NumElements " "count (%u), padded with null elements\n", - i, ElementCount)); + ACPI_GET_FUNCTION_NAME, i, ElementCount)); + } + + /* Module-level packages will be resolved later */ + + if (!ModuleLevelCode) + { + ObjDesc->Package.Flags |= AOPOBJ_DATA_VALID; } - ObjDesc->Package.Flags |= AOPOBJ_DATA_VALID; Op->Common.Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjDesc); return_ACPI_STATUS (Status); } @@ -481,11 +519,12 @@ AcpiDsResolvePackageElement ( ACPI_OPERAND_OBJECT **ElementPtr) { ACPI_STATUS Status; + ACPI_STATUS Status2; ACPI_GENERIC_STATE ScopeInfo; ACPI_OPERAND_OBJECT *Element = *ElementPtr; ACPI_NAMESPACE_NODE *ResolvedNode; ACPI_NAMESPACE_NODE *OriginalNode; - char *ExternalPath = NULL; + char *ExternalPath = ""; ACPI_OBJECT_TYPE Type; @@ -496,6 +535,10 @@ AcpiDsResolvePackageElement ( if (Element->Reference.Resolved) { + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_PARSE, + "%s: Package element is already resolved\n", + ACPI_GET_FUNCTION_NAME)); + return_VOID; } @@ -510,14 +553,41 @@ AcpiDsResolvePackageElement ( NULL, &ResolvedNode); if (ACPI_FAILURE (Status)) { - Status = AcpiNsExternalizeName (ACPI_UINT32_MAX, - (char *) Element->Reference.Aml, - NULL, &ExternalPath); +#if defined ACPI_IGNORE_PACKAGE_RESOLUTION_ERRORS && !defined ACPI_APPLICATION + /* + * For the kernel-resident ACPICA, optionally be silent about the + * NOT_FOUND case. Although this is potentially a serious problem, + * it can generate a lot of noise/errors on platforms whose + * firmware carries around a bunch of unused Package objects. + * To disable these errors, define ACPI_IGNORE_PACKAGE_RESOLUTION_ERRORS + * in the OS-specific header. + * + * All errors are always reported for ACPICA applications such as + * AcpiExec. + */ + if (Status == AE_NOT_FOUND) + { + /* Reference name not found, set the element to NULL */ + + AcpiUtRemoveReference (*ElementPtr); + *ElementPtr = NULL; + return_VOID; + } +#endif + Status2 = AcpiNsExternalizeName (ACPI_UINT32_MAX, + (char *) Element->Reference.Aml, NULL, &ExternalPath); ACPI_EXCEPTION ((AE_INFO, Status, - "Could not find/resolve named package element: %s", ExternalPath)); + "While resolving a named reference package element - %s", + ExternalPath)); + if (ACPI_SUCCESS (Status2)) + { + ACPI_FREE (ExternalPath); + } + + /* Could not resolve name, set the element to NULL */ - ACPI_FREE (ExternalPath); + AcpiUtRemoveReference (*ElementPtr); *ElementPtr = NULL; return_VOID; } @@ -531,24 +601,6 @@ AcpiDsResolvePackageElement ( *ElementPtr = NULL; return_VOID; } -#if 0 - else if (ResolvedNode->Flags & ANOBJ_TEMPORARY) - { - /* - * A temporary node found here indicates that the reference is - * to a node that was created within this method. We are not - * going to allow it (especially if the package is returned - * from the method) -- the temporary node will be deleted out - * from under the method. (05/2017). - */ - ACPI_ERROR ((AE_INFO, - "Package element refers to a temporary name [%4.4s], " - "inserting a NULL element", - ResolvedNode->Name.Ascii)); - *ElementPtr = NULL; - return_VOID; - } -#endif /* * Special handling for Alias objects. We need ResolvedNode to point @@ -587,22 +639,6 @@ AcpiDsResolvePackageElement ( return_VOID; } -#if 0 -/* TBD - alias support */ - /* - * Special handling for Alias objects. We need to setup the type - * and the Op->Common.Node to point to the Alias target. Note, - * Alias has at most one level of indirection internally. - */ - Type = Op->Common.Node->Type; - if (Type == ACPI_TYPE_LOCAL_ALIAS) - { - Type = ObjDesc->Common.Type; - Op->Common.Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, - Op->Common.Node->Object); - } -#endif - switch (Type) { /* diff --git a/src/acpica/source/components/dispatcher/dswexec.c b/src/acpica/source/components/dispatcher/dswexec.c index d3a69fdd..c39095f6 100644 --- a/src/acpica/source/components/dispatcher/dswexec.c +++ b/src/acpica/source/components/dispatcher/dswexec.c @@ -723,8 +723,8 @@ AcpiDsExecEndOp ( case AML_TYPE_CREATE_OBJECT: ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Executing CreateObject (Buffer/Package) Op=%p AMLPtr=%p\n", - Op, Op->Named.Data)); + "Executing CreateObject (Buffer/Package) Op=%p Child=%p ParentOpcode=%4.4X\n", + Op, Op->Named.Value.Arg, Op->Common.Parent->Common.AmlOpcode)); switch (Op->Common.Parent->Common.AmlOpcode) { diff --git a/src/acpica/source/components/dispatcher/dswload.c b/src/acpica/source/components/dispatcher/dswload.c index 9a5da369..91f5b305 100644 --- a/src/acpica/source/components/dispatcher/dswload.c +++ b/src/acpica/source/components/dispatcher/dswload.c @@ -264,7 +264,7 @@ AcpiDsLoad1BeginOp ( UINT32 Flags; - ACPI_FUNCTION_TRACE (DsLoad1BeginOp); + ACPI_FUNCTION_TRACE_PTR (DsLoad1BeginOp, WalkState->Op); Op = WalkState->Op; diff --git a/src/acpica/source/components/executer/exconvrt.c b/src/acpica/source/components/executer/exconvrt.c index 844f9549..5c58746e 100644 --- a/src/acpica/source/components/executer/exconvrt.c +++ b/src/acpica/source/components/executer/exconvrt.c @@ -757,6 +757,7 @@ AcpiExConvertToTargetType ( switch (GET_CURRENT_ARG_TYPE (WalkState->OpInfo->RuntimeArgs)) { case ARGI_SIMPLE_TARGET: + case ARGI_FIXED_TARGET: case ARGI_INTEGER_REF: /* Handles Increment, Decrement cases */ switch (DestinationType) diff --git a/src/acpica/source/components/executer/exnames.c b/src/acpica/source/components/executer/exnames.c index 3dc19986..ce000e5d 100644 --- a/src/acpica/source/components/executer/exnames.c +++ b/src/acpica/source/components/executer/exnames.c @@ -309,14 +309,11 @@ AcpiExNameSegment ( return_ACPI_STATUS (AE_CTRL_PENDING); } - ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "Bytes from stream:\n")); - for (Index = 0; (Index < ACPI_NAME_SIZE) && (AcpiUtValidNameChar (*AmlAddress, 0)); Index++) { CharBuf[Index] = *AmlAddress++; - ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "%c\n", CharBuf[Index])); } @@ -330,9 +327,9 @@ AcpiExNameSegment ( if (NameString) { - strcat (NameString, CharBuf); ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, - "Appended to - %s\n", NameString)); + "Appending NameSeg %s\n", CharBuf)); + strcat (NameString, CharBuf); } else { diff --git a/src/acpica/source/components/executer/exresop.c b/src/acpica/source/components/executer/exresop.c index c6fa853d..7fd24535 100644 --- a/src/acpica/source/components/executer/exresop.c +++ b/src/acpica/source/components/executer/exresop.c @@ -429,6 +429,7 @@ AcpiExResolveOperands ( case ARGI_OBJECT_REF: case ARGI_DEVICE_REF: case ARGI_TARGETREF: /* Allows implicit conversion rules before store */ + case ARGI_FIXED_TARGET: /* No implicit conversion before store to target */ case ARGI_SIMPLE_TARGET: /* Name, Local, or Arg - no implicit conversion */ case ARGI_STORE_TARGET: diff --git a/src/acpica/source/components/namespace/nseval.c b/src/acpica/source/components/namespace/nseval.c index 14fcb953..b1e1af9a 100644 --- a/src/acpica/source/components/namespace/nseval.c +++ b/src/acpica/source/components/namespace/nseval.c @@ -308,6 +308,7 @@ AcpiNsEvaluate ( */ switch (AcpiNsGetType (Info->Node)) { + case ACPI_TYPE_ANY: case ACPI_TYPE_DEVICE: case ACPI_TYPE_EVENT: case ACPI_TYPE_MUTEX: @@ -315,13 +316,13 @@ AcpiNsEvaluate ( case ACPI_TYPE_THERMAL: case ACPI_TYPE_LOCAL_SCOPE: /* - * 1) Disallow evaluation of certain object types. For these, - * object evaluation is undefined and not supported. + * 1) Disallow evaluation of these object types. For these, + * object evaluation is undefined. */ ACPI_ERROR ((AE_INFO, - "%s: Evaluation of object type [%s] is not supported", - Info->FullPathname, - AcpiUtGetTypeName (Info->Node->Type))); + "%s: This object type [%s] " + "never contains data and cannot be evaluated", + Info->FullPathname, AcpiUtGetTypeName (Info->Node->Type))); Status = AE_TYPE; goto Cleanup; diff --git a/src/acpica/source/components/namespace/nsinit.c b/src/acpica/source/components/namespace/nsinit.c index 4a075bed..dc76db9f 100644 --- a/src/acpica/source/components/namespace/nsinit.c +++ b/src/acpica/source/components/namespace/nsinit.c @@ -418,7 +418,7 @@ ErrorExit: * RETURN: Status * * DESCRIPTION: Callback from AcpiWalkNamespace. Invoked for every object - * within the namespace. + * within the namespace. * * Currently, the only objects that require initialization are: * 1) Methods @@ -540,6 +540,10 @@ AcpiNsInitOneObject ( break; } + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_PARSE, + "%s: Completing resolution of Package elements\n", + ACPI_GET_FUNCTION_NAME)); + /* * Resolve all named references in package objects (and all * sub-packages). This action has been deferred until the entire @@ -548,6 +552,7 @@ AcpiNsInitOneObject ( */ Status = AcpiUtWalkPackageTree (ObjDesc, NULL, AcpiDsInitPackageElement, NULL); + ObjDesc->Package.Flags |= AOPOBJ_DATA_VALID; break; diff --git a/src/acpica/source/components/namespace/nsnames.c b/src/acpica/source/components/namespace/nsnames.c index b29eac42..097037cb 100644 --- a/src/acpica/source/components/namespace/nsnames.c +++ b/src/acpica/source/components/namespace/nsnames.c @@ -511,6 +511,9 @@ AcpiNsGetNormalizedPathname ( (void) AcpiNsBuildNormalizedPath (Node, NameBuffer, Size, NoTrailing); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_NAMES, "%s: Path \"%s\"\n", + ACPI_GET_FUNCTION_NAME, NameBuffer)); + return_PTR (NameBuffer); } diff --git a/src/acpica/source/components/namespace/nsparse.c b/src/acpica/source/components/namespace/nsparse.c index baa37d26..bb24bab9 100644 --- a/src/acpica/source/components/namespace/nsparse.c +++ b/src/acpica/source/components/namespace/nsparse.c @@ -232,8 +232,9 @@ AcpiNsExecuteTable ( goto Cleanup; } - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, - "Create table code block: %p\n", MethodObj)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_PARSE, + "%s: Create table pseudo-method for [%4.4s] @%p, method %p\n", + ACPI_GET_FUNCTION_NAME, Table->Signature, Table, MethodObj)); MethodObj->Method.AmlStart = AmlStart; MethodObj->Method.AmlLength = AmlLength; @@ -404,7 +405,8 @@ AcpiNsParseTable ( if (AcpiGbl_ParseTableAsTermList) { - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "**** Start load pass\n")); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_PARSE, + "%s: **** Start table execution pass\n", ACPI_GET_FUNCTION_NAME)); Status = AcpiNsExecuteTable (TableIndex, StartNode); if (ACPI_FAILURE (Status)) diff --git a/src/acpica/source/components/parser/psargs.c b/src/acpica/source/components/parser/psargs.c index 0e0b1002..c9c17371 100644 --- a/src/acpica/source/components/parser/psargs.c +++ b/src/acpica/source/components/parser/psargs.c @@ -1067,10 +1067,9 @@ AcpiPsGetNextArg ( case ARGP_DATAOBJ: case ARGP_TERMARG: - - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, - "**** TermArg/DataObj: %s (%2.2X)\n", - AcpiUtGetArgumentTypeName (ArgType), ArgType)); + ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, + "**** TermArg/DataObj: %s (%2.2X)\n", + AcpiUtGetArgumentTypeName (ArgType), ArgType)); /* Single complex argument, nothing returned */ diff --git a/src/acpica/source/components/parser/psloop.c b/src/acpica/source/components/parser/psloop.c index fd868f50..74e8f0d6 100644 --- a/src/acpica/source/components/parser/psloop.c +++ b/src/acpica/source/components/parser/psloop.c @@ -283,7 +283,7 @@ AcpiPsGetArguments ( } ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, - "Final argument count: %u pass %u\n", + "Final argument count: %8.8X pass %u\n", WalkState->ArgCount, WalkState->PassNumber)); /* @@ -697,7 +697,7 @@ AcpiPsParseLoop ( /* Check for arguments that need to be processed */ ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, - "Parseloop: argument count: %u\n", WalkState->ArgCount)); + "Parseloop: argument count: %8.8X\n", WalkState->ArgCount)); if (WalkState->ArgCount) { diff --git a/src/acpica/source/components/parser/psparse.c b/src/acpica/source/components/parser/psparse.c index ce7ae94a..0ad62b77 100644 --- a/src/acpica/source/components/parser/psparse.c +++ b/src/acpica/source/components/parser/psparse.c @@ -576,7 +576,7 @@ AcpiPsParseAml ( if (!WalkState->ParserState.Aml) { - return_ACPI_STATUS (AE_NULL_OBJECT); + return_ACPI_STATUS (AE_BAD_ADDRESS); } /* Create and initialize a new thread state */ diff --git a/src/acpica/source/components/parser/pstree.c b/src/acpica/source/components/parser/pstree.c index da1d222d..baed9256 100644 --- a/src/acpica/source/components/parser/pstree.c +++ b/src/acpica/source/components/parser/pstree.c @@ -438,6 +438,7 @@ AcpiPsGetChild ( case AML_BUFFER_OP: case AML_PACKAGE_OP: + case AML_VARIABLE_PACKAGE_OP: case AML_METHOD_OP: case AML_IF_OP: case AML_WHILE_OP: diff --git a/src/acpica/source/components/utilities/utcache.c b/src/acpica/source/components/utilities/utcache.c index 881dbf35..b324f28c 100644 --- a/src/acpica/source/components/utilities/utcache.c +++ b/src/acpica/source/components/utilities/utcache.c @@ -415,8 +415,9 @@ AcpiOsAcquireObject ( Cache->CurrentDepth--; ACPI_MEM_TRACKING (Cache->Hits++); - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Object %p from %s cache\n", Object, Cache->ListName)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, + "%s: Object %p from %s cache\n", + ACPI_GET_FUNCTION_NAME, Object, Cache->ListName)); Status = AcpiUtReleaseMutex (ACPI_MTX_CACHES); if (ACPI_FAILURE (Status)) diff --git a/src/acpica/source/components/utilities/utdelete.c b/src/acpica/source/components/utilities/utdelete.c index 377ddfe5..4565d8fa 100644 --- a/src/acpica/source/components/utilities/utdelete.c +++ b/src/acpica/source/components/utilities/utdelete.c @@ -454,8 +454,8 @@ AcpiUtDeleteInternalObj ( /* Now the object can be safely deleted */ - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Deleting Object %p [%s]\n", - Object, AcpiUtGetObjectTypeName (Object))); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ALLOCATIONS, "%s: Deleting Object %p [%s]\n", + ACPI_GET_FUNCTION_NAME, Object, AcpiUtGetObjectTypeName (Object))); AcpiUtDeleteObjectDesc (Object); return_VOID; @@ -581,9 +581,9 @@ AcpiUtUpdateRefCount ( Object)); } - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, - "Obj %p Type %.2X Refs %.2X [Decremented]\n", - Object, Object->Common.Type, NewCount)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ALLOCATIONS, + "%s: Obj %p Type %.2X Refs %.2X [Decremented]\n", + ACPI_GET_FUNCTION_NAME, Object, Object->Common.Type, NewCount)); /* Actually delete the object on a reference count of zero */ @@ -906,9 +906,9 @@ AcpiUtRemoveReference ( return; } - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, - "Obj %p Current Refs=%X [To Be Decremented]\n", - Object, Object->Common.ReferenceCount)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ALLOCATIONS, + "%s: Obj %p Current Refs=%X [To Be Decremented]\n", + ACPI_GET_FUNCTION_NAME, Object, Object->Common.ReferenceCount)); /* * Decrement the reference count, and only actually delete the object diff --git a/src/acpica/source/include/acopcode.h b/src/acpica/source/include/acopcode.h index 56f13663..6dbeac68 100644 --- a/src/acpica/source/include/acopcode.h +++ b/src/acpica/source/include/acopcode.h @@ -361,7 +361,7 @@ #define ARGI_FIELD_OP ARGI_INVALID_OPCODE #define ARGI_FIND_SET_LEFT_BIT_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF) #define ARGI_FIND_SET_RIGHT_BIT_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF) -#define ARGI_FROM_BCD_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF) +#define ARGI_FROM_BCD_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_FIXED_TARGET) #define ARGI_IF_OP ARGI_INVALID_OPCODE #define ARGI_INCREMENT_OP ARGI_LIST1 (ARGI_TARGETREF) #define ARGI_INDEX_FIELD_OP ARGI_INVALID_OPCODE @@ -425,12 +425,12 @@ #define ARGI_SUBTRACT_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) #define ARGI_THERMAL_ZONE_OP ARGI_INVALID_OPCODE #define ARGI_TIMER_OP ARG_NONE -#define ARGI_TO_BCD_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF) -#define ARGI_TO_BUFFER_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_TARGETREF) -#define ARGI_TO_DEC_STR_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_TARGETREF) -#define ARGI_TO_HEX_STR_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_TARGETREF) -#define ARGI_TO_INTEGER_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_TARGETREF) -#define ARGI_TO_STRING_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_TARGETREF) +#define ARGI_TO_BCD_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_FIXED_TARGET) +#define ARGI_TO_BUFFER_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET) +#define ARGI_TO_DEC_STR_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET) +#define ARGI_TO_HEX_STR_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET) +#define ARGI_TO_INTEGER_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET) +#define ARGI_TO_STRING_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_FIXED_TARGET) #define ARGI_UNLOAD_OP ARGI_LIST1 (ARGI_DDBHANDLE) #define ARGI_VAR_PACKAGE_OP ARGI_LIST1 (ARGI_INTEGER) #define ARGI_WAIT_OP ARGI_LIST2 (ARGI_EVENT, ARGI_INTEGER) diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h index 864d1275..2f0ac564 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 0x20180105 +#define ACPI_CA_VERSION 0x20180209 #include "acconfig.h" #include "actypes.h" @@ -302,6 +302,8 @@ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_DoNotUseXsdt, FALSE); /* * Optionally support group module level code. + * NOTE, this is essentially obsolete and will be removed soon + * (01/2018). */ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_GroupModuleLevelCode, FALSE); @@ -309,8 +311,10 @@ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_GroupModuleLevelCode, FALSE); * Optionally support module level code by parsing the entire table as * a TermList. Default is FALSE, do not execute entire table until some * lock order issues are fixed. + * NOTE, this is essentially obsolete and will be removed soon + * (01/2018). */ -ACPI_INIT_GLOBAL (UINT8, AcpiGbl_ParseTableAsTermList, FALSE); +ACPI_INIT_GLOBAL (UINT8, AcpiGbl_ParseTableAsTermList, TRUE); /* * Optionally use 32-bit FADT addresses if and when there is a conflict diff --git a/src/acpica/source/include/actbl1.h b/src/acpica/source/include/actbl1.h index a9db6fc7..4f03ab05 100644 --- a/src/acpica/source/include/actbl1.h +++ b/src/acpica/source/include/actbl1.h @@ -155,13 +155,11 @@ /******************************************************************************* * - * Additional ACPI Tables (1) + * Additional ACPI Tables * * These tables are not consumed directly by the ACPICA subsystem, but are * included here to support device drivers and the AML disassembler. * - * The tables in this file are fully defined within the ACPI specification. - * ******************************************************************************/ @@ -170,24 +168,44 @@ * file. Useful because they make it more difficult to inadvertently type in * the wrong signature. */ +#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 */ +#define ACPI_SIG_BOOT "BOOT" /* Simple Boot Flag Table */ #define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */ +#define ACPI_SIG_CSRT "CSRT" /* Core System Resource Table */ +#define ACPI_SIG_DBG2 "DBG2" /* Debug Port table type 2 */ +#define ACPI_SIG_DBGP "DBGP" /* Debug Port table */ +#define ACPI_SIG_DMAR "DMAR" /* DMA Remapping table */ +#define ACPI_SIG_DRTM "DRTM" /* Dynamic Root of Trust for Measurement table */ #define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */ #define ACPI_SIG_EINJ "EINJ" /* Error Injection table */ #define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */ -#define ACPI_SIG_HMAT "HMAT" /* Heterogeneous Memory Attributes Table */ +#define ACPI_SIG_FPDT "FPDT" /* Firmware Performance Data Table */ +#define ACPI_SIG_GTDT "GTDT" /* Generic Timer Description Table */ #define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */ -#define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ -#define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */ -#define ACPI_SIG_PDTT "PDTT" /* Platform Debug Trigger Table */ -#define ACPI_SIG_PPTT "PPTT" /* Processor Properties Topology Table */ -#define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ -#define ACPI_SIG_SDEV "SDEV" /* Secure Devices table */ -#define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */ -#define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */ -#define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */ +#define ACPI_SIG_HMAT "HMAT" /* Heterogeneous Memory Attributes Table */ +#define ACPI_SIG_HPET "HPET" /* High Precision Event Timer table */ +#define ACPI_SIG_IBFT "IBFT" /* iSCSI Boot Firmware Table */ + +#define ACPI_SIG_S3PT "S3PT" /* S3 Performance (sub)Table */ +#define ACPI_SIG_PCCS "PCC" /* PCC Shared Memory Region */ +/* Reserved table signatures */ + +#define ACPI_SIG_MATR "MATR" /* Memory Address Translation Table */ +#define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ + +/* + * These tables have been seen in the field, but no definition has been found + */ +#ifdef ACPI_UNDEFINED_TABLES +#define ACPI_SIG_ATKG "ATKG" +#define ACPI_SIG_GSCI "GSCI" /* GMCH SCI table */ +#define ACPI_SIG_IEIT "IEIT" +#endif + /* * All tables must be byte-packed to match the ACPI specification, since * the tables are provided by the system BIOS. @@ -238,6 +256,146 @@ typedef struct acpi_whea_header } ACPI_WHEA_HEADER; +/******************************************************************************* + * + * ASF - Alert Standard Format table (Signature "ASF!") + * Revision 0x10 + * + * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003 + * + ******************************************************************************/ + +typedef struct acpi_table_asf +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + +} ACPI_TABLE_ASF; + + +/* ASF subtable header */ + +typedef struct acpi_asf_header +{ + UINT8 Type; + UINT8 Reserved; + UINT16 Length; + +} ACPI_ASF_HEADER; + + +/* Values for Type field above */ + +enum AcpiAsfType +{ + ACPI_ASF_TYPE_INFO = 0, + ACPI_ASF_TYPE_ALERT = 1, + ACPI_ASF_TYPE_CONTROL = 2, + ACPI_ASF_TYPE_BOOT = 3, + ACPI_ASF_TYPE_ADDRESS = 4, + ACPI_ASF_TYPE_RESERVED = 5 +}; + +/* + * ASF subtables + */ + +/* 0: ASF Information */ + +typedef struct acpi_asf_info +{ + ACPI_ASF_HEADER Header; + UINT8 MinResetValue; + UINT8 MinPollInterval; + UINT16 SystemId; + UINT32 MfgId; + UINT8 Flags; + UINT8 Reserved2[3]; + +} ACPI_ASF_INFO; + +/* Masks for Flags field above */ + +#define ACPI_ASF_SMBUS_PROTOCOLS (1) + + +/* 1: ASF Alerts */ + +typedef struct acpi_asf_alert +{ + ACPI_ASF_HEADER Header; + UINT8 AssertMask; + UINT8 DeassertMask; + UINT8 Alerts; + UINT8 DataLength; + +} ACPI_ASF_ALERT; + +typedef struct acpi_asf_alert_data +{ + UINT8 Address; + UINT8 Command; + UINT8 Mask; + UINT8 Value; + UINT8 SensorType; + UINT8 Type; + UINT8 Offset; + UINT8 SourceType; + UINT8 Severity; + UINT8 SensorNumber; + UINT8 Entity; + UINT8 Instance; + +} ACPI_ASF_ALERT_DATA; + + +/* 2: ASF Remote Control */ + +typedef struct acpi_asf_remote +{ + ACPI_ASF_HEADER Header; + UINT8 Controls; + UINT8 DataLength; + UINT16 Reserved2; + +} ACPI_ASF_REMOTE; + +typedef struct acpi_asf_control_data +{ + UINT8 Function; + UINT8 Address; + UINT8 Command; + UINT8 Value; + +} ACPI_ASF_CONTROL_DATA; + + +/* 3: ASF RMCP Boot Options */ + +typedef struct acpi_asf_rmcp +{ + ACPI_ASF_HEADER Header; + UINT8 Capabilities[7]; + UINT8 CompletionCode; + UINT32 EnterpriseId; + UINT8 Command; + UINT16 Parameter; + UINT16 BootOptions; + UINT16 OemParameters; + +} ACPI_ASF_RMCP; + + +/* 4: ASF Address */ + +typedef struct acpi_asf_address +{ + ACPI_ASF_HEADER Header; + UINT8 EpromAddress; + UINT8 Devices; + +} ACPI_ASF_ADDRESS; + + /******************************************************************************* * * BERT - Boot Error Record Table (ACPI 4.0) @@ -291,6 +449,49 @@ enum AcpiBertErrorSeverity */ +/******************************************************************************* + * + * BGRT - Boot Graphics Resource Table (ACPI 5.0) + * Version 1 + * + ******************************************************************************/ + +typedef struct acpi_table_bgrt +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT16 Version; + UINT8 Status; + UINT8 ImageType; + UINT64 ImageAddress; + UINT32 ImageOffsetX; + UINT32 ImageOffsetY; + +} ACPI_TABLE_BGRT; + +/* Flags for Status field above */ + +#define ACPI_BGRT_DISPLAYED (1) +#define ACPI_BGRT_ORIENTATION_OFFSET (3 << 1) + + +/******************************************************************************* + * + * BOOT - Simple Boot Flag Table + * Version 1 + * + * Conforms to the "Simple Boot Flag Specification", Version 2.1 + * + ******************************************************************************/ + +typedef struct acpi_table_boot +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT8 CmosIndex; /* Index in CMOS RAM for the boot register */ + UINT8 Reserved[3]; + +} ACPI_TABLE_BOOT; + + /******************************************************************************* * * CPEP - Corrected Platform Error Polling table (ACPI 4.0) @@ -320,1725 +521,1522 @@ typedef struct acpi_cpep_polling /******************************************************************************* * - * ECDT - Embedded Controller Boot Resources Table - * Version 1 + * CSRT - Core System Resource Table + * Version 0 + * + * Conforms to the "Core System Resource Table (CSRT)", November 14, 2011 * ******************************************************************************/ -typedef struct acpi_table_ecdt +typedef struct acpi_table_csrt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - ACPI_GENERIC_ADDRESS Control; /* Address of EC command/status register */ - ACPI_GENERIC_ADDRESS Data; /* Address of EC data register */ - UINT32 Uid; /* Unique ID - must be same as the EC _UID method */ - UINT8 Gpe; /* The GPE for the EC */ - UINT8 Id[1]; /* Full namepath of the EC in the ACPI namespace */ -} ACPI_TABLE_ECDT; +} ACPI_TABLE_CSRT; -/******************************************************************************* - * - * EINJ - Error Injection Table (ACPI 4.0) - * Version 1 - * - ******************************************************************************/ +/* Resource Group subtable */ -typedef struct acpi_table_einj +typedef struct acpi_csrt_group { - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 HeaderLength; - UINT8 Flags; - UINT8 Reserved[3]; - UINT32 Entries; + UINT32 Length; + UINT32 VendorId; + UINT32 SubvendorId; + UINT16 DeviceId; + UINT16 SubdeviceId; + UINT16 Revision; + UINT16 Reserved; + UINT32 SharedInfoLength; -} ACPI_TABLE_EINJ; + /* Shared data immediately follows (Length = SharedInfoLength) */ +} ACPI_CSRT_GROUP; -/* EINJ Injection Instruction Entries (actions) */ +/* Shared Info subtable */ -typedef struct acpi_einj_entry +typedef struct acpi_csrt_shared_info { - ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ - -} ACPI_EINJ_ENTRY; + UINT16 MajorVersion; + UINT16 MinorVersion; + UINT32 MmioBaseLow; + UINT32 MmioBaseHigh; + UINT32 GsiInterrupt; + UINT8 InterruptPolarity; + UINT8 InterruptMode; + UINT8 NumChannels; + UINT8 DmaAddressWidth; + UINT16 BaseRequestLine; + UINT16 NumHandshakeSignals; + UINT32 MaxBlockSize; -/* Masks for Flags field above */ + /* Resource descriptors immediately follow (Length = Group Length - SharedInfoLength) */ -#define ACPI_EINJ_PRESERVE (1) +} ACPI_CSRT_SHARED_INFO; -/* Values for Action field above */ +/* Resource Descriptor subtable */ -enum AcpiEinjActions +typedef struct acpi_csrt_descriptor { - ACPI_EINJ_BEGIN_OPERATION = 0, - ACPI_EINJ_GET_TRIGGER_TABLE = 1, - ACPI_EINJ_SET_ERROR_TYPE = 2, - ACPI_EINJ_GET_ERROR_TYPE = 3, - ACPI_EINJ_END_OPERATION = 4, - ACPI_EINJ_EXECUTE_OPERATION = 5, - ACPI_EINJ_CHECK_BUSY_STATUS = 6, - ACPI_EINJ_GET_COMMAND_STATUS = 7, - ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8, - ACPI_EINJ_GET_EXECUTE_TIMINGS = 9, - ACPI_EINJ_ACTION_RESERVED = 10, /* 10 and greater are reserved */ - ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */ -}; + UINT32 Length; + UINT16 Type; + UINT16 Subtype; + UINT32 Uid; -/* Values for Instruction field above */ + /* Resource-specific information immediately follows */ -enum AcpiEinjInstructions -{ - ACPI_EINJ_READ_REGISTER = 0, - ACPI_EINJ_READ_REGISTER_VALUE = 1, - ACPI_EINJ_WRITE_REGISTER = 2, - ACPI_EINJ_WRITE_REGISTER_VALUE = 3, - ACPI_EINJ_NOOP = 4, - ACPI_EINJ_FLUSH_CACHELINE = 5, - ACPI_EINJ_INSTRUCTION_RESERVED = 6 /* 6 and greater are reserved */ -}; +} ACPI_CSRT_DESCRIPTOR; -typedef struct acpi_einj_error_type_with_addr + +/* Resource Types */ + +#define ACPI_CSRT_TYPE_INTERRUPT 0x0001 +#define ACPI_CSRT_TYPE_TIMER 0x0002 +#define ACPI_CSRT_TYPE_DMA 0x0003 + +/* Resource Subtypes */ + +#define ACPI_CSRT_XRUPT_LINE 0x0000 +#define ACPI_CSRT_XRUPT_CONTROLLER 0x0001 +#define ACPI_CSRT_TIMER 0x0000 +#define ACPI_CSRT_DMA_CHANNEL 0x0000 +#define ACPI_CSRT_DMA_CONTROLLER 0x0001 + + +/******************************************************************************* + * + * DBG2 - Debug Port Table 2 + * Version 0 (Both main table and subtables) + * + * Conforms to "Microsoft Debug Port Table 2 (DBG2)", December 10, 2015 + * + ******************************************************************************/ + +typedef struct acpi_table_dbg2 { - UINT32 ErrorType; - UINT32 VendorStructOffset; - UINT32 Flags; - UINT32 ApicId; - UINT64 Address; - UINT64 Range; - UINT32 PcieId; + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 InfoOffset; + UINT32 InfoCount; -} ACPI_EINJ_ERROR_TYPE_WITH_ADDR; +} ACPI_TABLE_DBG2; -typedef struct acpi_einj_vendor + +typedef struct acpi_dbg2_header { - UINT32 Length; - UINT32 PcieId; - UINT16 VendorId; - UINT16 DeviceId; - UINT8 RevisionId; - UINT8 Reserved[3]; + UINT32 InfoOffset; + UINT32 InfoCount; -} ACPI_EINJ_VENDOR; +} ACPI_DBG2_HEADER; -/* EINJ Trigger Error Action Table */ +/* Debug Device Information Subtable */ -typedef struct acpi_einj_trigger +typedef struct acpi_dbg2_device { - UINT32 HeaderSize; - UINT32 Revision; - UINT32 TableSize; - UINT32 EntryCount; + UINT8 Revision; + UINT16 Length; + UINT8 RegisterCount; /* Number of BaseAddress registers */ + UINT16 NamepathLength; + UINT16 NamepathOffset; + UINT16 OemDataLength; + UINT16 OemDataOffset; + UINT16 PortType; + UINT16 PortSubtype; + UINT16 Reserved; + UINT16 BaseAddressOffset; + UINT16 AddressSizeOffset; + /* + * Data that follows: + * BaseAddress (required) - Each in 12-byte Generic Address Structure format. + * AddressSize (required) - Array of UINT32 sizes corresponding to each BaseAddress register. + * Namepath (required) - Null terminated string. Single dot if not supported. + * OemData (optional) - Length is OemDataLength. + */ +} ACPI_DBG2_DEVICE; -} ACPI_EINJ_TRIGGER; +/* Types for PortType field above */ -/* Command status return values */ +#define ACPI_DBG2_SERIAL_PORT 0x8000 +#define ACPI_DBG2_1394_PORT 0x8001 +#define ACPI_DBG2_USB_PORT 0x8002 +#define ACPI_DBG2_NET_PORT 0x8003 -enum AcpiEinjCommandStatus -{ - ACPI_EINJ_SUCCESS = 0, - ACPI_EINJ_FAILURE = 1, - ACPI_EINJ_INVALID_ACCESS = 2, - ACPI_EINJ_STATUS_RESERVED = 3 /* 3 and greater are reserved */ -}; +/* Subtypes for PortSubtype field above */ +#define ACPI_DBG2_16550_COMPATIBLE 0x0000 +#define ACPI_DBG2_16550_SUBSET 0x0001 +#define ACPI_DBG2_ARM_PL011 0x0003 +#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 -/* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */ +#define ACPI_DBG2_1394_STANDARD 0x0000 -#define ACPI_EINJ_PROCESSOR_CORRECTABLE (1) -#define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1) -#define ACPI_EINJ_PROCESSOR_FATAL (1<<2) -#define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3) -#define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4) -#define ACPI_EINJ_MEMORY_FATAL (1<<5) -#define ACPI_EINJ_PCIX_CORRECTABLE (1<<6) -#define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7) -#define ACPI_EINJ_PCIX_FATAL (1<<8) -#define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9) -#define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10) -#define ACPI_EINJ_PLATFORM_FATAL (1<<11) -#define ACPI_EINJ_VENDOR_DEFINED (1<<31) +#define ACPI_DBG2_USB_XHCI 0x0000 +#define ACPI_DBG2_USB_EHCI 0x0001 /******************************************************************************* * - * ERST - Error Record Serialization Table (ACPI 4.0) + * DBGP - Debug Port table * Version 1 * + * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000 + * ******************************************************************************/ -typedef struct acpi_table_erst +typedef struct acpi_table_dbgp { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 HeaderLength; - UINT32 Reserved; - UINT32 Entries; + UINT8 Type; /* 0=full 16550, 1=subset of 16550 */ + UINT8 Reserved[3]; + ACPI_GENERIC_ADDRESS DebugPort; -} ACPI_TABLE_ERST; +} ACPI_TABLE_DBGP; -/* ERST Serialization Entries (actions) */ +/******************************************************************************* + * + * DMAR - DMA Remapping table + * Version 1 + * + * Conforms to "Intel Virtualization Technology for Directed I/O", + * Version 2.3, October 2014 + * + ******************************************************************************/ -typedef struct acpi_erst_entry +typedef struct acpi_table_dmar { - ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT8 Width; /* Host Address Width */ + UINT8 Flags; + UINT8 Reserved[10]; -} ACPI_ERST_ENTRY; +} ACPI_TABLE_DMAR; /* Masks for Flags field above */ -#define ACPI_ERST_PRESERVE (1) +#define ACPI_DMAR_INTR_REMAP (1) +#define ACPI_DMAR_X2APIC_OPT_OUT (1<<1) +#define ACPI_DMAR_X2APIC_MODE (1<<2) -/* Values for Action field above */ -enum AcpiErstActions +/* DMAR subtable header */ + +typedef struct acpi_dmar_header { - ACPI_ERST_BEGIN_WRITE = 0, - ACPI_ERST_BEGIN_READ = 1, - ACPI_ERST_BEGIN_CLEAR = 2, - ACPI_ERST_END = 3, - ACPI_ERST_SET_RECORD_OFFSET = 4, - ACPI_ERST_EXECUTE_OPERATION = 5, - ACPI_ERST_CHECK_BUSY_STATUS = 6, - ACPI_ERST_GET_COMMAND_STATUS = 7, - ACPI_ERST_GET_RECORD_ID = 8, - ACPI_ERST_SET_RECORD_ID = 9, - ACPI_ERST_GET_RECORD_COUNT = 10, - ACPI_ERST_BEGIN_DUMMY_WRIITE = 11, - ACPI_ERST_NOT_USED = 12, - ACPI_ERST_GET_ERROR_RANGE = 13, - ACPI_ERST_GET_ERROR_LENGTH = 14, - ACPI_ERST_GET_ERROR_ATTRIBUTES = 15, - ACPI_ERST_EXECUTE_TIMINGS = 16, - ACPI_ERST_ACTION_RESERVED = 17 /* 17 and greater are reserved */ -}; + UINT16 Type; + UINT16 Length; -/* Values for Instruction field above */ +} ACPI_DMAR_HEADER; -enum AcpiErstInstructions -{ - ACPI_ERST_READ_REGISTER = 0, - ACPI_ERST_READ_REGISTER_VALUE = 1, - ACPI_ERST_WRITE_REGISTER = 2, - ACPI_ERST_WRITE_REGISTER_VALUE = 3, - ACPI_ERST_NOOP = 4, - ACPI_ERST_LOAD_VAR1 = 5, - ACPI_ERST_LOAD_VAR2 = 6, - ACPI_ERST_STORE_VAR1 = 7, - ACPI_ERST_ADD = 8, - ACPI_ERST_SUBTRACT = 9, - ACPI_ERST_ADD_VALUE = 10, - ACPI_ERST_SUBTRACT_VALUE = 11, - ACPI_ERST_STALL = 12, - ACPI_ERST_STALL_WHILE_TRUE = 13, - ACPI_ERST_SKIP_NEXT_IF_TRUE = 14, - ACPI_ERST_GOTO = 15, - ACPI_ERST_SET_SRC_ADDRESS_BASE = 16, - ACPI_ERST_SET_DST_ADDRESS_BASE = 17, - ACPI_ERST_MOVE_DATA = 18, - ACPI_ERST_INSTRUCTION_RESERVED = 19 /* 19 and greater are reserved */ -}; - -/* Command status return values */ +/* Values for subtable type in ACPI_DMAR_HEADER */ -enum AcpiErstCommandStatus +enum AcpiDmarType { - ACPI_ERST_SUCESS = 0, - ACPI_ERST_NO_SPACE = 1, - ACPI_ERST_NOT_AVAILABLE = 2, - ACPI_ERST_FAILURE = 3, - ACPI_ERST_RECORD_EMPTY = 4, - ACPI_ERST_NOT_FOUND = 5, - ACPI_ERST_STATUS_RESERVED = 6 /* 6 and greater are reserved */ + ACPI_DMAR_TYPE_HARDWARE_UNIT = 0, + ACPI_DMAR_TYPE_RESERVED_MEMORY = 1, + ACPI_DMAR_TYPE_ROOT_ATS = 2, + ACPI_DMAR_TYPE_HARDWARE_AFFINITY = 3, + ACPI_DMAR_TYPE_NAMESPACE = 4, + ACPI_DMAR_TYPE_RESERVED = 5 /* 5 and greater are reserved */ }; -/* Error Record Serialization Information */ +/* DMAR Device Scope structure */ -typedef struct acpi_erst_info +typedef struct acpi_dmar_device_scope { - UINT16 Signature; /* Should be "ER" */ - UINT8 Data[48]; - -} ACPI_ERST_INFO; + UINT8 EntryType; + UINT8 Length; + UINT16 Reserved; + UINT8 EnumerationId; + UINT8 Bus; +} ACPI_DMAR_DEVICE_SCOPE; -/******************************************************************************* - * - * HEST - Hardware Error Source Table (ACPI 4.0) - * Version 1 - * - ******************************************************************************/ +/* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE - device types */ -typedef struct acpi_table_hest +enum AcpiDmarScopeType { - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 ErrorSourceCount; - -} ACPI_TABLE_HEST; - - -/* HEST subtable header */ + ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0, + ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1, + ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2, + ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3, + ACPI_DMAR_SCOPE_TYPE_HPET = 4, + ACPI_DMAR_SCOPE_TYPE_NAMESPACE = 5, + ACPI_DMAR_SCOPE_TYPE_RESERVED = 6 /* 6 and greater are reserved */ +}; -typedef struct acpi_hest_header +typedef struct acpi_dmar_pci_path { - UINT16 Type; - UINT16 SourceId; - -} ACPI_HEST_HEADER; + UINT8 Device; + UINT8 Function; - -/* Values for Type field above for subtables */ - -enum AcpiHestTypes -{ - ACPI_HEST_TYPE_IA32_CHECK = 0, - ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1, - ACPI_HEST_TYPE_IA32_NMI = 2, - ACPI_HEST_TYPE_NOT_USED3 = 3, - ACPI_HEST_TYPE_NOT_USED4 = 4, - ACPI_HEST_TYPE_NOT_USED5 = 5, - ACPI_HEST_TYPE_AER_ROOT_PORT = 6, - ACPI_HEST_TYPE_AER_ENDPOINT = 7, - ACPI_HEST_TYPE_AER_BRIDGE = 8, - ACPI_HEST_TYPE_GENERIC_ERROR = 9, - ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10, - ACPI_HEST_TYPE_IA32_DEFERRED_CHECK = 11, - ACPI_HEST_TYPE_RESERVED = 12 /* 12 and greater are reserved */ -}; +} ACPI_DMAR_PCI_PATH; /* - * HEST substructures contained in subtables + * DMAR Subtables, correspond to Type in ACPI_DMAR_HEADER */ -/* - * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and - * ACPI_HEST_IA_CORRECTED structures. - */ -typedef struct acpi_hest_ia_error_bank -{ - UINT8 BankNumber; - UINT8 ClearStatusOnInit; - UINT8 StatusFormat; - UINT8 Reserved; - UINT32 ControlRegister; - UINT64 ControlData; - UINT32 StatusRegister; - UINT32 AddressRegister; - UINT32 MiscRegister; - -} ACPI_HEST_IA_ERROR_BANK; - - -/* Common HEST sub-structure for PCI/AER structures below (6,7,8) */ +/* 0: Hardware Unit Definition */ -typedef struct acpi_hest_aer_common +typedef struct acpi_dmar_hardware_unit { - UINT16 Reserved1; + ACPI_DMAR_HEADER Header; UINT8 Flags; - UINT8 Enabled; - UINT32 RecordsToPreallocate; - UINT32 MaxSectionsPerRecord; - UINT32 Bus; /* Bus and Segment numbers */ - UINT16 Device; - UINT16 Function; - UINT16 DeviceControl; - UINT16 Reserved2; - UINT32 UncorrectableMask; - UINT32 UncorrectableSeverity; - UINT32 CorrectableMask; - UINT32 AdvancedCapabilities; - -} ACPI_HEST_AER_COMMON; - -/* Masks for HEST Flags fields */ - -#define ACPI_HEST_FIRMWARE_FIRST (1) -#define ACPI_HEST_GLOBAL (1<<1) -#define ACPI_HEST_GHES_ASSIST (1<<2) - -/* - * Macros to access the bus/segment numbers in Bus field above: - * Bus number is encoded in bits 7:0 - * Segment number is encoded in bits 23:8 - */ -#define ACPI_HEST_BUS(Bus) ((Bus) & 0xFF) -#define ACPI_HEST_SEGMENT(Bus) (((Bus) >> 8) & 0xFFFF) + UINT8 Reserved; + UINT16 Segment; + UINT64 Address; /* Register Base Address */ +} ACPI_DMAR_HARDWARE_UNIT; -/* Hardware Error Notification */ +/* Masks for Flags field above */ -typedef struct acpi_hest_notify -{ - UINT8 Type; - UINT8 Length; - UINT16 ConfigWriteEnable; - UINT32 PollInterval; - UINT32 Vector; - UINT32 PollingThresholdValue; - UINT32 PollingThresholdWindow; - UINT32 ErrorThresholdValue; - UINT32 ErrorThresholdWindow; +#define ACPI_DMAR_INCLUDE_ALL (1) -} ACPI_HEST_NOTIFY; -/* Values for Notify Type field above */ +/* 1: Reserved Memory Defininition */ -enum AcpiHestNotifyTypes +typedef struct acpi_dmar_reserved_memory { - ACPI_HEST_NOTIFY_POLLED = 0, - ACPI_HEST_NOTIFY_EXTERNAL = 1, - ACPI_HEST_NOTIFY_LOCAL = 2, - ACPI_HEST_NOTIFY_SCI = 3, - ACPI_HEST_NOTIFY_NMI = 4, - ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */ - ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */ - ACPI_HEST_NOTIFY_GPIO = 7, /* ACPI 6.0 */ - ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */ - ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */ - ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */ - ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11, /* ACPI 6.2 */ - ACPI_HEST_NOTIFY_RESERVED = 12 /* 12 and greater are reserved */ -}; + ACPI_DMAR_HEADER Header; + UINT16 Reserved; + UINT16 Segment; + UINT64 BaseAddress; /* 4K aligned base address */ + UINT64 EndAddress; /* 4K aligned limit address */ -/* Values for ConfigWriteEnable bitfield above */ +} ACPI_DMAR_RESERVED_MEMORY; -#define ACPI_HEST_TYPE (1) -#define ACPI_HEST_POLL_INTERVAL (1<<1) -#define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2) -#define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3) -#define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4) -#define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5) +/* Masks for Flags field above */ +#define ACPI_DMAR_ALLOW_ALL (1) -/* - * HEST subtables - */ -/* 0: IA32 Machine Check Exception */ +/* 2: Root Port ATS Capability Reporting Structure */ -typedef struct acpi_hest_ia_machine_check +typedef struct acpi_dmar_atsr { - ACPI_HEST_HEADER Header; - UINT16 Reserved1; - UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ - UINT8 Enabled; - UINT32 RecordsToPreallocate; - UINT32 MaxSectionsPerRecord; - UINT64 GlobalCapabilityData; - UINT64 GlobalControlData; - UINT8 NumHardwareBanks; - UINT8 Reserved3[7]; - -} ACPI_HEST_IA_MACHINE_CHECK; - + ACPI_DMAR_HEADER Header; + UINT8 Flags; + UINT8 Reserved; + UINT16 Segment; -/* 1: IA32 Corrected Machine Check */ +} ACPI_DMAR_ATSR; -typedef struct acpi_hest_ia_corrected -{ - ACPI_HEST_HEADER Header; - UINT16 Reserved1; - UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ - UINT8 Enabled; - UINT32 RecordsToPreallocate; - UINT32 MaxSectionsPerRecord; - ACPI_HEST_NOTIFY Notify; - UINT8 NumHardwareBanks; - UINT8 Reserved2[3]; +/* Masks for Flags field above */ -} ACPI_HEST_IA_CORRECTED; +#define ACPI_DMAR_ALL_PORTS (1) -/* 2: IA32 Non-Maskable Interrupt */ +/* 3: Remapping Hardware Static Affinity Structure */ -typedef struct acpi_hest_ia_nmi +typedef struct acpi_dmar_rhsa { - ACPI_HEST_HEADER Header; + ACPI_DMAR_HEADER Header; UINT32 Reserved; - UINT32 RecordsToPreallocate; - UINT32 MaxSectionsPerRecord; - UINT32 MaxRawDataLength; + UINT64 BaseAddress; + UINT32 ProximityDomain; -} ACPI_HEST_IA_NMI; +} ACPI_DMAR_RHSA; -/* 3,4,5: Not used */ +/* 4: ACPI Namespace Device Declaration Structure */ -/* 6: PCI Express Root Port AER */ - -typedef struct acpi_hest_aer_root +typedef struct acpi_dmar_andd { - ACPI_HEST_HEADER Header; - ACPI_HEST_AER_COMMON Aer; - UINT32 RootErrorCommand; + ACPI_DMAR_HEADER Header; + UINT8 Reserved[3]; + UINT8 DeviceNumber; + char DeviceName[1]; -} ACPI_HEST_AER_ROOT; +} ACPI_DMAR_ANDD; -/* 7: PCI Express AER (AER Endpoint) */ +/******************************************************************************* + * + * DRTM - Dynamic Root of Trust for Measurement table + * Conforms to "TCG D-RTM Architecture" June 17 2013, Version 1.0.0 + * Table version 1 + * + ******************************************************************************/ -typedef struct acpi_hest_aer +typedef struct acpi_table_drtm { - ACPI_HEST_HEADER Header; - ACPI_HEST_AER_COMMON Aer; - -} ACPI_HEST_AER; + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT64 EntryBaseAddress; + UINT64 EntryLength; + UINT32 EntryAddress32; + UINT64 EntryAddress64; + UINT64 ExitAddress; + UINT64 LogAreaAddress; + UINT32 LogAreaLength; + UINT64 ArchDependentAddress; + UINT32 Flags; +} ACPI_TABLE_DRTM; -/* 8: PCI Express/PCI-X Bridge AER */ - -typedef struct acpi_hest_aer_bridge -{ - ACPI_HEST_HEADER Header; - ACPI_HEST_AER_COMMON Aer; - UINT32 UncorrectableMask2; - UINT32 UncorrectableSeverity2; - UINT32 AdvancedCapabilities2; +/* Flag Definitions for above */ -} ACPI_HEST_AER_BRIDGE; +#define ACPI_DRTM_ACCESS_ALLOWED (1) +#define ACPI_DRTM_ENABLE_GAP_CODE (1<<1) +#define ACPI_DRTM_INCOMPLETE_MEASUREMENTS (1<<2) +#define ACPI_DRTM_AUTHORITY_ORDER (1<<3) -/* 9: Generic Hardware Error Source */ +/* 1) Validated Tables List (64-bit addresses) */ -typedef struct acpi_hest_generic +typedef struct acpi_drtm_vtable_list { - ACPI_HEST_HEADER Header; - UINT16 RelatedSourceId; - UINT8 Reserved; - UINT8 Enabled; - UINT32 RecordsToPreallocate; - UINT32 MaxSectionsPerRecord; - UINT32 MaxRawDataLength; - ACPI_GENERIC_ADDRESS ErrorStatusAddress; - ACPI_HEST_NOTIFY Notify; - UINT32 ErrorBlockLength; + UINT32 ValidatedTableCount; + UINT64 ValidatedTables[1]; -} ACPI_HEST_GENERIC; +} ACPI_DRTM_VTABLE_LIST; +/* 2) Resources List (of Resource Descriptors) */ -/* 10: Generic Hardware Error Source, version 2 */ +/* Resource Descriptor */ -typedef struct acpi_hest_generic_v2 +typedef struct acpi_drtm_resource { - ACPI_HEST_HEADER Header; - UINT16 RelatedSourceId; - UINT8 Reserved; - UINT8 Enabled; - UINT32 RecordsToPreallocate; - UINT32 MaxSectionsPerRecord; - UINT32 MaxRawDataLength; - ACPI_GENERIC_ADDRESS ErrorStatusAddress; - ACPI_HEST_NOTIFY Notify; - UINT32 ErrorBlockLength; - ACPI_GENERIC_ADDRESS ReadAckRegister; - UINT64 ReadAckPreserve; - UINT64 ReadAckWrite; - -} ACPI_HEST_GENERIC_V2; - - -/* Generic Error Status block */ - -typedef struct acpi_hest_generic_status -{ - UINT32 BlockStatus; - UINT32 RawDataOffset; - UINT32 RawDataLength; - UINT32 DataLength; - UINT32 ErrorSeverity; - -} ACPI_HEST_GENERIC_STATUS; - -/* Values for BlockStatus flags above */ - -#define ACPI_HEST_UNCORRECTABLE (1) -#define ACPI_HEST_CORRECTABLE (1<<1) -#define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2) -#define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3) -#define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ + UINT8 Size[7]; + UINT8 Type; + UINT64 Address; +} ACPI_DRTM_RESOURCE; -/* Generic Error Data entry */ - -typedef struct acpi_hest_generic_data +typedef struct acpi_drtm_resource_list { - UINT8 SectionType[16]; - UINT32 ErrorSeverity; - UINT16 Revision; - UINT8 ValidationBits; - UINT8 Flags; - UINT32 ErrorDataLength; - UINT8 FruId[16]; - UINT8 FruText[20]; + UINT32 ResourceCount; + ACPI_DRTM_RESOURCE Resources[1]; -} ACPI_HEST_GENERIC_DATA; +} ACPI_DRTM_RESOURCE_LIST; -/* Extension for revision 0x0300 */ +/* 3) Platform-specific Identifiers List */ -typedef struct acpi_hest_generic_data_v300 +typedef struct acpi_drtm_dps_id { - UINT8 SectionType[16]; - UINT32 ErrorSeverity; - UINT16 Revision; - UINT8 ValidationBits; - UINT8 Flags; - UINT32 ErrorDataLength; - UINT8 FruId[16]; - UINT8 FruText[20]; - UINT64 TimeStamp; + UINT32 DpsIdLength; + UINT8 DpsId[16]; -} ACPI_HEST_GENERIC_DATA_V300; +} ACPI_DRTM_DPS_ID; -/* Values for ErrorSeverity above */ -#define ACPI_HEST_GEN_ERROR_RECOVERABLE 0 -#define ACPI_HEST_GEN_ERROR_FATAL 1 -#define ACPI_HEST_GEN_ERROR_CORRECTED 2 -#define ACPI_HEST_GEN_ERROR_NONE 3 - -/* Flags for ValidationBits above */ - -#define ACPI_HEST_GEN_VALID_FRU_ID (1) -#define ACPI_HEST_GEN_VALID_FRU_STRING (1<<1) -#define ACPI_HEST_GEN_VALID_TIMESTAMP (1<<2) - - -/* 11: IA32 Deferred Machine Check Exception (ACPI 6.2) */ +/******************************************************************************* + * + * ECDT - Embedded Controller Boot Resources Table + * Version 1 + * + ******************************************************************************/ -typedef struct acpi_hest_ia_deferred_check +typedef struct acpi_table_ecdt { - ACPI_HEST_HEADER Header; - UINT16 Reserved1; - UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ - UINT8 Enabled; - UINT32 RecordsToPreallocate; - UINT32 MaxSectionsPerRecord; - ACPI_HEST_NOTIFY Notify; - UINT8 NumHardwareBanks; - UINT8 Reserved2[3]; + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + ACPI_GENERIC_ADDRESS Control; /* Address of EC command/status register */ + ACPI_GENERIC_ADDRESS Data; /* Address of EC data register */ + UINT32 Uid; /* Unique ID - must be same as the EC _UID method */ + UINT8 Gpe; /* The GPE for the EC */ + UINT8 Id[1]; /* Full namepath of the EC in the ACPI namespace */ -} ACPI_HEST_IA_DEFERRED_CHECK; +} ACPI_TABLE_ECDT; /******************************************************************************* * - * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.2) + * EINJ - Error Injection Table (ACPI 4.0) * Version 1 * ******************************************************************************/ -typedef struct acpi_table_hmat +typedef struct acpi_table_einj { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 Reserved; + UINT32 HeaderLength; + UINT8 Flags; + UINT8 Reserved[3]; + UINT32 Entries; -} ACPI_TABLE_HMAT; +} ACPI_TABLE_EINJ; -/* Values for HMAT structure types */ - -enum AcpiHmatType -{ - ACPI_HMAT_TYPE_ADDRESS_RANGE = 0, /* Memory subystem address range */ - ACPI_HMAT_TYPE_LOCALITY = 1, /* System locality latency and bandwidth information */ - ACPI_HMAT_TYPE_CACHE = 2, /* Memory side cache information */ - ACPI_HMAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */ -}; +/* EINJ Injection Instruction Entries (actions) */ -typedef struct acpi_hmat_structure +typedef struct acpi_einj_entry { - UINT16 Type; - UINT16 Reserved; - UINT32 Length; + ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ -} ACPI_HMAT_STRUCTURE; +} ACPI_EINJ_ENTRY; +/* Masks for Flags field above */ -/* - * HMAT Structures, correspond to Type in ACPI_HMAT_STRUCTURE - */ +#define ACPI_EINJ_PRESERVE (1) -/* 0: Memory subystem address range */ +/* Values for Action field above */ -typedef struct acpi_hmat_address_range +enum AcpiEinjActions { - ACPI_HMAT_STRUCTURE Header; - UINT16 Flags; - UINT16 Reserved1; - UINT32 ProcessorPD; /* Processor proximity domain */ - UINT32 MemoryPD; /* Memory proximity domain */ - UINT32 Reserved2; - UINT64 PhysicalAddressBase; /* Physical address range base */ - UINT64 PhysicalAddressLength; /* Physical address range length */ - -} ACPI_HMAT_ADDRESS_RANGE; - -/* Masks for Flags field above */ - -#define ACPI_HMAT_PROCESSOR_PD_VALID (1) /* 1: ProcessorPD field is valid */ -#define ACPI_HMAT_MEMORY_PD_VALID (1<<1) /* 1: MemoryPD field is valid */ -#define ACPI_HMAT_RESERVATION_HINT (1<<2) /* 1: Reservation hint */ - + ACPI_EINJ_BEGIN_OPERATION = 0, + ACPI_EINJ_GET_TRIGGER_TABLE = 1, + ACPI_EINJ_SET_ERROR_TYPE = 2, + ACPI_EINJ_GET_ERROR_TYPE = 3, + ACPI_EINJ_END_OPERATION = 4, + ACPI_EINJ_EXECUTE_OPERATION = 5, + ACPI_EINJ_CHECK_BUSY_STATUS = 6, + ACPI_EINJ_GET_COMMAND_STATUS = 7, + ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8, + ACPI_EINJ_GET_EXECUTE_TIMINGS = 9, + ACPI_EINJ_ACTION_RESERVED = 10, /* 10 and greater are reserved */ + ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */ +}; -/* 1: System locality latency and bandwidth information */ +/* Values for Instruction field above */ -typedef struct acpi_hmat_locality +enum AcpiEinjInstructions { - ACPI_HMAT_STRUCTURE Header; - UINT8 Flags; - UINT8 DataType; - UINT16 Reserved1; - UINT32 NumberOfInitiatorPDs; - UINT32 NumberOfTargetPDs; - UINT32 Reserved2; - UINT64 EntryBaseUnit; - -} ACPI_HMAT_LOCALITY; - -/* Masks for Flags field above */ - -#define ACPI_HMAT_MEMORY_HIERARCHY (0x0F) + ACPI_EINJ_READ_REGISTER = 0, + ACPI_EINJ_READ_REGISTER_VALUE = 1, + ACPI_EINJ_WRITE_REGISTER = 2, + ACPI_EINJ_WRITE_REGISTER_VALUE = 3, + ACPI_EINJ_NOOP = 4, + ACPI_EINJ_FLUSH_CACHELINE = 5, + ACPI_EINJ_INSTRUCTION_RESERVED = 6 /* 6 and greater are reserved */ +}; -/* Values for Memory Hierarchy flag */ +typedef struct acpi_einj_error_type_with_addr +{ + UINT32 ErrorType; + UINT32 VendorStructOffset; + UINT32 Flags; + UINT32 ApicId; + UINT64 Address; + UINT64 Range; + UINT32 PcieId; -#define ACPI_HMAT_MEMORY 0 -#define ACPI_HMAT_LAST_LEVEL_CACHE 1 -#define ACPI_HMAT_1ST_LEVEL_CACHE 2 -#define ACPI_HMAT_2ND_LEVEL_CACHE 3 -#define ACPI_HMAT_3RD_LEVEL_CACHE 4 +} ACPI_EINJ_ERROR_TYPE_WITH_ADDR; -/* Values for DataType field above */ +typedef struct acpi_einj_vendor +{ + UINT32 Length; + UINT32 PcieId; + UINT16 VendorId; + UINT16 DeviceId; + UINT8 RevisionId; + UINT8 Reserved[3]; -#define ACPI_HMAT_ACCESS_LATENCY 0 -#define ACPI_HMAT_READ_LATENCY 1 -#define ACPI_HMAT_WRITE_LATENCY 2 -#define ACPI_HMAT_ACCESS_BANDWIDTH 3 -#define ACPI_HMAT_READ_BANDWIDTH 4 -#define ACPI_HMAT_WRITE_BANDWIDTH 5 +} ACPI_EINJ_VENDOR; -/* 2: Memory side cache information */ +/* EINJ Trigger Error Action Table */ -typedef struct acpi_hmat_cache +typedef struct acpi_einj_trigger { - ACPI_HMAT_STRUCTURE Header; - UINT32 MemoryPD; - UINT32 Reserved1; - UINT64 CacheSize; - UINT32 CacheAttributes; - UINT16 Reserved2; - UINT16 NumberOfSMBIOSHandles; - -} ACPI_HMAT_CACHE; + UINT32 HeaderSize; + UINT32 Revision; + UINT32 TableSize; + UINT32 EntryCount; -/* Masks for CacheAttributes field above */ +} ACPI_EINJ_TRIGGER; -#define ACPI_HMAT_TOTAL_CACHE_LEVEL (0x0000000F) -#define ACPI_HMAT_CACHE_LEVEL (0x000000F0) -#define ACPI_HMAT_CACHE_ASSOCIATIVITY (0x00000F00) -#define ACPI_HMAT_WRITE_POLICY (0x0000F000) -#define ACPI_HMAT_CACHE_LINE_SIZE (0xFFFF0000) +/* Command status return values */ -/* Values for cache associativity flag */ +enum AcpiEinjCommandStatus +{ + ACPI_EINJ_SUCCESS = 0, + ACPI_EINJ_FAILURE = 1, + ACPI_EINJ_INVALID_ACCESS = 2, + ACPI_EINJ_STATUS_RESERVED = 3 /* 3 and greater are reserved */ +}; -#define ACPI_HMAT_CA_NONE (0) -#define ACPI_HMAT_CA_DIRECT_MAPPED (1) -#define ACPI_HMAT_CA_COMPLEX_CACHE_INDEXING (2) -/* Values for write policy flag */ +/* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */ -#define ACPI_HMAT_CP_NONE (0) -#define ACPI_HMAT_CP_WB (1) -#define ACPI_HMAT_CP_WT (2) +#define ACPI_EINJ_PROCESSOR_CORRECTABLE (1) +#define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1) +#define ACPI_EINJ_PROCESSOR_FATAL (1<<2) +#define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3) +#define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4) +#define ACPI_EINJ_MEMORY_FATAL (1<<5) +#define ACPI_EINJ_PCIX_CORRECTABLE (1<<6) +#define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7) +#define ACPI_EINJ_PCIX_FATAL (1<<8) +#define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9) +#define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10) +#define ACPI_EINJ_PLATFORM_FATAL (1<<11) +#define ACPI_EINJ_VENDOR_DEFINED (1<<31) /******************************************************************************* * - * MADT - Multiple APIC Description Table - * Version 3 + * ERST - Error Record Serialization Table (ACPI 4.0) + * Version 1 * ******************************************************************************/ -typedef struct acpi_table_madt +typedef struct acpi_table_erst { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 Address; /* Physical address of local APIC */ - UINT32 Flags; + UINT32 HeaderLength; + UINT32 Reserved; + UINT32 Entries; + +} ACPI_TABLE_ERST; -} ACPI_TABLE_MADT; -/* Masks for Flags field above */ +/* ERST Serialization Entries (actions) */ -#define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ +typedef struct acpi_erst_entry +{ + ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ -/* Values for PCATCompat flag */ +} ACPI_ERST_ENTRY; -#define ACPI_MADT_DUAL_PIC 1 -#define ACPI_MADT_MULTIPLE_APIC 0 +/* Masks for Flags field above */ +#define ACPI_ERST_PRESERVE (1) -/* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */ +/* Values for Action field above */ -enum AcpiMadtType +enum AcpiErstActions { - ACPI_MADT_TYPE_LOCAL_APIC = 0, - ACPI_MADT_TYPE_IO_APIC = 1, - ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, - ACPI_MADT_TYPE_NMI_SOURCE = 3, - ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, - ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, - ACPI_MADT_TYPE_IO_SAPIC = 6, - ACPI_MADT_TYPE_LOCAL_SAPIC = 7, - ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, - ACPI_MADT_TYPE_LOCAL_X2APIC = 9, - ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, - ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, - ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, - ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13, - ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14, - ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15, - ACPI_MADT_TYPE_RESERVED = 16 /* 16 and greater are reserved */ + ACPI_ERST_BEGIN_WRITE = 0, + ACPI_ERST_BEGIN_READ = 1, + ACPI_ERST_BEGIN_CLEAR = 2, + ACPI_ERST_END = 3, + ACPI_ERST_SET_RECORD_OFFSET = 4, + ACPI_ERST_EXECUTE_OPERATION = 5, + ACPI_ERST_CHECK_BUSY_STATUS = 6, + ACPI_ERST_GET_COMMAND_STATUS = 7, + ACPI_ERST_GET_RECORD_ID = 8, + ACPI_ERST_SET_RECORD_ID = 9, + ACPI_ERST_GET_RECORD_COUNT = 10, + ACPI_ERST_BEGIN_DUMMY_WRIITE = 11, + ACPI_ERST_NOT_USED = 12, + ACPI_ERST_GET_ERROR_RANGE = 13, + ACPI_ERST_GET_ERROR_LENGTH = 14, + ACPI_ERST_GET_ERROR_ATTRIBUTES = 15, + ACPI_ERST_EXECUTE_TIMINGS = 16, + ACPI_ERST_ACTION_RESERVED = 17 /* 17 and greater are reserved */ }; +/* Values for Instruction field above */ -/* - * MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER - */ - -/* 0: Processor Local APIC */ - -typedef struct acpi_madt_local_apic +enum AcpiErstInstructions { - ACPI_SUBTABLE_HEADER Header; - UINT8 ProcessorId; /* ACPI processor id */ - UINT8 Id; /* Processor's local APIC id */ - UINT32 LapicFlags; - -} ACPI_MADT_LOCAL_APIC; - + ACPI_ERST_READ_REGISTER = 0, + ACPI_ERST_READ_REGISTER_VALUE = 1, + ACPI_ERST_WRITE_REGISTER = 2, + ACPI_ERST_WRITE_REGISTER_VALUE = 3, + ACPI_ERST_NOOP = 4, + ACPI_ERST_LOAD_VAR1 = 5, + ACPI_ERST_LOAD_VAR2 = 6, + ACPI_ERST_STORE_VAR1 = 7, + ACPI_ERST_ADD = 8, + ACPI_ERST_SUBTRACT = 9, + ACPI_ERST_ADD_VALUE = 10, + ACPI_ERST_SUBTRACT_VALUE = 11, + ACPI_ERST_STALL = 12, + ACPI_ERST_STALL_WHILE_TRUE = 13, + ACPI_ERST_SKIP_NEXT_IF_TRUE = 14, + ACPI_ERST_GOTO = 15, + ACPI_ERST_SET_SRC_ADDRESS_BASE = 16, + ACPI_ERST_SET_DST_ADDRESS_BASE = 17, + ACPI_ERST_MOVE_DATA = 18, + ACPI_ERST_INSTRUCTION_RESERVED = 19 /* 19 and greater are reserved */ +}; -/* 1: IO APIC */ +/* Command status return values */ -typedef struct acpi_madt_io_apic +enum AcpiErstCommandStatus { - ACPI_SUBTABLE_HEADER Header; - UINT8 Id; /* I/O APIC ID */ - UINT8 Reserved; /* Reserved - must be zero */ - UINT32 Address; /* APIC physical address */ - UINT32 GlobalIrqBase; /* Global system interrupt where INTI lines start */ - -} ACPI_MADT_IO_APIC; + ACPI_ERST_SUCESS = 0, + ACPI_ERST_NO_SPACE = 1, + ACPI_ERST_NOT_AVAILABLE = 2, + ACPI_ERST_FAILURE = 3, + ACPI_ERST_RECORD_EMPTY = 4, + ACPI_ERST_NOT_FOUND = 5, + ACPI_ERST_STATUS_RESERVED = 6 /* 6 and greater are reserved */ +}; -/* 2: Interrupt Override */ +/* Error Record Serialization Information */ -typedef struct acpi_madt_interrupt_override +typedef struct acpi_erst_info { - ACPI_SUBTABLE_HEADER Header; - UINT8 Bus; /* 0 - ISA */ - UINT8 SourceIrq; /* Interrupt source (IRQ) */ - UINT32 GlobalIrq; /* Global system interrupt */ - UINT16 IntiFlags; + UINT16 Signature; /* Should be "ER" */ + UINT8 Data[48]; -} ACPI_MADT_INTERRUPT_OVERRIDE; +} ACPI_ERST_INFO; -/* 3: NMI Source */ +/******************************************************************************* + * + * FPDT - Firmware Performance Data Table (ACPI 5.0) + * Version 1 + * + ******************************************************************************/ -typedef struct acpi_madt_nmi_source +typedef struct acpi_table_fpdt { - ACPI_SUBTABLE_HEADER Header; - UINT16 IntiFlags; - UINT32 GlobalIrq; /* Global system interrupt */ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ -} ACPI_MADT_NMI_SOURCE; +} ACPI_TABLE_FPDT; -/* 4: Local APIC NMI */ +/* FPDT subtable header (Performance Record Structure) */ -typedef struct acpi_madt_local_apic_nmi +typedef struct acpi_fpdt_header { - ACPI_SUBTABLE_HEADER Header; - UINT8 ProcessorId; /* ACPI processor id */ - UINT16 IntiFlags; - UINT8 Lint; /* LINTn to which NMI is connected */ - -} ACPI_MADT_LOCAL_APIC_NMI; + UINT16 Type; + UINT8 Length; + UINT8 Revision; +} ACPI_FPDT_HEADER; -/* 5: Address Override */ +/* Values for Type field above */ -typedef struct acpi_madt_local_apic_override +enum AcpiFpdtType { - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; /* Reserved, must be zero */ - UINT64 Address; /* APIC physical address */ + ACPI_FPDT_TYPE_BOOT = 0, + ACPI_FPDT_TYPE_S3PERF = 1 +}; -} ACPI_MADT_LOCAL_APIC_OVERRIDE; +/* + * FPDT subtables + */ -/* 6: I/O Sapic */ +/* 0: Firmware Basic Boot Performance Record */ -typedef struct acpi_madt_io_sapic +typedef struct acpi_fpdt_boot_pointer { - ACPI_SUBTABLE_HEADER Header; - UINT8 Id; /* I/O SAPIC ID */ - UINT8 Reserved; /* Reserved, must be zero */ - UINT32 GlobalIrqBase; /* Global interrupt for SAPIC start */ - UINT64 Address; /* SAPIC physical address */ + ACPI_FPDT_HEADER Header; + UINT8 Reserved[4]; + UINT64 Address; -} ACPI_MADT_IO_SAPIC; +} ACPI_FPDT_BOOT_POINTER; -/* 7: Local Sapic */ +/* 1: S3 Performance Table Pointer Record */ -typedef struct acpi_madt_local_sapic +typedef struct acpi_fpdt_s3pt_pointer { - ACPI_SUBTABLE_HEADER Header; - UINT8 ProcessorId; /* ACPI processor id */ - UINT8 Id; /* SAPIC ID */ - UINT8 Eid; /* SAPIC EID */ - UINT8 Reserved[3]; /* Reserved, must be zero */ - UINT32 LapicFlags; - UINT32 Uid; /* Numeric UID - ACPI 3.0 */ - char UidString[1]; /* String UID - ACPI 3.0 */ - -} ACPI_MADT_LOCAL_SAPIC; + ACPI_FPDT_HEADER Header; + UINT8 Reserved[4]; + UINT64 Address; +} ACPI_FPDT_S3PT_POINTER; -/* 8: Platform Interrupt Source */ -typedef struct acpi_madt_interrupt_source +/* + * S3PT - S3 Performance Table. This table is pointed to by the + * S3 Pointer Record above. + */ +typedef struct acpi_table_s3pt { - ACPI_SUBTABLE_HEADER Header; - UINT16 IntiFlags; - UINT8 Type; /* 1=PMI, 2=INIT, 3=corrected */ - UINT8 Id; /* Processor ID */ - UINT8 Eid; /* Processor EID */ - UINT8 IoSapicVector; /* Vector value for PMI interrupts */ - UINT32 GlobalIrq; /* Global system interrupt */ - UINT32 Flags; /* Interrupt Source Flags */ - -} ACPI_MADT_INTERRUPT_SOURCE; + UINT8 Signature[4]; /* "S3PT" */ + UINT32 Length; -/* Masks for Flags field above */ +} ACPI_TABLE_S3PT; -#define ACPI_MADT_CPEI_OVERRIDE (1) +/* + * S3PT Subtables (Not part of the actual FPDT) + */ -/* 9: Processor Local X2APIC (ACPI 4.0) */ +/* Values for Type field in S3PT header */ -typedef struct acpi_madt_local_x2apic +enum AcpiS3ptType { - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; /* Reserved - must be zero */ - UINT32 LocalApicId; /* Processor x2APIC ID */ - UINT32 LapicFlags; - UINT32 Uid; /* ACPI processor UID */ - -} ACPI_MADT_LOCAL_X2APIC; + ACPI_S3PT_TYPE_RESUME = 0, + ACPI_S3PT_TYPE_SUSPEND = 1, + ACPI_FPDT_BOOT_PERFORMANCE = 2 +}; +typedef struct acpi_s3pt_resume +{ + ACPI_FPDT_HEADER Header; + UINT32 ResumeCount; + UINT64 FullResume; + UINT64 AverageResume; -/* 10: Local X2APIC NMI (ACPI 4.0) */ +} ACPI_S3PT_RESUME; -typedef struct acpi_madt_local_x2apic_nmi +typedef struct acpi_s3pt_suspend { - ACPI_SUBTABLE_HEADER Header; - UINT16 IntiFlags; - UINT32 Uid; /* ACPI processor UID */ - UINT8 Lint; /* LINTn to which NMI is connected */ - UINT8 Reserved[3]; /* Reserved - must be zero */ + ACPI_FPDT_HEADER Header; + UINT64 SuspendStart; + UINT64 SuspendEnd; -} ACPI_MADT_LOCAL_X2APIC_NMI; +} ACPI_S3PT_SUSPEND; -/* 11: Generic Interrupt (ACPI 5.0 + ACPI 6.0 changes) */ - -typedef struct acpi_madt_generic_interrupt +/* + * FPDT Boot Performance Record (Not part of the actual FPDT) + */ +typedef struct acpi_fpdt_boot { - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; /* Reserved - must be zero */ - UINT32 CpuInterfaceNumber; - UINT32 Uid; - UINT32 Flags; - UINT32 ParkingVersion; - UINT32 PerformanceInterrupt; - UINT64 ParkedAddress; - UINT64 BaseAddress; - UINT64 GicvBaseAddress; - UINT64 GichBaseAddress; - UINT32 VgicInterrupt; - UINT64 GicrBaseAddress; - UINT64 ArmMpidr; - UINT8 EfficiencyClass; - UINT8 Reserved2[3]; - -} ACPI_MADT_GENERIC_INTERRUPT; - -/* Masks for Flags field above */ + ACPI_FPDT_HEADER Header; + UINT8 Reserved[4]; + UINT64 ResetEnd; + UINT64 LoadStart; + UINT64 StartupStart; + UINT64 ExitServicesEntry; + UINT64 ExitServicesExit; -/* ACPI_MADT_ENABLED (1) Processor is usable if set */ -#define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */ -#define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */ +} ACPI_FPDT_BOOT; -/* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */ +/******************************************************************************* + * + * GTDT - Generic Timer Description Table (ACPI 5.1) + * Version 2 + * + ******************************************************************************/ -typedef struct acpi_madt_generic_distributor +typedef struct acpi_table_gtdt { - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; /* Reserved - must be zero */ - UINT32 GicId; - UINT64 BaseAddress; - UINT32 GlobalIrqBase; - UINT8 Version; - UINT8 Reserved2[3]; /* Reserved - must be zero */ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT64 CounterBlockAddresss; + UINT32 Reserved; + UINT32 SecureEl1Interrupt; + UINT32 SecureEl1Flags; + UINT32 NonSecureEl1Interrupt; + UINT32 NonSecureEl1Flags; + UINT32 VirtualTimerInterrupt; + UINT32 VirtualTimerFlags; + UINT32 NonSecureEl2Interrupt; + UINT32 NonSecureEl2Flags; + UINT64 CounterReadBlockAddress; + UINT32 PlatformTimerCount; + UINT32 PlatformTimerOffset; -} ACPI_MADT_GENERIC_DISTRIBUTOR; +} ACPI_TABLE_GTDT; -/* Values for Version field above */ +/* Flag Definitions: Timer Block Physical Timers and Virtual timers */ -enum AcpiMadtGicVersion -{ - ACPI_MADT_GIC_VERSION_NONE = 0, - ACPI_MADT_GIC_VERSION_V1 = 1, - ACPI_MADT_GIC_VERSION_V2 = 2, - ACPI_MADT_GIC_VERSION_V3 = 3, - ACPI_MADT_GIC_VERSION_V4 = 4, - ACPI_MADT_GIC_VERSION_RESERVED = 5 /* 5 and greater are reserved */ -}; +#define ACPI_GTDT_INTERRUPT_MODE (1) +#define ACPI_GTDT_INTERRUPT_POLARITY (1<<1) +#define ACPI_GTDT_ALWAYS_ON (1<<2) -/* 13: Generic MSI Frame (ACPI 5.1) */ +/* Common GTDT subtable header */ -typedef struct acpi_madt_generic_msi_frame +typedef struct acpi_gtdt_header { - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; /* Reserved - must be zero */ - UINT32 MsiFrameId; - UINT64 BaseAddress; - UINT32 Flags; - UINT16 SpiCount; - UINT16 SpiBase; + UINT8 Type; + UINT16 Length; -} ACPI_MADT_GENERIC_MSI_FRAME; +} ACPI_GTDT_HEADER; -/* Masks for Flags field above */ +/* Values for GTDT subtable type above */ + +enum AcpiGtdtType +{ + ACPI_GTDT_TYPE_TIMER_BLOCK = 0, + ACPI_GTDT_TYPE_WATCHDOG = 1, + ACPI_GTDT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ +}; -#define ACPI_MADT_OVERRIDE_SPI_VALUES (1) +/* GTDT Subtables, correspond to Type in acpi_gtdt_header */ -/* 14: Generic Redistributor (ACPI 5.1) */ +/* 0: Generic Timer Block */ -typedef struct acpi_madt_generic_redistributor +typedef struct acpi_gtdt_timer_block { - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; /* reserved - must be zero */ - UINT64 BaseAddress; - UINT32 Length; - -} ACPI_MADT_GENERIC_REDISTRIBUTOR; + ACPI_GTDT_HEADER Header; + UINT8 Reserved; + UINT64 BlockAddress; + UINT32 TimerCount; + UINT32 TimerOffset; +} ACPI_GTDT_TIMER_BLOCK; -/* 15: Generic Translator (ACPI 6.0) */ +/* Timer Sub-Structure, one per timer */ -typedef struct acpi_madt_generic_translator +typedef struct acpi_gtdt_timer_entry { - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; /* reserved - must be zero */ - UINT32 TranslationId; + UINT8 FrameNumber; + UINT8 Reserved[3]; UINT64 BaseAddress; - UINT32 Reserved2; + UINT64 El0BaseAddress; + UINT32 TimerInterrupt; + UINT32 TimerFlags; + UINT32 VirtualTimerInterrupt; + UINT32 VirtualTimerFlags; + UINT32 CommonFlags; -} ACPI_MADT_GENERIC_TRANSLATOR; +} ACPI_GTDT_TIMER_ENTRY; +/* Flag Definitions: TimerFlags and VirtualTimerFlags above */ -/* - * Common flags fields for MADT subtables - */ +#define ACPI_GTDT_GT_IRQ_MODE (1) +#define ACPI_GTDT_GT_IRQ_POLARITY (1<<1) + +/* Flag Definitions: CommonFlags above */ -/* MADT Local APIC flags */ +#define ACPI_GTDT_GT_IS_SECURE_TIMER (1) +#define ACPI_GTDT_GT_ALWAYS_ON (1<<1) -#define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ -/* MADT MPS INTI flags (IntiFlags) */ +/* 1: SBSA Generic Watchdog Structure */ -#define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ -#define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ +typedef struct acpi_gtdt_watchdog +{ + ACPI_GTDT_HEADER Header; + UINT8 Reserved; + UINT64 RefreshFrameAddress; + UINT64 ControlFrameAddress; + UINT32 TimerInterrupt; + UINT32 TimerFlags; -/* Values for MPS INTI flags */ +} ACPI_GTDT_WATCHDOG; -#define ACPI_MADT_POLARITY_CONFORMS 0 -#define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 -#define ACPI_MADT_POLARITY_RESERVED 2 -#define ACPI_MADT_POLARITY_ACTIVE_LOW 3 +/* Flag Definitions: TimerFlags above */ -#define ACPI_MADT_TRIGGER_CONFORMS (0) -#define ACPI_MADT_TRIGGER_EDGE (1<<2) -#define ACPI_MADT_TRIGGER_RESERVED (2<<2) -#define ACPI_MADT_TRIGGER_LEVEL (3<<2) +#define ACPI_GTDT_WATCHDOG_IRQ_MODE (1) +#define ACPI_GTDT_WATCHDOG_IRQ_POLARITY (1<<1) +#define ACPI_GTDT_WATCHDOG_SECURE (1<<2) /******************************************************************************* * - * MSCT - Maximum System Characteristics Table (ACPI 4.0) + * HEST - Hardware Error Source Table (ACPI 4.0) * Version 1 * ******************************************************************************/ -typedef struct acpi_table_msct +typedef struct acpi_table_hest { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 ProximityOffset; /* Location of proximity info struct(s) */ - UINT32 MaxProximityDomains;/* Max number of proximity domains */ - UINT32 MaxClockDomains; /* Max number of clock domains */ - UINT64 MaxAddress; /* Max physical address in system */ + UINT32 ErrorSourceCount; -} ACPI_TABLE_MSCT; +} ACPI_TABLE_HEST; -/* Subtable - Maximum Proximity Domain Information. Version 1 */ +/* HEST subtable header */ -typedef struct acpi_msct_proximity +typedef struct acpi_hest_header { - UINT8 Revision; - UINT8 Length; - UINT32 RangeStart; /* Start of domain range */ - UINT32 RangeEnd; /* End of domain range */ - UINT32 ProcessorCapacity; - UINT64 MemoryCapacity; /* In bytes */ + UINT16 Type; + UINT16 SourceId; -} ACPI_MSCT_PROXIMITY; +} ACPI_HEST_HEADER; -/******************************************************************************* - * - * NFIT - NVDIMM Interface Table (ACPI 6.0+) - * Version 1 - * - ******************************************************************************/ +/* Values for Type field above for subtables */ -typedef struct acpi_table_nfit +enum AcpiHestTypes { - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 Reserved; /* Reserved, must be zero */ + ACPI_HEST_TYPE_IA32_CHECK = 0, + ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1, + ACPI_HEST_TYPE_IA32_NMI = 2, + ACPI_HEST_TYPE_NOT_USED3 = 3, + ACPI_HEST_TYPE_NOT_USED4 = 4, + ACPI_HEST_TYPE_NOT_USED5 = 5, + ACPI_HEST_TYPE_AER_ROOT_PORT = 6, + ACPI_HEST_TYPE_AER_ENDPOINT = 7, + ACPI_HEST_TYPE_AER_BRIDGE = 8, + ACPI_HEST_TYPE_GENERIC_ERROR = 9, + ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10, + ACPI_HEST_TYPE_IA32_DEFERRED_CHECK = 11, + ACPI_HEST_TYPE_RESERVED = 12 /* 12 and greater are reserved */ +}; -} ACPI_TABLE_NFIT; -/* Subtable header for NFIT */ +/* + * HEST substructures contained in subtables + */ -typedef struct acpi_nfit_header +/* + * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and + * ACPI_HEST_IA_CORRECTED structures. + */ +typedef struct acpi_hest_ia_error_bank { - UINT16 Type; - UINT16 Length; + UINT8 BankNumber; + UINT8 ClearStatusOnInit; + UINT8 StatusFormat; + UINT8 Reserved; + UINT32 ControlRegister; + UINT64 ControlData; + UINT32 StatusRegister; + UINT32 AddressRegister; + UINT32 MiscRegister; -} ACPI_NFIT_HEADER; +} ACPI_HEST_IA_ERROR_BANK; -/* Values for subtable type in ACPI_NFIT_HEADER */ +/* Common HEST sub-structure for PCI/AER structures below (6,7,8) */ -enum AcpiNfitType +typedef struct acpi_hest_aer_common { - ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0, - ACPI_NFIT_TYPE_MEMORY_MAP = 1, - ACPI_NFIT_TYPE_INTERLEAVE = 2, - ACPI_NFIT_TYPE_SMBIOS = 3, - ACPI_NFIT_TYPE_CONTROL_REGION = 4, - ACPI_NFIT_TYPE_DATA_REGION = 5, - ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6, - ACPI_NFIT_TYPE_CAPABILITIES = 7, - ACPI_NFIT_TYPE_RESERVED = 8 /* 8 and greater are reserved */ -}; + UINT16 Reserved1; + UINT8 Flags; + UINT8 Enabled; + UINT32 RecordsToPreallocate; + UINT32 MaxSectionsPerRecord; + UINT32 Bus; /* Bus and Segment numbers */ + UINT16 Device; + UINT16 Function; + UINT16 DeviceControl; + UINT16 Reserved2; + UINT32 UncorrectableMask; + UINT32 UncorrectableSeverity; + UINT32 CorrectableMask; + UINT32 AdvancedCapabilities; + +} ACPI_HEST_AER_COMMON; + +/* Masks for HEST Flags fields */ + +#define ACPI_HEST_FIRMWARE_FIRST (1) +#define ACPI_HEST_GLOBAL (1<<1) +#define ACPI_HEST_GHES_ASSIST (1<<2) /* - * NFIT Subtables + * Macros to access the bus/segment numbers in Bus field above: + * Bus number is encoded in bits 7:0 + * Segment number is encoded in bits 23:8 */ +#define ACPI_HEST_BUS(Bus) ((Bus) & 0xFF) +#define ACPI_HEST_SEGMENT(Bus) (((Bus) >> 8) & 0xFFFF) + -/* 0: System Physical Address Range Structure */ +/* Hardware Error Notification */ -typedef struct acpi_nfit_system_address +typedef struct acpi_hest_notify { - ACPI_NFIT_HEADER Header; - UINT16 RangeIndex; - UINT16 Flags; - UINT32 Reserved; /* Reserved, must be zero */ - UINT32 ProximityDomain; - UINT8 RangeGuid[16]; - UINT64 Address; - UINT64 Length; - UINT64 MemoryMapping; + UINT8 Type; + UINT8 Length; + UINT16 ConfigWriteEnable; + UINT32 PollInterval; + UINT32 Vector; + UINT32 PollingThresholdValue; + UINT32 PollingThresholdWindow; + UINT32 ErrorThresholdValue; + UINT32 ErrorThresholdWindow; -} ACPI_NFIT_SYSTEM_ADDRESS; +} ACPI_HEST_NOTIFY; -/* Flags */ +/* Values for Notify Type field above */ -#define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */ -#define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */ +enum AcpiHestNotifyTypes +{ + ACPI_HEST_NOTIFY_POLLED = 0, + ACPI_HEST_NOTIFY_EXTERNAL = 1, + ACPI_HEST_NOTIFY_LOCAL = 2, + ACPI_HEST_NOTIFY_SCI = 3, + ACPI_HEST_NOTIFY_NMI = 4, + ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */ + ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */ + ACPI_HEST_NOTIFY_GPIO = 7, /* ACPI 6.0 */ + ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */ + ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */ + ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */ + ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11, /* ACPI 6.2 */ + ACPI_HEST_NOTIFY_RESERVED = 12 /* 12 and greater are reserved */ +}; -/* Range Type GUIDs appear in the include/acuuid.h file */ +/* Values for ConfigWriteEnable bitfield above */ +#define ACPI_HEST_TYPE (1) +#define ACPI_HEST_POLL_INTERVAL (1<<1) +#define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2) +#define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3) +#define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4) +#define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5) -/* 1: Memory Device to System Address Range Map Structure */ -typedef struct acpi_nfit_memory_map -{ - ACPI_NFIT_HEADER Header; - UINT32 DeviceHandle; - UINT16 PhysicalId; - UINT16 RegionId; - UINT16 RangeIndex; - UINT16 RegionIndex; - UINT64 RegionSize; - UINT64 RegionOffset; - UINT64 Address; - UINT16 InterleaveIndex; - UINT16 InterleaveWays; - UINT16 Flags; - UINT16 Reserved; /* Reserved, must be zero */ +/* + * HEST subtables + */ -} ACPI_NFIT_MEMORY_MAP; +/* 0: IA32 Machine Check Exception */ -/* Flags */ +typedef struct acpi_hest_ia_machine_check +{ + ACPI_HEST_HEADER Header; + UINT16 Reserved1; + UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ + UINT8 Enabled; + UINT32 RecordsToPreallocate; + UINT32 MaxSectionsPerRecord; + UINT64 GlobalCapabilityData; + UINT64 GlobalControlData; + UINT8 NumHardwareBanks; + UINT8 Reserved3[7]; -#define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */ -#define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */ -#define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */ -#define ACPI_NFIT_MEM_NOT_ARMED (1<<3) /* 03: Memory Device is not armed */ -#define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */ -#define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */ -#define ACPI_NFIT_MEM_MAP_FAILED (1<<6) /* 06: Mapping to SPA failed */ +} ACPI_HEST_IA_MACHINE_CHECK; -/* 2: Interleave Structure */ +/* 1: IA32 Corrected Machine Check */ -typedef struct acpi_nfit_interleave +typedef struct acpi_hest_ia_corrected { - ACPI_NFIT_HEADER Header; - UINT16 InterleaveIndex; - UINT16 Reserved; /* Reserved, must be zero */ - UINT32 LineCount; - UINT32 LineSize; - UINT32 LineOffset[1]; /* Variable length */ + ACPI_HEST_HEADER Header; + UINT16 Reserved1; + UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ + UINT8 Enabled; + UINT32 RecordsToPreallocate; + UINT32 MaxSectionsPerRecord; + ACPI_HEST_NOTIFY Notify; + UINT8 NumHardwareBanks; + UINT8 Reserved2[3]; -} ACPI_NFIT_INTERLEAVE; +} ACPI_HEST_IA_CORRECTED; -/* 3: SMBIOS Management Information Structure */ +/* 2: IA32 Non-Maskable Interrupt */ -typedef struct acpi_nfit_smbios +typedef struct acpi_hest_ia_nmi { - ACPI_NFIT_HEADER Header; - UINT32 Reserved; /* Reserved, must be zero */ - UINT8 Data[1]; /* Variable length */ + ACPI_HEST_HEADER Header; + UINT32 Reserved; + UINT32 RecordsToPreallocate; + UINT32 MaxSectionsPerRecord; + UINT32 MaxRawDataLength; + +} ACPI_HEST_IA_NMI; -} ACPI_NFIT_SMBIOS; +/* 3,4,5: Not used */ -/* 4: NVDIMM Control Region Structure */ +/* 6: PCI Express Root Port AER */ -typedef struct acpi_nfit_control_region +typedef struct acpi_hest_aer_root { - ACPI_NFIT_HEADER Header; - UINT16 RegionIndex; - UINT16 VendorId; - UINT16 DeviceId; - UINT16 RevisionId; - UINT16 SubsystemVendorId; - UINT16 SubsystemDeviceId; - UINT16 SubsystemRevisionId; - UINT8 ValidFields; - UINT8 ManufacturingLocation; - UINT16 ManufacturingDate; - UINT8 Reserved[2]; /* Reserved, must be zero */ - UINT32 SerialNumber; - UINT16 Code; - UINT16 Windows; - UINT64 WindowSize; - UINT64 CommandOffset; - UINT64 CommandSize; - UINT64 StatusOffset; - UINT64 StatusSize; - UINT16 Flags; - UINT8 Reserved1[6]; /* Reserved, must be zero */ + ACPI_HEST_HEADER Header; + ACPI_HEST_AER_COMMON Aer; + UINT32 RootErrorCommand; -} ACPI_NFIT_CONTROL_REGION; +} ACPI_HEST_AER_ROOT; -/* Flags */ -#define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */ +/* 7: PCI Express AER (AER Endpoint) */ -/* ValidFields bits */ +typedef struct acpi_hest_aer +{ + ACPI_HEST_HEADER Header; + ACPI_HEST_AER_COMMON Aer; -#define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1) /* Manufacturing fields are valid */ +} ACPI_HEST_AER; -/* 5: NVDIMM Block Data Window Region Structure */ +/* 8: PCI Express/PCI-X Bridge AER */ -typedef struct acpi_nfit_data_region +typedef struct acpi_hest_aer_bridge { - ACPI_NFIT_HEADER Header; - UINT16 RegionIndex; - UINT16 Windows; - UINT64 Offset; - UINT64 Size; - UINT64 Capacity; - UINT64 StartAddress; + ACPI_HEST_HEADER Header; + ACPI_HEST_AER_COMMON Aer; + UINT32 UncorrectableMask2; + UINT32 UncorrectableSeverity2; + UINT32 AdvancedCapabilities2; -} ACPI_NFIT_DATA_REGION; +} ACPI_HEST_AER_BRIDGE; -/* 6: Flush Hint Address Structure */ +/* 9: Generic Hardware Error Source */ -typedef struct acpi_nfit_flush_address +typedef struct acpi_hest_generic { - ACPI_NFIT_HEADER Header; - UINT32 DeviceHandle; - UINT16 HintCount; - UINT8 Reserved[6]; /* Reserved, must be zero */ - UINT64 HintAddress[1]; /* Variable length */ + ACPI_HEST_HEADER Header; + UINT16 RelatedSourceId; + UINT8 Reserved; + UINT8 Enabled; + UINT32 RecordsToPreallocate; + UINT32 MaxSectionsPerRecord; + UINT32 MaxRawDataLength; + ACPI_GENERIC_ADDRESS ErrorStatusAddress; + ACPI_HEST_NOTIFY Notify; + UINT32 ErrorBlockLength; -} ACPI_NFIT_FLUSH_ADDRESS; +} ACPI_HEST_GENERIC; -/* 7: Platform Capabilities Structure */ +/* 10: Generic Hardware Error Source, version 2 */ -typedef struct acpi_nfit_capabilities +typedef struct acpi_hest_generic_v2 { - ACPI_NFIT_HEADER Header; - UINT8 HighestCapability; - UINT8 Reserved[3]; /* Reserved, must be zero */ - UINT32 Capabilities; - UINT32 Reserved2; - -} ACPI_NFIT_CAPABILITIES; + ACPI_HEST_HEADER Header; + UINT16 RelatedSourceId; + UINT8 Reserved; + UINT8 Enabled; + UINT32 RecordsToPreallocate; + UINT32 MaxSectionsPerRecord; + UINT32 MaxRawDataLength; + ACPI_GENERIC_ADDRESS ErrorStatusAddress; + ACPI_HEST_NOTIFY Notify; + UINT32 ErrorBlockLength; + ACPI_GENERIC_ADDRESS ReadAckRegister; + UINT64 ReadAckPreserve; + UINT64 ReadAckWrite; -/* Capabilities Flags */ +} ACPI_HEST_GENERIC_V2; -#define ACPI_NFIT_CAPABILITY_CACHE_FLUSH (1) /* 00: Cache Flush to NVDIMM capable */ -#define ACPI_NFIT_CAPABILITY_MEM_FLUSH (1<<1) /* 01: Memory Flush to NVDIMM capable */ -#define ACPI_NFIT_CAPABILITY_MEM_MIRRORING (1<<2) /* 02: Memory Mirroring capable */ +/* Generic Error Status block */ -/* - * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM - */ -typedef struct nfit_device_handle +typedef struct acpi_hest_generic_status { - UINT32 Handle; - -} NFIT_DEVICE_HANDLE; + UINT32 BlockStatus; + UINT32 RawDataOffset; + UINT32 RawDataLength; + UINT32 DataLength; + UINT32 ErrorSeverity; -/* Device handle construction and extraction macros */ +} ACPI_HEST_GENERIC_STATUS; -#define ACPI_NFIT_DIMM_NUMBER_MASK 0x0000000F -#define ACPI_NFIT_CHANNEL_NUMBER_MASK 0x000000F0 -#define ACPI_NFIT_MEMORY_ID_MASK 0x00000F00 -#define ACPI_NFIT_SOCKET_ID_MASK 0x0000F000 -#define ACPI_NFIT_NODE_ID_MASK 0x0FFF0000 +/* Values for BlockStatus flags above */ -#define ACPI_NFIT_DIMM_NUMBER_OFFSET 0 -#define ACPI_NFIT_CHANNEL_NUMBER_OFFSET 4 -#define ACPI_NFIT_MEMORY_ID_OFFSET 8 -#define ACPI_NFIT_SOCKET_ID_OFFSET 12 -#define ACPI_NFIT_NODE_ID_OFFSET 16 +#define ACPI_HEST_UNCORRECTABLE (1) +#define ACPI_HEST_CORRECTABLE (1<<1) +#define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2) +#define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3) +#define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ -/* Macro to construct a NFIT/NVDIMM device handle */ -#define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \ - ((dimm) | \ - ((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET) | \ - ((memory) << ACPI_NFIT_MEMORY_ID_OFFSET) | \ - ((socket) << ACPI_NFIT_SOCKET_ID_OFFSET) | \ - ((node) << ACPI_NFIT_NODE_ID_OFFSET)) +/* Generic Error Data entry */ -/* Macros to extract individual fields from a NFIT/NVDIMM device handle */ +typedef struct acpi_hest_generic_data +{ + UINT8 SectionType[16]; + UINT32 ErrorSeverity; + UINT16 Revision; + UINT8 ValidationBits; + UINT8 Flags; + UINT32 ErrorDataLength; + UINT8 FruId[16]; + UINT8 FruText[20]; -#define ACPI_NFIT_GET_DIMM_NUMBER(handle) \ - ((handle) & ACPI_NFIT_DIMM_NUMBER_MASK) +} ACPI_HEST_GENERIC_DATA; -#define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \ - (((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET) +/* Extension for revision 0x0300 */ -#define ACPI_NFIT_GET_MEMORY_ID(handle) \ - (((handle) & ACPI_NFIT_MEMORY_ID_MASK) >> ACPI_NFIT_MEMORY_ID_OFFSET) +typedef struct acpi_hest_generic_data_v300 +{ + UINT8 SectionType[16]; + UINT32 ErrorSeverity; + UINT16 Revision; + UINT8 ValidationBits; + UINT8 Flags; + UINT32 ErrorDataLength; + UINT8 FruId[16]; + UINT8 FruText[20]; + UINT64 TimeStamp; -#define ACPI_NFIT_GET_SOCKET_ID(handle) \ - (((handle) & ACPI_NFIT_SOCKET_ID_MASK) >> ACPI_NFIT_SOCKET_ID_OFFSET) +} ACPI_HEST_GENERIC_DATA_V300; -#define ACPI_NFIT_GET_NODE_ID(handle) \ - (((handle) & ACPI_NFIT_NODE_ID_MASK) >> ACPI_NFIT_NODE_ID_OFFSET) +/* Values for ErrorSeverity above */ +#define ACPI_HEST_GEN_ERROR_RECOVERABLE 0 +#define ACPI_HEST_GEN_ERROR_FATAL 1 +#define ACPI_HEST_GEN_ERROR_CORRECTED 2 +#define ACPI_HEST_GEN_ERROR_NONE 3 -/******************************************************************************* - * - * PDTT - Platform Debug Trigger Table (ACPI 6.2) - * Version 0 - * - ******************************************************************************/ +/* Flags for ValidationBits above */ -typedef struct acpi_table_pdtt -{ - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT8 TriggerCount; - UINT8 Reserved[3]; - UINT32 ArrayOffset; +#define ACPI_HEST_GEN_VALID_FRU_ID (1) +#define ACPI_HEST_GEN_VALID_FRU_STRING (1<<1) +#define ACPI_HEST_GEN_VALID_TIMESTAMP (1<<2) -} ACPI_TABLE_PDTT; +/* 11: IA32 Deferred Machine Check Exception (ACPI 6.2) */ -/* - * PDTT Communication Channel Identifier Structure. - * The number of these structures is defined by TriggerCount above, - * starting at ArrayOffset. - */ -typedef struct acpi_pdtt_channel +typedef struct acpi_hest_ia_deferred_check { - UINT8 SubchannelId; - UINT8 Flags; - -} ACPI_PDTT_CHANNEL; - -/* Flags for above */ + ACPI_HEST_HEADER Header; + UINT16 Reserved1; + UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ + UINT8 Enabled; + UINT32 RecordsToPreallocate; + UINT32 MaxSectionsPerRecord; + ACPI_HEST_NOTIFY Notify; + UINT8 NumHardwareBanks; + UINT8 Reserved2[3]; -#define ACPI_PDTT_RUNTIME_TRIGGER (1) -#define ACPI_PDTT_WAIT_COMPLETION (1<<1) +} ACPI_HEST_IA_DEFERRED_CHECK; /******************************************************************************* * - * PPTT - Processor Properties Topology Table (ACPI 6.2) + * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.2) * Version 1 * ******************************************************************************/ -typedef struct acpi_table_pptt +typedef struct acpi_table_hmat { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 Reserved; -} ACPI_TABLE_PPTT; +} ACPI_TABLE_HMAT; -/* Values for Type field above */ -enum AcpiPpttType +/* Values for HMAT structure types */ + +enum AcpiHmatType { - ACPI_PPTT_TYPE_PROCESSOR = 0, - ACPI_PPTT_TYPE_CACHE = 1, - ACPI_PPTT_TYPE_ID = 2, - ACPI_PPTT_TYPE_RESERVED = 3 + ACPI_HMAT_TYPE_ADDRESS_RANGE = 0, /* Memory subystem address range */ + ACPI_HMAT_TYPE_LOCALITY = 1, /* System locality latency and bandwidth information */ + ACPI_HMAT_TYPE_CACHE = 2, /* Memory side cache information */ + ACPI_HMAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */ }; +typedef struct acpi_hmat_structure +{ + UINT16 Type; + UINT16 Reserved; + UINT32 Length; + +} ACPI_HMAT_STRUCTURE; + + +/* + * HMAT Structures, correspond to Type in ACPI_HMAT_STRUCTURE + */ -/* 0: Processor Hierarchy Node Structure */ +/* 0: Memory subystem address range */ -typedef struct acpi_pptt_processor +typedef struct acpi_hmat_address_range { - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; - UINT32 Flags; - UINT32 Parent; - UINT32 AcpiProcessorId; - UINT32 NumberOfPrivResources; + ACPI_HMAT_STRUCTURE Header; + UINT16 Flags; + UINT16 Reserved1; + UINT32 ProcessorPD; /* Processor proximity domain */ + UINT32 MemoryPD; /* Memory proximity domain */ + UINT32 Reserved2; + UINT64 PhysicalAddressBase; /* Physical address range base */ + UINT64 PhysicalAddressLength; /* Physical address range length */ -} ACPI_PPTT_PROCESSOR; +} ACPI_HMAT_ADDRESS_RANGE; -/* Flags */ +/* Masks for Flags field above */ -#define ACPI_PPTT_PHYSICAL_PACKAGE (1) /* Physical package */ -#define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (2) /* ACPI Processor ID valid */ +#define ACPI_HMAT_PROCESSOR_PD_VALID (1) /* 1: ProcessorPD field is valid */ +#define ACPI_HMAT_MEMORY_PD_VALID (1<<1) /* 1: MemoryPD field is valid */ +#define ACPI_HMAT_RESERVATION_HINT (1<<2) /* 1: Reservation hint */ -/* 1: Cache Type Structure */ +/* 1: System locality latency and bandwidth information */ -typedef struct acpi_pptt_cache +typedef struct acpi_hmat_locality { - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; - UINT32 Flags; - UINT32 NextLevelOfCache; - UINT32 Size; - UINT32 NumberOfSets; - UINT8 Associativity; - UINT8 Attributes; - UINT16 LineSize; + ACPI_HMAT_STRUCTURE Header; + UINT8 Flags; + UINT8 DataType; + UINT16 Reserved1; + UINT32 NumberOfInitiatorPDs; + UINT32 NumberOfTargetPDs; + UINT32 Reserved2; + UINT64 EntryBaseUnit; -} ACPI_PPTT_CACHE; +} ACPI_HMAT_LOCALITY; -/* Flags */ +/* Masks for Flags field above */ -#define ACPI_PPTT_SIZE_PROPERTY_VALID (1) /* Physical property valid */ -#define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1) /* Number of sets valid */ -#define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2) /* Associativity valid */ -#define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3) /* Allocation type valid */ -#define ACPI_PPTT_CACHE_TYPE_VALID (1<<4) /* Cache type valid */ -#define ACPI_PPTT_WRITE_POLICY_VALID (1<<5) /* Write policy valid */ -#define ACPI_PPTT_LINE_SIZE_VALID (1<<6) /* Line size valid */ +#define ACPI_HMAT_MEMORY_HIERARCHY (0x0F) -/* Masks for Attributes */ +/* Values for Memory Hierarchy flag */ -#define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03) /* Allocation type */ -#define ACPI_PPTT_MASK_CACHE_TYPE (0x0C) /* Cache type */ -#define ACPI_PPTT_MASK_WRITE_POLICY (0x10) /* Write policy */ +#define ACPI_HMAT_MEMORY 0 +#define ACPI_HMAT_LAST_LEVEL_CACHE 1 +#define ACPI_HMAT_1ST_LEVEL_CACHE 2 +#define ACPI_HMAT_2ND_LEVEL_CACHE 3 +#define ACPI_HMAT_3RD_LEVEL_CACHE 4 -/* Attributes describing cache */ -#define ACPI_PPTT_CACHE_READ_ALLOCATE (0x0) /* Cache line is allocated on read */ -#define ACPI_PPTT_CACHE_WRITE_ALLOCATE (0x01) /* Cache line is allocated on write */ -#define ACPI_PPTT_CACHE_RW_ALLOCATE (0x02) /* Cache line is allocated on read and write */ -#define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT (0x03) /* Alternate representation of above */ +/* Values for DataType field above */ -#define ACPI_PPTT_CACHE_TYPE_DATA (0x0) /* Data cache */ -#define ACPI_PPTT_CACHE_TYPE_INSTR (1<<2) /* Instruction cache */ -#define ACPI_PPTT_CACHE_TYPE_UNIFIED (2<<2) /* Unified I & D cache */ -#define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT (3<<2) /* Alternate representation of above */ +#define ACPI_HMAT_ACCESS_LATENCY 0 +#define ACPI_HMAT_READ_LATENCY 1 +#define ACPI_HMAT_WRITE_LATENCY 2 +#define ACPI_HMAT_ACCESS_BANDWIDTH 3 +#define ACPI_HMAT_READ_BANDWIDTH 4 +#define ACPI_HMAT_WRITE_BANDWIDTH 5 -#define ACPI_PPTT_CACHE_POLICY_WB (0x0) /* Cache is write back */ -#define ACPI_PPTT_CACHE_POLICY_WT (1<<4) /* Cache is write through */ -/* 2: ID Structure */ +/* 2: Memory side cache information */ -typedef struct acpi_pptt_id +typedef struct acpi_hmat_cache { - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; - UINT32 VendorId; - UINT64 Level1Id; - UINT64 Level2Id; - UINT16 MajorRev; - UINT16 MinorRev; - UINT16 SpinRev; + ACPI_HMAT_STRUCTURE Header; + UINT32 MemoryPD; + UINT32 Reserved1; + UINT64 CacheSize; + UINT32 CacheAttributes; + UINT16 Reserved2; + UINT16 NumberOfSMBIOSHandles; + +} ACPI_HMAT_CACHE; -} ACPI_PPTT_ID; +/* Masks for CacheAttributes field above */ +#define ACPI_HMAT_TOTAL_CACHE_LEVEL (0x0000000F) +#define ACPI_HMAT_CACHE_LEVEL (0x000000F0) +#define ACPI_HMAT_CACHE_ASSOCIATIVITY (0x00000F00) +#define ACPI_HMAT_WRITE_POLICY (0x0000F000) +#define ACPI_HMAT_CACHE_LINE_SIZE (0xFFFF0000) -/******************************************************************************* - * - * SBST - Smart Battery Specification Table - * Version 1 - * - ******************************************************************************/ +/* Values for cache associativity flag */ -typedef struct acpi_table_sbst -{ - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 WarningLevel; - UINT32 LowLevel; - UINT32 CriticalLevel; +#define ACPI_HMAT_CA_NONE (0) +#define ACPI_HMAT_CA_DIRECT_MAPPED (1) +#define ACPI_HMAT_CA_COMPLEX_CACHE_INDEXING (2) + +/* Values for write policy flag */ -} ACPI_TABLE_SBST; +#define ACPI_HMAT_CP_NONE (0) +#define ACPI_HMAT_CP_WB (1) +#define ACPI_HMAT_CP_WT (2) /******************************************************************************* * - * SDEV - Secure Devices Table (ACPI 6.2) + * HPET - High Precision Event Timer table * Version 1 * + * Conforms to "IA-PC HPET (High Precision Event Timers) Specification", + * Version 1.0a, October 2004 + * ******************************************************************************/ -typedef struct acpi_table_sdev +typedef struct acpi_table_hpet { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - -} ACPI_TABLE_SDEV; - - -typedef struct acpi_sdev_header -{ - UINT8 Type; + UINT32 Id; /* Hardware ID of event timer block */ + ACPI_GENERIC_ADDRESS Address; /* Address of event timer block */ + UINT8 Sequence; /* HPET sequence number */ + UINT16 MinimumTick; /* Main counter min tick, periodic mode */ UINT8 Flags; - UINT16 Length; - -} ACPI_SDEV_HEADER; - - -/* Values for subtable type above */ -enum AcpiSdevType -{ - ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0, - ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1, - ACPI_SDEV_TYPE_RESERVED = 2 /* 2 and greater are reserved */ -}; - -/* Values for flags above */ - -#define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS (1) - -/* - * SDEV subtables - */ - -/* 0: Namespace Device Based Secure Device Structure */ +} ACPI_TABLE_HPET; -typedef struct acpi_sdev_namespace -{ - ACPI_SDEV_HEADER Header; - UINT16 DeviceIdOffset; - UINT16 DeviceIdLength; - UINT16 VendorDataOffset; - UINT16 VendorDataLength; - -} ACPI_SDEV_NAMESPACE; - -/* 1: PCIe Endpoint Device Based Device Structure */ - -typedef struct acpi_sdev_pcie -{ - ACPI_SDEV_HEADER Header; - UINT16 Segment; - UINT16 StartBus; - UINT16 PathOffset; - UINT16 PathLength; - UINT16 VendorDataOffset; - UINT16 VendorDataLength; +/* Masks for Flags field above */ -} ACPI_SDEV_PCIE; +#define ACPI_HPET_PAGE_PROTECT_MASK (3) -/* 1a: PCIe Endpoint path entry */ +/* Values for Page Protect flags */ -typedef struct acpi_sdev_pcie_path +enum AcpiHpetPageProtect { - UINT8 Device; - UINT8 Function; - -} ACPI_SDEV_PCIE_PATH; + ACPI_HPET_NO_PAGE_PROTECT = 0, + ACPI_HPET_PAGE_PROTECT4 = 1, + ACPI_HPET_PAGE_PROTECT64 = 2 +}; /******************************************************************************* * - * SLIT - System Locality Distance Information Table + * IBFT - Boot Firmware Table * Version 1 * - ******************************************************************************/ - -typedef struct acpi_table_slit -{ - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT64 LocalityCount; - UINT8 Entry[1]; /* Real size = localities^2 */ - -} ACPI_TABLE_SLIT; - - -/******************************************************************************* + * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b + * Specification", Version 1.01, March 1, 2007 * - * SRAT - System Resource Affinity Table - * Version 3 + * Note: It appears that this table is not intended to appear in the RSDT/XSDT. + * Therefore, it is not currently supported by the disassembler. * ******************************************************************************/ -typedef struct acpi_table_srat +typedef struct acpi_table_ibft { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 TableRevision; /* Must be value '1' */ - UINT64 Reserved; /* Reserved, must be zero */ - -} ACPI_TABLE_SRAT; - -/* Values for subtable type in ACPI_SUBTABLE_HEADER */ - -enum AcpiSratType -{ - ACPI_SRAT_TYPE_CPU_AFFINITY = 0, - ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1, - ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2, - ACPI_SRAT_TYPE_GICC_AFFINITY = 3, - ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4, /* ACPI 6.2 */ - ACPI_SRAT_TYPE_RESERVED = 5 /* 5 and greater are reserved */ -}; - -/* - * SRAT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER - */ - -/* 0: Processor Local APIC/SAPIC Affinity */ - -typedef struct acpi_srat_cpu_affinity -{ - ACPI_SUBTABLE_HEADER Header; - UINT8 ProximityDomainLo; - UINT8 ApicId; - UINT32 Flags; - UINT8 LocalSapicEid; - UINT8 ProximityDomainHi[3]; - UINT32 ClockDomain; - -} ACPI_SRAT_CPU_AFFINITY; - -/* Flags */ - -#define ACPI_SRAT_CPU_USE_AFFINITY (1) /* 00: Use affinity structure */ - - -/* 1: Memory Affinity */ - -typedef struct acpi_srat_mem_affinity -{ - ACPI_SUBTABLE_HEADER Header; - UINT32 ProximityDomain; - UINT16 Reserved; /* Reserved, must be zero */ - UINT64 BaseAddress; - UINT64 Length; - UINT32 Reserved1; - UINT32 Flags; - UINT64 Reserved2; /* Reserved, must be zero */ + UINT8 Reserved[12]; -} ACPI_SRAT_MEM_AFFINITY; +} ACPI_TABLE_IBFT; -/* Flags */ -#define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */ -#define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */ -#define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */ +/* IBFT common subtable header */ - -/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ - -typedef struct acpi_srat_x2apic_cpu_affinity +typedef struct acpi_ibft_header { - ACPI_SUBTABLE_HEADER Header; - UINT16 Reserved; /* Reserved, must be zero */ - UINT32 ProximityDomain; - UINT32 ApicId; - UINT32 Flags; - UINT32 ClockDomain; - UINT32 Reserved2; - -} ACPI_SRAT_X2APIC_CPU_AFFINITY; - -/* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */ - -#define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */ + UINT8 Type; + UINT8 Version; + UINT16 Length; + UINT8 Index; + UINT8 Flags; +} ACPI_IBFT_HEADER; -/* 3: GICC Affinity (ACPI 5.1) */ +/* Values for Type field above */ -typedef struct acpi_srat_gicc_affinity +enum AcpiIbftType { - ACPI_SUBTABLE_HEADER Header; - UINT32 ProximityDomain; - UINT32 AcpiProcessorUid; - UINT32 Flags; - UINT32 ClockDomain; - -} ACPI_SRAT_GICC_AFFINITY; - -/* Flags for ACPI_SRAT_GICC_AFFINITY */ - -#define ACPI_SRAT_GICC_ENABLED (1) /* 00: Use affinity structure */ - - -/* 4: GCC ITS Affinity (ACPI 6.2) */ + ACPI_IBFT_TYPE_NOT_USED = 0, + ACPI_IBFT_TYPE_CONTROL = 1, + ACPI_IBFT_TYPE_INITIATOR = 2, + ACPI_IBFT_TYPE_NIC = 3, + ACPI_IBFT_TYPE_TARGET = 4, + ACPI_IBFT_TYPE_EXTENSIONS = 5, + ACPI_IBFT_TYPE_RESERVED = 6 /* 6 and greater are reserved */ +}; -typedef struct acpi_srat_gic_its_affinity -{ - ACPI_SUBTABLE_HEADER Header; - UINT32 ProximityDomain; - UINT16 Reserved; - UINT32 ItsId; -} ACPI_SRAT_GIC_ITS_AFFINITY; +/* IBFT subtables */ + +typedef struct acpi_ibft_control +{ + ACPI_IBFT_HEADER Header; + UINT16 Extensions; + UINT16 InitiatorOffset; + UINT16 Nic0Offset; + UINT16 Target0Offset; + UINT16 Nic1Offset; + UINT16 Target1Offset; + +} ACPI_IBFT_CONTROL; + +typedef struct acpi_ibft_initiator +{ + ACPI_IBFT_HEADER Header; + UINT8 SnsServer[16]; + UINT8 SlpServer[16]; + UINT8 PrimaryServer[16]; + UINT8 SecondaryServer[16]; + UINT16 NameLength; + UINT16 NameOffset; + +} ACPI_IBFT_INITIATOR; + +typedef struct acpi_ibft_nic +{ + ACPI_IBFT_HEADER Header; + UINT8 IpAddress[16]; + UINT8 SubnetMaskPrefix; + UINT8 Origin; + UINT8 Gateway[16]; + UINT8 PrimaryDns[16]; + UINT8 SecondaryDns[16]; + UINT8 Dhcp[16]; + UINT16 Vlan; + UINT8 MacAddress[6]; + UINT16 PciAddress; + UINT16 NameLength; + UINT16 NameOffset; + +} ACPI_IBFT_NIC; + +typedef struct acpi_ibft_target +{ + ACPI_IBFT_HEADER Header; + UINT8 TargetIpAddress[16]; + UINT16 TargetIpSocket; + UINT8 TargetBootLun[8]; + UINT8 ChapType; + UINT8 NicAssociation; + UINT16 TargetNameLength; + UINT16 TargetNameOffset; + UINT16 ChapNameLength; + UINT16 ChapNameOffset; + UINT16 ChapSecretLength; + UINT16 ChapSecretOffset; + UINT16 ReverseChapNameLength; + UINT16 ReverseChapNameOffset; + UINT16 ReverseChapSecretLength; + UINT16 ReverseChapSecretOffset; + +} ACPI_IBFT_TARGET; /* Reset to default packing */ diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h index cad2fb24..4b3d460d 100644 --- a/src/acpica/source/include/actbl2.h +++ b/src/acpica/source/include/actbl2.h @@ -160,9 +160,6 @@ * These tables are not consumed directly by the ACPICA subsystem, but are * included here to support device drivers and the AML disassembler. * - * Generally, the tables in this file are defined by third-party specifications, - * and are not defined directly by the ACPI specification itself. - * ******************************************************************************/ @@ -171,44 +168,26 @@ * file. Useful because they make it more difficult to inadvertently type in * the wrong signature. */ -#define ACPI_SIG_ASF "ASF!" /* Alert Standard Format table */ -#define ACPI_SIG_BOOT "BOOT" /* Simple Boot Flag Table */ -#define ACPI_SIG_CSRT "CSRT" /* Core System Resource Table */ -#define ACPI_SIG_DBG2 "DBG2" /* Debug Port table type 2 */ -#define ACPI_SIG_DBGP "DBGP" /* Debug Port table */ -#define ACPI_SIG_DMAR "DMAR" /* DMA Remapping table */ -#define ACPI_SIG_HPET "HPET" /* High Precision Event Timer table */ -#define ACPI_SIG_IBFT "IBFT" /* iSCSI Boot Firmware Table */ #define ACPI_SIG_IORT "IORT" /* IO Remapping Table */ #define ACPI_SIG_IVRS "IVRS" /* I/O Virtualization Reporting Structure */ #define ACPI_SIG_LPIT "LPIT" /* Low Power Idle Table */ +#define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ #define ACPI_SIG_MCFG "MCFG" /* PCI Memory Mapped Configuration table */ #define ACPI_SIG_MCHI "MCHI" /* Management Controller Host Interface table */ +#define ACPI_SIG_MPST "MPST" /* Memory Power State Table */ +#define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */ #define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ #define ACPI_SIG_MTMR "MTMR" /* MID Timer table */ +#define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */ +#define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */ +#define ACPI_SIG_PDTT "PDTT" /* Platform Debug Trigger Table */ +#define ACPI_SIG_PMTT "PMTT" /* Platform Memory Topology Table */ +#define ACPI_SIG_PPTT "PPTT" /* Processor Properties Topology Table */ +#define ACPI_SIG_RASF "RASF" /* RAS Feature table */ +#define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ #define ACPI_SIG_SDEI "SDEI" /* Software Delegated Exception Interface Table */ -#define ACPI_SIG_SLIC "SLIC" /* Software Licensing Description Table */ -#define ACPI_SIG_SPCR "SPCR" /* Serial Port Console Redirection table */ -#define ACPI_SIG_SPMI "SPMI" /* Server Platform Management Interface table */ -#define ACPI_SIG_TCPA "TCPA" /* Trusted Computing Platform Alliance table */ -#define ACPI_SIG_TPM2 "TPM2" /* Trusted Platform Module 2.0 H/W interface table */ -#define ACPI_SIG_UEFI "UEFI" /* Uefi Boot Optimization Table */ -#define ACPI_SIG_VRTC "VRTC" /* Virtual Real Time Clock Table */ -#define ACPI_SIG_WAET "WAET" /* Windows ACPI Emulated devices Table */ -#define ACPI_SIG_WDAT "WDAT" /* Watchdog Action Table */ -#define ACPI_SIG_WDDT "WDDT" /* Watchdog Timer Description Table */ -#define ACPI_SIG_WDRT "WDRT" /* Watchdog Resource Table */ -#define ACPI_SIG_WSMT "WSMT" /* Windows SMM Security Migrations Table */ -#define ACPI_SIG_XXXX "XXXX" /* Intermediate AML header for ASL/ASL+ converter */ - -#ifdef ACPI_UNDEFINED_TABLES -/* - * These tables have been seen in the field, but no definition has been found - */ -#define ACPI_SIG_ATKG "ATKG" -#define ACPI_SIG_GSCI "GSCI" /* GMCH SCI table */ -#define ACPI_SIG_IEIT "IEIT" -#endif +#define ACPI_SIG_SDEV "SDEV" /* Secure Devices table */ + /* * All tables must be byte-packed to match the ACPI specification, since @@ -231,1712 +210,1937 @@ /******************************************************************************* * - * ASF - Alert Standard Format table (Signature "ASF!") - * Revision 0x10 + * IORT - IO Remapping Table * - * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003 + * Conforms to "IO Remapping Table System Software on ARM Platforms", + * Document number: ARM DEN 0049C, May 2017 * ******************************************************************************/ -typedef struct acpi_table_asf +typedef struct acpi_table_iort { - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - -} ACPI_TABLE_ASF; + ACPI_TABLE_HEADER Header; + UINT32 NodeCount; + UINT32 NodeOffset; + UINT32 Reserved; +} ACPI_TABLE_IORT; -/* ASF subtable header */ -typedef struct acpi_asf_header +/* + * IORT subtables + */ +typedef struct acpi_iort_node { UINT8 Type; - UINT8 Reserved; UINT16 Length; + UINT8 Revision; + UINT32 Reserved; + UINT32 MappingCount; + UINT32 MappingOffset; + char NodeData[1]; -} ACPI_ASF_HEADER; - +} ACPI_IORT_NODE; -/* Values for Type field above */ +/* Values for subtable Type above */ -enum AcpiAsfType +enum AcpiIortNodeType { - ACPI_ASF_TYPE_INFO = 0, - ACPI_ASF_TYPE_ALERT = 1, - ACPI_ASF_TYPE_CONTROL = 2, - ACPI_ASF_TYPE_BOOT = 3, - ACPI_ASF_TYPE_ADDRESS = 4, - ACPI_ASF_TYPE_RESERVED = 5 + ACPI_IORT_NODE_ITS_GROUP = 0x00, + ACPI_IORT_NODE_NAMED_COMPONENT = 0x01, + ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02, + ACPI_IORT_NODE_SMMU = 0x03, + ACPI_IORT_NODE_SMMU_V3 = 0x04 }; -/* - * ASF subtables - */ - -/* 0: ASF Information */ -typedef struct acpi_asf_info +typedef struct acpi_iort_id_mapping { - ACPI_ASF_HEADER Header; - UINT8 MinResetValue; - UINT8 MinPollInterval; - UINT16 SystemId; - UINT32 MfgId; - UINT8 Flags; - UINT8 Reserved2[3]; - -} ACPI_ASF_INFO; - -/* Masks for Flags field above */ - -#define ACPI_ASF_SMBUS_PROTOCOLS (1) + UINT32 InputBase; /* Lowest value in input range */ + UINT32 IdCount; /* Number of IDs */ + UINT32 OutputBase; /* Lowest value in output range */ + UINT32 OutputReference; /* A reference to the output node */ + UINT32 Flags; +} ACPI_IORT_ID_MAPPING; -/* 1: ASF Alerts */ +/* Masks for Flags field above for IORT subtable */ -typedef struct acpi_asf_alert -{ - ACPI_ASF_HEADER Header; - UINT8 AssertMask; - UINT8 DeassertMask; - UINT8 Alerts; - UINT8 DataLength; +#define ACPI_IORT_ID_SINGLE_MAPPING (1) -} ACPI_ASF_ALERT; -typedef struct acpi_asf_alert_data +typedef struct acpi_iort_memory_access { - UINT8 Address; - UINT8 Command; - UINT8 Mask; - UINT8 Value; - UINT8 SensorType; - UINT8 Type; - UINT8 Offset; - UINT8 SourceType; - UINT8 Severity; - UINT8 SensorNumber; - UINT8 Entity; - UINT8 Instance; - -} ACPI_ASF_ALERT_DATA; + UINT32 CacheCoherency; + UINT8 Hints; + UINT16 Reserved; + UINT8 MemoryFlags; +} ACPI_IORT_MEMORY_ACCESS; -/* 2: ASF Remote Control */ +/* Values for CacheCoherency field above */ -typedef struct acpi_asf_remote -{ - ACPI_ASF_HEADER Header; - UINT8 Controls; - UINT8 DataLength; - UINT16 Reserved2; +#define ACPI_IORT_NODE_COHERENT 0x00000001 /* The device node is fully coherent */ +#define ACPI_IORT_NODE_NOT_COHERENT 0x00000000 /* The device node is not coherent */ -} ACPI_ASF_REMOTE; +/* Masks for Hints field above */ -typedef struct acpi_asf_control_data -{ - UINT8 Function; - UINT8 Address; - UINT8 Command; - UINT8 Value; +#define ACPI_IORT_HT_TRANSIENT (1) +#define ACPI_IORT_HT_WRITE (1<<1) +#define ACPI_IORT_HT_READ (1<<2) +#define ACPI_IORT_HT_OVERRIDE (1<<3) -} ACPI_ASF_CONTROL_DATA; +/* Masks for MemoryFlags field above */ +#define ACPI_IORT_MF_COHERENCY (1) +#define ACPI_IORT_MF_ATTRIBUTES (1<<1) -/* 3: ASF RMCP Boot Options */ -typedef struct acpi_asf_rmcp +/* + * IORT node specific subtables + */ +typedef struct acpi_iort_its_group { - ACPI_ASF_HEADER Header; - UINT8 Capabilities[7]; - UINT8 CompletionCode; - UINT32 EnterpriseId; - UINT8 Command; - UINT16 Parameter; - UINT16 BootOptions; - UINT16 OemParameters; - -} ACPI_ASF_RMCP; + UINT32 ItsCount; + UINT32 Identifiers[1]; /* GIC ITS identifier arrary */ +} ACPI_IORT_ITS_GROUP; -/* 4: ASF Address */ -typedef struct acpi_asf_address +typedef struct acpi_iort_named_component { - ACPI_ASF_HEADER Header; - UINT8 EpromAddress; - UINT8 Devices; - -} ACPI_ASF_ADDRESS; + UINT32 NodeFlags; + UINT64 MemoryProperties; /* Memory access properties */ + UINT8 MemoryAddressLimit; /* Memory address size limit */ + char DeviceName[1]; /* Path of namespace object */ +} ACPI_IORT_NAMED_COMPONENT; -/******************************************************************************* - * - * BOOT - Simple Boot Flag Table - * Version 1 - * - * Conforms to the "Simple Boot Flag Specification", Version 2.1 - * - ******************************************************************************/ -typedef struct acpi_table_boot +typedef struct acpi_iort_root_complex { - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT8 CmosIndex; /* Index in CMOS RAM for the boot register */ - UINT8 Reserved[3]; + UINT64 MemoryProperties; /* Memory access properties */ + UINT32 AtsAttribute; + UINT32 PciSegmentNumber; -} ACPI_TABLE_BOOT; +} ACPI_IORT_ROOT_COMPLEX; +/* Values for AtsAttribute field above */ -/******************************************************************************* - * - * CSRT - Core System Resource Table - * Version 0 - * - * Conforms to the "Core System Resource Table (CSRT)", November 14, 2011 - * - ******************************************************************************/ +#define ACPI_IORT_ATS_SUPPORTED 0x00000001 /* The root complex supports ATS */ +#define ACPI_IORT_ATS_UNSUPPORTED 0x00000000 /* The root complex doesn't support ATS */ -typedef struct acpi_table_csrt -{ - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ -} ACPI_TABLE_CSRT; +typedef struct acpi_iort_smmu +{ + UINT64 BaseAddress; /* SMMU base address */ + UINT64 Span; /* Length of memory range */ + UINT32 Model; + UINT32 Flags; + UINT32 GlobalInterruptOffset; + UINT32 ContextInterruptCount; + UINT32 ContextInterruptOffset; + UINT32 PmuInterruptCount; + UINT32 PmuInterruptOffset; + UINT64 Interrupts[1]; /* Interrupt array */ +} ACPI_IORT_SMMU; -/* Resource Group subtable */ +/* Values for Model field above */ -typedef struct acpi_csrt_group -{ - UINT32 Length; - UINT32 VendorId; - UINT32 SubvendorId; - UINT16 DeviceId; - UINT16 SubdeviceId; - UINT16 Revision; - UINT16 Reserved; - UINT32 SharedInfoLength; +#define ACPI_IORT_SMMU_V1 0x00000000 /* Generic SMMUv1 */ +#define ACPI_IORT_SMMU_V2 0x00000001 /* Generic SMMUv2 */ +#define ACPI_IORT_SMMU_CORELINK_MMU400 0x00000002 /* ARM Corelink MMU-400 */ +#define ACPI_IORT_SMMU_CORELINK_MMU500 0x00000003 /* ARM Corelink MMU-500 */ +#define ACPI_IORT_SMMU_CORELINK_MMU401 0x00000004 /* ARM Corelink MMU-401 */ +#define ACPI_IORT_SMMU_CAVIUM_THUNDERX 0x00000005 /* Cavium ThunderX SMMUv2 */ - /* Shared data immediately follows (Length = SharedInfoLength) */ +/* Masks for Flags field above */ -} ACPI_CSRT_GROUP; +#define ACPI_IORT_SMMU_DVM_SUPPORTED (1) +#define ACPI_IORT_SMMU_COHERENT_WALK (1<<1) -/* Shared Info subtable */ +/* Global interrupt format */ -typedef struct acpi_csrt_shared_info +typedef struct acpi_iort_smmu_gsi { - UINT16 MajorVersion; - UINT16 MinorVersion; - UINT32 MmioBaseLow; - UINT32 MmioBaseHigh; - UINT32 GsiInterrupt; - UINT8 InterruptPolarity; - UINT8 InterruptMode; - UINT8 NumChannels; - UINT8 DmaAddressWidth; - UINT16 BaseRequestLine; - UINT16 NumHandshakeSignals; - UINT32 MaxBlockSize; - - /* Resource descriptors immediately follow (Length = Group Length - SharedInfoLength) */ + UINT32 NSgIrpt; + UINT32 NSgIrptFlags; + UINT32 NSgCfgIrpt; + UINT32 NSgCfgIrptFlags; -} ACPI_CSRT_SHARED_INFO; +} ACPI_IORT_SMMU_GSI; -/* Resource Descriptor subtable */ -typedef struct acpi_csrt_descriptor +typedef struct acpi_iort_smmu_v3 { - UINT32 Length; - UINT16 Type; - UINT16 Subtype; - UINT32 Uid; - - /* Resource-specific information immediately follows */ - -} ACPI_CSRT_DESCRIPTOR; + UINT64 BaseAddress; /* SMMUv3 base address */ + UINT32 Flags; + UINT32 Reserved; + UINT64 VatosAddress; + UINT32 Model; + UINT32 EventGsiv; + UINT32 PriGsiv; + UINT32 GerrGsiv; + UINT32 SyncGsiv; + UINT8 Pxm; + UINT8 Reserved1; + UINT16 Reserved2; + UINT32 IdMappingIndex; +} ACPI_IORT_SMMU_V3; -/* Resource Types */ +/* Values for Model field above */ -#define ACPI_CSRT_TYPE_INTERRUPT 0x0001 -#define ACPI_CSRT_TYPE_TIMER 0x0002 -#define ACPI_CSRT_TYPE_DMA 0x0003 +#define ACPI_IORT_SMMU_V3_GENERIC 0x00000000 /* Generic SMMUv3 */ +#define ACPI_IORT_SMMU_V3_HISILICON_HI161X 0x00000001 /* HiSilicon Hi161x SMMUv3 */ +#define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX 0x00000002 /* Cavium CN99xx SMMUv3 */ -/* Resource Subtypes */ +/* Masks for Flags field above */ -#define ACPI_CSRT_XRUPT_LINE 0x0000 -#define ACPI_CSRT_XRUPT_CONTROLLER 0x0001 -#define ACPI_CSRT_TIMER 0x0000 -#define ACPI_CSRT_DMA_CHANNEL 0x0000 -#define ACPI_CSRT_DMA_CONTROLLER 0x0001 +#define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE (1) +#define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE (1<<1) +#define ACPI_IORT_SMMU_V3_PXM_VALID (1<<3) /******************************************************************************* * - * DBG2 - Debug Port Table 2 - * Version 0 (Both main table and subtables) + * IVRS - I/O Virtualization Reporting Structure + * Version 1 * - * Conforms to "Microsoft Debug Port Table 2 (DBG2)", December 10, 2015 + * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification", + * Revision 1.26, February 2009. * ******************************************************************************/ -typedef struct acpi_table_dbg2 +typedef struct acpi_table_ivrs { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 InfoOffset; - UINT32 InfoCount; - -} ACPI_TABLE_DBG2; + UINT32 Info; /* Common virtualization info */ + UINT64 Reserved; +} ACPI_TABLE_IVRS; -typedef struct acpi_dbg2_header -{ - UINT32 InfoOffset; - UINT32 InfoCount; +/* Values for Info field above */ -} ACPI_DBG2_HEADER; +#define ACPI_IVRS_PHYSICAL_SIZE 0x00007F00 /* 7 bits, physical address size */ +#define ACPI_IVRS_VIRTUAL_SIZE 0x003F8000 /* 7 bits, virtual address size */ +#define ACPI_IVRS_ATS_RESERVED 0x00400000 /* ATS address translation range reserved */ -/* Debug Device Information Subtable */ +/* IVRS subtable header */ -typedef struct acpi_dbg2_device +typedef struct acpi_ivrs_header { - UINT8 Revision; - UINT16 Length; - UINT8 RegisterCount; /* Number of BaseAddress registers */ - UINT16 NamepathLength; - UINT16 NamepathOffset; - UINT16 OemDataLength; - UINT16 OemDataOffset; - UINT16 PortType; - UINT16 PortSubtype; - UINT16 Reserved; - UINT16 BaseAddressOffset; - UINT16 AddressSizeOffset; - /* - * Data that follows: - * BaseAddress (required) - Each in 12-byte Generic Address Structure format. - * AddressSize (required) - Array of UINT32 sizes corresponding to each BaseAddress register. - * Namepath (required) - Null terminated string. Single dot if not supported. - * OemData (optional) - Length is OemDataLength. - */ -} ACPI_DBG2_DEVICE; - -/* Types for PortType field above */ - -#define ACPI_DBG2_SERIAL_PORT 0x8000 -#define ACPI_DBG2_1394_PORT 0x8001 -#define ACPI_DBG2_USB_PORT 0x8002 -#define ACPI_DBG2_NET_PORT 0x8003 + UINT8 Type; /* Subtable type */ + UINT8 Flags; + UINT16 Length; /* Subtable length */ + UINT16 DeviceId; /* ID of IOMMU */ -/* Subtypes for PortSubtype field above */ +} ACPI_IVRS_HEADER; -#define ACPI_DBG2_16550_COMPATIBLE 0x0000 -#define ACPI_DBG2_16550_SUBSET 0x0001 -#define ACPI_DBG2_ARM_PL011 0x0003 -#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 +/* Values for subtable Type above */ -#define ACPI_DBG2_1394_STANDARD 0x0000 +enum AcpiIvrsType +{ + ACPI_IVRS_TYPE_HARDWARE = 0x10, + ACPI_IVRS_TYPE_MEMORY1 = 0x20, + ACPI_IVRS_TYPE_MEMORY2 = 0x21, + ACPI_IVRS_TYPE_MEMORY3 = 0x22 +}; -#define ACPI_DBG2_USB_XHCI 0x0000 -#define ACPI_DBG2_USB_EHCI 0x0001 +/* Masks for Flags field above for IVHD subtable */ +#define ACPI_IVHD_TT_ENABLE (1) +#define ACPI_IVHD_PASS_PW (1<<1) +#define ACPI_IVHD_RES_PASS_PW (1<<2) +#define ACPI_IVHD_ISOC (1<<3) +#define ACPI_IVHD_IOTLB (1<<4) -/******************************************************************************* - * - * DBGP - Debug Port table - * Version 1 - * - * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000 - * - ******************************************************************************/ +/* Masks for Flags field above for IVMD subtable */ -typedef struct acpi_table_dbgp -{ - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT8 Type; /* 0=full 16550, 1=subset of 16550 */ - UINT8 Reserved[3]; - ACPI_GENERIC_ADDRESS DebugPort; +#define ACPI_IVMD_UNITY (1) +#define ACPI_IVMD_READ (1<<1) +#define ACPI_IVMD_WRITE (1<<2) +#define ACPI_IVMD_EXCLUSION_RANGE (1<<3) -} ACPI_TABLE_DBGP; +/* + * IVRS subtables, correspond to Type in ACPI_IVRS_HEADER + */ -/******************************************************************************* - * - * DMAR - DMA Remapping table - * Version 1 - * - * Conforms to "Intel Virtualization Technology for Directed I/O", - * Version 2.3, October 2014 - * - ******************************************************************************/ +/* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */ -typedef struct acpi_table_dmar +typedef struct acpi_ivrs_hardware { - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT8 Width; /* Host Address Width */ - UINT8 Flags; - UINT8 Reserved[10]; + ACPI_IVRS_HEADER Header; + UINT16 CapabilityOffset; /* Offset for IOMMU control fields */ + UINT64 BaseAddress; /* IOMMU control registers */ + UINT16 PciSegmentGroup; + UINT16 Info; /* MSI number and unit ID */ + UINT32 Reserved; -} ACPI_TABLE_DMAR; +} ACPI_IVRS_HARDWARE; -/* Masks for Flags field above */ - -#define ACPI_DMAR_INTR_REMAP (1) -#define ACPI_DMAR_X2APIC_OPT_OUT (1<<1) -#define ACPI_DMAR_X2APIC_MODE (1<<2) +/* Masks for Info field above */ +#define ACPI_IVHD_MSI_NUMBER_MASK 0x001F /* 5 bits, MSI message number */ +#define ACPI_IVHD_UNIT_ID_MASK 0x1F00 /* 5 bits, UnitID */ -/* DMAR subtable header */ -typedef struct acpi_dmar_header +/* + * Device Entries for IVHD subtable, appear after ACPI_IVRS_HARDWARE structure. + * Upper two bits of the Type field are the (encoded) length of the structure. + * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries + * are reserved for future use but not defined. + */ +typedef struct acpi_ivrs_de_header { - UINT16 Type; - UINT16 Length; - -} ACPI_DMAR_HEADER; + UINT8 Type; + UINT16 Id; + UINT8 DataSetting; -/* Values for subtable type in ACPI_DMAR_HEADER */ +} ACPI_IVRS_DE_HEADER; -enum AcpiDmarType -{ - ACPI_DMAR_TYPE_HARDWARE_UNIT = 0, - ACPI_DMAR_TYPE_RESERVED_MEMORY = 1, - ACPI_DMAR_TYPE_ROOT_ATS = 2, - ACPI_DMAR_TYPE_HARDWARE_AFFINITY = 3, - ACPI_DMAR_TYPE_NAMESPACE = 4, - ACPI_DMAR_TYPE_RESERVED = 5 /* 5 and greater are reserved */ -}; +/* Length of device entry is in the top two bits of Type field above */ +#define ACPI_IVHD_ENTRY_LENGTH 0xC0 -/* DMAR Device Scope structure */ +/* Values for device entry Type field above */ -typedef struct acpi_dmar_device_scope +enum AcpiIvrsDeviceEntryType { - UINT8 EntryType; - UINT8 Length; - UINT16 Reserved; - UINT8 EnumerationId; - UINT8 Bus; + /* 4-byte device entries, all use ACPI_IVRS_DEVICE4 */ -} ACPI_DMAR_DEVICE_SCOPE; + ACPI_IVRS_TYPE_PAD4 = 0, + ACPI_IVRS_TYPE_ALL = 1, + ACPI_IVRS_TYPE_SELECT = 2, + ACPI_IVRS_TYPE_START = 3, + ACPI_IVRS_TYPE_END = 4, -/* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE - device types */ + /* 8-byte device entries */ -enum AcpiDmarScopeType -{ - ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0, - ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1, - ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2, - ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3, - ACPI_DMAR_SCOPE_TYPE_HPET = 4, - ACPI_DMAR_SCOPE_TYPE_NAMESPACE = 5, - ACPI_DMAR_SCOPE_TYPE_RESERVED = 6 /* 6 and greater are reserved */ + ACPI_IVRS_TYPE_PAD8 = 64, + ACPI_IVRS_TYPE_NOT_USED = 65, + ACPI_IVRS_TYPE_ALIAS_SELECT = 66, /* Uses ACPI_IVRS_DEVICE8A */ + ACPI_IVRS_TYPE_ALIAS_START = 67, /* Uses ACPI_IVRS_DEVICE8A */ + ACPI_IVRS_TYPE_EXT_SELECT = 70, /* Uses ACPI_IVRS_DEVICE8B */ + ACPI_IVRS_TYPE_EXT_START = 71, /* Uses ACPI_IVRS_DEVICE8B */ + ACPI_IVRS_TYPE_SPECIAL = 72 /* Uses ACPI_IVRS_DEVICE8C */ }; -typedef struct acpi_dmar_pci_path -{ - UINT8 Device; - UINT8 Function; - -} ACPI_DMAR_PCI_PATH; +/* Values for Data field above */ +#define ACPI_IVHD_INIT_PASS (1) +#define ACPI_IVHD_EINT_PASS (1<<1) +#define ACPI_IVHD_NMI_PASS (1<<2) +#define ACPI_IVHD_SYSTEM_MGMT (3<<4) +#define ACPI_IVHD_LINT0_PASS (1<<6) +#define ACPI_IVHD_LINT1_PASS (1<<7) -/* - * DMAR Subtables, correspond to Type in ACPI_DMAR_HEADER - */ -/* 0: Hardware Unit Definition */ +/* Types 0-4: 4-byte device entry */ -typedef struct acpi_dmar_hardware_unit +typedef struct acpi_ivrs_device4 { - ACPI_DMAR_HEADER Header; - UINT8 Flags; - UINT8 Reserved; - UINT16 Segment; - UINT64 Address; /* Register Base Address */ + ACPI_IVRS_DE_HEADER Header; -} ACPI_DMAR_HARDWARE_UNIT; +} ACPI_IVRS_DEVICE4; -/* Masks for Flags field above */ +/* Types 66-67: 8-byte device entry */ -#define ACPI_DMAR_INCLUDE_ALL (1) +typedef struct acpi_ivrs_device8a +{ + ACPI_IVRS_DE_HEADER Header; + UINT8 Reserved1; + UINT16 UsedId; + UINT8 Reserved2; +} ACPI_IVRS_DEVICE8A; -/* 1: Reserved Memory Defininition */ +/* Types 70-71: 8-byte device entry */ -typedef struct acpi_dmar_reserved_memory +typedef struct acpi_ivrs_device8b { - ACPI_DMAR_HEADER Header; - UINT16 Reserved; - UINT16 Segment; - UINT64 BaseAddress; /* 4K aligned base address */ - UINT64 EndAddress; /* 4K aligned limit address */ - -} ACPI_DMAR_RESERVED_MEMORY; + ACPI_IVRS_DE_HEADER Header; + UINT32 ExtendedData; -/* Masks for Flags field above */ +} ACPI_IVRS_DEVICE8B; -#define ACPI_DMAR_ALLOW_ALL (1) +/* Values for ExtendedData above */ +#define ACPI_IVHD_ATS_DISABLED (1<<31) -/* 2: Root Port ATS Capability Reporting Structure */ +/* Type 72: 8-byte device entry */ -typedef struct acpi_dmar_atsr +typedef struct acpi_ivrs_device8c { - ACPI_DMAR_HEADER Header; - UINT8 Flags; - UINT8 Reserved; - UINT16 Segment; - -} ACPI_DMAR_ATSR; - -/* Masks for Flags field above */ - -#define ACPI_DMAR_ALL_PORTS (1) - + ACPI_IVRS_DE_HEADER Header; + UINT8 Handle; + UINT16 UsedId; + UINT8 Variety; -/* 3: Remapping Hardware Static Affinity Structure */ +} ACPI_IVRS_DEVICE8C; -typedef struct acpi_dmar_rhsa -{ - ACPI_DMAR_HEADER Header; - UINT32 Reserved; - UINT64 BaseAddress; - UINT32 ProximityDomain; +/* Values for Variety field above */ -} ACPI_DMAR_RHSA; +#define ACPI_IVHD_IOAPIC 1 +#define ACPI_IVHD_HPET 2 -/* 4: ACPI Namespace Device Declaration Structure */ +/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */ -typedef struct acpi_dmar_andd +typedef struct acpi_ivrs_memory { - ACPI_DMAR_HEADER Header; - UINT8 Reserved[3]; - UINT8 DeviceNumber; - char DeviceName[1]; + ACPI_IVRS_HEADER Header; + UINT16 AuxData; + UINT64 Reserved; + UINT64 StartAddress; + UINT64 MemoryLength; -} ACPI_DMAR_ANDD; +} ACPI_IVRS_MEMORY; /******************************************************************************* * - * HPET - High Precision Event Timer table - * Version 1 + * LPIT - Low Power Idle Table * - * Conforms to "IA-PC HPET (High Precision Event Timers) Specification", - * Version 1.0a, October 2004 + * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014. * ******************************************************************************/ -typedef struct acpi_table_hpet +typedef struct acpi_table_lpit { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 Id; /* Hardware ID of event timer block */ - ACPI_GENERIC_ADDRESS Address; /* Address of event timer block */ - UINT8 Sequence; /* HPET sequence number */ - UINT16 MinimumTick; /* Main counter min tick, periodic mode */ - UINT8 Flags; -} ACPI_TABLE_HPET; +} ACPI_TABLE_LPIT; -/* Masks for Flags field above */ -#define ACPI_HPET_PAGE_PROTECT_MASK (3) +/* LPIT subtable header */ + +typedef struct acpi_lpit_header +{ + UINT32 Type; /* Subtable type */ + UINT32 Length; /* Subtable length */ + UINT16 UniqueId; + UINT16 Reserved; + UINT32 Flags; + +} ACPI_LPIT_HEADER; -/* Values for Page Protect flags */ +/* Values for subtable Type above */ -enum AcpiHpetPageProtect +enum AcpiLpitType { - ACPI_HPET_NO_PAGE_PROTECT = 0, - ACPI_HPET_PAGE_PROTECT4 = 1, - ACPI_HPET_PAGE_PROTECT64 = 2 + ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00, + ACPI_LPIT_TYPE_RESERVED = 0x01 /* 1 and above are reserved */ }; +/* Masks for Flags field above */ + +#define ACPI_LPIT_STATE_DISABLED (1) +#define ACPI_LPIT_NO_COUNTER (1<<1) + +/* + * LPIT subtables, correspond to Type in ACPI_LPIT_HEADER + */ + +/* 0x00: Native C-state instruction based LPI structure */ + +typedef struct acpi_lpit_native +{ + ACPI_LPIT_HEADER Header; + ACPI_GENERIC_ADDRESS EntryTrigger; + UINT32 Residency; + UINT32 Latency; + ACPI_GENERIC_ADDRESS ResidencyCounter; + UINT64 CounterFrequency; + +} ACPI_LPIT_NATIVE; + /******************************************************************************* * - * IBFT - Boot Firmware Table - * Version 1 - * - * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b - * Specification", Version 1.01, March 1, 2007 - * - * Note: It appears that this table is not intended to appear in the RSDT/XSDT. - * Therefore, it is not currently supported by the disassembler. + * MADT - Multiple APIC Description Table + * Version 3 * ******************************************************************************/ -typedef struct acpi_table_ibft +typedef struct acpi_table_madt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT8 Reserved[12]; + UINT32 Address; /* Physical address of local APIC */ + UINT32 Flags; + +} ACPI_TABLE_MADT; -} ACPI_TABLE_IBFT; +/* Masks for Flags field above */ +#define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ -/* IBFT common subtable header */ +/* Values for PCATCompat flag */ -typedef struct acpi_ibft_header -{ - UINT8 Type; - UINT8 Version; - UINT16 Length; - UINT8 Index; - UINT8 Flags; +#define ACPI_MADT_DUAL_PIC 1 +#define ACPI_MADT_MULTIPLE_APIC 0 -} ACPI_IBFT_HEADER; -/* Values for Type field above */ +/* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */ -enum AcpiIbftType +enum AcpiMadtType { - ACPI_IBFT_TYPE_NOT_USED = 0, - ACPI_IBFT_TYPE_CONTROL = 1, - ACPI_IBFT_TYPE_INITIATOR = 2, - ACPI_IBFT_TYPE_NIC = 3, - ACPI_IBFT_TYPE_TARGET = 4, - ACPI_IBFT_TYPE_EXTENSIONS = 5, - ACPI_IBFT_TYPE_RESERVED = 6 /* 6 and greater are reserved */ + ACPI_MADT_TYPE_LOCAL_APIC = 0, + ACPI_MADT_TYPE_IO_APIC = 1, + ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, + ACPI_MADT_TYPE_NMI_SOURCE = 3, + ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, + ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, + ACPI_MADT_TYPE_IO_SAPIC = 6, + ACPI_MADT_TYPE_LOCAL_SAPIC = 7, + ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, + ACPI_MADT_TYPE_LOCAL_X2APIC = 9, + ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, + ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, + ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, + ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13, + ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14, + ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15, + ACPI_MADT_TYPE_RESERVED = 16 /* 16 and greater are reserved */ }; -/* IBFT subtables */ - -typedef struct acpi_ibft_control -{ - ACPI_IBFT_HEADER Header; - UINT16 Extensions; - UINT16 InitiatorOffset; - UINT16 Nic0Offset; - UINT16 Target0Offset; - UINT16 Nic1Offset; - UINT16 Target1Offset; - -} ACPI_IBFT_CONTROL; - -typedef struct acpi_ibft_initiator -{ - ACPI_IBFT_HEADER Header; - UINT8 SnsServer[16]; - UINT8 SlpServer[16]; - UINT8 PrimaryServer[16]; - UINT8 SecondaryServer[16]; - UINT16 NameLength; - UINT16 NameOffset; - -} ACPI_IBFT_INITIATOR; - -typedef struct acpi_ibft_nic -{ - ACPI_IBFT_HEADER Header; - UINT8 IpAddress[16]; - UINT8 SubnetMaskPrefix; - UINT8 Origin; - UINT8 Gateway[16]; - UINT8 PrimaryDns[16]; - UINT8 SecondaryDns[16]; - UINT8 Dhcp[16]; - UINT16 Vlan; - UINT8 MacAddress[6]; - UINT16 PciAddress; - UINT16 NameLength; - UINT16 NameOffset; - -} ACPI_IBFT_NIC; - -typedef struct acpi_ibft_target -{ - ACPI_IBFT_HEADER Header; - UINT8 TargetIpAddress[16]; - UINT16 TargetIpSocket; - UINT8 TargetBootLun[8]; - UINT8 ChapType; - UINT8 NicAssociation; - UINT16 TargetNameLength; - UINT16 TargetNameOffset; - UINT16 ChapNameLength; - UINT16 ChapNameOffset; - UINT16 ChapSecretLength; - UINT16 ChapSecretOffset; - UINT16 ReverseChapNameLength; - UINT16 ReverseChapNameOffset; - UINT16 ReverseChapSecretLength; - UINT16 ReverseChapSecretOffset; - -} ACPI_IBFT_TARGET; - +/* + * MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER + */ -/******************************************************************************* - * - * IORT - IO Remapping Table - * - * Conforms to "IO Remapping Table System Software on ARM Platforms", - * Document number: ARM DEN 0049C, May 2017 - * - ******************************************************************************/ +/* 0: Processor Local APIC */ -typedef struct acpi_table_iort +typedef struct acpi_madt_local_apic { - ACPI_TABLE_HEADER Header; - UINT32 NodeCount; - UINT32 NodeOffset; - UINT32 Reserved; + ACPI_SUBTABLE_HEADER Header; + UINT8 ProcessorId; /* ACPI processor id */ + UINT8 Id; /* Processor's local APIC id */ + UINT32 LapicFlags; -} ACPI_TABLE_IORT; +} ACPI_MADT_LOCAL_APIC; -/* - * IORT subtables - */ -typedef struct acpi_iort_node +/* 1: IO APIC */ + +typedef struct acpi_madt_io_apic { - UINT8 Type; - UINT16 Length; - UINT8 Revision; - UINT32 Reserved; - UINT32 MappingCount; - UINT32 MappingOffset; - char NodeData[1]; + ACPI_SUBTABLE_HEADER Header; + UINT8 Id; /* I/O APIC ID */ + UINT8 Reserved; /* Reserved - must be zero */ + UINT32 Address; /* APIC physical address */ + UINT32 GlobalIrqBase; /* Global system interrupt where INTI lines start */ -} ACPI_IORT_NODE; +} ACPI_MADT_IO_APIC; -/* Values for subtable Type above */ -enum AcpiIortNodeType +/* 2: Interrupt Override */ + +typedef struct acpi_madt_interrupt_override { - ACPI_IORT_NODE_ITS_GROUP = 0x00, - ACPI_IORT_NODE_NAMED_COMPONENT = 0x01, - ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02, - ACPI_IORT_NODE_SMMU = 0x03, - ACPI_IORT_NODE_SMMU_V3 = 0x04 -}; + ACPI_SUBTABLE_HEADER Header; + UINT8 Bus; /* 0 - ISA */ + UINT8 SourceIrq; /* Interrupt source (IRQ) */ + UINT32 GlobalIrq; /* Global system interrupt */ + UINT16 IntiFlags; +} ACPI_MADT_INTERRUPT_OVERRIDE; -typedef struct acpi_iort_id_mapping -{ - UINT32 InputBase; /* Lowest value in input range */ - UINT32 IdCount; /* Number of IDs */ - UINT32 OutputBase; /* Lowest value in output range */ - UINT32 OutputReference; /* A reference to the output node */ - UINT32 Flags; -} ACPI_IORT_ID_MAPPING; +/* 3: NMI Source */ -/* Masks for Flags field above for IORT subtable */ +typedef struct acpi_madt_nmi_source +{ + ACPI_SUBTABLE_HEADER Header; + UINT16 IntiFlags; + UINT32 GlobalIrq; /* Global system interrupt */ -#define ACPI_IORT_ID_SINGLE_MAPPING (1) +} ACPI_MADT_NMI_SOURCE; -typedef struct acpi_iort_memory_access -{ - UINT32 CacheCoherency; - UINT8 Hints; - UINT16 Reserved; - UINT8 MemoryFlags; +/* 4: Local APIC NMI */ -} ACPI_IORT_MEMORY_ACCESS; +typedef struct acpi_madt_local_apic_nmi +{ + ACPI_SUBTABLE_HEADER Header; + UINT8 ProcessorId; /* ACPI processor id */ + UINT16 IntiFlags; + UINT8 Lint; /* LINTn to which NMI is connected */ -/* Values for CacheCoherency field above */ +} ACPI_MADT_LOCAL_APIC_NMI; -#define ACPI_IORT_NODE_COHERENT 0x00000001 /* The device node is fully coherent */ -#define ACPI_IORT_NODE_NOT_COHERENT 0x00000000 /* The device node is not coherent */ -/* Masks for Hints field above */ +/* 5: Address Override */ -#define ACPI_IORT_HT_TRANSIENT (1) -#define ACPI_IORT_HT_WRITE (1<<1) -#define ACPI_IORT_HT_READ (1<<2) -#define ACPI_IORT_HT_OVERRIDE (1<<3) +typedef struct acpi_madt_local_apic_override +{ + ACPI_SUBTABLE_HEADER Header; + UINT16 Reserved; /* Reserved, must be zero */ + UINT64 Address; /* APIC physical address */ -/* Masks for MemoryFlags field above */ +} ACPI_MADT_LOCAL_APIC_OVERRIDE; -#define ACPI_IORT_MF_COHERENCY (1) -#define ACPI_IORT_MF_ATTRIBUTES (1<<1) +/* 6: I/O Sapic */ -/* - * IORT node specific subtables - */ -typedef struct acpi_iort_its_group +typedef struct acpi_madt_io_sapic { - UINT32 ItsCount; - UINT32 Identifiers[1]; /* GIC ITS identifier arrary */ + ACPI_SUBTABLE_HEADER Header; + UINT8 Id; /* I/O SAPIC ID */ + UINT8 Reserved; /* Reserved, must be zero */ + UINT32 GlobalIrqBase; /* Global interrupt for SAPIC start */ + UINT64 Address; /* SAPIC physical address */ -} ACPI_IORT_ITS_GROUP; +} ACPI_MADT_IO_SAPIC; -typedef struct acpi_iort_named_component +/* 7: Local Sapic */ + +typedef struct acpi_madt_local_sapic { - UINT32 NodeFlags; - UINT64 MemoryProperties; /* Memory access properties */ - UINT8 MemoryAddressLimit; /* Memory address size limit */ - char DeviceName[1]; /* Path of namespace object */ + ACPI_SUBTABLE_HEADER Header; + UINT8 ProcessorId; /* ACPI processor id */ + UINT8 Id; /* SAPIC ID */ + UINT8 Eid; /* SAPIC EID */ + UINT8 Reserved[3]; /* Reserved, must be zero */ + UINT32 LapicFlags; + UINT32 Uid; /* Numeric UID - ACPI 3.0 */ + char UidString[1]; /* String UID - ACPI 3.0 */ -} ACPI_IORT_NAMED_COMPONENT; +} ACPI_MADT_LOCAL_SAPIC; -typedef struct acpi_iort_root_complex +/* 8: Platform Interrupt Source */ + +typedef struct acpi_madt_interrupt_source { - UINT64 MemoryProperties; /* Memory access properties */ - UINT32 AtsAttribute; - UINT32 PciSegmentNumber; + ACPI_SUBTABLE_HEADER Header; + UINT16 IntiFlags; + UINT8 Type; /* 1=PMI, 2=INIT, 3=corrected */ + UINT8 Id; /* Processor ID */ + UINT8 Eid; /* Processor EID */ + UINT8 IoSapicVector; /* Vector value for PMI interrupts */ + UINT32 GlobalIrq; /* Global system interrupt */ + UINT32 Flags; /* Interrupt Source Flags */ -} ACPI_IORT_ROOT_COMPLEX; +} ACPI_MADT_INTERRUPT_SOURCE; -/* Values for AtsAttribute field above */ +/* Masks for Flags field above */ -#define ACPI_IORT_ATS_SUPPORTED 0x00000001 /* The root complex supports ATS */ -#define ACPI_IORT_ATS_UNSUPPORTED 0x00000000 /* The root complex doesn't support ATS */ +#define ACPI_MADT_CPEI_OVERRIDE (1) -typedef struct acpi_iort_smmu +/* 9: Processor Local X2APIC (ACPI 4.0) */ + +typedef struct acpi_madt_local_x2apic { - UINT64 BaseAddress; /* SMMU base address */ - UINT64 Span; /* Length of memory range */ - UINT32 Model; - UINT32 Flags; - UINT32 GlobalInterruptOffset; - UINT32 ContextInterruptCount; - UINT32 ContextInterruptOffset; - UINT32 PmuInterruptCount; - UINT32 PmuInterruptOffset; - UINT64 Interrupts[1]; /* Interrupt array */ + ACPI_SUBTABLE_HEADER Header; + UINT16 Reserved; /* Reserved - must be zero */ + UINT32 LocalApicId; /* Processor x2APIC ID */ + UINT32 LapicFlags; + UINT32 Uid; /* ACPI processor UID */ -} ACPI_IORT_SMMU; +} ACPI_MADT_LOCAL_X2APIC; -/* Values for Model field above */ -#define ACPI_IORT_SMMU_V1 0x00000000 /* Generic SMMUv1 */ -#define ACPI_IORT_SMMU_V2 0x00000001 /* Generic SMMUv2 */ -#define ACPI_IORT_SMMU_CORELINK_MMU400 0x00000002 /* ARM Corelink MMU-400 */ -#define ACPI_IORT_SMMU_CORELINK_MMU500 0x00000003 /* ARM Corelink MMU-500 */ -#define ACPI_IORT_SMMU_CORELINK_MMU401 0x00000004 /* ARM Corelink MMU-401 */ -#define ACPI_IORT_SMMU_CAVIUM_THUNDERX 0x00000005 /* Cavium ThunderX SMMUv2 */ +/* 10: Local X2APIC NMI (ACPI 4.0) */ + +typedef struct acpi_madt_local_x2apic_nmi +{ + ACPI_SUBTABLE_HEADER Header; + UINT16 IntiFlags; + UINT32 Uid; /* ACPI processor UID */ + UINT8 Lint; /* LINTn to which NMI is connected */ + UINT8 Reserved[3]; /* Reserved - must be zero */ + +} ACPI_MADT_LOCAL_X2APIC_NMI; + + +/* 11: Generic Interrupt (ACPI 5.0 + ACPI 6.0 changes) */ + +typedef struct acpi_madt_generic_interrupt +{ + ACPI_SUBTABLE_HEADER Header; + UINT16 Reserved; /* Reserved - must be zero */ + UINT32 CpuInterfaceNumber; + UINT32 Uid; + UINT32 Flags; + UINT32 ParkingVersion; + UINT32 PerformanceInterrupt; + UINT64 ParkedAddress; + UINT64 BaseAddress; + UINT64 GicvBaseAddress; + UINT64 GichBaseAddress; + UINT32 VgicInterrupt; + UINT64 GicrBaseAddress; + UINT64 ArmMpidr; + UINT8 EfficiencyClass; + UINT8 Reserved2[3]; + +} ACPI_MADT_GENERIC_INTERRUPT; /* Masks for Flags field above */ -#define ACPI_IORT_SMMU_DVM_SUPPORTED (1) -#define ACPI_IORT_SMMU_COHERENT_WALK (1<<1) +/* ACPI_MADT_ENABLED (1) Processor is usable if set */ +#define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */ +#define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */ -/* Global interrupt format */ -typedef struct acpi_iort_smmu_gsi +/* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */ + +typedef struct acpi_madt_generic_distributor { - UINT32 NSgIrpt; - UINT32 NSgIrptFlags; - UINT32 NSgCfgIrpt; - UINT32 NSgCfgIrptFlags; + ACPI_SUBTABLE_HEADER Header; + UINT16 Reserved; /* Reserved - must be zero */ + UINT32 GicId; + UINT64 BaseAddress; + UINT32 GlobalIrqBase; + UINT8 Version; + UINT8 Reserved2[3]; /* Reserved - must be zero */ -} ACPI_IORT_SMMU_GSI; +} ACPI_MADT_GENERIC_DISTRIBUTOR; +/* Values for Version field above */ -typedef struct acpi_iort_smmu_v3 +enum AcpiMadtGicVersion { - UINT64 BaseAddress; /* SMMUv3 base address */ - UINT32 Flags; - UINT32 Reserved; - UINT64 VatosAddress; - UINT32 Model; - UINT32 EventGsiv; - UINT32 PriGsiv; - UINT32 GerrGsiv; - UINT32 SyncGsiv; - UINT8 Pxm; - UINT8 Reserved1; - UINT16 Reserved2; - UINT32 IdMappingIndex; + ACPI_MADT_GIC_VERSION_NONE = 0, + ACPI_MADT_GIC_VERSION_V1 = 1, + ACPI_MADT_GIC_VERSION_V2 = 2, + ACPI_MADT_GIC_VERSION_V3 = 3, + ACPI_MADT_GIC_VERSION_V4 = 4, + ACPI_MADT_GIC_VERSION_RESERVED = 5 /* 5 and greater are reserved */ +}; -} ACPI_IORT_SMMU_V3; -/* Values for Model field above */ +/* 13: Generic MSI Frame (ACPI 5.1) */ -#define ACPI_IORT_SMMU_V3_GENERIC 0x00000000 /* Generic SMMUv3 */ -#define ACPI_IORT_SMMU_V3_HISILICON_HI161X 0x00000001 /* HiSilicon Hi161x SMMUv3 */ -#define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX 0x00000002 /* Cavium CN99xx SMMUv3 */ +typedef struct acpi_madt_generic_msi_frame +{ + ACPI_SUBTABLE_HEADER Header; + UINT16 Reserved; /* Reserved - must be zero */ + UINT32 MsiFrameId; + UINT64 BaseAddress; + UINT32 Flags; + UINT16 SpiCount; + UINT16 SpiBase; + +} ACPI_MADT_GENERIC_MSI_FRAME; /* Masks for Flags field above */ -#define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE (1) -#define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE (1<<1) -#define ACPI_IORT_SMMU_V3_PXM_VALID (1<<3) +#define ACPI_MADT_OVERRIDE_SPI_VALUES (1) + + +/* 14: Generic Redistributor (ACPI 5.1) */ + +typedef struct acpi_madt_generic_redistributor +{ + ACPI_SUBTABLE_HEADER Header; + UINT16 Reserved; /* reserved - must be zero */ + UINT64 BaseAddress; + UINT32 Length; + +} ACPI_MADT_GENERIC_REDISTRIBUTOR; + + +/* 15: Generic Translator (ACPI 6.0) */ + +typedef struct acpi_madt_generic_translator +{ + ACPI_SUBTABLE_HEADER Header; + UINT16 Reserved; /* reserved - must be zero */ + UINT32 TranslationId; + UINT64 BaseAddress; + UINT32 Reserved2; + +} ACPI_MADT_GENERIC_TRANSLATOR; + + +/* + * Common flags fields for MADT subtables + */ + +/* MADT Local APIC flags */ + +#define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ + +/* MADT MPS INTI flags (IntiFlags) */ + +#define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ +#define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ + +/* Values for MPS INTI flags */ + +#define ACPI_MADT_POLARITY_CONFORMS 0 +#define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 +#define ACPI_MADT_POLARITY_RESERVED 2 +#define ACPI_MADT_POLARITY_ACTIVE_LOW 3 + +#define ACPI_MADT_TRIGGER_CONFORMS (0) +#define ACPI_MADT_TRIGGER_EDGE (1<<2) +#define ACPI_MADT_TRIGGER_RESERVED (2<<2) +#define ACPI_MADT_TRIGGER_LEVEL (3<<2) /******************************************************************************* * - * IVRS - I/O Virtualization Reporting Structure + * MCFG - PCI Memory Mapped Configuration table and subtable * Version 1 * - * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification", - * Revision 1.26, February 2009. + * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005 * ******************************************************************************/ -typedef struct acpi_table_ivrs +typedef struct acpi_table_mcfg { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 Info; /* Common virtualization info */ - UINT64 Reserved; + UINT8 Reserved[8]; -} ACPI_TABLE_IVRS; +} ACPI_TABLE_MCFG; -/* Values for Info field above */ -#define ACPI_IVRS_PHYSICAL_SIZE 0x00007F00 /* 7 bits, physical address size */ -#define ACPI_IVRS_VIRTUAL_SIZE 0x003F8000 /* 7 bits, virtual address size */ -#define ACPI_IVRS_ATS_RESERVED 0x00400000 /* ATS address translation range reserved */ +/* Subtable */ +typedef struct acpi_mcfg_allocation +{ + UINT64 Address; /* Base address, processor-relative */ + UINT16 PciSegment; /* PCI segment group number */ + UINT8 StartBusNumber; /* Starting PCI Bus number */ + UINT8 EndBusNumber; /* Final PCI Bus number */ + UINT32 Reserved; -/* IVRS subtable header */ +} ACPI_MCFG_ALLOCATION; -typedef struct acpi_ivrs_header + +/******************************************************************************* + * + * MCHI - Management Controller Host Interface Table + * Version 1 + * + * Conforms to "Management Component Transport Protocol (MCTP) Host + * Interface Specification", Revision 1.0.0a, October 13, 2009 + * + ******************************************************************************/ + +typedef struct acpi_table_mchi { - UINT8 Type; /* Subtable type */ - UINT8 Flags; - UINT16 Length; /* Subtable length */ - UINT16 DeviceId; /* ID of IOMMU */ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT8 InterfaceType; + UINT8 Protocol; + UINT64 ProtocolData; + UINT8 InterruptType; + UINT8 Gpe; + UINT8 PciDeviceFlag; + UINT32 GlobalInterrupt; + ACPI_GENERIC_ADDRESS ControlRegister; + UINT8 PciSegment; + UINT8 PciBus; + UINT8 PciDevice; + UINT8 PciFunction; -} ACPI_IVRS_HEADER; +} ACPI_TABLE_MCHI; -/* Values for subtable Type above */ -enum AcpiIvrsType +/******************************************************************************* + * + * MPST - Memory Power State Table (ACPI 5.0) + * Version 1 + * + ******************************************************************************/ + +#define ACPI_MPST_CHANNEL_INFO \ + UINT8 ChannelId; \ + UINT8 Reserved1[3]; \ + UINT16 PowerNodeCount; \ + UINT16 Reserved2; + +/* Main table */ + +typedef struct acpi_table_mpst { - ACPI_IVRS_TYPE_HARDWARE = 0x10, - ACPI_IVRS_TYPE_MEMORY1 = 0x20, - ACPI_IVRS_TYPE_MEMORY2 = 0x21, - ACPI_IVRS_TYPE_MEMORY3 = 0x22 -}; + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ -/* Masks for Flags field above for IVHD subtable */ +} ACPI_TABLE_MPST; -#define ACPI_IVHD_TT_ENABLE (1) -#define ACPI_IVHD_PASS_PW (1<<1) -#define ACPI_IVHD_RES_PASS_PW (1<<2) -#define ACPI_IVHD_ISOC (1<<3) -#define ACPI_IVHD_IOTLB (1<<4) -/* Masks for Flags field above for IVMD subtable */ +/* Memory Platform Communication Channel Info */ -#define ACPI_IVMD_UNITY (1) -#define ACPI_IVMD_READ (1<<1) -#define ACPI_IVMD_WRITE (1<<2) -#define ACPI_IVMD_EXCLUSION_RANGE (1<<3) +typedef struct acpi_mpst_channel +{ + ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ +} ACPI_MPST_CHANNEL; -/* - * IVRS subtables, correspond to Type in ACPI_IVRS_HEADER - */ -/* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */ +/* Memory Power Node Structure */ -typedef struct acpi_ivrs_hardware +typedef struct acpi_mpst_power_node { - ACPI_IVRS_HEADER Header; - UINT16 CapabilityOffset; /* Offset for IOMMU control fields */ - UINT64 BaseAddress; /* IOMMU control registers */ - UINT16 PciSegmentGroup; - UINT16 Info; /* MSI number and unit ID */ - UINT32 Reserved; + UINT8 Flags; + UINT8 Reserved1; + UINT16 NodeId; + UINT32 Length; + UINT64 RangeAddress; + UINT64 RangeLength; + UINT32 NumPowerStates; + UINT32 NumPhysicalComponents; -} ACPI_IVRS_HARDWARE; +} ACPI_MPST_POWER_NODE; -/* Masks for Info field above */ +/* Values for Flags field above */ -#define ACPI_IVHD_MSI_NUMBER_MASK 0x001F /* 5 bits, MSI message number */ -#define ACPI_IVHD_UNIT_ID_MASK 0x1F00 /* 5 bits, UnitID */ +#define ACPI_MPST_ENABLED 1 +#define ACPI_MPST_POWER_MANAGED 2 +#define ACPI_MPST_HOT_PLUG_CAPABLE 4 -/* - * Device Entries for IVHD subtable, appear after ACPI_IVRS_HARDWARE structure. - * Upper two bits of the Type field are the (encoded) length of the structure. - * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries - * are reserved for future use but not defined. - */ -typedef struct acpi_ivrs_de_header +/* Memory Power State Structure (follows POWER_NODE above) */ + +typedef struct acpi_mpst_power_state { - UINT8 Type; - UINT16 Id; - UINT8 DataSetting; + UINT8 PowerState; + UINT8 InfoIndex; -} ACPI_IVRS_DE_HEADER; +} ACPI_MPST_POWER_STATE; -/* Length of device entry is in the top two bits of Type field above */ -#define ACPI_IVHD_ENTRY_LENGTH 0xC0 +/* Physical Component ID Structure (follows POWER_STATE above) */ -/* Values for device entry Type field above */ +typedef struct acpi_mpst_component +{ + UINT16 ComponentId; -enum AcpiIvrsDeviceEntryType +} ACPI_MPST_COMPONENT; + + +/* Memory Power State Characteristics Structure (follows all POWER_NODEs) */ + +typedef struct acpi_mpst_data_hdr { - /* 4-byte device entries, all use ACPI_IVRS_DEVICE4 */ + UINT16 CharacteristicsCount; + UINT16 Reserved; - ACPI_IVRS_TYPE_PAD4 = 0, - ACPI_IVRS_TYPE_ALL = 1, - ACPI_IVRS_TYPE_SELECT = 2, - ACPI_IVRS_TYPE_START = 3, - ACPI_IVRS_TYPE_END = 4, +} ACPI_MPST_DATA_HDR; - /* 8-byte device entries */ +typedef struct acpi_mpst_power_data +{ + UINT8 StructureId; + UINT8 Flags; + UINT16 Reserved1; + UINT32 AveragePower; + UINT32 PowerSaving; + UINT64 ExitLatency; + UINT64 Reserved2; - ACPI_IVRS_TYPE_PAD8 = 64, - ACPI_IVRS_TYPE_NOT_USED = 65, - ACPI_IVRS_TYPE_ALIAS_SELECT = 66, /* Uses ACPI_IVRS_DEVICE8A */ - ACPI_IVRS_TYPE_ALIAS_START = 67, /* Uses ACPI_IVRS_DEVICE8A */ - ACPI_IVRS_TYPE_EXT_SELECT = 70, /* Uses ACPI_IVRS_DEVICE8B */ - ACPI_IVRS_TYPE_EXT_START = 71, /* Uses ACPI_IVRS_DEVICE8B */ - ACPI_IVRS_TYPE_SPECIAL = 72 /* Uses ACPI_IVRS_DEVICE8C */ -}; +} ACPI_MPST_POWER_DATA; -/* Values for Data field above */ +/* Values for Flags field above */ -#define ACPI_IVHD_INIT_PASS (1) -#define ACPI_IVHD_EINT_PASS (1<<1) -#define ACPI_IVHD_NMI_PASS (1<<2) -#define ACPI_IVHD_SYSTEM_MGMT (3<<4) -#define ACPI_IVHD_LINT0_PASS (1<<6) -#define ACPI_IVHD_LINT1_PASS (1<<7) +#define ACPI_MPST_PRESERVE 1 +#define ACPI_MPST_AUTOENTRY 2 +#define ACPI_MPST_AUTOEXIT 4 -/* Types 0-4: 4-byte device entry */ +/* Shared Memory Region (not part of an ACPI table) */ -typedef struct acpi_ivrs_device4 +typedef struct acpi_mpst_shared { - ACPI_IVRS_DE_HEADER Header; + UINT32 Signature; + UINT16 PccCommand; + UINT16 PccStatus; + UINT32 CommandRegister; + UINT32 StatusRegister; + UINT32 PowerStateId; + UINT32 PowerNodeId; + UINT64 EnergyConsumed; + UINT64 AveragePower; -} ACPI_IVRS_DEVICE4; +} ACPI_MPST_SHARED; -/* Types 66-67: 8-byte device entry */ -typedef struct acpi_ivrs_device8a +/******************************************************************************* + * + * MSCT - Maximum System Characteristics Table (ACPI 4.0) + * Version 1 + * + ******************************************************************************/ + +typedef struct acpi_table_msct { - ACPI_IVRS_DE_HEADER Header; - UINT8 Reserved1; - UINT16 UsedId; - UINT8 Reserved2; + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 ProximityOffset; /* Location of proximity info struct(s) */ + UINT32 MaxProximityDomains;/* Max number of proximity domains */ + UINT32 MaxClockDomains; /* Max number of clock domains */ + UINT64 MaxAddress; /* Max physical address in system */ -} ACPI_IVRS_DEVICE8A; +} ACPI_TABLE_MSCT; -/* Types 70-71: 8-byte device entry */ -typedef struct acpi_ivrs_device8b +/* Subtable - Maximum Proximity Domain Information. Version 1 */ + +typedef struct acpi_msct_proximity { - ACPI_IVRS_DE_HEADER Header; - UINT32 ExtendedData; + UINT8 Revision; + UINT8 Length; + UINT32 RangeStart; /* Start of domain range */ + UINT32 RangeEnd; /* End of domain range */ + UINT32 ProcessorCapacity; + UINT64 MemoryCapacity; /* In bytes */ -} ACPI_IVRS_DEVICE8B; +} ACPI_MSCT_PROXIMITY; -/* Values for ExtendedData above */ -#define ACPI_IVHD_ATS_DISABLED (1<<31) +/******************************************************************************* + * + * MSDM - Microsoft Data Management table + * + * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", + * November 29, 2011. Copyright 2011 Microsoft + * + ******************************************************************************/ -/* Type 72: 8-byte device entry */ +/* Basic MSDM table is only the common ACPI header */ -typedef struct acpi_ivrs_device8c +typedef struct acpi_table_msdm { - ACPI_IVRS_DE_HEADER Header; - UINT8 Handle; - UINT16 UsedId; - UINT8 Variety; + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ -} ACPI_IVRS_DEVICE8C; +} ACPI_TABLE_MSDM; -/* Values for Variety field above */ -#define ACPI_IVHD_IOAPIC 1 -#define ACPI_IVHD_HPET 2 +/******************************************************************************* + * + * MTMR - MID Timer Table + * Version 1 + * + * Conforms to "Simple Firmware Interface Specification", + * Draft 0.8.2, Oct 19, 2010 + * NOTE: The ACPI MTMR is equivalent to the SFI MTMR table. + * + ******************************************************************************/ + +typedef struct acpi_table_mtmr +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ +} ACPI_TABLE_MTMR; -/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */ +/* MTMR entry */ -typedef struct acpi_ivrs_memory +typedef struct acpi_mtmr_entry { - ACPI_IVRS_HEADER Header; - UINT16 AuxData; - UINT64 Reserved; - UINT64 StartAddress; - UINT64 MemoryLength; + ACPI_GENERIC_ADDRESS PhysicalAddress; + UINT32 Frequency; + UINT32 Irq; -} ACPI_IVRS_MEMORY; +} ACPI_MTMR_ENTRY; /******************************************************************************* * - * LPIT - Low Power Idle Table - * - * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014. + * NFIT - NVDIMM Interface Table (ACPI 6.0+) + * Version 1 * ******************************************************************************/ -typedef struct acpi_table_lpit +typedef struct acpi_table_nfit { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 Reserved; /* Reserved, must be zero */ -} ACPI_TABLE_LPIT; - +} ACPI_TABLE_NFIT; -/* LPIT subtable header */ +/* Subtable header for NFIT */ -typedef struct acpi_lpit_header +typedef struct acpi_nfit_header { - UINT32 Type; /* Subtable type */ - UINT32 Length; /* Subtable length */ - UINT16 UniqueId; - UINT16 Reserved; - UINT32 Flags; + UINT16 Type; + UINT16 Length; -} ACPI_LPIT_HEADER; +} ACPI_NFIT_HEADER; -/* Values for subtable Type above */ -enum AcpiLpitType +/* Values for subtable type in ACPI_NFIT_HEADER */ + +enum AcpiNfitType { - ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00, - ACPI_LPIT_TYPE_RESERVED = 0x01 /* 1 and above are reserved */ + ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0, + ACPI_NFIT_TYPE_MEMORY_MAP = 1, + ACPI_NFIT_TYPE_INTERLEAVE = 2, + ACPI_NFIT_TYPE_SMBIOS = 3, + ACPI_NFIT_TYPE_CONTROL_REGION = 4, + ACPI_NFIT_TYPE_DATA_REGION = 5, + ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6, + ACPI_NFIT_TYPE_CAPABILITIES = 7, + ACPI_NFIT_TYPE_RESERVED = 8 /* 8 and greater are reserved */ }; -/* Masks for Flags field above */ - -#define ACPI_LPIT_STATE_DISABLED (1) -#define ACPI_LPIT_NO_COUNTER (1<<1) - /* - * LPIT subtables, correspond to Type in ACPI_LPIT_HEADER + * NFIT Subtables */ -/* 0x00: Native C-state instruction based LPI structure */ +/* 0: System Physical Address Range Structure */ -typedef struct acpi_lpit_native +typedef struct acpi_nfit_system_address { - ACPI_LPIT_HEADER Header; - ACPI_GENERIC_ADDRESS EntryTrigger; - UINT32 Residency; - UINT32 Latency; - ACPI_GENERIC_ADDRESS ResidencyCounter; - UINT64 CounterFrequency; + ACPI_NFIT_HEADER Header; + UINT16 RangeIndex; + UINT16 Flags; + UINT32 Reserved; /* Reserved, must be zero */ + UINT32 ProximityDomain; + UINT8 RangeGuid[16]; + UINT64 Address; + UINT64 Length; + UINT64 MemoryMapping; -} ACPI_LPIT_NATIVE; +} ACPI_NFIT_SYSTEM_ADDRESS; +/* Flags */ -/******************************************************************************* - * - * MCFG - PCI Memory Mapped Configuration table and subtable - * Version 1 - * - * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005 - * - ******************************************************************************/ +#define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */ +#define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */ -typedef struct acpi_table_mcfg +/* Range Type GUIDs appear in the include/acuuid.h file */ + + +/* 1: Memory Device to System Address Range Map Structure */ + +typedef struct acpi_nfit_memory_map { - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT8 Reserved[8]; + ACPI_NFIT_HEADER Header; + UINT32 DeviceHandle; + UINT16 PhysicalId; + UINT16 RegionId; + UINT16 RangeIndex; + UINT16 RegionIndex; + UINT64 RegionSize; + UINT64 RegionOffset; + UINT64 Address; + UINT16 InterleaveIndex; + UINT16 InterleaveWays; + UINT16 Flags; + UINT16 Reserved; /* Reserved, must be zero */ -} ACPI_TABLE_MCFG; +} ACPI_NFIT_MEMORY_MAP; +/* Flags */ -/* Subtable */ +#define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */ +#define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */ +#define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */ +#define ACPI_NFIT_MEM_NOT_ARMED (1<<3) /* 03: Memory Device is not armed */ +#define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */ +#define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */ +#define ACPI_NFIT_MEM_MAP_FAILED (1<<6) /* 06: Mapping to SPA failed */ -typedef struct acpi_mcfg_allocation + +/* 2: Interleave Structure */ + +typedef struct acpi_nfit_interleave { - UINT64 Address; /* Base address, processor-relative */ - UINT16 PciSegment; /* PCI segment group number */ - UINT8 StartBusNumber; /* Starting PCI Bus number */ - UINT8 EndBusNumber; /* Final PCI Bus number */ - UINT32 Reserved; + ACPI_NFIT_HEADER Header; + UINT16 InterleaveIndex; + UINT16 Reserved; /* Reserved, must be zero */ + UINT32 LineCount; + UINT32 LineSize; + UINT32 LineOffset[1]; /* Variable length */ -} ACPI_MCFG_ALLOCATION; +} ACPI_NFIT_INTERLEAVE; + + +/* 3: SMBIOS Management Information Structure */ + +typedef struct acpi_nfit_smbios +{ + ACPI_NFIT_HEADER Header; + UINT32 Reserved; /* Reserved, must be zero */ + UINT8 Data[1]; /* Variable length */ + +} ACPI_NFIT_SMBIOS; + + +/* 4: NVDIMM Control Region Structure */ + +typedef struct acpi_nfit_control_region +{ + ACPI_NFIT_HEADER Header; + UINT16 RegionIndex; + UINT16 VendorId; + UINT16 DeviceId; + UINT16 RevisionId; + UINT16 SubsystemVendorId; + UINT16 SubsystemDeviceId; + UINT16 SubsystemRevisionId; + UINT8 ValidFields; + UINT8 ManufacturingLocation; + UINT16 ManufacturingDate; + UINT8 Reserved[2]; /* Reserved, must be zero */ + UINT32 SerialNumber; + UINT16 Code; + UINT16 Windows; + UINT64 WindowSize; + UINT64 CommandOffset; + UINT64 CommandSize; + UINT64 StatusOffset; + UINT64 StatusSize; + UINT16 Flags; + UINT8 Reserved1[6]; /* Reserved, must be zero */ + +} ACPI_NFIT_CONTROL_REGION; + +/* Flags */ + +#define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */ + +/* ValidFields bits */ + +#define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1) /* Manufacturing fields are valid */ + + +/* 5: NVDIMM Block Data Window Region Structure */ + +typedef struct acpi_nfit_data_region +{ + ACPI_NFIT_HEADER Header; + UINT16 RegionIndex; + UINT16 Windows; + UINT64 Offset; + UINT64 Size; + UINT64 Capacity; + UINT64 StartAddress; + +} ACPI_NFIT_DATA_REGION; + + +/* 6: Flush Hint Address Structure */ + +typedef struct acpi_nfit_flush_address +{ + ACPI_NFIT_HEADER Header; + UINT32 DeviceHandle; + UINT16 HintCount; + UINT8 Reserved[6]; /* Reserved, must be zero */ + UINT64 HintAddress[1]; /* Variable length */ + +} ACPI_NFIT_FLUSH_ADDRESS; + + +/* 7: Platform Capabilities Structure */ + +typedef struct acpi_nfit_capabilities +{ + ACPI_NFIT_HEADER Header; + UINT8 HighestCapability; + UINT8 Reserved[3]; /* Reserved, must be zero */ + UINT32 Capabilities; + UINT32 Reserved2; + +} ACPI_NFIT_CAPABILITIES; + +/* Capabilities Flags */ + +#define ACPI_NFIT_CAPABILITY_CACHE_FLUSH (1) /* 00: Cache Flush to NVDIMM capable */ +#define ACPI_NFIT_CAPABILITY_MEM_FLUSH (1<<1) /* 01: Memory Flush to NVDIMM capable */ +#define ACPI_NFIT_CAPABILITY_MEM_MIRRORING (1<<2) /* 02: Memory Mirroring capable */ + + +/* + * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM + */ +typedef struct nfit_device_handle +{ + UINT32 Handle; + +} NFIT_DEVICE_HANDLE; + +/* Device handle construction and extraction macros */ + +#define ACPI_NFIT_DIMM_NUMBER_MASK 0x0000000F +#define ACPI_NFIT_CHANNEL_NUMBER_MASK 0x000000F0 +#define ACPI_NFIT_MEMORY_ID_MASK 0x00000F00 +#define ACPI_NFIT_SOCKET_ID_MASK 0x0000F000 +#define ACPI_NFIT_NODE_ID_MASK 0x0FFF0000 + +#define ACPI_NFIT_DIMM_NUMBER_OFFSET 0 +#define ACPI_NFIT_CHANNEL_NUMBER_OFFSET 4 +#define ACPI_NFIT_MEMORY_ID_OFFSET 8 +#define ACPI_NFIT_SOCKET_ID_OFFSET 12 +#define ACPI_NFIT_NODE_ID_OFFSET 16 + +/* Macro to construct a NFIT/NVDIMM device handle */ + +#define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \ + ((dimm) | \ + ((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET) | \ + ((memory) << ACPI_NFIT_MEMORY_ID_OFFSET) | \ + ((socket) << ACPI_NFIT_SOCKET_ID_OFFSET) | \ + ((node) << ACPI_NFIT_NODE_ID_OFFSET)) + +/* Macros to extract individual fields from a NFIT/NVDIMM device handle */ + +#define ACPI_NFIT_GET_DIMM_NUMBER(handle) \ + ((handle) & ACPI_NFIT_DIMM_NUMBER_MASK) + +#define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \ + (((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET) + +#define ACPI_NFIT_GET_MEMORY_ID(handle) \ + (((handle) & ACPI_NFIT_MEMORY_ID_MASK) >> ACPI_NFIT_MEMORY_ID_OFFSET) + +#define ACPI_NFIT_GET_SOCKET_ID(handle) \ + (((handle) & ACPI_NFIT_SOCKET_ID_MASK) >> ACPI_NFIT_SOCKET_ID_OFFSET) + +#define ACPI_NFIT_GET_NODE_ID(handle) \ + (((handle) & ACPI_NFIT_NODE_ID_MASK) >> ACPI_NFIT_NODE_ID_OFFSET) /******************************************************************************* * - * MCHI - Management Controller Host Interface Table - * Version 1 - * - * Conforms to "Management Component Transport Protocol (MCTP) Host - * Interface Specification", Revision 1.0.0a, October 13, 2009 + * PCCT - Platform Communications Channel Table (ACPI 5.0) + * Version 2 (ACPI 6.2) * ******************************************************************************/ -typedef struct acpi_table_mchi +typedef struct acpi_table_pcct { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT8 InterfaceType; - UINT8 Protocol; - UINT64 ProtocolData; - UINT8 InterruptType; - UINT8 Gpe; - UINT8 PciDeviceFlag; - UINT32 GlobalInterrupt; - ACPI_GENERIC_ADDRESS ControlRegister; - UINT8 PciSegment; - UINT8 PciBus; - UINT8 PciDevice; - UINT8 PciFunction; + UINT32 Flags; + UINT64 Reserved; -} ACPI_TABLE_MCHI; +} ACPI_TABLE_PCCT; + +/* Values for Flags field above */ + +#define ACPI_PCCT_DOORBELL 1 + +/* Values for subtable type in ACPI_SUBTABLE_HEADER */ + +enum AcpiPcctType +{ + ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0, + ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1, + ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */ + ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3, /* ACPI 6.2 */ + ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4, /* ACPI 6.2 */ + ACPI_PCCT_TYPE_RESERVED = 5 /* 5 and greater are reserved */ +}; + +/* + * PCCT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER + */ + +/* 0: Generic Communications Subspace */ + +typedef struct acpi_pcct_subspace +{ + ACPI_SUBTABLE_HEADER Header; + UINT8 Reserved[6]; + UINT64 BaseAddress; + UINT64 Length; + ACPI_GENERIC_ADDRESS DoorbellRegister; + UINT64 PreserveMask; + UINT64 WriteMask; + UINT32 Latency; + UINT32 MaxAccessRate; + UINT16 MinTurnaroundTime; +} ACPI_PCCT_SUBSPACE; -/******************************************************************************* - * - * MSDM - Microsoft Data Management table - * - * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", - * November 29, 2011. Copyright 2011 Microsoft - * - ******************************************************************************/ -/* Basic MSDM table is only the common ACPI header */ +/* 1: HW-reduced Communications Subspace (ACPI 5.1) */ -typedef struct acpi_table_msdm +typedef struct acpi_pcct_hw_reduced { - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + ACPI_SUBTABLE_HEADER Header; + UINT32 PlatformInterrupt; + UINT8 Flags; + UINT8 Reserved; + UINT64 BaseAddress; + UINT64 Length; + ACPI_GENERIC_ADDRESS DoorbellRegister; + UINT64 PreserveMask; + UINT64 WriteMask; + UINT32 Latency; + UINT32 MaxAccessRate; + UINT16 MinTurnaroundTime; -} ACPI_TABLE_MSDM; +} ACPI_PCCT_HW_REDUCED; -/******************************************************************************* - * - * MTMR - MID Timer Table - * Version 1 - * - * Conforms to "Simple Firmware Interface Specification", - * Draft 0.8.2, Oct 19, 2010 - * NOTE: The ACPI MTMR is equivalent to the SFI MTMR table. - * - ******************************************************************************/ +/* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */ -typedef struct acpi_table_mtmr +typedef struct acpi_pcct_hw_reduced_type2 { - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + ACPI_SUBTABLE_HEADER Header; + UINT32 PlatformInterrupt; + UINT8 Flags; + UINT8 Reserved; + UINT64 BaseAddress; + UINT64 Length; + ACPI_GENERIC_ADDRESS DoorbellRegister; + UINT64 PreserveMask; + UINT64 WriteMask; + UINT32 Latency; + UINT32 MaxAccessRate; + UINT16 MinTurnaroundTime; + ACPI_GENERIC_ADDRESS PlatformAckRegister; + UINT64 AckPreserveMask; + UINT64 AckWriteMask; -} ACPI_TABLE_MTMR; +} ACPI_PCCT_HW_REDUCED_TYPE2; -/* MTMR entry */ -typedef struct acpi_mtmr_entry +/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */ + +typedef struct acpi_pcct_ext_pcc_master { - ACPI_GENERIC_ADDRESS PhysicalAddress; - UINT32 Frequency; - UINT32 Irq; + ACPI_SUBTABLE_HEADER Header; + UINT32 PlatformInterrupt; + UINT8 Flags; + UINT8 Reserved1; + UINT64 BaseAddress; + UINT32 Length; + ACPI_GENERIC_ADDRESS DoorbellRegister; + UINT64 PreserveMask; + UINT64 WriteMask; + UINT32 Latency; + UINT32 MaxAccessRate; + UINT32 MinTurnaroundTime; + ACPI_GENERIC_ADDRESS PlatformAckRegister; + UINT64 AckPreserveMask; + UINT64 AckSetMask; + UINT64 Reserved2; + ACPI_GENERIC_ADDRESS CmdCompleteRegister; + UINT64 CmdCompleteMask; + ACPI_GENERIC_ADDRESS CmdUpdateRegister; + UINT64 CmdUpdatePreserveMask; + UINT64 CmdUpdateSetMask; + ACPI_GENERIC_ADDRESS ErrorStatusRegister; + UINT64 ErrorStatusMask; -} ACPI_MTMR_ENTRY; +} ACPI_PCCT_EXT_PCC_MASTER; -/******************************************************************************* - * - * SDEI - Software Delegated Exception Interface Descriptor Table - * - * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A, - * May 8th, 2017. Copyright 2017 ARM Ltd. - * - ******************************************************************************/ -typedef struct acpi_table_sdei +/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */ + +typedef struct acpi_pcct_ext_pcc_slave { - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + ACPI_SUBTABLE_HEADER Header; + UINT32 PlatformInterrupt; + UINT8 Flags; + UINT8 Reserved1; + UINT64 BaseAddress; + UINT32 Length; + ACPI_GENERIC_ADDRESS DoorbellRegister; + UINT64 PreserveMask; + UINT64 WriteMask; + UINT32 Latency; + UINT32 MaxAccessRate; + UINT32 MinTurnaroundTime; + ACPI_GENERIC_ADDRESS PlatformAckRegister; + UINT64 AckPreserveMask; + UINT64 AckSetMask; + UINT64 Reserved2; + ACPI_GENERIC_ADDRESS CmdCompleteRegister; + UINT64 CmdCompleteMask; + ACPI_GENERIC_ADDRESS CmdUpdateRegister; + UINT64 CmdUpdatePreserveMask; + UINT64 CmdUpdateSetMask; + ACPI_GENERIC_ADDRESS ErrorStatusRegister; + UINT64 ErrorStatusMask; -} ACPI_TABLE_SDEI; +} ACPI_PCCT_EXT_PCC_SLAVE; -/******************************************************************************* - * - * SLIC - Software Licensing Description Table - * - * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", - * November 29, 2011. Copyright 2011 Microsoft - * - ******************************************************************************/ +/* Values for doorbell flags above */ -/* Basic SLIC table is only the common ACPI header */ +#define ACPI_PCCT_INTERRUPT_POLARITY (1) +#define ACPI_PCCT_INTERRUPT_MODE (1<<1) -typedef struct acpi_table_slic + +/* + * PCC memory structures (not part of the ACPI table) + */ + +/* Shared Memory Region */ + +typedef struct acpi_pcct_shared_memory { - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 Signature; + UINT16 Command; + UINT16 Status; + +} ACPI_PCCT_SHARED_MEMORY; -} ACPI_TABLE_SLIC; + +/* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */ + +typedef struct acpi_pcct_ext_pcc_shared_memory +{ + UINT32 Signature; + UINT32 Flags; + UINT32 Length; + UINT32 Command; + +} ACPI_PCCT_EXT_PCC_SHARED_MEMORY; /******************************************************************************* * - * SPCR - Serial Port Console Redirection table - * Version 2 - * - * Conforms to "Serial Port Console Redirection Table", - * Version 1.03, August 10, 2015 + * PDTT - Platform Debug Trigger Table (ACPI 6.2) + * Version 0 * ******************************************************************************/ -typedef struct acpi_table_spcr +typedef struct acpi_table_pdtt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT8 InterfaceType; /* 0=full 16550, 1=subset of 16550 */ + UINT8 TriggerCount; UINT8 Reserved[3]; - ACPI_GENERIC_ADDRESS SerialPort; - UINT8 InterruptType; - UINT8 PcInterrupt; - UINT32 Interrupt; - UINT8 BaudRate; - UINT8 Parity; - UINT8 StopBits; - UINT8 FlowControl; - UINT8 TerminalType; - UINT8 Reserved1; - UINT16 PciDeviceId; - UINT16 PciVendorId; - UINT8 PciBus; - UINT8 PciDevice; - UINT8 PciFunction; - UINT32 PciFlags; - UINT8 PciSegment; - UINT32 Reserved2; + UINT32 ArrayOffset; + +} ACPI_TABLE_PDTT; -} ACPI_TABLE_SPCR; -/* Masks for PciFlags field above */ +/* + * PDTT Communication Channel Identifier Structure. + * The number of these structures is defined by TriggerCount above, + * starting at ArrayOffset. + */ +typedef struct acpi_pdtt_channel +{ + UINT8 SubchannelId; + UINT8 Flags; -#define ACPI_SPCR_DO_NOT_DISABLE (1) +} ACPI_PDTT_CHANNEL; -/* Values for Interface Type: See the definition of the DBG2 table */ +/* Flags for above */ + +#define ACPI_PDTT_RUNTIME_TRIGGER (1) +#define ACPI_PDTT_WAIT_COMPLETION (1<<1) /******************************************************************************* * - * SPMI - Server Platform Management Interface table - * Version 5 - * - * Conforms to "Intelligent Platform Management Interface Specification - * Second Generation v2.0", Document Revision 1.0, February 12, 2004 with - * June 12, 2009 markup. + * PMTT - Platform Memory Topology Table (ACPI 5.0) + * Version 1 * ******************************************************************************/ -typedef struct acpi_table_spmi +typedef struct acpi_table_pmtt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT8 InterfaceType; - UINT8 Reserved; /* Must be 1 */ - UINT16 SpecRevision; /* Version of IPMI */ - UINT8 InterruptType; - UINT8 GpeNumber; /* GPE assigned */ - UINT8 Reserved1; - UINT8 PciDeviceFlag; - UINT32 Interrupt; - ACPI_GENERIC_ADDRESS IpmiRegister; - UINT8 PciSegment; - UINT8 PciBus; - UINT8 PciDevice; - UINT8 PciFunction; - UINT8 Reserved2; + UINT32 Reserved; + +} ACPI_TABLE_PMTT; -} ACPI_TABLE_SPMI; -/* Values for InterfaceType above */ +/* Common header for PMTT subtables that follow main table */ -enum AcpiSpmiInterfaceTypes +typedef struct acpi_pmtt_header { - ACPI_SPMI_NOT_USED = 0, - ACPI_SPMI_KEYBOARD = 1, - ACPI_SPMI_SMI = 2, - ACPI_SPMI_BLOCK_TRANSFER = 3, - ACPI_SPMI_SMBUS = 4, - ACPI_SPMI_RESERVED = 5 /* 5 and above are reserved */ -}; + UINT8 Type; + UINT8 Reserved1; + UINT16 Length; + UINT16 Flags; + UINT16 Reserved2; +} ACPI_PMTT_HEADER; -/******************************************************************************* - * - * TCPA - Trusted Computing Platform Alliance table - * Version 2 - * - * TCG Hardware Interface Table for TPM 1.2 Clients and Servers - * - * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0", - * Version 1.2, Revision 8 - * February 27, 2017 - * - * NOTE: There are two versions of the table with the same signature -- - * the client version and the server version. The common PlatformClass - * field is used to differentiate the two types of tables. - * - ******************************************************************************/ +/* Values for Type field above */ -typedef struct acpi_table_tcpa_hdr -{ - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT16 PlatformClass; +#define ACPI_PMTT_TYPE_SOCKET 0 +#define ACPI_PMTT_TYPE_CONTROLLER 1 +#define ACPI_PMTT_TYPE_DIMM 2 +#define ACPI_PMTT_TYPE_RESERVED 3 /* 0x03-0xFF are reserved */ + +/* Values for Flags field above */ + +#define ACPI_PMTT_TOP_LEVEL 0x0001 +#define ACPI_PMTT_PHYSICAL 0x0002 +#define ACPI_PMTT_MEMORY_TYPE 0x000C -} ACPI_TABLE_TCPA_HDR; /* - * Values for PlatformClass above. - * This is how the client and server subtables are differentiated + * PMTT subtables, correspond to Type in acpi_pmtt_header */ -#define ACPI_TCPA_CLIENT_TABLE 0 -#define ACPI_TCPA_SERVER_TABLE 1 -typedef struct acpi_table_tcpa_client +/* 0: Socket Structure */ + +typedef struct acpi_pmtt_socket { - UINT32 MinimumLogLength; /* Minimum length for the event log area */ - UINT64 LogAddress; /* Address of the event log area */ + ACPI_PMTT_HEADER Header; + UINT16 SocketId; + UINT16 Reserved; + +} ACPI_PMTT_SOCKET; -} ACPI_TABLE_TCPA_CLIENT; -typedef struct acpi_table_tcpa_server +/* 1: Memory Controller subtable */ + +typedef struct acpi_pmtt_controller { + ACPI_PMTT_HEADER Header; + UINT32 ReadLatency; + UINT32 WriteLatency; + UINT32 ReadBandwidth; + UINT32 WriteBandwidth; + UINT16 AccessWidth; + UINT16 Alignment; UINT16 Reserved; - UINT64 MinimumLogLength; /* Minimum length for the event log area */ - UINT64 LogAddress; /* Address of the event log area */ - UINT16 SpecRevision; - UINT8 DeviceFlags; - UINT8 InterruptFlags; - UINT8 GpeNumber; - UINT8 Reserved2[3]; - UINT32 GlobalInterrupt; - ACPI_GENERIC_ADDRESS Address; - UINT32 Reserved3; - ACPI_GENERIC_ADDRESS ConfigAddress; - UINT8 Group; - UINT8 Bus; /* PCI Bus/Segment/Function numbers */ - UINT8 Device; - UINT8 Function; + UINT16 DomainCount; + +} ACPI_PMTT_CONTROLLER; + +/* 1a: Proximity Domain substructure */ + +typedef struct acpi_pmtt_domain +{ + UINT32 ProximityDomain; -} ACPI_TABLE_TCPA_SERVER; +} ACPI_PMTT_DOMAIN; -/* Values for DeviceFlags above */ -#define ACPI_TCPA_PCI_DEVICE (1) -#define ACPI_TCPA_BUS_PNP (1<<1) -#define ACPI_TCPA_ADDRESS_VALID (1<<2) +/* 2: Physical Component Identifier (DIMM) */ -/* Values for InterruptFlags above */ +typedef struct acpi_pmtt_physical_component +{ + ACPI_PMTT_HEADER Header; + UINT16 ComponentId; + UINT16 Reserved; + UINT32 MemorySize; + UINT32 BiosHandle; -#define ACPI_TCPA_INTERRUPT_MODE (1) -#define ACPI_TCPA_INTERRUPT_POLARITY (1<<1) -#define ACPI_TCPA_SCI_VIA_GPE (1<<2) -#define ACPI_TCPA_GLOBAL_INTERRUPT (1<<3) +} ACPI_PMTT_PHYSICAL_COMPONENT; /******************************************************************************* * - * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table - * Version 4 - * - * TCG Hardware Interface Table for TPM 2.0 Clients and Servers - * - * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0", - * Version 1.2, Revision 8 - * February 27, 2017 + * PPTT - Processor Properties Topology Table (ACPI 6.2) + * Version 1 * ******************************************************************************/ -typedef struct acpi_table_tpm2 +typedef struct acpi_table_pptt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT16 PlatformClass; - UINT16 Reserved; - UINT64 ControlAddress; - UINT32 StartMethod; - /* Platform-specific data follows */ +} ACPI_TABLE_PPTT; -} ACPI_TABLE_TPM2; - -/* Values for StartMethod above */ +/* Values for Type field above */ -#define ACPI_TPM2_NOT_ALLOWED 0 -#define ACPI_TPM2_RESERVED1 1 -#define ACPI_TPM2_START_METHOD 2 -#define ACPI_TPM2_RESERVED3 3 -#define ACPI_TPM2_RESERVED4 4 -#define ACPI_TPM2_RESERVED5 5 -#define ACPI_TPM2_MEMORY_MAPPED 6 -#define ACPI_TPM2_COMMAND_BUFFER 7 -#define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD 8 -#define ACPI_TPM2_RESERVED9 9 -#define ACPI_TPM2_RESERVED10 10 -#define ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC 11 /* V1.2 Rev 8 */ -#define ACPI_TPM2_RESERVED 12 +enum AcpiPpttType +{ + ACPI_PPTT_TYPE_PROCESSOR = 0, + ACPI_PPTT_TYPE_CACHE = 1, + ACPI_PPTT_TYPE_ID = 2, + ACPI_PPTT_TYPE_RESERVED = 3 +}; -/* Optional trailer appears after any StartMethod subtables */ +/* 0: Processor Hierarchy Node Structure */ -typedef struct acpi_tpm2_trailer +typedef struct acpi_pptt_processor { - UINT8 MethodParameters[12]; - UINT32 MinimumLogLength; /* Minimum length for the event log area */ - UINT64 LogAddress; /* Address of the event log area */ + ACPI_SUBTABLE_HEADER Header; + UINT16 Reserved; + UINT32 Flags; + UINT32 Parent; + UINT32 AcpiProcessorId; + UINT32 NumberOfPrivResources; -} ACPI_TPM2_TRAILER; +} ACPI_PPTT_PROCESSOR; +/* Flags */ -/* - * Subtables (StartMethod-specific) - */ +#define ACPI_PPTT_PHYSICAL_PACKAGE (1) /* Physical package */ +#define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (2) /* ACPI Processor ID valid */ -/* 11: Start Method for ARM SMC (V1.2 Rev 8) */ -typedef struct acpi_tpm2_arm_smc +/* 1: Cache Type Structure */ + +typedef struct acpi_pptt_cache { - UINT32 GlobalInterrupt; - UINT8 InterruptFlags; - UINT8 OperationFlags; + ACPI_SUBTABLE_HEADER Header; UINT16 Reserved; - UINT32 FunctionId; + UINT32 Flags; + UINT32 NextLevelOfCache; + UINT32 Size; + UINT32 NumberOfSets; + UINT8 Associativity; + UINT8 Attributes; + UINT16 LineSize; -} ACPI_TPM2_ARM_SMC; +} ACPI_PPTT_CACHE; -/* Values for InterruptFlags above */ +/* Flags */ -#define ACPI_TPM2_INTERRUPT_SUPPORT (1) +#define ACPI_PPTT_SIZE_PROPERTY_VALID (1) /* Physical property valid */ +#define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1) /* Number of sets valid */ +#define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2) /* Associativity valid */ +#define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3) /* Allocation type valid */ +#define ACPI_PPTT_CACHE_TYPE_VALID (1<<4) /* Cache type valid */ +#define ACPI_PPTT_WRITE_POLICY_VALID (1<<5) /* Write policy valid */ +#define ACPI_PPTT_LINE_SIZE_VALID (1<<6) /* Line size valid */ -/* Values for OperationFlags above */ +/* Masks for Attributes */ -#define ACPI_TPM2_IDLE_SUPPORT (1) +#define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03) /* Allocation type */ +#define ACPI_PPTT_MASK_CACHE_TYPE (0x0C) /* Cache type */ +#define ACPI_PPTT_MASK_WRITE_POLICY (0x10) /* Write policy */ +/* Attributes describing cache */ +#define ACPI_PPTT_CACHE_READ_ALLOCATE (0x0) /* Cache line is allocated on read */ +#define ACPI_PPTT_CACHE_WRITE_ALLOCATE (0x01) /* Cache line is allocated on write */ +#define ACPI_PPTT_CACHE_RW_ALLOCATE (0x02) /* Cache line is allocated on read and write */ +#define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT (0x03) /* Alternate representation of above */ -/******************************************************************************* - * - * UEFI - UEFI Boot optimization Table - * Version 1 - * - * Conforms to "Unified Extensible Firmware Interface Specification", - * Version 2.3, May 8, 2009 - * - ******************************************************************************/ +#define ACPI_PPTT_CACHE_TYPE_DATA (0x0) /* Data cache */ +#define ACPI_PPTT_CACHE_TYPE_INSTR (1<<2) /* Instruction cache */ +#define ACPI_PPTT_CACHE_TYPE_UNIFIED (2<<2) /* Unified I & D cache */ +#define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT (3<<2) /* Alternate representation of above */ + +#define ACPI_PPTT_CACHE_POLICY_WB (0x0) /* Cache is write back */ +#define ACPI_PPTT_CACHE_POLICY_WT (1<<4) /* Cache is write through */ -typedef struct acpi_table_uefi +/* 2: ID Structure */ + +typedef struct acpi_pptt_id { - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT8 Identifier[16]; /* UUID identifier */ - UINT16 DataOffset; /* Offset of remaining data in table */ + ACPI_SUBTABLE_HEADER Header; + UINT16 Reserved; + UINT32 VendorId; + UINT64 Level1Id; + UINT64 Level2Id; + UINT16 MajorRev; + UINT16 MinorRev; + UINT16 SpinRev; -} ACPI_TABLE_UEFI; +} ACPI_PPTT_ID; /******************************************************************************* * - * VRTC - Virtual Real Time Clock Table + * RASF - RAS Feature Table (ACPI 5.0) * Version 1 * - * Conforms to "Simple Firmware Interface Specification", - * Draft 0.8.2, Oct 19, 2010 - * NOTE: The ACPI VRTC is equivalent to The SFI MRTC table. - * ******************************************************************************/ -typedef struct acpi_table_vrtc +typedef struct acpi_table_rasf { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT8 ChannelId[12]; -} ACPI_TABLE_VRTC; +} ACPI_TABLE_RASF; -/* VRTC entry */ +/* RASF Platform Communication Channel Shared Memory Region */ -typedef struct acpi_vrtc_entry +typedef struct acpi_rasf_shared_memory { - ACPI_GENERIC_ADDRESS PhysicalAddress; - UINT32 Irq; - -} ACPI_VRTC_ENTRY; + UINT32 Signature; + UINT16 Command; + UINT16 Status; + UINT16 Version; + UINT8 Capabilities[16]; + UINT8 SetCapabilities[16]; + UINT16 NumParameterBlocks; + UINT32 SetCapabilitiesStatus; +} ACPI_RASF_SHARED_MEMORY; -/******************************************************************************* - * - * WAET - Windows ACPI Emulated devices Table - * Version 1 - * - * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009 - * - ******************************************************************************/ +/* RASF Parameter Block Structure Header */ -typedef struct acpi_table_waet +typedef struct acpi_rasf_parameter_block { - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 Flags; + UINT16 Type; + UINT16 Version; + UINT16 Length; -} ACPI_TABLE_WAET; +} ACPI_RASF_PARAMETER_BLOCK; -/* Masks for Flags field above */ +/* RASF Parameter Block Structure for PATROL_SCRUB */ -#define ACPI_WAET_RTC_NO_ACK (1) /* RTC requires no int acknowledge */ -#define ACPI_WAET_TIMER_ONE_READ (1<<1) /* PM timer requires only one read */ +typedef struct acpi_rasf_patrol_scrub_parameter +{ + ACPI_RASF_PARAMETER_BLOCK Header; + UINT16 PatrolScrubCommand; + UINT64 RequestedAddressRange[2]; + UINT64 ActualAddressRange[2]; + UINT16 Flags; + UINT8 RequestedSpeed; +} ACPI_RASF_PATROL_SCRUB_PARAMETER; -/******************************************************************************* - * - * WDAT - Watchdog Action Table - * Version 1 - * - * Conforms to "Hardware Watchdog Timers Design Specification", - * Copyright 2006 Microsoft Corporation. - * - ******************************************************************************/ +/* Masks for Flags and Speed fields above */ -typedef struct acpi_table_wdat -{ - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 HeaderLength; /* Watchdog Header Length */ - UINT16 PciSegment; /* PCI Segment number */ - UINT8 PciBus; /* PCI Bus number */ - UINT8 PciDevice; /* PCI Device number */ - UINT8 PciFunction; /* PCI Function number */ - UINT8 Reserved[3]; - UINT32 TimerPeriod; /* Period of one timer count (msec) */ - UINT32 MaxCount; /* Maximum counter value supported */ - UINT32 MinCount; /* Minimum counter value */ - UINT8 Flags; - UINT8 Reserved2[3]; - UINT32 Entries; /* Number of watchdog entries that follow */ +#define ACPI_RASF_SCRUBBER_RUNNING 1 +#define ACPI_RASF_SPEED (7<<1) +#define ACPI_RASF_SPEED_SLOW (0<<1) +#define ACPI_RASF_SPEED_MEDIUM (4<<1) +#define ACPI_RASF_SPEED_FAST (7<<1) -} ACPI_TABLE_WDAT; +/* Channel Commands */ -/* Masks for Flags field above */ +enum AcpiRasfCommands +{ + ACPI_RASF_EXECUTE_RASF_COMMAND = 1 +}; -#define ACPI_WDAT_ENABLED (1) -#define ACPI_WDAT_STOPPED 0x80 +/* Platform RAS Capabilities */ +enum AcpiRasfCapabiliities +{ + ACPI_HW_PATROL_SCRUB_SUPPORTED = 0, + ACPI_SW_PATROL_SCRUB_EXPOSED = 1 +}; -/* WDAT Instruction Entries (actions) */ +/* Patrol Scrub Commands */ -typedef struct acpi_wdat_entry +enum AcpiRasfPatrolScrubCommands { - UINT8 Action; - UINT8 Instruction; - UINT16 Reserved; - ACPI_GENERIC_ADDRESS RegisterRegion; - UINT32 Value; /* Value used with Read/Write register */ - UINT32 Mask; /* Bitmask required for this register instruction */ - -} ACPI_WDAT_ENTRY; - -/* Values for Action field above */ - -enum AcpiWdatActions -{ - ACPI_WDAT_RESET = 1, - ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4, - ACPI_WDAT_GET_COUNTDOWN = 5, - ACPI_WDAT_SET_COUNTDOWN = 6, - ACPI_WDAT_GET_RUNNING_STATE = 8, - ACPI_WDAT_SET_RUNNING_STATE = 9, - ACPI_WDAT_GET_STOPPED_STATE = 10, - ACPI_WDAT_SET_STOPPED_STATE = 11, - ACPI_WDAT_GET_REBOOT = 16, - ACPI_WDAT_SET_REBOOT = 17, - ACPI_WDAT_GET_SHUTDOWN = 18, - ACPI_WDAT_SET_SHUTDOWN = 19, - ACPI_WDAT_GET_STATUS = 32, - ACPI_WDAT_SET_STATUS = 33, - ACPI_WDAT_ACTION_RESERVED = 34 /* 34 and greater are reserved */ + ACPI_RASF_GET_PATROL_PARAMETERS = 1, + ACPI_RASF_START_PATROL_SCRUBBER = 2, + ACPI_RASF_STOP_PATROL_SCRUBBER = 3 }; -/* Values for Instruction field above */ +/* Channel Command flags */ -enum AcpiWdatInstructions +#define ACPI_RASF_GENERATE_SCI (1<<15) + +/* Status values */ + +enum AcpiRasfStatus { - ACPI_WDAT_READ_VALUE = 0, - ACPI_WDAT_READ_COUNTDOWN = 1, - ACPI_WDAT_WRITE_VALUE = 2, - ACPI_WDAT_WRITE_COUNTDOWN = 3, - ACPI_WDAT_INSTRUCTION_RESERVED = 4, /* 4 and greater are reserved */ - ACPI_WDAT_PRESERVE_REGISTER = 0x80 /* Except for this value */ + ACPI_RASF_SUCCESS = 0, + ACPI_RASF_NOT_VALID = 1, + ACPI_RASF_NOT_SUPPORTED = 2, + ACPI_RASF_BUSY = 3, + ACPI_RASF_FAILED = 4, + ACPI_RASF_ABORTED = 5, + ACPI_RASF_INVALID_DATA = 6 }; +/* Status flags */ + +#define ACPI_RASF_COMMAND_COMPLETE (1) +#define ACPI_RASF_SCI_DOORBELL (1<<1) +#define ACPI_RASF_ERROR (1<<2) +#define ACPI_RASF_STATUS (0x1F<<3) + /******************************************************************************* * - * WDDT - Watchdog Descriptor Table + * SBST - Smart Battery Specification Table * Version 1 * - * Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)", - * Version 001, September 2002 - * ******************************************************************************/ -typedef struct acpi_table_wddt +typedef struct acpi_table_sbst { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT16 SpecVersion; - UINT16 TableVersion; - UINT16 PciVendorId; - ACPI_GENERIC_ADDRESS Address; - UINT16 MaxCount; /* Maximum counter value supported */ - UINT16 MinCount; /* Minimum counter value supported */ - UINT16 Period; - UINT16 Status; - UINT16 Capability; - -} ACPI_TABLE_WDDT; - -/* Flags for Status field above */ + UINT32 WarningLevel; + UINT32 LowLevel; + UINT32 CriticalLevel; -#define ACPI_WDDT_AVAILABLE (1) -#define ACPI_WDDT_ACTIVE (1<<1) -#define ACPI_WDDT_TCO_OS_OWNED (1<<2) -#define ACPI_WDDT_USER_RESET (1<<11) -#define ACPI_WDDT_WDT_RESET (1<<12) -#define ACPI_WDDT_POWER_FAIL (1<<13) -#define ACPI_WDDT_UNKNOWN_RESET (1<<14) - -/* Flags for Capability field above */ - -#define ACPI_WDDT_AUTO_RESET (1) -#define ACPI_WDDT_ALERT_SUPPORT (1<<1) +} ACPI_TABLE_SBST; /******************************************************************************* * - * WDRT - Watchdog Resource Table - * Version 1 + * SDEI - Software Delegated Exception Interface Descriptor Table * - * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003", - * Version 1.01, August 28, 2006 + * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A, + * May 8th, 2017. Copyright 2017 ARM Ltd. * ******************************************************************************/ -typedef struct acpi_table_wdrt +typedef struct acpi_table_sdei { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - ACPI_GENERIC_ADDRESS ControlRegister; - ACPI_GENERIC_ADDRESS CountRegister; - UINT16 PciDeviceId; - UINT16 PciVendorId; - UINT8 PciBus; /* PCI Bus number */ - UINT8 PciDevice; /* PCI Device number */ - UINT8 PciFunction; /* PCI Function number */ - UINT8 PciSegment; /* PCI Segment number */ - UINT16 MaxCount; /* Maximum counter value supported */ - UINT8 Units; -} ACPI_TABLE_WDRT; +} ACPI_TABLE_SDEI; /******************************************************************************* * - * WSMT - Windows SMM Security Migrations Table + * SDEV - Secure Devices Table (ACPI 6.2) * Version 1 * - * Conforms to "Windows SMM Security Migrations Table", - * Version 1.0, April 18, 2016 - * ******************************************************************************/ -typedef struct acpi_table_wsmt +typedef struct acpi_table_sdev { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 ProtectionFlags; -} ACPI_TABLE_WSMT; +} ACPI_TABLE_SDEV; + + +typedef struct acpi_sdev_header +{ + UINT8 Type; + UINT8 Flags; + UINT16 Length; + +} ACPI_SDEV_HEADER; + + +/* Values for subtable type above */ + +enum AcpiSdevType +{ + ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0, + ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1, + ACPI_SDEV_TYPE_RESERVED = 2 /* 2 and greater are reserved */ +}; + +/* Values for flags above */ + +#define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS (1) -/* Flags for ProtectionFlags field above */ +/* + * SDEV subtables + */ + +/* 0: Namespace Device Based Secure Device Structure */ + +typedef struct acpi_sdev_namespace +{ + ACPI_SDEV_HEADER Header; + UINT16 DeviceIdOffset; + UINT16 DeviceIdLength; + UINT16 VendorDataOffset; + UINT16 VendorDataLength; + +} ACPI_SDEV_NAMESPACE; + +/* 1: PCIe Endpoint Device Based Device Structure */ + +typedef struct acpi_sdev_pcie +{ + ACPI_SDEV_HEADER Header; + UINT16 Segment; + UINT16 StartBus; + UINT16 PathOffset; + UINT16 PathLength; + UINT16 VendorDataOffset; + UINT16 VendorDataLength; + +} ACPI_SDEV_PCIE; + +/* 1a: PCIe Endpoint path entry */ + +typedef struct acpi_sdev_pcie_path +{ + UINT8 Device; + UINT8 Function; -#define ACPI_WSMT_FIXED_COMM_BUFFERS (1) -#define ACPI_WSMT_COMM_BUFFER_NESTED_PTR_PROTECTION (2) -#define ACPI_WSMT_SYSTEM_RESOURCE_PROTECTION (4) +} ACPI_SDEV_PCIE_PATH; /* Reset to default packing */ diff --git a/src/acpica/source/include/actbl3.h b/src/acpica/source/include/actbl3.h index 91a0026c..d4c15838 100644 --- a/src/acpica/source/include/actbl3.h +++ b/src/acpica/source/include/actbl3.h @@ -155,14 +155,11 @@ /******************************************************************************* * - * Additional ACPI Tables (3) + * Additional ACPI Tables * * These tables are not consumed directly by the ACPICA subsystem, but are * included here to support device drivers and the AML disassembler. * - * In general, the tables in this file are fully defined within the ACPI - * specification. - * ******************************************************************************/ @@ -171,25 +168,24 @@ * file. Useful because they make it more difficult to inadvertently type in * the wrong signature. */ -#define ACPI_SIG_BGRT "BGRT" /* Boot Graphics Resource Table */ -#define ACPI_SIG_DRTM "DRTM" /* Dynamic Root of Trust for Measurement table */ -#define ACPI_SIG_FPDT "FPDT" /* Firmware Performance Data Table */ -#define ACPI_SIG_GTDT "GTDT" /* Generic Timer Description Table */ -#define ACPI_SIG_MPST "MPST" /* Memory Power State Table */ -#define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */ -#define ACPI_SIG_PMTT "PMTT" /* Platform Memory Topology Table */ -#define ACPI_SIG_RASF "RASF" /* RAS Feature table */ +#define ACPI_SIG_SLIC "SLIC" /* Software Licensing Description Table */ +#define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */ +#define ACPI_SIG_SPCR "SPCR" /* Serial Port Console Redirection table */ +#define ACPI_SIG_SPMI "SPMI" /* Server Platform Management Interface table */ +#define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */ #define ACPI_SIG_STAO "STAO" /* Status Override table */ +#define ACPI_SIG_TCPA "TCPA" /* Trusted Computing Platform Alliance table */ +#define ACPI_SIG_TPM2 "TPM2" /* Trusted Platform Module 2.0 H/W interface table */ +#define ACPI_SIG_UEFI "UEFI" /* Uefi Boot Optimization Table */ +#define ACPI_SIG_VRTC "VRTC" /* Virtual Real Time Clock Table */ +#define ACPI_SIG_WAET "WAET" /* Windows ACPI Emulated devices Table */ +#define ACPI_SIG_WDAT "WDAT" /* Watchdog Action Table */ +#define ACPI_SIG_WDDT "WDDT" /* Watchdog Timer Description Table */ +#define ACPI_SIG_WDRT "WDRT" /* Watchdog Resource Table */ #define ACPI_SIG_WPBT "WPBT" /* Windows Platform Binary Table */ +#define ACPI_SIG_WSMT "WSMT" /* Windows SMM Security Migrations Table */ #define ACPI_SIG_XENV "XENV" /* Xen Environment table */ - -#define ACPI_SIG_S3PT "S3PT" /* S3 Performance (sub)Table */ -#define ACPI_SIG_PCCS "PCC" /* PCC Shared Memory Region */ - -/* Reserved table signatures */ - -#define ACPI_SIG_MATR "MATR" /* Memory Address Translation Table */ -#define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ +#define ACPI_SIG_XXXX "XXXX" /* Intermediate AML header for ASL/ASL+ converter */ /* * All tables must be byte-packed to match the ACPI specification, since @@ -212,858 +208,630 @@ /******************************************************************************* * - * BGRT - Boot Graphics Resource Table (ACPI 5.0) - * Version 1 + * SLIC - Software Licensing Description Table + * + * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", + * November 29, 2011. Copyright 2011 Microsoft * ******************************************************************************/ -typedef struct acpi_table_bgrt +/* Basic SLIC table is only the common ACPI header */ + +typedef struct acpi_table_slic { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT16 Version; - UINT8 Status; - UINT8 ImageType; - UINT64 ImageAddress; - UINT32 ImageOffsetX; - UINT32 ImageOffsetY; - -} ACPI_TABLE_BGRT; - -/* Flags for Status field above */ -#define ACPI_BGRT_DISPLAYED (1) -#define ACPI_BGRT_ORIENTATION_OFFSET (3 << 1) +} ACPI_TABLE_SLIC; /******************************************************************************* * - * DRTM - Dynamic Root of Trust for Measurement table - * Conforms to "TCG D-RTM Architecture" June 17 2013, Version 1.0.0 - * Table version 1 + * SLIT - System Locality Distance Information Table + * Version 1 * ******************************************************************************/ -typedef struct acpi_table_drtm +typedef struct acpi_table_slit { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT64 EntryBaseAddress; - UINT64 EntryLength; - UINT32 EntryAddress32; - UINT64 EntryAddress64; - UINT64 ExitAddress; - UINT64 LogAreaAddress; - UINT32 LogAreaLength; - UINT64 ArchDependentAddress; - UINT32 Flags; - -} ACPI_TABLE_DRTM; - -/* Flag Definitions for above */ - -#define ACPI_DRTM_ACCESS_ALLOWED (1) -#define ACPI_DRTM_ENABLE_GAP_CODE (1<<1) -#define ACPI_DRTM_INCOMPLETE_MEASUREMENTS (1<<2) -#define ACPI_DRTM_AUTHORITY_ORDER (1<<3) - - -/* 1) Validated Tables List (64-bit addresses) */ - -typedef struct acpi_drtm_vtable_list -{ - UINT32 ValidatedTableCount; - UINT64 ValidatedTables[1]; + UINT64 LocalityCount; + UINT8 Entry[1]; /* Real size = localities^2 */ -} ACPI_DRTM_VTABLE_LIST; - -/* 2) Resources List (of Resource Descriptors) */ - -/* Resource Descriptor */ - -typedef struct acpi_drtm_resource -{ - UINT8 Size[7]; - UINT8 Type; - UINT64 Address; - -} ACPI_DRTM_RESOURCE; - -typedef struct acpi_drtm_resource_list -{ - UINT32 ResourceCount; - ACPI_DRTM_RESOURCE Resources[1]; - -} ACPI_DRTM_RESOURCE_LIST; - -/* 3) Platform-specific Identifiers List */ - -typedef struct acpi_drtm_dps_id -{ - UINT32 DpsIdLength; - UINT8 DpsId[16]; - -} ACPI_DRTM_DPS_ID; +} ACPI_TABLE_SLIT; /******************************************************************************* * - * FPDT - Firmware Performance Data Table (ACPI 5.0) - * Version 1 + * SPCR - Serial Port Console Redirection table + * Version 2 + * + * Conforms to "Serial Port Console Redirection Table", + * Version 1.03, August 10, 2015 * ******************************************************************************/ -typedef struct acpi_table_fpdt +typedef struct acpi_table_spcr { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT8 InterfaceType; /* 0=full 16550, 1=subset of 16550 */ + UINT8 Reserved[3]; + ACPI_GENERIC_ADDRESS SerialPort; + UINT8 InterruptType; + UINT8 PcInterrupt; + UINT32 Interrupt; + UINT8 BaudRate; + UINT8 Parity; + UINT8 StopBits; + UINT8 FlowControl; + UINT8 TerminalType; + UINT8 Reserved1; + UINT16 PciDeviceId; + UINT16 PciVendorId; + UINT8 PciBus; + UINT8 PciDevice; + UINT8 PciFunction; + UINT32 PciFlags; + UINT8 PciSegment; + UINT32 Reserved2; -} ACPI_TABLE_FPDT; +} ACPI_TABLE_SPCR; +/* Masks for PciFlags field above */ -/* FPDT subtable header (Performance Record Structure) */ +#define ACPI_SPCR_DO_NOT_DISABLE (1) -typedef struct acpi_fpdt_header -{ - UINT16 Type; - UINT8 Length; - UINT8 Revision; +/* Values for Interface Type: See the definition of the DBG2 table */ -} ACPI_FPDT_HEADER; -/* Values for Type field above */ +/******************************************************************************* + * + * SPMI - Server Platform Management Interface table + * Version 5 + * + * Conforms to "Intelligent Platform Management Interface Specification + * Second Generation v2.0", Document Revision 1.0, February 12, 2004 with + * June 12, 2009 markup. + * + ******************************************************************************/ -enum AcpiFpdtType +typedef struct acpi_table_spmi { - ACPI_FPDT_TYPE_BOOT = 0, - ACPI_FPDT_TYPE_S3PERF = 1 + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT8 InterfaceType; + UINT8 Reserved; /* Must be 1 */ + UINT16 SpecRevision; /* Version of IPMI */ + UINT8 InterruptType; + UINT8 GpeNumber; /* GPE assigned */ + UINT8 Reserved1; + UINT8 PciDeviceFlag; + UINT32 Interrupt; + ACPI_GENERIC_ADDRESS IpmiRegister; + UINT8 PciSegment; + UINT8 PciBus; + UINT8 PciDevice; + UINT8 PciFunction; + UINT8 Reserved2; + +} ACPI_TABLE_SPMI; + +/* Values for InterfaceType above */ + +enum AcpiSpmiInterfaceTypes +{ + ACPI_SPMI_NOT_USED = 0, + ACPI_SPMI_KEYBOARD = 1, + ACPI_SPMI_SMI = 2, + ACPI_SPMI_BLOCK_TRANSFER = 3, + ACPI_SPMI_SMBUS = 4, + ACPI_SPMI_RESERVED = 5 /* 5 and above are reserved */ }; -/* - * FPDT subtables - */ - -/* 0: Firmware Basic Boot Performance Record */ - -typedef struct acpi_fpdt_boot_pointer -{ - ACPI_FPDT_HEADER Header; - UINT8 Reserved[4]; - UINT64 Address; - -} ACPI_FPDT_BOOT_POINTER; - - -/* 1: S3 Performance Table Pointer Record */ +/******************************************************************************* + * + * SRAT - System Resource Affinity Table + * Version 3 + * + ******************************************************************************/ -typedef struct acpi_fpdt_s3pt_pointer +typedef struct acpi_table_srat { - ACPI_FPDT_HEADER Header; - UINT8 Reserved[4]; - UINT64 Address; + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 TableRevision; /* Must be value '1' */ + UINT64 Reserved; /* Reserved, must be zero */ -} ACPI_FPDT_S3PT_POINTER; +} ACPI_TABLE_SRAT; +/* Values for subtable type in ACPI_SUBTABLE_HEADER */ -/* - * S3PT - S3 Performance Table. This table is pointed to by the - * S3 Pointer Record above. - */ -typedef struct acpi_table_s3pt +enum AcpiSratType { - UINT8 Signature[4]; /* "S3PT" */ - UINT32 Length; - -} ACPI_TABLE_S3PT; - + ACPI_SRAT_TYPE_CPU_AFFINITY = 0, + ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1, + ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2, + ACPI_SRAT_TYPE_GICC_AFFINITY = 3, + ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4, /* ACPI 6.2 */ + ACPI_SRAT_TYPE_RESERVED = 5 /* 5 and greater are reserved */ +}; /* - * S3PT Subtables (Not part of the actual FPDT) + * SRAT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER */ -/* Values for Type field in S3PT header */ +/* 0: Processor Local APIC/SAPIC Affinity */ -enum AcpiS3ptType +typedef struct acpi_srat_cpu_affinity { - ACPI_S3PT_TYPE_RESUME = 0, - ACPI_S3PT_TYPE_SUSPEND = 1, - ACPI_FPDT_BOOT_PERFORMANCE = 2 -}; + ACPI_SUBTABLE_HEADER Header; + UINT8 ProximityDomainLo; + UINT8 ApicId; + UINT32 Flags; + UINT8 LocalSapicEid; + UINT8 ProximityDomainHi[3]; + UINT32 ClockDomain; -typedef struct acpi_s3pt_resume -{ - ACPI_FPDT_HEADER Header; - UINT32 ResumeCount; - UINT64 FullResume; - UINT64 AverageResume; +} ACPI_SRAT_CPU_AFFINITY; -} ACPI_S3PT_RESUME; +/* Flags */ -typedef struct acpi_s3pt_suspend -{ - ACPI_FPDT_HEADER Header; - UINT64 SuspendStart; - UINT64 SuspendEnd; +#define ACPI_SRAT_CPU_USE_AFFINITY (1) /* 00: Use affinity structure */ -} ACPI_S3PT_SUSPEND; +/* 1: Memory Affinity */ -/* - * FPDT Boot Performance Record (Not part of the actual FPDT) - */ -typedef struct acpi_fpdt_boot +typedef struct acpi_srat_mem_affinity { - ACPI_FPDT_HEADER Header; - UINT8 Reserved[4]; - UINT64 ResetEnd; - UINT64 LoadStart; - UINT64 StartupStart; - UINT64 ExitServicesEntry; - UINT64 ExitServicesExit; - -} ACPI_FPDT_BOOT; - - -/******************************************************************************* - * - * GTDT - Generic Timer Description Table (ACPI 5.1) - * Version 2 - * - ******************************************************************************/ - -typedef struct acpi_table_gtdt -{ - ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT64 CounterBlockAddresss; - UINT32 Reserved; - UINT32 SecureEl1Interrupt; - UINT32 SecureEl1Flags; - UINT32 NonSecureEl1Interrupt; - UINT32 NonSecureEl1Flags; - UINT32 VirtualTimerInterrupt; - UINT32 VirtualTimerFlags; - UINT32 NonSecureEl2Interrupt; - UINT32 NonSecureEl2Flags; - UINT64 CounterReadBlockAddress; - UINT32 PlatformTimerCount; - UINT32 PlatformTimerOffset; - -} ACPI_TABLE_GTDT; - -/* Flag Definitions: Timer Block Physical Timers and Virtual timers */ - -#define ACPI_GTDT_INTERRUPT_MODE (1) -#define ACPI_GTDT_INTERRUPT_POLARITY (1<<1) -#define ACPI_GTDT_ALWAYS_ON (1<<2) + ACPI_SUBTABLE_HEADER Header; + UINT32 ProximityDomain; + UINT16 Reserved; /* Reserved, must be zero */ + UINT64 BaseAddress; + UINT64 Length; + UINT32 Reserved1; + UINT32 Flags; + UINT64 Reserved2; /* Reserved, must be zero */ +} ACPI_SRAT_MEM_AFFINITY; -/* Common GTDT subtable header */ +/* Flags */ -typedef struct acpi_gtdt_header -{ - UINT8 Type; - UINT16 Length; +#define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */ +#define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */ +#define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */ -} ACPI_GTDT_HEADER; -/* Values for GTDT subtable type above */ +/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ -enum AcpiGtdtType +typedef struct acpi_srat_x2apic_cpu_affinity { - ACPI_GTDT_TYPE_TIMER_BLOCK = 0, - ACPI_GTDT_TYPE_WATCHDOG = 1, - ACPI_GTDT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ -}; - + ACPI_SUBTABLE_HEADER Header; + UINT16 Reserved; /* Reserved, must be zero */ + UINT32 ProximityDomain; + UINT32 ApicId; + UINT32 Flags; + UINT32 ClockDomain; + UINT32 Reserved2; -/* GTDT Subtables, correspond to Type in acpi_gtdt_header */ +} ACPI_SRAT_X2APIC_CPU_AFFINITY; -/* 0: Generic Timer Block */ +/* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */ -typedef struct acpi_gtdt_timer_block -{ - ACPI_GTDT_HEADER Header; - UINT8 Reserved; - UINT64 BlockAddress; - UINT32 TimerCount; - UINT32 TimerOffset; +#define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */ -} ACPI_GTDT_TIMER_BLOCK; -/* Timer Sub-Structure, one per timer */ +/* 3: GICC Affinity (ACPI 5.1) */ -typedef struct acpi_gtdt_timer_entry +typedef struct acpi_srat_gicc_affinity { - UINT8 FrameNumber; - UINT8 Reserved[3]; - UINT64 BaseAddress; - UINT64 El0BaseAddress; - UINT32 TimerInterrupt; - UINT32 TimerFlags; - UINT32 VirtualTimerInterrupt; - UINT32 VirtualTimerFlags; - UINT32 CommonFlags; - -} ACPI_GTDT_TIMER_ENTRY; - -/* Flag Definitions: TimerFlags and VirtualTimerFlags above */ + ACPI_SUBTABLE_HEADER Header; + UINT32 ProximityDomain; + UINT32 AcpiProcessorUid; + UINT32 Flags; + UINT32 ClockDomain; -#define ACPI_GTDT_GT_IRQ_MODE (1) -#define ACPI_GTDT_GT_IRQ_POLARITY (1<<1) +} ACPI_SRAT_GICC_AFFINITY; -/* Flag Definitions: CommonFlags above */ +/* Flags for ACPI_SRAT_GICC_AFFINITY */ -#define ACPI_GTDT_GT_IS_SECURE_TIMER (1) -#define ACPI_GTDT_GT_ALWAYS_ON (1<<1) +#define ACPI_SRAT_GICC_ENABLED (1) /* 00: Use affinity structure */ -/* 1: SBSA Generic Watchdog Structure */ +/* 4: GCC ITS Affinity (ACPI 6.2) */ -typedef struct acpi_gtdt_watchdog +typedef struct acpi_srat_gic_its_affinity { - ACPI_GTDT_HEADER Header; - UINT8 Reserved; - UINT64 RefreshFrameAddress; - UINT64 ControlFrameAddress; - UINT32 TimerInterrupt; - UINT32 TimerFlags; - -} ACPI_GTDT_WATCHDOG; - -/* Flag Definitions: TimerFlags above */ + ACPI_SUBTABLE_HEADER Header; + UINT32 ProximityDomain; + UINT16 Reserved; + UINT32 ItsId; -#define ACPI_GTDT_WATCHDOG_IRQ_MODE (1) -#define ACPI_GTDT_WATCHDOG_IRQ_POLARITY (1<<1) -#define ACPI_GTDT_WATCHDOG_SECURE (1<<2) +} ACPI_SRAT_GIC_ITS_AFFINITY; /******************************************************************************* * - * MPST - Memory Power State Table (ACPI 5.0) + * STAO - Status Override Table (_STA override) - ACPI 6.0 * Version 1 * + * Conforms to "ACPI Specification for Status Override Table" + * 6 January 2015 + * ******************************************************************************/ -#define ACPI_MPST_CHANNEL_INFO \ - UINT8 ChannelId; \ - UINT8 Reserved1[3]; \ - UINT16 PowerNodeCount; \ - UINT16 Reserved2; - -/* Main table */ - -typedef struct acpi_table_mpst +typedef struct acpi_table_stao { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ - -} ACPI_TABLE_MPST; - - -/* Memory Platform Communication Channel Info */ - -typedef struct acpi_mpst_channel -{ - ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ - -} ACPI_MPST_CHANNEL; - - -/* Memory Power Node Structure */ - -typedef struct acpi_mpst_power_node -{ - UINT8 Flags; - UINT8 Reserved1; - UINT16 NodeId; - UINT32 Length; - UINT64 RangeAddress; - UINT64 RangeLength; - UINT32 NumPowerStates; - UINT32 NumPhysicalComponents; - -} ACPI_MPST_POWER_NODE; - -/* Values for Flags field above */ + UINT8 IgnoreUart; -#define ACPI_MPST_ENABLED 1 -#define ACPI_MPST_POWER_MANAGED 2 -#define ACPI_MPST_HOT_PLUG_CAPABLE 4 +} ACPI_TABLE_STAO; -/* Memory Power State Structure (follows POWER_NODE above) */ +/******************************************************************************* + * + * TCPA - Trusted Computing Platform Alliance table + * Version 2 + * + * TCG Hardware Interface Table for TPM 1.2 Clients and Servers + * + * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0", + * Version 1.2, Revision 8 + * February 27, 2017 + * + * NOTE: There are two versions of the table with the same signature -- + * the client version and the server version. The common PlatformClass + * field is used to differentiate the two types of tables. + * + ******************************************************************************/ -typedef struct acpi_mpst_power_state +typedef struct acpi_table_tcpa_hdr { - UINT8 PowerState; - UINT8 InfoIndex; + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT16 PlatformClass; -} ACPI_MPST_POWER_STATE; +} ACPI_TABLE_TCPA_HDR; +/* + * Values for PlatformClass above. + * This is how the client and server subtables are differentiated + */ +#define ACPI_TCPA_CLIENT_TABLE 0 +#define ACPI_TCPA_SERVER_TABLE 1 -/* Physical Component ID Structure (follows POWER_STATE above) */ -typedef struct acpi_mpst_component +typedef struct acpi_table_tcpa_client { - UINT16 ComponentId; - -} ACPI_MPST_COMPONENT; + UINT32 MinimumLogLength; /* Minimum length for the event log area */ + UINT64 LogAddress; /* Address of the event log area */ +} ACPI_TABLE_TCPA_CLIENT; -/* Memory Power State Characteristics Structure (follows all POWER_NODEs) */ - -typedef struct acpi_mpst_data_hdr +typedef struct acpi_table_tcpa_server { - UINT16 CharacteristicsCount; UINT16 Reserved; - -} ACPI_MPST_DATA_HDR; - -typedef struct acpi_mpst_power_data -{ - UINT8 StructureId; - UINT8 Flags; - UINT16 Reserved1; - UINT32 AveragePower; - UINT32 PowerSaving; - UINT64 ExitLatency; - UINT64 Reserved2; - -} ACPI_MPST_POWER_DATA; - -/* Values for Flags field above */ - -#define ACPI_MPST_PRESERVE 1 -#define ACPI_MPST_AUTOENTRY 2 -#define ACPI_MPST_AUTOEXIT 4 - - -/* Shared Memory Region (not part of an ACPI table) */ - -typedef struct acpi_mpst_shared -{ - UINT32 Signature; - UINT16 PccCommand; - UINT16 PccStatus; - UINT32 CommandRegister; - UINT32 StatusRegister; - UINT32 PowerStateId; - UINT32 PowerNodeId; - UINT64 EnergyConsumed; - UINT64 AveragePower; - -} ACPI_MPST_SHARED; + UINT64 MinimumLogLength; /* Minimum length for the event log area */ + UINT64 LogAddress; /* Address of the event log area */ + UINT16 SpecRevision; + UINT8 DeviceFlags; + UINT8 InterruptFlags; + UINT8 GpeNumber; + UINT8 Reserved2[3]; + UINT32 GlobalInterrupt; + ACPI_GENERIC_ADDRESS Address; + UINT32 Reserved3; + ACPI_GENERIC_ADDRESS ConfigAddress; + UINT8 Group; + UINT8 Bus; /* PCI Bus/Segment/Function numbers */ + UINT8 Device; + UINT8 Function; + +} ACPI_TABLE_TCPA_SERVER; + +/* Values for DeviceFlags above */ + +#define ACPI_TCPA_PCI_DEVICE (1) +#define ACPI_TCPA_BUS_PNP (1<<1) +#define ACPI_TCPA_ADDRESS_VALID (1<<2) + +/* Values for InterruptFlags above */ + +#define ACPI_TCPA_INTERRUPT_MODE (1) +#define ACPI_TCPA_INTERRUPT_POLARITY (1<<1) +#define ACPI_TCPA_SCI_VIA_GPE (1<<2) +#define ACPI_TCPA_GLOBAL_INTERRUPT (1<<3) /******************************************************************************* * - * PCCT - Platform Communications Channel Table (ACPI 5.0) - * Version 2 (ACPI 6.2) + * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table + * Version 4 + * + * TCG Hardware Interface Table for TPM 2.0 Clients and Servers + * + * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0", + * Version 1.2, Revision 8 + * February 27, 2017 * ******************************************************************************/ -typedef struct acpi_table_pcct +typedef struct acpi_table_tpm2 { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 Flags; - UINT64 Reserved; - -} ACPI_TABLE_PCCT; - -/* Values for Flags field above */ - -#define ACPI_PCCT_DOORBELL 1 - -/* Values for subtable type in ACPI_SUBTABLE_HEADER */ - -enum AcpiPcctType -{ - ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0, - ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1, - ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */ - ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3, /* ACPI 6.2 */ - ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4, /* ACPI 6.2 */ - ACPI_PCCT_TYPE_RESERVED = 5 /* 5 and greater are reserved */ -}; - -/* - * PCCT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER - */ - -/* 0: Generic Communications Subspace */ - -typedef struct acpi_pcct_subspace -{ - ACPI_SUBTABLE_HEADER Header; - UINT8 Reserved[6]; - UINT64 BaseAddress; - UINT64 Length; - ACPI_GENERIC_ADDRESS DoorbellRegister; - UINT64 PreserveMask; - UINT64 WriteMask; - UINT32 Latency; - UINT32 MaxAccessRate; - UINT16 MinTurnaroundTime; - -} ACPI_PCCT_SUBSPACE; + UINT16 PlatformClass; + UINT16 Reserved; + UINT64 ControlAddress; + UINT32 StartMethod; + /* Platform-specific data follows */ -/* 1: HW-reduced Communications Subspace (ACPI 5.1) */ +} ACPI_TABLE_TPM2; -typedef struct acpi_pcct_hw_reduced -{ - ACPI_SUBTABLE_HEADER Header; - UINT32 PlatformInterrupt; - UINT8 Flags; - UINT8 Reserved; - UINT64 BaseAddress; - UINT64 Length; - ACPI_GENERIC_ADDRESS DoorbellRegister; - UINT64 PreserveMask; - UINT64 WriteMask; - UINT32 Latency; - UINT32 MaxAccessRate; - UINT16 MinTurnaroundTime; +/* Values for StartMethod above */ -} ACPI_PCCT_HW_REDUCED; +#define ACPI_TPM2_NOT_ALLOWED 0 +#define ACPI_TPM2_RESERVED1 1 +#define ACPI_TPM2_START_METHOD 2 +#define ACPI_TPM2_RESERVED3 3 +#define ACPI_TPM2_RESERVED4 4 +#define ACPI_TPM2_RESERVED5 5 +#define ACPI_TPM2_MEMORY_MAPPED 6 +#define ACPI_TPM2_COMMAND_BUFFER 7 +#define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD 8 +#define ACPI_TPM2_RESERVED9 9 +#define ACPI_TPM2_RESERVED10 10 +#define ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC 11 /* V1.2 Rev 8 */ +#define ACPI_TPM2_RESERVED 12 -/* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */ +/* Optional trailer appears after any StartMethod subtables */ -typedef struct acpi_pcct_hw_reduced_type2 +typedef struct acpi_tpm2_trailer { - ACPI_SUBTABLE_HEADER Header; - UINT32 PlatformInterrupt; - UINT8 Flags; - UINT8 Reserved; - UINT64 BaseAddress; - UINT64 Length; - ACPI_GENERIC_ADDRESS DoorbellRegister; - UINT64 PreserveMask; - UINT64 WriteMask; - UINT32 Latency; - UINT32 MaxAccessRate; - UINT16 MinTurnaroundTime; - ACPI_GENERIC_ADDRESS PlatformAckRegister; - UINT64 AckPreserveMask; - UINT64 AckWriteMask; + UINT8 MethodParameters[12]; + UINT32 MinimumLogLength; /* Minimum length for the event log area */ + UINT64 LogAddress; /* Address of the event log area */ -} ACPI_PCCT_HW_REDUCED_TYPE2; - - -/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */ - -typedef struct acpi_pcct_ext_pcc_master -{ - ACPI_SUBTABLE_HEADER Header; - UINT32 PlatformInterrupt; - UINT8 Flags; - UINT8 Reserved1; - UINT64 BaseAddress; - UINT32 Length; - ACPI_GENERIC_ADDRESS DoorbellRegister; - UINT64 PreserveMask; - UINT64 WriteMask; - UINT32 Latency; - UINT32 MaxAccessRate; - UINT32 MinTurnaroundTime; - ACPI_GENERIC_ADDRESS PlatformAckRegister; - UINT64 AckPreserveMask; - UINT64 AckSetMask; - UINT64 Reserved2; - ACPI_GENERIC_ADDRESS CmdCompleteRegister; - UINT64 CmdCompleteMask; - ACPI_GENERIC_ADDRESS CmdUpdateRegister; - UINT64 CmdUpdatePreserveMask; - UINT64 CmdUpdateSetMask; - ACPI_GENERIC_ADDRESS ErrorStatusRegister; - UINT64 ErrorStatusMask; - -} ACPI_PCCT_EXT_PCC_MASTER; - - -/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */ - -typedef struct acpi_pcct_ext_pcc_slave -{ - ACPI_SUBTABLE_HEADER Header; - UINT32 PlatformInterrupt; - UINT8 Flags; - UINT8 Reserved1; - UINT64 BaseAddress; - UINT32 Length; - ACPI_GENERIC_ADDRESS DoorbellRegister; - UINT64 PreserveMask; - UINT64 WriteMask; - UINT32 Latency; - UINT32 MaxAccessRate; - UINT32 MinTurnaroundTime; - ACPI_GENERIC_ADDRESS PlatformAckRegister; - UINT64 AckPreserveMask; - UINT64 AckSetMask; - UINT64 Reserved2; - ACPI_GENERIC_ADDRESS CmdCompleteRegister; - UINT64 CmdCompleteMask; - ACPI_GENERIC_ADDRESS CmdUpdateRegister; - UINT64 CmdUpdatePreserveMask; - UINT64 CmdUpdateSetMask; - ACPI_GENERIC_ADDRESS ErrorStatusRegister; - UINT64 ErrorStatusMask; - -} ACPI_PCCT_EXT_PCC_SLAVE; - - -/* Values for doorbell flags above */ - -#define ACPI_PCCT_INTERRUPT_POLARITY (1) -#define ACPI_PCCT_INTERRUPT_MODE (1<<1) +} ACPI_TPM2_TRAILER; /* - * PCC memory structures (not part of the ACPI table) + * Subtables (StartMethod-specific) */ -/* Shared Memory Region */ +/* 11: Start Method for ARM SMC (V1.2 Rev 8) */ -typedef struct acpi_pcct_shared_memory +typedef struct acpi_tpm2_arm_smc { - UINT32 Signature; - UINT16 Command; - UINT16 Status; + UINT32 GlobalInterrupt; + UINT8 InterruptFlags; + UINT8 OperationFlags; + UINT16 Reserved; + UINT32 FunctionId; -} ACPI_PCCT_SHARED_MEMORY; +} ACPI_TPM2_ARM_SMC; +/* Values for InterruptFlags above */ -/* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */ +#define ACPI_TPM2_INTERRUPT_SUPPORT (1) -typedef struct acpi_pcct_ext_pcc_shared_memory -{ - UINT32 Signature; - UINT32 Flags; - UINT32 Length; - UINT32 Command; +/* Values for OperationFlags above */ -} ACPI_PCCT_EXT_PCC_SHARED_MEMORY; +#define ACPI_TPM2_IDLE_SUPPORT (1) /******************************************************************************* * - * PMTT - Platform Memory Topology Table (ACPI 5.0) + * UEFI - UEFI Boot optimization Table * Version 1 * + * Conforms to "Unified Extensible Firmware Interface Specification", + * Version 2.3, May 8, 2009 + * ******************************************************************************/ -typedef struct acpi_table_pmtt +typedef struct acpi_table_uefi { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT32 Reserved; - -} ACPI_TABLE_PMTT; - - -/* Common header for PMTT subtables that follow main table */ - -typedef struct acpi_pmtt_header -{ - UINT8 Type; - UINT8 Reserved1; - UINT16 Length; - UINT16 Flags; - UINT16 Reserved2; - -} ACPI_PMTT_HEADER; - -/* Values for Type field above */ - -#define ACPI_PMTT_TYPE_SOCKET 0 -#define ACPI_PMTT_TYPE_CONTROLLER 1 -#define ACPI_PMTT_TYPE_DIMM 2 -#define ACPI_PMTT_TYPE_RESERVED 3 /* 0x03-0xFF are reserved */ + UINT8 Identifier[16]; /* UUID identifier */ + UINT16 DataOffset; /* Offset of remaining data in table */ -/* Values for Flags field above */ +} ACPI_TABLE_UEFI; -#define ACPI_PMTT_TOP_LEVEL 0x0001 -#define ACPI_PMTT_PHYSICAL 0x0002 -#define ACPI_PMTT_MEMORY_TYPE 0x000C - - -/* - * PMTT subtables, correspond to Type in acpi_pmtt_header - */ +/******************************************************************************* + * + * VRTC - Virtual Real Time Clock Table + * Version 1 + * + * Conforms to "Simple Firmware Interface Specification", + * Draft 0.8.2, Oct 19, 2010 + * NOTE: The ACPI VRTC is equivalent to The SFI MRTC table. + * + ******************************************************************************/ -/* 0: Socket Structure */ - -typedef struct acpi_pmtt_socket -{ - ACPI_PMTT_HEADER Header; - UINT16 SocketId; - UINT16 Reserved; - -} ACPI_PMTT_SOCKET; - - -/* 1: Memory Controller subtable */ - -typedef struct acpi_pmtt_controller -{ - ACPI_PMTT_HEADER Header; - UINT32 ReadLatency; - UINT32 WriteLatency; - UINT32 ReadBandwidth; - UINT32 WriteBandwidth; - UINT16 AccessWidth; - UINT16 Alignment; - UINT16 Reserved; - UINT16 DomainCount; - -} ACPI_PMTT_CONTROLLER; - -/* 1a: Proximity Domain substructure */ - -typedef struct acpi_pmtt_domain +typedef struct acpi_table_vrtc { - UINT32 ProximityDomain; - -} ACPI_PMTT_DOMAIN; + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ +} ACPI_TABLE_VRTC; -/* 2: Physical Component Identifier (DIMM) */ +/* VRTC entry */ -typedef struct acpi_pmtt_physical_component +typedef struct acpi_vrtc_entry { - ACPI_PMTT_HEADER Header; - UINT16 ComponentId; - UINT16 Reserved; - UINT32 MemorySize; - UINT32 BiosHandle; + ACPI_GENERIC_ADDRESS PhysicalAddress; + UINT32 Irq; -} ACPI_PMTT_PHYSICAL_COMPONENT; +} ACPI_VRTC_ENTRY; /******************************************************************************* * - * RASF - RAS Feature Table (ACPI 5.0) + * WAET - Windows ACPI Emulated devices Table * Version 1 * + * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009 + * ******************************************************************************/ -typedef struct acpi_table_rasf +typedef struct acpi_table_waet { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT8 ChannelId[12]; + UINT32 Flags; -} ACPI_TABLE_RASF; +} ACPI_TABLE_WAET; -/* RASF Platform Communication Channel Shared Memory Region */ +/* Masks for Flags field above */ -typedef struct acpi_rasf_shared_memory -{ - UINT32 Signature; - UINT16 Command; - UINT16 Status; - UINT16 Version; - UINT8 Capabilities[16]; - UINT8 SetCapabilities[16]; - UINT16 NumParameterBlocks; - UINT32 SetCapabilitiesStatus; +#define ACPI_WAET_RTC_NO_ACK (1) /* RTC requires no int acknowledge */ +#define ACPI_WAET_TIMER_ONE_READ (1<<1) /* PM timer requires only one read */ -} ACPI_RASF_SHARED_MEMORY; -/* RASF Parameter Block Structure Header */ +/******************************************************************************* + * + * WDAT - Watchdog Action Table + * Version 1 + * + * Conforms to "Hardware Watchdog Timers Design Specification", + * Copyright 2006 Microsoft Corporation. + * + ******************************************************************************/ -typedef struct acpi_rasf_parameter_block +typedef struct acpi_table_wdat { - UINT16 Type; - UINT16 Version; - UINT16 Length; - -} ACPI_RASF_PARAMETER_BLOCK; + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 HeaderLength; /* Watchdog Header Length */ + UINT16 PciSegment; /* PCI Segment number */ + UINT8 PciBus; /* PCI Bus number */ + UINT8 PciDevice; /* PCI Device number */ + UINT8 PciFunction; /* PCI Function number */ + UINT8 Reserved[3]; + UINT32 TimerPeriod; /* Period of one timer count (msec) */ + UINT32 MaxCount; /* Maximum counter value supported */ + UINT32 MinCount; /* Minimum counter value */ + UINT8 Flags; + UINT8 Reserved2[3]; + UINT32 Entries; /* Number of watchdog entries that follow */ -/* RASF Parameter Block Structure for PATROL_SCRUB */ +} ACPI_TABLE_WDAT; -typedef struct acpi_rasf_patrol_scrub_parameter -{ - ACPI_RASF_PARAMETER_BLOCK Header; - UINT16 PatrolScrubCommand; - UINT64 RequestedAddressRange[2]; - UINT64 ActualAddressRange[2]; - UINT16 Flags; - UINT8 RequestedSpeed; +/* Masks for Flags field above */ -} ACPI_RASF_PATROL_SCRUB_PARAMETER; +#define ACPI_WDAT_ENABLED (1) +#define ACPI_WDAT_STOPPED 0x80 -/* Masks for Flags and Speed fields above */ -#define ACPI_RASF_SCRUBBER_RUNNING 1 -#define ACPI_RASF_SPEED (7<<1) -#define ACPI_RASF_SPEED_SLOW (0<<1) -#define ACPI_RASF_SPEED_MEDIUM (4<<1) -#define ACPI_RASF_SPEED_FAST (7<<1) +/* WDAT Instruction Entries (actions) */ -/* Channel Commands */ - -enum AcpiRasfCommands +typedef struct acpi_wdat_entry { - ACPI_RASF_EXECUTE_RASF_COMMAND = 1 + UINT8 Action; + UINT8 Instruction; + UINT16 Reserved; + ACPI_GENERIC_ADDRESS RegisterRegion; + UINT32 Value; /* Value used with Read/Write register */ + UINT32 Mask; /* Bitmask required for this register instruction */ + +} ACPI_WDAT_ENTRY; + +/* Values for Action field above */ + +enum AcpiWdatActions +{ + ACPI_WDAT_RESET = 1, + ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4, + ACPI_WDAT_GET_COUNTDOWN = 5, + ACPI_WDAT_SET_COUNTDOWN = 6, + ACPI_WDAT_GET_RUNNING_STATE = 8, + ACPI_WDAT_SET_RUNNING_STATE = 9, + ACPI_WDAT_GET_STOPPED_STATE = 10, + ACPI_WDAT_SET_STOPPED_STATE = 11, + ACPI_WDAT_GET_REBOOT = 16, + ACPI_WDAT_SET_REBOOT = 17, + ACPI_WDAT_GET_SHUTDOWN = 18, + ACPI_WDAT_SET_SHUTDOWN = 19, + ACPI_WDAT_GET_STATUS = 32, + ACPI_WDAT_SET_STATUS = 33, + ACPI_WDAT_ACTION_RESERVED = 34 /* 34 and greater are reserved */ }; -/* Platform RAS Capabilities */ +/* Values for Instruction field above */ -enum AcpiRasfCapabiliities +enum AcpiWdatInstructions { - ACPI_HW_PATROL_SCRUB_SUPPORTED = 0, - ACPI_SW_PATROL_SCRUB_EXPOSED = 1 + ACPI_WDAT_READ_VALUE = 0, + ACPI_WDAT_READ_COUNTDOWN = 1, + ACPI_WDAT_WRITE_VALUE = 2, + ACPI_WDAT_WRITE_COUNTDOWN = 3, + ACPI_WDAT_INSTRUCTION_RESERVED = 4, /* 4 and greater are reserved */ + ACPI_WDAT_PRESERVE_REGISTER = 0x80 /* Except for this value */ }; -/* Patrol Scrub Commands */ -enum AcpiRasfPatrolScrubCommands -{ - ACPI_RASF_GET_PATROL_PARAMETERS = 1, - ACPI_RASF_START_PATROL_SCRUBBER = 2, - ACPI_RASF_STOP_PATROL_SCRUBBER = 3 -}; +/******************************************************************************* + * + * WDDT - Watchdog Descriptor Table + * Version 1 + * + * Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)", + * Version 001, September 2002 + * + ******************************************************************************/ -/* Channel Command flags */ +typedef struct acpi_table_wddt +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT16 SpecVersion; + UINT16 TableVersion; + UINT16 PciVendorId; + ACPI_GENERIC_ADDRESS Address; + UINT16 MaxCount; /* Maximum counter value supported */ + UINT16 MinCount; /* Minimum counter value supported */ + UINT16 Period; + UINT16 Status; + UINT16 Capability; -#define ACPI_RASF_GENERATE_SCI (1<<15) +} ACPI_TABLE_WDDT; -/* Status values */ +/* Flags for Status field above */ -enum AcpiRasfStatus -{ - ACPI_RASF_SUCCESS = 0, - ACPI_RASF_NOT_VALID = 1, - ACPI_RASF_NOT_SUPPORTED = 2, - ACPI_RASF_BUSY = 3, - ACPI_RASF_FAILED = 4, - ACPI_RASF_ABORTED = 5, - ACPI_RASF_INVALID_DATA = 6 -}; +#define ACPI_WDDT_AVAILABLE (1) +#define ACPI_WDDT_ACTIVE (1<<1) +#define ACPI_WDDT_TCO_OS_OWNED (1<<2) +#define ACPI_WDDT_USER_RESET (1<<11) +#define ACPI_WDDT_WDT_RESET (1<<12) +#define ACPI_WDDT_POWER_FAIL (1<<13) +#define ACPI_WDDT_UNKNOWN_RESET (1<<14) -/* Status flags */ +/* Flags for Capability field above */ -#define ACPI_RASF_COMMAND_COMPLETE (1) -#define ACPI_RASF_SCI_DOORBELL (1<<1) -#define ACPI_RASF_ERROR (1<<2) -#define ACPI_RASF_STATUS (0x1F<<3) +#define ACPI_WDDT_AUTO_RESET (1) +#define ACPI_WDDT_ALERT_SUPPORT (1<<1) /******************************************************************************* * - * STAO - Status Override Table (_STA override) - ACPI 6.0 + * WDRT - Watchdog Resource Table * Version 1 * - * Conforms to "ACPI Specification for Status Override Table" - * 6 January 2015 + * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003", + * Version 1.01, August 28, 2006 * ******************************************************************************/ -typedef struct acpi_table_stao +typedef struct acpi_table_wdrt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT8 IgnoreUart; + ACPI_GENERIC_ADDRESS ControlRegister; + ACPI_GENERIC_ADDRESS CountRegister; + UINT16 PciDeviceId; + UINT16 PciVendorId; + UINT8 PciBus; /* PCI Bus number */ + UINT8 PciDevice; /* PCI Device number */ + UINT8 PciFunction; /* PCI Function number */ + UINT8 PciSegment; /* PCI Segment number */ + UINT16 MaxCount; /* Maximum counter value supported */ + UINT8 Units; -} ACPI_TABLE_STAO; +} ACPI_TABLE_WDRT; /******************************************************************************* @@ -1087,6 +855,30 @@ typedef struct acpi_table_wpbt } ACPI_TABLE_WPBT; +/******************************************************************************* + * + * WSMT - Windows SMM Security Migrations Table + * Version 1 + * + * Conforms to "Windows SMM Security Migrations Table", + * Version 1.0, April 18, 2016 + * + ******************************************************************************/ + +typedef struct acpi_table_wsmt +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 ProtectionFlags; + +} ACPI_TABLE_WSMT; + +/* Flags for ProtectionFlags field above */ + +#define ACPI_WSMT_FIXED_COMM_BUFFERS (1) +#define ACPI_WSMT_COMM_BUFFER_NESTED_PTR_PROTECTION (2) +#define ACPI_WSMT_SYSTEM_RESOURCE_PROTECTION (4) + + /******************************************************************************* * * XENV - Xen Environment Table (ACPI 6.0) diff --git a/src/acpica/source/include/amlcode.h b/src/acpica/source/include/amlcode.h index 3b27c92e..6507ae67 100644 --- a/src/acpica/source/include/amlcode.h +++ b/src/acpica/source/include/amlcode.h @@ -386,24 +386,9 @@ #define ARGI_DEVICE_REF 0x0D #define ARGI_REFERENCE 0x0E #define ARGI_TARGETREF 0x0F /* Target, subject to implicit conversion */ -#define ARGI_SIMPLE_TARGET 0x10 /* Name, Local, Arg -- no implicit conversion */ -#define ARGI_STORE_TARGET 0x11 /* Target for store is TARGETREF + package objects */ -/* - * #define ARGI_FIXED_TARGET 0x10 Target, no implicit conversion - * - * Removed 10/2016. ARGI_FIXED_TARGET was used for these operators: - * FromBCD - * ToBCD - * ToDecimalString - * ToHexString - * ToInteger - * ToBuffer - * The purpose of this type was to disable "implicit result conversion", - * but this was incorrect per the ACPI spec and other ACPI implementations. - * These operators now have the target operand defined as a normal - * ARGI_TARGETREF. - */ - +#define ARGI_FIXED_TARGET 0x10 /* Target, no implicit conversion */ +#define ARGI_SIMPLE_TARGET 0x11 /* Name, Local, Arg -- no implicit conversion */ +#define ARGI_STORE_TARGET 0x12 /* Target for store is TARGETREF + package objects */ /* Multiple/complex types */ diff --git a/src/acpica/source/include/platform/aclinux.h b/src/acpica/source/include/platform/aclinux.h index 1d7fdaa8..836b5eb5 100644 --- a/src/acpica/source/include/platform/aclinux.h +++ b/src/acpica/source/include/platform/aclinux.h @@ -166,6 +166,7 @@ #define ACPI_USE_SYSTEM_CLIBRARY #define ACPI_USE_DO_WHILE_0 +#define ACPI_IGNORE_PACKAGE_RESOLUTION_ERRORS #ifdef __KERNEL__