summaryrefslogtreecommitdiff
path: root/usr/src/cmd/acpi/common/dmtbdump.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/cmd/acpi/common/dmtbdump.c')
-rw-r--r--usr/src/cmd/acpi/common/dmtbdump.c3335
1 files changed, 124 insertions, 3211 deletions
diff --git a/usr/src/cmd/acpi/common/dmtbdump.c b/usr/src/cmd/acpi/common/dmtbdump.c
index 789256c12d..cf2ed6d670 100644
--- a/usr/src/cmd/acpi/common/dmtbdump.c
+++ b/usr/src/cmd/acpi/common/dmtbdump.c
@@ -4,10 +4,118 @@
*
*****************************************************************************/
-/*
- * Copyright (C) 2000 - 2016, Intel Corp.
+/******************************************************************************
+ *
+ * 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:
@@ -23,23 +131,23 @@
* of any contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
- * Alternatively, this software may be distributed under the terms of the
- * GNU General Public License ("GPL") version 2 as published by the Free
- * Software Foundation.
- *
- * NO WARRANTY
* 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 MERCHANTIBILITY AND FITNESS FOR
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * HOLDERS OR CONTRIBUTORS BE LIABLE FOR 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 DAMAGES.
- */
+ * 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"
@@ -495,3198 +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;
-
- 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: 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;
-
- 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;
-
- 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: 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: 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: 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;
-
- 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: 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);
-}