diff options
Diffstat (limited to 'source/common/dmtbdump.c')
-rw-r--r-- | source/common/dmtbdump.c | 3829 |
1 files changed, 0 insertions, 3829 deletions
diff --git a/source/common/dmtbdump.c b/source/common/dmtbdump.c index c9699d5fdd3d0..cf2ed6d670d25 100644 --- a/source/common/dmtbdump.c +++ b/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); -} |